ETH Price: $2,620.07 (-3.13%)

Contract

0x85bAFcAdeA202258e3512FFBC3E2c9eE6Ad56365
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute218255572025-02-11 20:06:1113 hrs ago1739304371IN
0x85bAFcAd...E6Ad56365
0 ETH0.000189632.49168516
Execute217758552025-02-04 21:35:477 days ago1738704947IN
0x85bAFcAd...E6Ad56365
0 ETH0.000346954.55890348
Execute217679822025-02-03 19:10:478 days ago1738609847IN
0x85bAFcAd...E6Ad56365
0 ETH0.0019408312.36170502
Execute217451182025-01-31 14:30:4711 days ago1738333847IN
0x85bAFcAd...E6Ad56365
0 ETH0.001430367.38677331
Execute217236812025-01-28 14:40:4714 days ago1738075247IN
0x85bAFcAd...E6Ad56365
0 ETH0.000564337.41512944
Execute216814362025-01-22 17:10:4720 days ago1737565847IN
0x85bAFcAd...E6Ad56365
0 ETH0.0020113910.38869079
Execute216747882025-01-21 18:55:3521 days ago1737485735IN
0x85bAFcAd...E6Ad56365
0 ETH0.0046876223.0394372
Execute216737772025-01-21 15:31:5921 days ago1737473519IN
0x85bAFcAd...E6Ad56365
0 ETH0.0009835713.54895799
Execute215898072025-01-09 22:08:4733 days ago1736460527IN
0x85bAFcAd...E6Ad56365
0 ETH0.001328557.41423002
Execute215898022025-01-09 22:07:4733 days ago1736460467IN
0x85bAFcAd...E6Ad56365
0 ETH0.001126756.2884715
Execute215660342025-01-06 14:31:4736 days ago1736173907IN
0x85bAFcAd...E6Ad56365
0 ETH0.0012127615.93525646
Execute214951012024-12-27 16:50:3546 days ago1735318235IN
0x85bAFcAd...E6Ad56365
0 ETH0.00069689.15577742
Execute214157532024-12-16 14:43:3557 days ago1734360215IN
0x85bAFcAd...E6Ad56365
0 ETH0.0017603423.13019664
Execute213884932024-12-12 19:23:3561 days ago1734031415IN
0x85bAFcAd...E6Ad56365
0 ETH0.0019024324.99718085
Execute213765632024-12-11 3:23:5963 days ago1733887439IN
0x85bAFcAd...E6Ad56365
0 ETH0.0010633913.97259005
Execute213410212024-12-06 4:18:3568 days ago1733458715IN
0x85bAFcAd...E6Ad56365
0 ETH0.0012348716.22829495
Execute212938962024-11-29 14:18:4774 days ago1732889927IN
0x85bAFcAd...E6Ad56365
0 ETH0.0012822816.84869113
Execute212369012024-11-21 15:08:3582 days ago1732201715IN
0x85bAFcAd...E6Ad56365
0 ETH0.0024286231.91106973
Execute211938962024-11-15 15:09:4788 days ago1731683387IN
0x85bAFcAd...E6Ad56365
0 ETH0.0024517132.21452139
Execute211727712024-11-12 16:23:2391 days ago1731428603IN
0x85bAFcAd...E6Ad56365
0 ETH0.0028699337.70966364
Execute210865212024-10-31 15:29:11103 days ago1730388551IN
0x85bAFcAd...E6Ad56365
0 ETH0.0012231616.07183931
Execute210863212024-10-31 14:49:11103 days ago1730386151IN
0x85bAFcAd...E6Ad56365
0 ETH0.0016038821.07433935
Execute210800142024-10-30 17:42:59104 days ago1730310179IN
0x85bAFcAd...E6Ad56365
0 ETH0.0012450716.35974854
Execute210228502024-10-22 18:15:59112 days ago1729620959IN
0x85bAFcAd...E6Ad56365
0 ETH0.0010769914.15126655
Execute209370442024-10-10 18:35:59124 days ago1728585359IN
0x85bAFcAd...E6Ad56365
0 ETH0.0016481821.65645699
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
218255062025-02-11 19:55:5913 hrs ago1739303759
0x85bAFcAd...E6Ad56365
0.00006698 ETH
218255062025-02-11 19:55:5913 hrs ago1739303759
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217673892025-02-03 17:11:478 days ago1738602707
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217673892025-02-03 17:11:478 days ago1738602707
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217258172025-01-28 21:50:1114 days ago1738101011
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217258172025-01-28 21:50:1114 days ago1738101011
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217257152025-01-28 21:29:4714 days ago1738099787
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217257152025-01-28 21:29:4714 days ago1738099787
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217255962025-01-28 21:05:5914 days ago1738098359
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217255962025-01-28 21:05:5914 days ago1738098359
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217254662025-01-28 20:39:2314 days ago1738096763
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217254662025-01-28 20:39:2314 days ago1738096763
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217252952025-01-28 20:05:1114 days ago1738094711
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217252952025-01-28 20:05:1114 days ago1738094711
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217237062025-01-28 14:45:5914 days ago1738075559
0x85bAFcAd...E6Ad56365
0.00006698 ETH
217237062025-01-28 14:45:5914 days ago1738075559
0x85bAFcAd...E6Ad56365
0.00006698 ETH
216749392025-01-21 19:25:4721 days ago1737487547
0x85bAFcAd...E6Ad56365
0.00006698 ETH
216749392025-01-21 19:25:4721 days ago1737487547
0x85bAFcAd...E6Ad56365
0.00006698 ETH
216747382025-01-21 18:45:3521 days ago1737485135
0x85bAFcAd...E6Ad56365
0.00006698 ETH
216747382025-01-21 18:45:3521 days ago1737485135
0x85bAFcAd...E6Ad56365
0.00006698 ETH
216736272025-01-21 15:01:5921 days ago1737471719
0x85bAFcAd...E6Ad56365
0.00006698 ETH
216736272025-01-21 15:01:5921 days ago1737471719
0x85bAFcAd...E6Ad56365
0.00006698 ETH
215896042025-01-09 21:27:5933 days ago1736458079
0x85bAFcAd...E6Ad56365
0.00006698 ETH
215896042025-01-09 21:27:5933 days ago1736458079
0x85bAFcAd...E6Ad56365
0.00006698 ETH
215878972025-01-09 15:44:5933 days ago1736437499
0x85bAFcAd...E6Ad56365
0.00006698 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AxelarAdapter

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 500 runs

