Transaction Hash:
Block:
24476726 at Feb-17-2026 01:02:59 PM +UTC
Transaction Fee:
0.000002674692506447 ETH
$0.005228
Gas Used:
23,959 Gas / 0.111636233 Gwei
Emitted Events:
| 784 |
Vyper_contract.Approval( owner=[Sender] 0x5b191f5a2b4a867c4ed71858daccc51fc59c69c0, spender=0xCB859eA5...b9dbE5149, value=0 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
|
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 13.88160831664204665 Eth | 13.88160913244599665 Eth | 0.00000081580395 | |
| 0x5B191F5A...FC59c69c0 |
0.341303188246899932 Eth
Nonce: 3981
|
0.341300513554393485 Eth
Nonce: 3982
| 0.000002674692506447 | ||
| 0x92E187a0...5Fd2357D5 |
Execution Trace
Vyper_contract.approve( spender=0xCB859eA579b28e02B87A1FDE08d087ab9dbE5149, amount=0 ) => ( True )
# @version 0.2.8
from vyper.interfaces import ERC20
implements: ERC20
event Transfer:
sender: indexed(address)
receiver: indexed(address)
value: uint256
event Approval:
owner: indexed(address)
spender: indexed(address)
value: uint256
name: public(String[64])
symbol: public(String[32])
decimals: public(uint256)
balanceOf: public(HashMap[address, uint256])
allowances: HashMap[address, HashMap[address, uint256]]
totalSupply: public(uint256)
COL: constant(address) = 0xC76FB75950536d98FA62ea968E1D6B45ffea2A55
DEAD: constant(address) = 0x000000000000000000000000000000000000dEaD
RATIO: constant(uint256) = 100 # 1 DUCK equals 100 COL
@external
def __init__():
self.name = 'Unit Protocol'
self.symbol = 'DUCK'
self.decimals = 18
@external
def quack():
"""
Migrate and burn COL for DUCK. Quack quack.
"""
cols: uint256 = ERC20(COL).balanceOf(msg.sender)
ducks: uint256 = cols / RATIO
assert ERC20(COL).transferFrom(msg.sender, DEAD, cols) # dev: not approved
self.totalSupply += ducks
self.balanceOf[msg.sender] += ducks
log Transfer(ZERO_ADDRESS, msg.sender, ducks)
@view
@external
def allowance(owner: address, spender: address) -> uint256:
return self.allowances[owner][spender]
@external
def transfer(receiver: address, amount: uint256) -> bool:
assert receiver not in [self, ZERO_ADDRESS]
self.balanceOf[msg.sender] -= amount
self.balanceOf[receiver] += amount
log Transfer(msg.sender, receiver, amount)
return True
@external
def transferFrom(owner: address, receiver: address, amount: uint256) -> bool:
assert receiver not in [self, ZERO_ADDRESS]
self.balanceOf[owner] -= amount
self.balanceOf[receiver] += amount
if owner != msg.sender and self.allowances[owner][msg.sender] != MAX_UINT256:
self.allowances[owner][msg.sender] -= amount
log Approval(owner, msg.sender, self.allowances[owner][msg.sender])
log Transfer(owner, receiver, amount)
return True
@external
def approve(spender: address, amount: uint256) -> bool:
self.allowances[msg.sender][spender] = amount
log Approval(msg.sender, spender, amount)
return True
@external
def burn(amount: uint256):
self.totalSupply -= amount
self.balanceOf[msg.sender] -= amount
log Transfer(msg.sender, ZERO_ADDRESS, amount)