ETH Price: $2,265.90 (+7.47%)

Transaction Decoder

Block:
19014194 at Jan-15-2024 06:52:59 PM +UTC
Transaction Fee:
0.004121192024801058 ETH $9.34
Gas Used:
134,938 Gas / 30.541374741 Gwei

Emitted Events:

473 BRC20.Transfer( from=[Receiver] 0x2edffbc62c3dffd2a8fbae3cd83a986b5bbb5495, to=[Sender] 0x3d12b28d4e93e1540193add7e4c1506f36bf30dd, value=1787583764135930830000 )
474 BRC20.Transfer( from=[Receiver] 0x2edffbc62c3dffd2a8fbae3cd83a986b5bbb5495, to=[Sender] 0x3d12b28d4e93e1540193add7e4c1506f36bf30dd, value=2505970000000000000000 )
475 0x2edffbc62c3dffd2a8fbae3cd83a986b5bbb5495.0x204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00( 0x204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00, 0x0000000000000000000000003d12b28d4e93e1540193add7e4c1506f36bf30dd, 0000000000000000000000000000000000000000000000000000000000000009, 000000000000000000000000000000000000000000000087d951e5cd49a50000, 000000000000000000000000000000000000000000000060e7b54a74f9d11cb0 )

Account State Difference:

  Address   Before After State Difference Code
4.531568251451603138 Eth4.531581745251603138 Eth0.0000134938
0x2EDfFbc6...B5bbB5495
(Multibit: Staking)
0x3D12B28D...f36bF30DD
4.216067859018891792 Eth
Nonce: 132
4.211946666994090734 Eth
Nonce: 133
0.004121192024801058
0xC881255e...F33459261
0xda31D0d1...0A5e8b44F

Execution Trace