Other Settings:
cancun EvmVersion
File 1 of 6 : Adapter.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.26;

import {
    IAxelarAdapter,
    IAdapter,
    IAxelarGateway,
    IAxelarGasService
} from "src/interfaces/gateway/adapters/IAxelarAdapter.sol";
import {IGateway} from "src/interfaces/gateway/IGateway.sol";
import {Auth} from "src/Auth.sol";
import {IGateway} from "src/interfaces/gateway/IGateway.sol";

/// @title  Axelar Adapter
/// @notice Routing contract that integrates with an Axelar Gateway
contract AxelarAdapter is Auth, IAxelarAdapter {
    string public constant CENTRIFUGE_ID = "centrifuge";
    string public constant CENTRIFUGE_AXELAR_EXECUTABLE = "0xc1757c6A0563E37048869A342dF0651b9F267e41";

    IGateway public immutable gateway;
    bytes32 public immutable centrifugeIdHash;
    bytes32 public immutable centrifugeAddressHash;
    IAxelarGateway public immutable axelarGateway;
    IAxelarGasService public immutable axelarGasService;

    /// @inheritdoc IAxelarAdapter
    uint256 public axelarCost = 58_039_058_122_843;

    constructor(address gateway_, address axelarGateway_, address axelarGasService_) Auth(msg.sender) {
        gateway = IGateway(gateway_);
        axelarGateway = IAxelarGateway(axelarGateway_);
        axelarGasService = IAxelarGasService(axelarGasService_);

        centrifugeIdHash = keccak256(bytes(CENTRIFUGE_ID));
        centrifugeAddressHash = keccak256(bytes("0x7369626CEF070000000000000000000000000000"));
    }

    // --- Administrative ---
    /// @inheritdoc IAxelarAdapter
    function file(bytes32 what, uint256 value) external auth {
        if (what == "axelarCost") axelarCost = value;
        else revert("AxelarAdapterfile-unrecognized-param");
        emit File(what, value);
    }

    // --- Incoming ---
    /// @inheritdoc IAxelarAdapter
    function execute(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) public {
        require(keccak256(bytes(sourceChain)) == centrifugeIdHash, "AxelarAdapter/invalid-chain");
        require(keccak256(bytes(sourceAddress)) == centrifugeAddressHash, "AxelarAdapter/invalid-address");
        require(
            axelarGateway.validateContractCall(commandId, sourceChain, sourceAddress, keccak256(payload)),
            "AxelarAdapter/not-approved-by-axelar-gateway"
        );

        gateway.handle(payload);
    }

    // --- Outgoing ---
    function send(bytes calldata payload) public {
        require(msg.sender == address(gateway), "AxelarAdapter/not-gateway");
        axelarGateway.callContract(CENTRIFUGE_ID, CENTRIFUGE_AXELAR_EXECUTABLE, payload);
    }

    /// @inheritdoc IAdapter
    /// @dev Currently the payload (message) is not taken into consideration during cost estimation
    ///      A predefined `axelarCost` value is used.
    function estimate(bytes calldata, uint256 baseCost) public view returns (uint256) {
        return baseCost + axelarCost;
    }

    /// @inheritdoc IAdapter
    function pay(bytes calldata payload, address refund) public payable {
        axelarGasService.payNativeGasForContractCall{value: msg.value}(
            address(this), CENTRIFUGE_ID, CENTRIFUGE_AXELAR_EXECUTABLE, payload, refund
        );
    }
}

