Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60e06040 | 18121228 | 296 days ago | IN | Create: GmpHelper | 0 ETH | 0.02409197 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GmpHelper
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 5000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: Hadron Labs // SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.19; import { IAxelarGateway } from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol"; import { IAxelarGasService } from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IERC20Permit } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; interface IWSTETH is IERC20, IERC20Permit {} /// @title GMP helper which makes it easier to call Lido Satellite on Neutron /// @author Murad Karammaev /// @notice Default flow (without a GMP Helper) is to: /// 1. tx approve() on wstETH contract /// 2. tx payNativeGasForContractCallWithToken() on Axelar Gas Service /// 3. tx callContractWithToken() on Axelar gateway /// This contract simplifies it to: /// 1. tx approve() on wstETH contract /// 2. tx send() on GMP Helper /// It is also possible to simplify it further if user wallet supports EIP-712 signing: /// 1. tx sendWithPermit() on GMP Helper contract GmpHelper { IAxelarGasService public immutable GAS_SERVICE; IAxelarGateway public immutable GATEWAY; IWSTETH public immutable WST_ETH; // Address of Lido Satellite contract on Neutron, replace it with a real address before deploying string public constant LIDO_SATELLITE = "neutron1ug740qrkquxzrk2hh29qrlx3sktkfml3je7juusc2te7xmvsscns0n2wry"; string public constant DESTINATION_CHAIN = "neutron"; string public constant WSTETH_SYMBOL = "wstETH"; /// @notice Construct GMP Helper /// @param axelarGateway Address of Axelar Gateway contract /// @param axelarGasReceiver Address of Axelar Gas Service contract /// @param wstEth Address of Wrapped Liquid Staked Ether contract constructor( address axelarGateway, address axelarGasReceiver, address wstEth ) { GAS_SERVICE = IAxelarGasService(axelarGasReceiver); GATEWAY = IAxelarGateway(axelarGateway); WST_ETH = IWSTETH(wstEth); } /// @notice Send `amount` of wstETH to `receiver` on Neutron. /// Requires allowance on wstETH contract. /// Requires gas fee in ETH. /// @param receiver Address on Neutron which shall receive canonical wstETH /// @param amount Amount of wstETH-wei to send to `receiver` /// @param gasRefundAddress Address which receives ETH refunds from Axelar, /// use 0 to default to msg.sender function send( string calldata receiver, uint256 amount, address gasRefundAddress ) external payable { _send(receiver, amount, gasRefundAddress); } /// @notice Send `amount` of wstETH to `receiver` on Neutron, using EIP-2612 permit. /// Requires gas fee in ETH. /// @param receiver Address on Neutron which shall receive canonical wstETH /// @param amount Amount of wstETH-wei to send to `receiver` /// @param deadline EIP-2612 permit signature deadline /// @param v Value `v` of EIP-2612 permit signature /// @param r Value `r` of EIP-2612 permit signature /// @param s Value `s` of EIP-2612 permit signature /// @param gasRefundAddress Address which receives ETH refunds from Axelar, /// use 0 to default to msg.sender function sendWithPermit( string calldata receiver, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address gasRefundAddress ) external payable { WST_ETH.permit(msg.sender, address(this), amount, deadline, v, r, s); _send(receiver, amount, gasRefundAddress); } function _send( string calldata receiver, uint256 amount, address gasRefundAddress ) internal { // 1. withdraw wstETH from caller and approve it for Axelar Gateway. // Gateway will attempt to transfer funds from address(this), hence we // are forced to withdraw them from caller account first. WST_ETH.transferFrom(msg.sender, address(this), amount); WST_ETH.approve(address(GATEWAY), amount); // 2. Generate GMP payload bytes memory payload = _encodeGmpPayload(receiver); // 3. Pay for gas GAS_SERVICE.payNativeGasForContractCallWithToken{value: msg.value}( address(this), DESTINATION_CHAIN, LIDO_SATELLITE, payload, WSTETH_SYMBOL, amount, gasRefundAddress == address(0) ? msg.sender : gasRefundAddress ); // 4. Make GMP call GATEWAY.callContractWithToken( DESTINATION_CHAIN, LIDO_SATELLITE, payload, WSTETH_SYMBOL, amount ); } function _encodeGmpPayload( string memory targetReceiver ) internal pure returns (bytes memory) { require(bytes(targetReceiver).length > 8, "receiver address is too short"); // len("neutron1") == 8 require(bytes(targetReceiver).length <= 256, "receiver address is too long"); bytes memory prefix = bytes("neutron1"); for (uint8 i = 0; i < prefix.length; i++) { require(bytes(targetReceiver)[i] == prefix[i], "receiver: incorrect prefix"); } bytes memory argValues = abi.encode( targetReceiver ); string[] memory argumentNameArray = new string[](1); argumentNameArray[0] = "receiver"; string[] memory abiTypeArray = new string[](1); abiTypeArray[0] = "string"; bytes memory gmpPayload; gmpPayload = abi.encode( "mint", argumentNameArray, abiTypeArray, argValues ); return abi.encodePacked( bytes4(0x00000001), gmpPayload ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // This should be owned by the microservice that is paying for gas. interface IAxelarGasService { error NothingReceived(); error InvalidAddress(); error NotCollector(); error InvalidAmounts(); event GasPaidForContractCall( address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, address gasToken, uint256 gasFeeAmount, address refundAddress ); event GasPaidForContractCallWithToken( address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress ); event NativeGasPaidForContractCall( address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, uint256 gasFeeAmount, address refundAddress ); event NativeGasPaidForContractCallWithToken( address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, uint256 gasFeeAmount, address refundAddress ); event GasPaidForExpressCallWithToken( address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress ); event NativeGasPaidForExpressCallWithToken( address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, uint256 gasFeeAmount, address refundAddress ); event GasAdded( bytes32 indexed txHash, uint256 indexed logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress ); event NativeGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress); event ExpressGasAdded( bytes32 indexed txHash, uint256 indexed logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress ); event NativeExpressGasAdded( bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress ); // This is called on the source chain before calling the gateway to execute a remote contract. function payGasForContractCall( address sender, string calldata destinationChain, string calldata destinationAddress, bytes calldata payload, address gasToken, uint256 gasFeeAmount, address refundAddress ) external; // This is called on the source chain before calling the gateway to execute a remote contract. function payGasForContractCallWithToken( address sender, string calldata destinationChain, string calldata destinationAddress, bytes calldata payload, string calldata symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress ) external; // This is called on the source chain before calling the gateway to execute a remote contract. function payNativeGasForContractCall( address sender, string calldata destinationChain, string calldata destinationAddress, bytes calldata payload, address refundAddress ) external payable; // This is called on the source chain before calling the gateway to execute a remote contract. function payNativeGasForContractCallWithToken( address sender, string calldata destinationChain, string calldata destinationAddress, bytes calldata payload, string calldata symbol, uint256 amount, address refundAddress ) external payable; // This is called on the source chain before calling the gateway to execute a remote contract. function payGasForExpressCallWithToken( address sender, string calldata destinationChain, string calldata destinationAddress, bytes calldata payload, string calldata symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress ) external; // This is called on the source chain before calling the gateway to execute a remote contract. function payNativeGasForExpressCallWithToken( address sender, string calldata destinationChain, string calldata destinationAddress, bytes calldata payload, string calldata symbol, uint256 amount, address refundAddress ) external payable; function addGas( bytes32 txHash, uint256 txIndex, address gasToken, uint256 gasFeeAmount, address refundAddress ) external; function addNativeGas( bytes32 txHash, uint256 logIndex, address refundAddress ) external payable; function addExpressGas( bytes32 txHash, uint256 txIndex, address gasToken, uint256 gasFeeAmount, address refundAddress ) external; function addNativeExpressGas( bytes32 txHash, uint256 logIndex, address refundAddress ) external payable; function collectFees( address payable receiver, address[] calldata tokens, uint256[] calldata amounts ) external; function refund( address payable receiver, address token, uint256 amount ) external; function gasCollector() external returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IAxelarGateway { /**********\ |* Errors *| \**********/ error NotSelf(); error NotProxy(); error InvalidCodeHash(); error SetupFailed(); error InvalidAuthModule(); error InvalidTokenDeployer(); error InvalidAmount(); error InvalidChainId(); error InvalidCommands(); error TokenDoesNotExist(string symbol); error TokenAlreadyExists(string symbol); error TokenDeployFailed(string symbol); error TokenContractDoesNotExist(address token); error BurnFailed(string symbol); error MintFailed(string symbol); error InvalidSetMintLimitsParams(); error ExceedMintLimit(string symbol); /**********\ |* Events *| \**********/ event TokenSent( address indexed sender, string destinationChain, string destinationAddress, string symbol, uint256 amount ); event ContractCall( address indexed sender, string destinationChain, string destinationContractAddress, bytes32 indexed payloadHash, bytes payload ); event ContractCallWithToken( address indexed sender, string destinationChain, string destinationContractAddress, bytes32 indexed payloadHash, bytes payload, string symbol, uint256 amount ); event Executed(bytes32 indexed commandId); event TokenDeployed(string symbol, address tokenAddresses); event ContractCallApproved( bytes32 indexed commandId, string sourceChain, string sourceAddress, address indexed contractAddress, bytes32 indexed payloadHash, bytes32 sourceTxHash, uint256 sourceEventIndex ); event ContractCallApprovedWithMint( bytes32 indexed commandId, string sourceChain, string sourceAddress, address indexed contractAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, bytes32 sourceTxHash, uint256 sourceEventIndex ); event TokenMintLimitUpdated(string symbol, uint256 limit); event OperatorshipTransferred(bytes newOperatorsData); event Upgraded(address indexed implementation); /********************\ |* Public Functions *| \********************/ function sendToken( string calldata destinationChain, string calldata destinationAddress, string calldata symbol, uint256 amount ) external; function callContract( string calldata destinationChain, string calldata contractAddress, bytes calldata payload ) external; function callContractWithToken( string calldata destinationChain, string calldata contractAddress, bytes calldata payload, string calldata symbol, uint256 amount ) external; function isContractCallApproved( bytes32 commandId, string calldata sourceChain, string calldata sourceAddress, address contractAddress, bytes32 payloadHash ) external view returns (bool); function isContractCallAndMintApproved( bytes32 commandId, string calldata sourceChain, string calldata sourceAddress, address contractAddress, bytes32 payloadHash, string calldata symbol, uint256 amount ) external view returns (bool); function validateContractCall( bytes32 commandId, string calldata sourceChain, string calldata sourceAddress, bytes32 payloadHash ) external returns (bool); function validateContractCallAndMint( bytes32 commandId, string calldata sourceChain, string calldata sourceAddress, bytes32 payloadHash, string calldata symbol, uint256 amount ) external returns (bool); /***********\ |* Getters *| \***********/ function authModule() external view returns (address); function tokenDeployer() external view returns (address); function tokenMintLimit(string memory symbol) external view returns (uint256); function tokenMintAmount(string memory symbol) external view returns (uint256); function allTokensFrozen() external view returns (bool); function implementation() external view returns (address); function tokenAddresses(string memory symbol) external view returns (address); function tokenFrozen(string memory symbol) external view returns (bool); function isCommandExecuted(bytes32 commandId) external view returns (bool); function adminEpoch() external view returns (uint256); function adminThreshold(uint256 epoch) external view returns (uint256); function admins(uint256 epoch) external view returns (address[] memory); /*******************\ |* Admin Functions *| \*******************/ function setTokenMintLimits(string[] calldata symbols, uint256[] calldata limits) external; function upgrade( address newImplementation, bytes32 newImplementationCodeHash, bytes calldata setupParams ) external; /**********************\ |* External Functions *| \**********************/ function setup(bytes calldata params) external; function execute(bytes calldata input) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
{ "optimizer": { "enabled": true, "runs": 5000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"axelarGateway","type":"address"},{"internalType":"address","name":"axelarGasReceiver","type":"address"},{"internalType":"address","name":"wstEth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DESTINATION_CHAIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_SERVICE","outputs":[{"internalType":"contract IAxelarGasService","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GATEWAY","outputs":[{"internalType":"contract IAxelarGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO_SATELLITE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WSTETH_SYMBOL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WST_ETH","outputs":[{"internalType":"contract IWSTETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"receiver","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"gasRefundAddress","type":"address"}],"name":"send","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"receiver","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"gasRefundAddress","type":"address"}],"name":"sendWithPermit","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60e060405234801561001057600080fd5b5060405161116038038061116083398101604081905261002f91610068565b6001600160a01b0391821660805291811660a0521660c0526100ab565b80516001600160a01b038116811461006357600080fd5b919050565b60008060006060848603121561007d57600080fd5b6100868461004c565b92506100946020850161004c565b91506100a26040850161004c565b90509250925092565b60805160a05160c05161105d6101036000396000818161015f015281816102ad0152818161036f015261045e01526000818160f10152818161042f015261064d0152600081816101a80152610511015261105d6000f3fe60806040526004361061007b5760003560e01c80638571fdcb1161004e5780638571fdcb14610181578063997f35eb14610196578063c1cab97c146101ca578063d04be5011461021357600080fd5b80630d114ef814610080578063338c5371146100df57806349e102e2146101385780635664cb481461014d575b600080fd5b34801561008c57600080fd5b506100c96040518060400160405280600781526020017f6e657574726f6e0000000000000000000000000000000000000000000000000081525081565b6040516100d69190610bd8565b60405180910390f35b3480156100eb57600080fd5b506101137f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b61014b610146366004610c64565b610226565b005b34801561015957600080fd5b506101137f000000000000000000000000000000000000000000000000000000000000000081565b34801561018d57600080fd5b506100c9610238565b3480156101a257600080fd5b506101137f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d657600080fd5b506100c96040518060400160405280600681526020017f777374455448000000000000000000000000000000000000000000000000000081525081565b61014b610221366004610cc1565b610254565b61023284848484610334565b50505050565b604051806080016040528060428152602001610fe66042913981565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d505accf9060e401600060405180830381600087803b15801561030657600080fd5b505af115801561031a573d6000803e3d6000fd5b5050505061032a88888884610334565b5050505050505050565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af11580156103cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f19190610d53565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156104a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cb9190610d53565b50600061050d85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077f92505050565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c62c200234306040518060400160405280600781526020017f6e657574726f6e00000000000000000000000000000000000000000000000000815250604051806080016040528060428152602001610fe66042913960408051808201909152600681527f7773744554480000000000000000000000000000000000000000000000000000602082015287908a73ffffffffffffffffffffffffffffffffffffffff8b16156105f5578a6105f7565b335b6040518963ffffffff1660e01b81526004016106199796959493929190610d75565b6000604051808303818588803b15801561063257600080fd5b505af1158015610646573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b54170846040518060400160405280600781526020017f6e657574726f6e00000000000000000000000000000000000000000000000000815250604051806080016040528060428152602001610fe660429139604080518082018252600681527f7773744554480000000000000000000000000000000000000000000000000000602082015290517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815261074693929187918a90600401610dfc565b600060405180830381600087803b15801561076057600080fd5b505af1158015610774573d6000803e3d6000fd5b505050505050505050565b606060088251116107f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7265636569766572206164647265737320697320746f6f2073686f727400000060448201526064015b60405180910390fd5b6101008251111561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f7265636569766572206164647265737320697320746f6f206c6f6e670000000060448201526064016107e8565b60408051808201909152600881527f6e657574726f6e31000000000000000000000000000000000000000000000000602082015260005b81518160ff16101561099857818160ff16815181106108b6576108b6610e5c565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848260ff16815181106108f8576108f8610e5c565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f72656365697665723a20696e636f72726563742070726566697800000000000060448201526064016107e8565b8061099081610e8b565b915050610895565b506000836040516020016109ac9190610bd8565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181526001808452838301909252925060009190816020015b60608152602001906001900390816109ed5790505090506040518060400160405280600881526020017f726563656976657200000000000000000000000000000000000000000000000081525081600081518110610a4d57610a4d610e5c565b6020908102919091010152604080516001808252818301909252600091816020015b6060815260200190600190039081610a6f5790505090506040518060400160405280600681526020017f737472696e67000000000000000000000000000000000000000000000000000081525081600081518110610acf57610acf610e5c565b60200260200101819052506060828285604051602001610af193929190610f26565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290529150610b4f907c0100000000000000000000000000000000000000000000000000000000908390602001610f9d565b60405160208183030381529060405295505050505050919050565b60005b83811015610b85578181015183820152602001610b6d565b50506000910152565b60008151808452610ba6816020860160208601610b6a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610beb6020830184610b8e565b9392505050565b60008083601f840112610c0457600080fd5b50813567ffffffffffffffff811115610c1c57600080fd5b602083019150836020828501011115610c3457600080fd5b9250929050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c5f57600080fd5b919050565b60008060008060608587031215610c7a57600080fd5b843567ffffffffffffffff811115610c9157600080fd5b610c9d87828801610bf2565b90955093505060208501359150610cb660408601610c3b565b905092959194509250565b60008060008060008060008060e0898b031215610cdd57600080fd5b883567ffffffffffffffff811115610cf457600080fd5b610d008b828c01610bf2565b9099509750506020890135955060408901359450606089013560ff81168114610d2857600080fd5b93506080890135925060a08901359150610d4460c08a01610c3b565b90509295985092959890939650565b600060208284031215610d6557600080fd5b81518015158114610beb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808a16835260e06020840152610da560e084018a610b8e565b8381036040850152610db7818a610b8e565b90508381036060850152610dcb8189610b8e565b90508381036080850152610ddf8188610b8e565b60a0850196909652509290921660c0909101525095945050505050565b60a081526000610e0f60a0830188610b8e565b8281036020840152610e218188610b8e565b90508281036040840152610e358187610b8e565b90508281036060840152610e498186610b8e565b9150508260808301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103610ec8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60010192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015610f19578284038952610f07848351610b8e565b98850198935090840190600101610eef565b5091979650505050505050565b60808152600460808201527f6d696e740000000000000000000000000000000000000000000000000000000060a082015260c060208201526000610f6d60c0830186610ed1565b8281036040840152610f7f8186610ed1565b90508281036060840152610f938185610b8e565b9695505050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251610fd7816004850160208701610b6a565b91909101600401939250505056fe6e657574726f6e31756737343071726b7175787a726b326868323971726c7833736b746b666d6c336a65376a7575736332746537786d767373636e73306e32777279a2646970667358221220f57bb0d3cbcd89ece1f04b408d521b161e694e7ed23bc3b894542e2cf712f5ae64736f6c634300081300330000000000000000000000004f4495243837681061c4743b74b3eedf548d56a50000000000000000000000002d5d7d31f671f86c782533cc367f14109a0827120000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
Deployed Bytecode
0x60806040526004361061007b5760003560e01c80638571fdcb1161004e5780638571fdcb14610181578063997f35eb14610196578063c1cab97c146101ca578063d04be5011461021357600080fd5b80630d114ef814610080578063338c5371146100df57806349e102e2146101385780635664cb481461014d575b600080fd5b34801561008c57600080fd5b506100c96040518060400160405280600781526020017f6e657574726f6e0000000000000000000000000000000000000000000000000081525081565b6040516100d69190610bd8565b60405180910390f35b3480156100eb57600080fd5b506101137f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a581565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b61014b610146366004610c64565b610226565b005b34801561015957600080fd5b506101137f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca081565b34801561018d57600080fd5b506100c9610238565b3480156101a257600080fd5b506101137f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271281565b3480156101d657600080fd5b506100c96040518060400160405280600681526020017f777374455448000000000000000000000000000000000000000000000000000081525081565b61014b610221366004610cc1565b610254565b61023284848484610334565b50505050565b604051806080016040528060428152602001610fe66042913981565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c481018390527f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca073ffffffffffffffffffffffffffffffffffffffff169063d505accf9060e401600060405180830381600087803b15801561030657600080fd5b505af115801561031a573d6000803e3d6000fd5b5050505061032a88888884610334565b5050505050505050565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390527f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af11580156103cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f19190610d53565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a581166004830152602482018490527f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0169063095ea7b3906044016020604051808303816000875af11580156104a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cb9190610d53565b50600061050d85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077f92505050565b90507f0000000000000000000000002d5d7d31f671f86c782533cc367f14109a08271273ffffffffffffffffffffffffffffffffffffffff1663c62c200234306040518060400160405280600781526020017f6e657574726f6e00000000000000000000000000000000000000000000000000815250604051806080016040528060428152602001610fe66042913960408051808201909152600681527f7773744554480000000000000000000000000000000000000000000000000000602082015287908a73ffffffffffffffffffffffffffffffffffffffff8b16156105f5578a6105f7565b335b6040518963ffffffff1660e01b81526004016106199796959493929190610d75565b6000604051808303818588803b15801561063257600080fd5b505af1158015610646573d6000803e3d6000fd5b50505050507f0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a573ffffffffffffffffffffffffffffffffffffffff1663b54170846040518060400160405280600781526020017f6e657574726f6e00000000000000000000000000000000000000000000000000815250604051806080016040528060428152602001610fe660429139604080518082018252600681527f7773744554480000000000000000000000000000000000000000000000000000602082015290517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815261074693929187918a90600401610dfc565b600060405180830381600087803b15801561076057600080fd5b505af1158015610774573d6000803e3d6000fd5b505050505050505050565b606060088251116107f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7265636569766572206164647265737320697320746f6f2073686f727400000060448201526064015b60405180910390fd5b6101008251111561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f7265636569766572206164647265737320697320746f6f206c6f6e670000000060448201526064016107e8565b60408051808201909152600881527f6e657574726f6e31000000000000000000000000000000000000000000000000602082015260005b81518160ff16101561099857818160ff16815181106108b6576108b6610e5c565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848260ff16815181106108f8576108f8610e5c565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f72656365697665723a20696e636f72726563742070726566697800000000000060448201526064016107e8565b8061099081610e8b565b915050610895565b506000836040516020016109ac9190610bd8565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181526001808452838301909252925060009190816020015b60608152602001906001900390816109ed5790505090506040518060400160405280600881526020017f726563656976657200000000000000000000000000000000000000000000000081525081600081518110610a4d57610a4d610e5c565b6020908102919091010152604080516001808252818301909252600091816020015b6060815260200190600190039081610a6f5790505090506040518060400160405280600681526020017f737472696e67000000000000000000000000000000000000000000000000000081525081600081518110610acf57610acf610e5c565b60200260200101819052506060828285604051602001610af193929190610f26565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290529150610b4f907c0100000000000000000000000000000000000000000000000000000000908390602001610f9d565b60405160208183030381529060405295505050505050919050565b60005b83811015610b85578181015183820152602001610b6d565b50506000910152565b60008151808452610ba6816020860160208601610b6a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610beb6020830184610b8e565b9392505050565b60008083601f840112610c0457600080fd5b50813567ffffffffffffffff811115610c1c57600080fd5b602083019150836020828501011115610c3457600080fd5b9250929050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c5f57600080fd5b919050565b60008060008060608587031215610c7a57600080fd5b843567ffffffffffffffff811115610c9157600080fd5b610c9d87828801610bf2565b90955093505060208501359150610cb660408601610c3b565b905092959194509250565b60008060008060008060008060e0898b031215610cdd57600080fd5b883567ffffffffffffffff811115610cf457600080fd5b610d008b828c01610bf2565b9099509750506020890135955060408901359450606089013560ff81168114610d2857600080fd5b93506080890135925060a08901359150610d4460c08a01610c3b565b90509295985092959890939650565b600060208284031215610d6557600080fd5b81518015158114610beb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808a16835260e06020840152610da560e084018a610b8e565b8381036040850152610db7818a610b8e565b90508381036060850152610dcb8189610b8e565b90508381036080850152610ddf8188610b8e565b60a0850196909652509290921660c0909101525095945050505050565b60a081526000610e0f60a0830188610b8e565b8281036020840152610e218188610b8e565b90508281036040840152610e358187610b8e565b90508281036060840152610e498186610b8e565b9150508260808301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103610ec8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60010192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015610f19578284038952610f07848351610b8e565b98850198935090840190600101610eef565b5091979650505050505050565b60808152600460808201527f6d696e740000000000000000000000000000000000000000000000000000000060a082015260c060208201526000610f6d60c0830186610ed1565b8281036040840152610f7f8186610ed1565b90508281036060840152610f938185610b8e565b9695505050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251610fd7816004850160208701610b6a565b91909101600401939250505056fe6e657574726f6e31756737343071726b7175787a726b326868323971726c7833736b746b666d6c336a65376a7575736332746537786d767373636e73306e32777279a2646970667358221220f57bb0d3cbcd89ece1f04b408d521b161e694e7ed23bc3b894542e2cf712f5ae64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a50000000000000000000000002d5d7d31f671f86c782533cc367f14109a0827120000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
-----Decoded View---------------
Arg [0] : axelarGateway (address): 0x4F4495243837681061C4743b74B3eEdf548D56A5
Arg [1] : axelarGasReceiver (address): 0x2d5d7d31F671F86C782533cc367F14109a082712
Arg [2] : wstEth (address): 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004f4495243837681061c4743b74b3eedf548d56a5
Arg [1] : 0000000000000000000000002d5d7d31f671f86c782533cc367f14109a082712
Arg [2] : 0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.