Multibit: Staking.9e2c8a5b( )
  • 0xbce8bdc1108ef56035d39ddab3454f824f8562d7.9e2c8a5b( )
    • BRC20.transfer( to=0x3D12B28D4e93e1540193ADD7e4c1506f36bF30DD, amount=1787583764135930830000 ) => ( True )
    • BRC20.transfer( to=0x3D12B28D4e93e1540193ADD7e4c1506f36bF30DD, amount=2505970000000000000000 ) => ( True )
      File 1 of 2: BRC20
      // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.0;
      import "./interfaces/IBRC20Factory.sol";
      contract BRC20 {
          string public name;
          string public symbol;
          uint8 public immutable decimals;
          address public immutable factory;
          uint256  public totalSupply;
          mapping (address => uint256) public balanceOf;
          mapping (address => mapping(address => uint256)) public allowance;
          mapping (address => uint256) public nonces;
          bytes32 public DOMAIN_SEPARATOR;
          bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
          bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
          event Approval(address indexed owner, address indexed spender, uint256 value);
          event Transfer(address indexed from, address indexed to, uint256 value);
          constructor() {
              (name, symbol, decimals) = IBRC20Factory(msg.sender).parameters();
              factory = msg.sender;
              uint256 chainId;
              assembly {
                  chainId := chainid()
              }
              DOMAIN_SEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes('1')), chainId, address(this)));
          }
          function mint(address to, uint256 amount) external {
              require(msg.sender == factory, "unauthorized");
              _mint(to, amount);
          }
          function burn(uint256 amount) external {
              require(msg.sender == factory, "unauthorized");
              _burn(msg.sender, amount);
          }
          function approve(address spender, uint256 amount) external returns (bool) {
              allowance[msg.sender][spender] = amount;
              emit Approval(msg.sender, spender, amount);
              return true;
          }
          function transfer(address to, uint256 amount) external returns (bool) {
              balanceOf[msg.sender] -= amount;
              unchecked {
                  balanceOf[to] += amount;
              }
              emit Transfer(msg.sender, to, amount);
              return true;
          }
          function transferFrom(address from, address to, uint256 amount) external returns (bool) {
              uint256 allowed = allowance[from][msg.sender];
              if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
              balanceOf[from] -= amount;
              unchecked {
                  balanceOf[to] += amount;
              }
              emit Transfer(from, to, amount);
              return true;
          }
          function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
              require(deadline >= block.timestamp, 'EXPIRED');
              unchecked {
                  bytes32 digest = keccak256(
                      abi.encodePacked(
                          '\\x19\\x01',
                          DOMAIN_SEPARATOR,
                          keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                      )
                  );
                  address recoveredAddress = ecrecover(digest, v, r, s);
                  require(recoveredAddress != address(0) && recoveredAddress == owner, 'INVALID_SIGNATURE');
                  allowance[recoveredAddress][spender] = value;
              }
              emit Approval(owner, spender, value);
          }
          function _mint(address to, uint256 amount) internal {
              totalSupply += amount;
              unchecked {
                  balanceOf[to] += amount;
              }
              emit Transfer(address(0), to, amount);
          }
          function _burn(address from, uint256 amount) internal {
              balanceOf[from] -= amount;
              unchecked {
                  totalSupply -= amount;
              }
              emit Transfer(from, address(0), amount);
          }
      }// SPDX-License-Identifier: MIT
      pragma solidity ^0.8.0;
      interface IBRC20Factory {
          function parameters() external view returns (string memory name, string memory symbol, uint8 decimals);
      }

      File 2 of 2: BRC20
      // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.0;
      import "./interfaces/IBRC20Factory.sol";
      contract BRC20 {
          string public name;
          string public symbol;
          uint8 public immutable decimals;
          address public immutable factory;
          uint256  public totalSupply;
          mapping (address => uint256) public balanceOf;
          mapping (address => mapping(address => uint256)) public allowance;
          mapping (address => uint256) public nonces;
          bytes32 public DOMAIN_SEPARATOR;
          bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
          bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
          event Approval(address indexed owner, address indexed spender, uint256 value);
          event Transfer(address indexed from, address indexed to, uint256 value);
          constructor() {
              (name, symbol, decimals) = IBRC20Factory(msg.sender).parameters();
              factory = msg.sender;
              uint256 chainId;
              assembly {
                  chainId := chainid()
              }
              DOMAIN_SEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes('1')), chainId, address(this)));
          }
          function mint(address to, uint256 amount) external {
              require(msg.sender == factory, "unauthorized");
              _mint(to, amount);
          }
          function burn(uint256 amount) external {
              require(msg.sender == factory, "unauthorized");
              _burn(msg.sender, amount);
          }
          function approve(address spender, uint256 amount) external returns (bool) {
              allowance[msg.sender][spender] = amount;
              emit Approval(msg.sender, spender, amount);
              return true;
          }
          function transfer(address to, uint256 amount) external returns (bool) {
              balanceOf[msg.sender] -= amount;
              unchecked {
                  balanceOf[to] += amount;
              }
              emit Transfer(msg.sender, to, amount);
              return true;
          }
          function transferFrom(address from, address to, uint256 amount) external returns (bool) {
              uint256 allowed = allowance[from][msg.sender];
              if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
              balanceOf[from] -= amount;
              unchecked {
                  balanceOf[to] += amount;
              }
              emit Transfer(from, to, amount);
              return true;
          }
          function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
              require(deadline >= block.timestamp, 'EXPIRED');
              unchecked {
                  bytes32 digest = keccak256(
                      abi.encodePacked(
                          '\\x19\\x01',
                          DOMAIN_SEPARATOR,
                          keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
                      )
                  );
                  address recoveredAddress = ecrecover(digest, v, r, s);
                  require(recoveredAddress != address(0) && recoveredAddress == owner, 'INVALID_SIGNATURE');
                  allowance[recoveredAddress][spender] = value;
              }
              emit Approval(owner, spender, value);
          }
          function _mint(address to, uint256 amount) internal {
              totalSupply += amount;
              unchecked {
                  balanceOf[to] += amount;
              }
              emit Transfer(address(0), to, amount);
          }
          function _burn(address from, uint256 amount) internal {
              balanceOf[from] -= amount;
              unchecked {
                  totalSupply -= amount;
              }
              emit Transfer(from, address(0), amount);
          }
      }// SPDX-License-Identifier: MIT
      pragma solidity ^0.8.0;
      interface IBRC20Factory {
          function parameters() external view returns (string memory name, string memory symbol, uint8 decimals);
      }