File 2 of 6 : IAxelarAdapter.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.5.0;

import {IAdapter} from "src/interfaces/gateway/IAdapter.sol";

interface IAxelarGateway {
    function callContract(string calldata destinationChain, string calldata contractAddress, bytes calldata payload)
        external;

    function validateContractCall(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes32 payloadHash
    ) external returns (bool);
}

interface IAxelarGasService {
    function payNativeGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable;
}

interface IAxelarAdapter is IAdapter {
    event File(bytes32 indexed what, uint256 value);

    /// @dev This value is in Axelar fees in ETH (wei)
    function axelarCost() external view returns (uint256);

    /// @notice Updates a contract parameter
    /// @param what Accepts a bytes32 representation of 'axelarCost'
    function file(bytes32 what, uint256 value) external;

    // --- Incoming ---
    /// @notice Execute a message
    /// @dev    Relies on Axelar to ensure messages cannot be executed more than once.
    function execute(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) external;
}

File 3 of 6 : IGateway.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.26;

uint8 constant MAX_ADAPTER_COUNT = 8;

interface IGateway {
    /// @dev Each adapter struct is packed with the quorum to reduce SLOADs on handle
    struct Adapter {
        /// @notice Starts at 1 and maps to id - 1 as the index on the adapters array
        uint8 id;
        /// @notice Number of votes required for a message to be executed
        uint8 quorum;
        /// @notice Each time the quorum is decreased, a new session starts which invalidates old votes
        uint64 activeSessionId;
    }

    struct Message {
        /// @dev Counts are stored as integers (instead of boolean values) to accommodate duplicate
        ///      messages (e.g. two investments from the same user with the same amount) being
        ///      processed in parallel. The entire struct is packed in a single bytes32 slot.
        ///      Max uint16 = 65,535 so at most 65,535 duplicate messages can be processed in parallel.
        uint16[MAX_ADAPTER_COUNT] votes;
        /// @notice Each time adapters are updated, a new session starts which invalidates old votes
        uint64 sessionId;
        bytes pendingMessage;
    }

    // --- Events ---
    event ProcessMessage(bytes message, address adapter);
    event ProcessProof(bytes32 messageHash, address adapter);
    event ExecuteMessage(bytes message, address adapter);
    event SendMessage(bytes message);
    event RecoverMessage(address adapter, bytes message);
    event RecoverProof(address adapter, bytes32 messageHash);
    event InitiateMessageRecovery(bytes32 messageHash, address adapter);
    event DisputeMessageRecovery(bytes32 messageHash, address adapter);
    event ExecuteMessageRecovery(bytes message, address adapter);
    event File(bytes32 indexed what, address[] adapters);
    event File(bytes32 indexed what, address instance);
    event File(bytes32 indexed what, uint8 messageId, address manager);
    event File(bytes32 indexed what, address caller, bool isAllowed);
    event ReceiveNativeTokens(address indexed sender, uint256 amount);

    /// @notice Returns the address of the adapter at the given id.
    function adapters(uint256 id) external view returns (address);

    /// @notice Returns the address of the contract that handles the given message id.
    function messageHandlers(uint8 messageId) external view returns (address);

    /// @notice Returns the timestamp when the given recovery can be executed.
    function recoveries(address adapter, bytes32 messageHash) external view returns (uint256 timestamp);

    // --- Administration ---
    /// @notice Used to update an array of addresses ( state variable ) on very rare occasions.
    /// @dev    Currently it is used to update the supported adapters.
    /// @param  what The name of the variable to be updated.
    /// @param  value New addresses.
    function file(bytes32 what, address[] calldata value) external;

    /// @notice Used to update an address ( state variable ) on very rare occasions.
    /// @dev    Currently used to update addresses of contract instances.
    /// @param  what The name of the variable to be updated.
    /// @param  data New address.
    function file(bytes32 what, address data) external;

    /// @notice Used to update a mapping ( state variables ) on very rare occasions.
    /// @dev    Currently used to update any custom handlers for a specific message type.
    ///         data1 is the message id from MessagesLib.Call and data2 could be any
    ///         custom instance of a contract that will handle that call.
    /// @param  what The name of the variable to be updated.
    /// @param  data1 The key of the mapping.
    /// @param  data2 The value of the mapping
    function file(bytes32 what, uint8 data1, address data2) external;

