Transaction Hash:
Block:
23807218 at Nov-15-2025 09:17:35 PM +UTC
Transaction Fee:
0.000016045857683611 ETH
$0.03
Gas Used:
260,111 Gas / 0.061688501 Gwei
Emitted Events:
| 509 |
Dai.Transfer( src=[Sender] 0x52a6d193566c6e1dd267a2619012a90e475e69ad, dst=0xa9DB2c038EACdf4074a36609b326E55EeA328fa5, wad=500000000000000 )
|
| 510 |
Dai.Transfer( src=[Sender] 0x52a6d193566c6e1dd267a2619012a90e475e69ad, dst=0x45eEC6553004BbE26C99F03F7D4A25542bDB4AF1, wad=180000000000000 )
|
| 511 |
Dai.Transfer( src=[Sender] 0x52a6d193566c6e1dd267a2619012a90e475e69ad, dst=0x1b40fB549B26D488b1d31C2C550CC7A0e5616B16, wad=364395547270000 )
|
| 512 |
Dai.Transfer( src=[Sender] 0x52a6d193566c6e1dd267a2619012a90e475e69ad, dst=0x1bdbE734646cb7AE0767A6CDcD4Bfa482c6Fd5eB, wad=400240144086400 )
|
Account State Difference:
| Address | Before | After | State Difference | ||
|---|---|---|---|---|---|
| 0x1b40fB54...0e5616B16 |
0 Eth
Nonce: 0
|
0.000006252900682612 Eth
Nonce: 0
| 0.000006252900682612 | ||
| 0x1bdbE734...82c6Fd5eB |
0 Eth
Nonce: 0
|
0.000006252900682612 Eth
Nonce: 0
| 0.000006252900682612 | ||
| 0x45eEC655...42bDB4AF1 |
0 Eth
Nonce: 0
|
0.000006248496123641 Eth
Nonce: 0
| 0.000006248496123641 | ||
|
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 18.982290311825521922 Eth | 18.982290311826042144 Eth | 0.000000000000520222 | |
| 0x52a6D193...e475e69Ad | (Fake_Phishing1628653) |
0.002705456507716678 Eth
Nonce: 3021
|
0.002670656352544202 Eth
Nonce: 3022
| 0.000034800155172476 | |
| 0x6B175474...495271d0F |
Execution Trace
ETH 0.000018754297488865
Fake_Phishing1628655.a9059cbb( )
-
Dai.transferFrom( src=0x52a6D193566c6E1dd267A2619012A90e475e69Ad, dst=0xa9DB2c038EACdf4074a36609b326E55EeA328fa5, wad=500000000000000 ) => ( True )
- ETH 0.000006248496123641
0x45eec6553004bbe26c99f03f7d4a25542bdb4af1.CALL( ) -
Dai.transferFrom( src=0x52a6D193566c6E1dd267A2619012A90e475e69Ad, dst=0x45eEC6553004BbE26C99F03F7D4A25542bDB4AF1, wad=180000000000000 ) => ( True )
- ETH 0.000006252900682612
0x1b40fb549b26d488b1d31c2c550cc7a0e5616b16.CALL( ) -
Dai.transferFrom( src=0x52a6D193566c6E1dd267A2619012A90e475e69Ad, dst=0x1b40fB549B26D488b1d31C2C550CC7A0e5616B16, wad=364395547270000 ) => ( True )
- ETH 0.000006252900682612
0x1bdbe734646cb7ae0767a6cdcd4bfa482c6fd5eb.CALL( ) -
Dai.transferFrom( src=0x52a6D193566c6E1dd267A2619012A90e475e69Ad, dst=0x1bdbE734646cb7AE0767A6CDcD4Bfa482c6Fd5eB, wad=400240144086400 ) => ( True )
// hevm: flattened sources of /nix/store/8xb41r4qd0cjb63wcrxf1qmfg88p0961-dss-6fd7de0/src/dai.sol
pragma solidity =0.5.12;
////// /nix/store/8xb41r4qd0cjb63wcrxf1qmfg88p0961-dss-6fd7de0/src/lib.sol
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
/* pragma solidity 0.5.12; */
contract LibNote {
event LogNote(
bytes4 indexed sig,
address indexed usr,
bytes32 indexed arg1,
bytes32 indexed arg2,
bytes data
) anonymous;
modifier note {
_;
assembly {
// log an 'anonymous' event with a constant 6 words of calldata
// and four indexed topics: selector, caller, arg1 and arg2
let mark := msize // end of memory ensures zero
mstore(0x40, add(mark, 288)) // update free memory pointer
mstore(mark, 0x20) // bytes type data offset
mstore(add(mark, 0x20), 224) // bytes size (padded)
calldatacopy(add(mark, 0x40), 0, 224) // bytes payload
log4(mark, 288, // calldata
shl(224, shr(224, calldataload(0))), // msg.sig
caller, // msg.sender
calldataload(4), // arg1
calldataload(36) // arg2
)
}
}
}
////// /nix/store/8xb41r4qd0cjb63wcrxf1qmfg88p0961-dss-6fd7de0/src/dai.sol
// Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/* pragma solidity 0.5.12; */
/* import "./lib.sol"; */
contract Dai is LibNote {
// --- Auth ---
mapping (address => uint) public wards;
function rely(address guy) external note auth { wards[guy] = 1; }
function deny(address guy) external note auth { wards[guy] = 0; }
modifier auth {
require(wards[msg.sender] == 1, "Dai/not-authorized");
_;
}
// --- ERC20 Data ---
string public constant name = "Dai Stablecoin";
string public constant symbol = "DAI";
string public constant version = "1";
uint8 public constant decimals = 18;
uint256 public totalSupply;
mapping (address => uint) public balanceOf;
mapping (address => mapping (address => uint)) public allowance;
mapping (address => uint) public nonces;
event Approval(address indexed src, address indexed guy, uint wad);
event Transfer(address indexed src, address indexed dst, uint wad);
// --- Math ---
function add(uint x, uint y) internal pure returns (uint z) {
require((z = x + y) >= x);
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x);
}
// --- EIP712 niceties ---
bytes32 public DOMAIN_SEPARATOR;
// bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)");
bytes32 public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;
constructor(uint256 chainId_) public {
wards[msg.sender] = 1;
DOMAIN_SEPARATOR = keccak256(abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256(bytes(version)),
chainId_,
address(this)
));
}
// --- Token ---
function transfer(address dst, uint wad) external returns (bool) {
return transferFrom(msg.sender, dst, wad);
}
function transferFrom(address src, address dst, uint wad)
public returns (bool)
{
require(balanceOf[src] >= wad, "Dai/insufficient-balance");
if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {
require(allowance[src][msg.sender] >= wad, "Dai/insufficient-allowance");
allowance[src][msg.sender] = sub(allowance[src][msg.sender], wad);
}
balanceOf[src] = sub(balanceOf[src], wad);
balanceOf[dst] = add(balanceOf[dst], wad);
emit Transfer(src, dst, wad);
return true;
}
function mint(address usr, uint wad) external auth {
balanceOf[usr] = add(balanceOf[usr], wad);
totalSupply = add(totalSupply, wad);
emit Transfer(address(0), usr, wad);
}
function burn(address usr, uint wad) external {
require(balanceOf[usr] >= wad, "Dai/insufficient-balance");
if (usr != msg.sender && allowance[usr][msg.sender] != uint(-1)) {
require(allowance[usr][msg.sender] >= wad, "Dai/insufficient-allowance");
allowance[usr][msg.sender] = sub(allowance[usr][msg.sender], wad);
}
balanceOf[usr] = sub(balanceOf[usr], wad);
totalSupply = sub(totalSupply, wad);
emit Transfer(usr, address(0), wad);
}
function approve(address usr, uint wad) external returns (bool) {
allowance[msg.sender][usr] = wad;
emit Approval(msg.sender, usr, wad);
return true;
}
// --- Alias ---
function push(address usr, uint wad) external {
transferFrom(msg.sender, usr, wad);
}
function pull(address usr, uint wad) external {
transferFrom(usr, msg.sender, wad);
}
function move(address src, address dst, uint wad) external {
transferFrom(src, dst, wad);
}
// --- Approve by signature ---
function permit(address holder, address spender, uint256 nonce, uint256 expiry,
bool allowed, uint8 v, bytes32 r, bytes32 s) external
{
bytes32 digest =
keccak256(abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
keccak256(abi.encode(PERMIT_TYPEHASH,
holder,
spender,
nonce,
expiry,
allowed))
));
require(holder != address(0), "Dai/invalid-address-0");
require(holder == ecrecover(digest, v, r, s), "Dai/invalid-permit");
require(expiry == 0 || now <= expiry, "Dai/permit-expired");
require(nonce == nonces[holder]++, "Dai/invalid-nonce");
uint wad = allowed ? uint(-1) : 0;
allowance[holder][spender] = wad;
emit Approval(holder, spender, wad);
}
}