ETH Price: $1,952.22 (-1.69%)

Transaction Decoder

Block:
23815831 at Nov-17-2025 02:11:11 AM +UTC
Transaction Fee:
0.000008521070010525 ETH $0.02
Gas Used:
130,805 Gas / 0.065143305 Gwei

Emitted Events:

912 GatewayProxy.0x617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a( 0x617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a, 0xc173fac324158e77fb5840738a1a541f633cbec8884c6a601c567d2b376a0539, 0xcbe4ebce104fd254858210091466bd3961e5190b59489d6d8069ca2349d0a455, 0000000000000000000000000000000000000000000000000000000000001638, 0000000000000000000000000000000000000000000000000000000000000001 )

Account State Difference:

  Address   Before After State Difference Code
0x1F1819C3...a818D693E
(Snowbridge: AssetHub Parachain Relay)
0.27940349721597919 Eth
Nonce: 3301
0.27965461898369129 Eth
Nonce: 3302
0.0002511217677121
0x27ca963C...f407d68e7
(Snowbridge: Gateway)
0.210869520990758134 Eth0.210609878153035509 Eth0.000259642837722625
0x82E8936b...6e9DEFF1C 0.242336527176941511 Eth56.242336527176941511 Eth56
0xd803472c...191B846a8
(Snowbridge: AssetHub Sovereign)
1,443.350984967650075376 Eth1,387.350984967650075376 Eth56
(BuilderNet)
166.882995870086332367 Eth166.882995870090387322 Eth0.000000000004054955

Execution Trace

GatewayProxy.df4ed829( )
  • 0x8a887783e945233d51881e06835ec78a8b575ece.df4ed829( )
    • 0x4058be4f048f55f1e9c88da09738070c0a7f1593.2db72616( )
      • 0x1817874feab3ce053d0f40abc23870db35c2affc.a401662b( )
      • GatewayProxy.46cd2751( )
        • 0x8a887783e945233d51881e06835ec78a8b575ece.46cd2751( )
          • 0x5db326a97b95d81ae843c23be0e30e5ea23699f1.65529675( )
            • Agent.invoke( executor=0xdaEE2A2De90043b83759d0aeEfd233a221A51e28, data=0x05B1137B00000000000000000000000082E8936B187D83FD6EB2B7DAB5B19556E9DEFF1C0000000000000000000000000000000000000000000000030927F74C9DE00000 ) => ( True, 0x )
              • 0xdaee2a2de90043b83759d0aeefd233a221a51e28.05b1137b( )
              • ETH 0.000259642837722625 Snowbridge: AssetHub Parachain Relay.CALL( )
                File 1 of 2: GatewayProxy
                // SPDX-License-Identifier: Apache-2.0
                // SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
                pragma solidity 0.8.23;
                import {ERC1967} from "./utils/ERC1967.sol";
                import {Call} from "./utils/Call.sol";
                import {IInitializable} from "./interfaces/IInitializable.sol";
                contract GatewayProxy is IInitializable {
                    error Unauthorized();
                    error NativeCurrencyNotAccepted();
                    constructor(address implementation, bytes memory params) {
                        // Store the address of the implementation contract
                        ERC1967.store(implementation);
                        // Initialize storage by calling the implementation's `initialize(bytes)` function
                        // using `delegatecall`.
                        (bool success, bytes memory returndata) =
                            implementation.delegatecall(abi.encodeCall(IInitializable.initialize, params));
                        Call.verifyResult(success, returndata);
                    }
                    // Prevent fallback() from calling `IInitializable.initialize(bytes)` on the implementation contract
                    function initialize(bytes calldata) external pure {
                        revert Unauthorized();
                    }
                    fallback() external payable {
                        address implementation = ERC1967.load();
                        assembly {
                            calldatacopy(0, 0, calldatasize())
                            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
                            returndatacopy(0, 0, returndatasize())
                            switch result
                            case 0 { revert(0, returndatasize()) }
                            default { return(0, returndatasize()) }
                        }
                    }
                    // Prevent users from unwittingly sending ether to the gateway, as these funds
                    // would otherwise be lost forever.
                    receive() external payable {
                        revert NativeCurrencyNotAccepted();
                    }
                }
                // SPDX-License-Identifier: Apache-2.0
                // SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
                pragma solidity 0.8.23;
                /// @title Minimal implementation of ERC1967 storage slot
                library ERC1967 {
                    // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
                    bytes32 public constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
                    function load() internal view returns (address implementation) {
                        assembly {
                            implementation := sload(_IMPLEMENTATION_SLOT)
                        }
                    }
                    function store(address implementation) internal {
                        assembly {
                            sstore(_IMPLEMENTATION_SLOT, implementation)
                        }
                    }
                }
                // SPDX-License-Identifier: MIT
                // SPDX-FileCopyrightText: 2023 OpenZeppelin
                // SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
                pragma solidity 0.8.23;
                // Derived from OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
                library Call {
                    function verifyResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
                        if (success) {
                            return returndata;
                        } else {
                            // Look for revert reason and bubble it up if present
                            if (returndata.length > 0) {
                                // The easiest way to bubble the revert reason is using memory via assembly
                                /// @solidity memory-safe-assembly
                                assembly {
                                    let returndata_size := mload(returndata)
                                    revert(add(32, returndata), returndata_size)
                                }
                            } else {
                                revert();
                            }
                        }
                    }
                }
                // SPDX-License-Identifier: Apache-2.0
                // SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
                pragma solidity 0.8.23;
                /**
                 * @title Initialization of gateway logic contracts
                 */
                interface IInitializable {
                    function initialize(bytes calldata data) external;
                }
                

                File 2 of 2: Agent
                // SPDX-License-Identifier: Apache-2.0
                // SPDX-FileCopyrightText: 2023 Snowfork <hello@snowfork.com>
                pragma solidity 0.8.25;
                /// @title An agent contract that acts on behalf of a consensus system on Polkadot
                /// @dev Instances of this contract act as an agents for arbitrary consensus systems on Polkadot. These consensus systems
                /// can include toplevel parachains as as well as nested consensus systems within a parachain.
                contract Agent {
                    error Unauthorized();
                    /// @dev The unique ID for this agent, derived from the MultiLocation of the corresponding consensus system on Polkadot
                    bytes32 public immutable AGENT_ID;
                    /// @dev The gateway contract controlling this agent
                    address public immutable GATEWAY;
                    constructor(bytes32 agentID) {
                        AGENT_ID = agentID;
                        GATEWAY = msg.sender;
                    }
                    /// @dev Agents can receive ether permissionlessly.
                    /// This is important, as agents for top-level parachains also act as sovereign accounts from which message relayers
                    /// are rewarded.
                    receive() external payable {}
                    /// @dev Allow the gateway to invoke some code within the context of this agent
                    /// using `delegatecall`. Typically this code will be provided by `AgentExecutor.sol`.
                    function invoke(address executor, bytes calldata data) external returns (bool, bytes memory) {
                        if (msg.sender != GATEWAY) {
                            revert Unauthorized();
                        }
                        return executor.delegatecall(data);
                    }
                }