    /// @notice Used to update a mapping ( state variables ) on very rare occasions.
    /// @dev    Manages who is allowed to call `this.topUp`
    ///
    /// @param what The name of the variable to be updated - `payers`
    /// @param caller Address of the payer allowed to top-up
    /// @param isAllower Whether the `caller` is allowed to top-up or not
    function file(bytes32 what, address caller, bool isAllower) external;

    // --- Incoming ---
    /// @notice Handles incoming messages, proofs, and recoveries.
    /// @dev    Assumes adapters ensure messages cannot be confirmed more than once.
    /// @param  payload Incoming message from the Centrifuge Chain passed through adapters.
    function handle(bytes calldata payload) external;

    /// @notice Governance on Centrifuge Chain can initiate message recovery. After the challenge period,
    ///         the recovery can be executed. If a malign adapter initiates message recovery, governance on
    ///         Centrifuge Chain can dispute and immediately cancel the recovery, using any other valid adapter.
    /// @param  adapter Adapter that the recovery was targeting
    /// @param  messageHash Hash of the message being disputed
    function disputeMessageRecovery(address adapter, bytes32 messageHash) external;

    /// @notice Governance on Centrifuge Chain can initiate message recovery. After the challenge period,
    ///         the recovery can be executed. If a malign adapter initiates message recovery, governance on
    ///         Centrifuge Chain can dispute and immediately cancel the recovery, using any other valid adapter.
    ///
    ///         Only 1 recovery can be outstanding per message hash. If multiple adapters fail at the same time,
    ///         these will need to be recovered serially (increasing the challenge period for each failed adapter).
    /// @param  adapter Adapter's address that the recovery is targeting
    /// @param  message Hash of the message to be recovered
    function executeMessageRecovery(address adapter, bytes calldata message) external;

    // --- Outgoing ---
    /// @notice Sends outgoing messages to the Centrifuge Chain.
    /// @dev    Sends 1 message to the first adapter with the full message,
    ///         and n-1 messages to the other adapters with proofs (hash of message).
    ///         This ensures message uniqueness (can only be executed on the destination once).
    ///         Source could be either Centrifuge router or EoA or any contract
    ///         that calls the ERC7540Vault contract directly.
    /// @param  message Message to be send. Either the message itself or a hash value of it ( proof ).
    /// @param  source Entry point of the transaction.
    ///         Used to determine whether it is eligible for TX cost payment.
    function send(bytes calldata message, address source) external payable;

    /// @notice Prepays for the TX cost for sending through the adapters
    ///         and Centrifuge Chain
    /// @dev    It can be called only through endorsed contracts.
    ///         Currently being called from Centrifuge Router only.
    ///         In order to prepay, the method MUST be called with `msg.value`.
    ///         Called is assumed to have called IGateway.estimate before calling this.
    function topUp() external payable;

    // --- Helpers ---
    /// @notice A view method of the current quorum.abi
    /// @dev    Quorum shows the amount of votes needed in order for a message to be dispatched further.
    ///         The quorum is taken from the first adapter.
    ///         Current quorum is the amount of all adapters.
    /// return  Needed amount
    function quorum() external view returns (uint8);

    /// @notice Gets the current active routers session id.
    /// @dev    When the adapters are updated with new ones,
    ///         each new set of adapters has their own sessionId.
    ///         Currently it uses sessionId of the previous set and
    ///         increments it by 1. The idea of an activeSessionId is
    ///         to invalidate any incoming messages from previously used adapters.
    function activeSessionId() external view returns (uint64);

    /// @notice Counts how many times each incoming messages has been received per adapter.
    /// @dev    It supports parallel messages ( duplicates ). That means that the incoming messages could be
    ///         the result of two or more independ request from the user of the same type.
    ///         i.e. Same user would like to deposit same underlying asset with the same amount more then once.
    /// @param  messageHash The hash value of the incoming message.
    function votes(bytes32 messageHash) external view returns (uint16[MAX_ADAPTER_COUNT] memory);

    /// @notice Used to calculate overall cost for bridging a payload on the first adapter and settling
    ///         on the destination chain and bridging its payload proofs on n-1 adapter
    ///         and settling on the destination chain.
    /// @param  payload Used in gas cost calculations.
    /// @dev    Currenly the payload is not taken into consideration.
    /// @return perAdapter An array of cost values per adapter. Each value is how much it's going to cost
    ///         for a message / proof to be passed through one router and executed on Centrifuge Chain
    /// @return total Total cost for sending one message and corresponding proofs on through all adapters
    function estimate(bytes calldata payload) external view returns (uint256[] memory perAdapter, uint256 total);

    /// @notice Used to check current state of the `caller` and whether they are allowed to call
    ///         `this.topUp` or not.
    /// @param  caller Address to check
    /// @return isAllowed Whether the `caller` `isAllowed to call `this.topUp()`
    function payers(address caller) external view returns (bool isAllowed);
}

interface IMessageHandler {
    /// @notice Handling incoming messages from Centrifuge Chain.
    /// @param  message Incoming message
    function handle(bytes memory message) external;
}

File 4 of 6 : Auth.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.26;

import {IAuth} from "src/interfaces/IAuth.sol";

/// @title  Auth
/// @notice Simple authentication pattern
/// @author Based on code from https://github.com/makerdao/dss
abstract contract Auth is IAuth {
    /// @inheritdoc IAuth
    mapping(address => uint256) public wards;

    constructor(address initialWard) {
        wards[initialWard] = 1;
        emit Rely(initialWard);
    }

    /// @dev Check if the msg.sender has permissions
    modifier auth() {
        require(wards[msg.sender] == 1, "Auth/not-authorized");
        _;
    }

    /// @inheritdoc IAuth
    function rely(address user) external auth {
        wards[user] = 1;
        emit Rely(user);
    }

    /// @inheritdoc IAuth
    function deny(address user) external auth {
        wards[user] = 0;
        emit Deny(user);
    }
}

File 5 of 6 : IAdapter.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.5.0;

interface IAdapter {
    // --- Outgoing ---
    /// @notice Send a payload to Centrifuge Chain
    function send(bytes calldata payload) external;

    /// @notice Estimate the total cost in native gas tokens
    function estimate(bytes calldata payload, uint256 baseCost) external view returns (uint256);

    /// @notice Pay the gas cost
    function pay(bytes calldata payload, address refund) external payable;
}

File 6 of 6 : IAuth.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.5.0;

interface IAuth {
    event Rely(address indexed user);
    event Deny(address indexed user);

    /// @notice Returns whether the target is a ward (has admin access)
    function wards(address target) external view returns (uint256);

    /// @notice Make user a ward (give them admin access)
    function rely(address user) external;

    /// @notice Remove user as a ward (remove admin access)
    function deny(address user) external;
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "@chimera/=lib/chimera/src/",
    "chimera/=lib/chimera/src/",
    "ds-test/=lib/chimera/lib/forge-std/lib/ds-test/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 500
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"gateway_","type":"address"},{"internalType":"address","name":"axelarGateway_","type":"address"},{"internalType":"address","name":"axelarGasService_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Rely","type":"event"},{"inputs":[],"name":"CENTRIFUGE_AXELAR_EXECUTABLE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CENTRIFUGE_ID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"axelarCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"axelarGasService","outputs":[{"internalType":"contract IAxelarGasService","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"axelarGateway","outputs":[{"internalType":"contract IAxelarGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"centrifugeAddressHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"centrifugeIdHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"baseCost","type":"uint256"}],"name":"estimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"commandId","type":"bytes32"},{"internalType":"string","name":"sourceChain","type":"string"},{"internalType":"string","name":"sourceAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gateway","outputs":[{"internalType":"contract IGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"address","name":"refund","type":"address"}],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6101206040526534c94571485b60015534801561001a575f80fd5b506040516110c33803806110c383398101604081905261003991610117565b335f81815260208190526040808220600190555182917fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6091a2506001600160a01b0380841660805282811660e052811661010052604080518082018252600a81526963656e7472696675676560b01b6020918201527f60725fbe70c95e859120491e0e917eae7a53602d7c28ca502ed6dbcd335f5d9c60a052815160608101909252602a8083529061109990830139805160209091012060c05250610157915050565b80516001600160a01b0381168114610112575f80fd5b919050565b5f805f60608486031215610129575f80fd5b610132846100fc565b9250610140602085016100fc565b915061014e604085016100fc565b90509250925092565b60805160a05160c05160e05161010051610ed46101c55f395f818161025901526105d901525f81816101810152818161051c01526107a901525f81816102ab015261072301525f8181610226015261069d01525f8181610136015281816104ad01526108e60152610ed45ff3fe6080604052600436106100ef575f3560e01c8063545614cc116100875780637fadf28d116100575780637fadf28d146102e257806385b09852146103035780639c52a7f114610338578063bf353dbb14610357575f80fd5b8063545614cc1461024857806365fae35e1461027b578063745963dd1461029a5780637f1397d3146102cd575f80fd5b80632bb1ae7c116100c25780632bb1ae7c146101c45780632d0c7583146101e357806349160658146101f6578063494ffadd14610215575f80fd5b80630bfb963b146100f3578063116191b61461012557806314099c581461017057806329ae8114146101a3575b5f80fd5b3480156100fe575f80fd5b5061011261010d366004610ae3565b610382565b6040519081526020015b60405180910390f35b348015610130575f80fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161011c565b34801561017b575f80fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ae575f80fd5b506101c26101bd366004610b2b565b610399565b005b3480156101cf575f80fd5b506101c26101de366004610b4b565b6104a2565b6101c26101f1366004610ba5565b6105d7565b348015610201575f80fd5b506101c2610210366004610bf5565b61069b565b348015610220575f80fd5b506101127f000000000000000000000000000000000000000000000000000000000000000081565b348015610253575f80fd5b506101587f000000000000000000000000000000000000000000000000000000000000000081565b348015610286575f80fd5b506101c2610295366004610c9d565b610953565b3480156102a5575f80fd5b506101127f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d8575f80fd5b5061011260015481565b3480156102ed575f80fd5b506102f66109eb565b60405161011c9190610ceb565b34801561030e575f80fd5b506102f66040518060400160405280600a81526020016963656e7472696675676560b01b81525081565b348015610343575f80fd5b506101c2610352366004610c9d565b610a07565b348015610362575f80fd5b50610112610371366004610c9d565b5f6020819052908152604090205481565b5f600154826103919190610cfd565b949350505050565b335f908152602081905260409020546001146103f25760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064015b60405180910390fd5b8169185e195b185c90dbdcdd60b21b03610410576001819055610464565b60405162461bcd60e51b8152602060048201526024808201527f4178656c61724164617074657266696c652d756e7265636f676e697a65642d706044820152636172616d60e01b60648201526084016103e9565b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c78260405161049691815260200190565b60405180910390a25050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461051a5760405162461bcd60e51b815260206004820152601960248201527f4178656c6172416461707465722f6e6f742d676174657761790000000000000060448201526064016103e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631c92115f6040518060400160405280600a81526020016963656e7472696675676560b01b8152506040518060600160405280602a8152602001610e75602a913985856040518563ffffffff1660e01b81526004016105a69493929190610d4a565b5f604051808303815f87803b1580156105bd575f80fd5b505af11580156105cf573d5f803e3d5ffd5b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c93e3bb34306040518060400160405280600a81526020016963656e7472696675676560b01b8152506040518060600160405280602a8152602001610e75602a91398888886040518863ffffffff1660e01b815260040161066896959493929190610d8e565b5f604051808303818588803b15801561067f575f80fd5b505af1158015610691573d5f803e3d5ffd5b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000086866040516106cc929190610df3565b6040518091039020146107215760405162461bcd60e51b815260206004820152601b60248201527f4178656c6172416461707465722f696e76616c69642d636861696e000000000060448201526064016103e9565b7f00000000000000000000000000000000000000000000000000000000000000008484604051610752929190610df3565b6040518091039020146107a75760405162461bcd60e51b815260206004820152601d60248201527f4178656c6172416461707465722f696e76616c69642d6164647265737300000060448201526064016103e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635f6970c3888888888888886040516107eb929190610df3565b6040519081900381207fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16825261082e969594939291600401610e02565b6020604051808303815f875af115801561084a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086e9190610e42565b6108cf5760405162461bcd60e51b815260206004820152602c60248201527f4178656c6172416461707465722f6e6f742d617070726f7665642d62792d617860448201526b656c61722d6761746577617960a01b60648201526084016103e9565b604051635fa45e5b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bf48bcb69061091d9085908590600401610e61565b5f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b5050505050505050505050565b335f908152602081905260409020546001146109a75760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016103e9565b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6040518060600160405280602a8152602001610e75602a913981565b335f90815260208190526040902054600114610a5b5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016103e9565b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f8083601f840112610aae575f80fd5b50813567ffffffffffffffff811115610ac5575f80fd5b602083019150836020828501011115610adc575f80fd5b9250929050565b5f805f60408486031215610af5575f80fd5b833567ffffffffffffffff811115610b0b575f80fd5b610b1786828701610a9e565b909790965060209590950135949350505050565b5f8060408385031215610b3c575f80fd5b50508035926020909101359150565b5f8060208385031215610b5c575f80fd5b823567ffffffffffffffff811115610b72575f80fd5b610b7e85828601610a9e565b90969095509350505050565b80356001600160a01b0381168114610ba0575f80fd5b919050565b5f805f60408486031215610bb7575f80fd5b833567ffffffffffffffff811115610bcd575f80fd5b610bd986828701610a9e565b9094509250610bec905060208501610b8a565b90509250925092565b5f805f805f805f6080888a031215610c0b575f80fd5b87359650602088013567ffffffffffffffff811115610c28575f80fd5b610c348a828b01610a9e565b909750955050604088013567ffffffffffffffff811115610c53575f80fd5b610c5f8a828b01610a9e565b909550935050606088013567ffffffffffffffff811115610c7e575f80fd5b610c8a8a828b01610a9e565b989b979a50959850939692959293505050565b5f60208284031215610cad575f80fd5b610cb682610b8a565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cb66020830184610cbd565b80820180821115610d1c57634e487b7160e01b5f52601160045260245ffd5b92915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f610d5c6060830187610cbd565b8281036020840152610d6e8187610cbd565b90508281036040840152610d83818587610d22565b979650505050505050565b6001600160a01b038716815260a060208201525f610daf60a0830188610cbd565b8281036040840152610dc18188610cbd565b90508281036060840152610dd6818688610d22565b9150506001600160a01b0383166080830152979650505050505050565b818382375f9101908152919050565b868152608060208201525f610e1b608083018789610d22565b8281036040840152610e2e818688610d22565b915050826060830152979650505050505050565b5f60208284031215610e52575f80fd5b81518015158114610cb6575f80fd5b602081525f610391602083018486610d2256fe307863313735376336413035363345333730343838363941333432644630363531623946323637653431a2646970667358221220fdd0cf38803d26b1b995babae553caa03c650bc3667cc7806f6a1e883035e88964736f6c634300081a00333078373336393632364345463037303030303030303030303030303030303030303030303030303030300000000000000000000000007829e5ca4286df66e9f58160544097db517a3b8c0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a50000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712

Deployed Bytecode

0x6080604052600436106100ef575f3560e01c8063545614cc116100875780637fadf28d116100575780637fadf28d146102e257806385b09852146103035780639c52a7f114610338578063bf353dbb14610357575f80fd5b8063545614cc1461024857806365fae35e1461027b578063745963dd1461029a5780637f1397d3146102cd575f80fd5b80632bb1ae7c116100c25780632bb1ae7c146101c45780632d0c7583146101e357806349160658146101f6578063494ffadd14610215575f80fd5b80630bfb963b146100f3578063116191b61461012557806314099c581461017057806329ae8114146101a3575b5f80fd5b3480156100fe575f80fd5b5061011261010d366004610ae3565b610382565b6040519081526020015b60405180910390f35b348015610130575f80fd5b506101587f0000000000000000000000007829e5ca4286df66e9f58160544097db517a3b8c81565b6040516001600160a01b03909116815260200161011c565b34801561017b575f80fd5b506101587f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a581565b3480156101ae575f80fd5b506101c26101bd366004610b2b565b610399565b005b3480156101cf575f80fd5b506101c26101de366004610b4b565b6104a2565b6101c26101f1366004610ba5565b6105d7565b348015610201575f80fd5b506101c2610210366004610bf5565b61069b565b348015610220575f80fd5b506101127f60725fbe70c95e859120491e0e917eae7a53602d7c28ca502ed6dbcd335f5d9c81565b348015610253575f80fd5b506101587f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271281565b348015610286575f80fd5b506101c2610295366004610c9d565b610953565b3480156102a5575f80fd5b506101127ffdedca3e459e0945c9db089231054c40476ec56eea89c63a83abc1195ba62f2881565b3480156102d8575f80fd5b5061011260015481565b3480156102ed575f80fd5b506102f66109eb565b60405161011c9190610ceb565b34801561030e575f80fd5b506102f66040518060400160405280600a81526020016963656e7472696675676560b01b81525081565b348015610343575f80fd5b506101c2610352366004610c9d565b610a07565b348015610362575f80fd5b50610112610371366004610c9d565b5f6020819052908152604090205481565b5f600154826103919190610cfd565b949350505050565b335f908152602081905260409020546001146103f25760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064015b60405180910390fd5b8169185e195b185c90dbdcdd60b21b03610410576001819055610464565b60405162461bcd60e51b8152602060048201526024808201527f4178656c61724164617074657266696c652d756e7265636f676e697a65642d706044820152636172616d60e01b60648201526084016103e9565b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c78260405161049691815260200190565b60405180910390a25050565b336001600160a01b037f0000000000000000000000007829e5ca4286df66e9f58160544097db517a3b8c161461051a5760405162461bcd60e51b815260206004820152601960248201527f4178656c6172416461707465722f6e6f742d676174657761790000000000000060448201526064016103e9565b7f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a56001600160a01b0316631c92115f6040518060400160405280600a81526020016963656e7472696675676560b01b8152506040518060600160405280602a8152602001610e75602a913985856040518563ffffffff1660e01b81526004016105a69493929190610d4a565b5f604051808303815f87803b1580156105bd575f80fd5b505af11580156105cf573d5f803e3d5ffd5b505050505050565b7f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a0827126001600160a01b0316630c93e3bb34306040518060400160405280600a81526020016963656e7472696675676560b01b8152506040518060600160405280602a8152602001610e75602a91398888886040518863ffffffff1660e01b815260040161066896959493929190610d8e565b5f604051808303818588803b15801561067f575f80fd5b505af1158015610691573d5f803e3d5ffd5b5050505050505050565b7f60725fbe70c95e859120491e0e917eae7a53602d7c28ca502ed6dbcd335f5d9c86866040516106cc929190610df3565b6040518091039020146107215760405162461bcd60e51b815260206004820152601b60248201527f4178656c6172416461707465722f696e76616c69642d636861696e000000000060448201526064016103e9565b7ffdedca3e459e0945c9db089231054c40476ec56eea89c63a83abc1195ba62f288484604051610752929190610df3565b6040518091039020146107a75760405162461bcd60e51b815260206004820152601d60248201527f4178656c6172416461707465722f696e76616c69642d6164647265737300000060448201526064016103e9565b7f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a56001600160a01b0316635f6970c3888888888888886040516107eb929190610df3565b6040519081900381207fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16825261082e969594939291600401610e02565b6020604051808303815f875af115801561084a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086e9190610e42565b6108cf5760405162461bcd60e51b815260206004820152602c60248201527f4178656c6172416461707465722f6e6f742d617070726f7665642d62792d617860448201526b656c61722d6761746577617960a01b60648201526084016103e9565b604051635fa45e5b60e11b81526001600160a01b037f0000000000000000000000007829e5ca4286df66e9f58160544097db517a3b8c169063bf48bcb69061091d9085908590600401610e61565b5f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b5050505050505050505050565b335f908152602081905260409020546001146109a75760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016103e9565b6001600160a01b0381165f8181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6040518060600160405280602a8152602001610e75602a913981565b335f90815260208190526040902054600114610a5b5760405162461bcd60e51b8152602060048201526013602482015272105d5d1a0bdb9bdd0b585d5d1a1bdc9a5e9959606a1b60448201526064016103e9565b6001600160a01b0381165f81815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b5f8083601f840112610aae575f80fd5b50813567ffffffffffffffff811115610ac5575f80fd5b602083019150836020828501011115610adc575f80fd5b9250929050565b5f805f60408486031215610af5575f80fd5b833567ffffffffffffffff811115610b0b575f80fd5b610b1786828701610a9e565b909790965060209590950135949350505050565b5f8060408385031215610b3c575f80fd5b50508035926020909101359150565b5f8060208385031215610b5c575f80fd5b823567ffffffffffffffff811115610b72575f80fd5b610b7e85828601610a9e565b90969095509350505050565b80356001600160a01b0381168114610ba0575f80fd5b919050565b5f805f60408486031215610bb7575f80fd5b833567ffffffffffffffff811115610bcd575f80fd5b610bd986828701610a9e565b9094509250610bec905060208501610b8a565b90509250925092565b5f805f805f805f6080888a031215610c0b575f80fd5b87359650602088013567ffffffffffffffff811115610c28575f80fd5b610c348a828b01610a9e565b909750955050604088013567ffffffffffffffff811115610c53575f80fd5b610c5f8a828b01610a9e565b909550935050606088013567ffffffffffffffff811115610c7e575f80fd5b610c8a8a828b01610a9e565b989b979a50959850939692959293505050565b5f60208284031215610cad575f80fd5b610cb682610b8a565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cb66020830184610cbd565b80820180821115610d1c57634e487b7160e01b5f52601160045260245ffd5b92915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f610d5c6060830187610cbd565b8281036020840152610d6e8187610cbd565b90508281036040840152610d83818587610d22565b979650505050505050565b6001600160a01b038716815260a060208201525f610daf60a0830188610cbd565b8281036040840152610dc18188610cbd565b90508281036060840152610dd6818688610d22565b9150506001600160a01b0383166080830152979650505050505050565b818382375f9101908152919050565b868152608060208201525f610e1b608083018789610d22565b8281036040840152610e2e818688610d22565b915050826060830152979650505050505050565b5f60208284031215610e52575f80fd5b81518015158114610cb6575f80fd5b602081525f610391602083018486610d2256fe307863313735376336413035363345333730343838363941333432644630363531623946323637653431a2646970667358221220fdd0cf38803d26b1b995babae553caa03c650bc3667cc7806f6a1e883035e88964736f6c634300081a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007829e5ca4286df66e9f58160544097db517a3b8c0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a50000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712

-----Decoded View---------------
Arg [0] : gateway_ (address): 0x7829E5ca4286Df66e9F58160544097dB517a3B8c
Arg [1] : axelarGateway_ (address): 0x4F4495243837681061C4743b74B3eEdf548D56A5
Arg [2] : axelarGasService_ (address): 0x2d5d7d31F671F86C782533cc367F14109a082712

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007829e5ca4286df66e9f58160544097db517a3b8c
Arg [1] : 0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a5
Arg [2] : 0000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.