Source Code
Overview
DEV Balance
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Name:
SenderReceiver
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbase.moonscan.io on 2024-02-20
*/
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IOwnable.sol
pragma solidity ^0.8.0;
/**
* @title IOwnable Interface
* @notice IOwnable is an interface that abstracts the implementation of a
* contract with ownership control features. It's commonly used in upgradable
* contracts and includes the functionality to get current owner, transfer
* ownership, and propose and accept ownership.
*/
interface IOwnable {
error NotOwner();
error InvalidOwner();
error InvalidOwnerAddress();
event OwnershipTransferStarted(address indexed newOwner);
event OwnershipTransferred(address indexed newOwner);
/**
* @notice Returns the current owner of the contract.
* @return address The address of the current owner
*/
function owner() external view returns (address);
/**
* @notice Returns the address of the pending owner of the contract.
* @return address The address of the pending owner
*/
function pendingOwner() external view returns (address);
/**
* @notice Transfers ownership of the contract to a new address
* @param newOwner The address to transfer ownership to
*/
function transferOwnership(address newOwner) external;
/**
* @notice Proposes to transfer the contract's ownership to a new address.
* The new owner needs to accept the ownership explicitly.
* @param newOwner The address to transfer ownership to
*/
function proposeOwnership(address newOwner) external;
/**
* @notice Transfers ownership to the pending owner.
* @dev Can only be called by the pending owner
*/
function acceptOwnership() external;
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IContractIdentifier.sol
pragma solidity ^0.8.0;
// General interface for upgradable contracts
interface IContractIdentifier {
/**
* @notice Returns the contract ID. It can be used as a check during upgrades.
* @dev Meant to be overridden in derived contracts.
* @return bytes32 The contract ID
*/
function contractId() external pure returns (bytes32);
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IImplementation.sol
pragma solidity ^0.8.0;
interface IImplementation is IContractIdentifier {
error NotProxy();
function setup(bytes calldata data) external;
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IUpgradable.sol
pragma solidity ^0.8.0;
// General interface for upgradable contracts
interface IUpgradable is IOwnable, IImplementation {
error InvalidCodeHash();
error InvalidImplementation();
error SetupFailed();
event Upgraded(address indexed newImplementation);
function implementation() external view returns (address);
function upgrade(
address newImplementation,
bytes32 newImplementationCodeHash,
bytes calldata params
) external;
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol
pragma solidity ^0.8.0;
/**
* @title IAxelarGasService Interface
* @notice This is an interface for the AxelarGasService contract which manages gas payments
* and refunds for cross-chain communication on the Axelar network.
* @dev This interface inherits IUpgradable
*/
interface IAxelarGasService is IUpgradable {
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 GasPaidForExpressCall(
address indexed sourceAddress,
string destinationChain,
string destinationAddress,
bytes32 indexed payloadHash,
address gasToken,
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 NativeGasPaidForExpressCall(
address indexed sourceAddress,
string destinationChain,
string destinationAddress,
bytes32 indexed payloadHash,
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
);
event Refunded(
bytes32 indexed txHash,
uint256 indexed logIndex,
address payable receiver,
address token,
uint256 amount
);
/**
* @notice Pay for gas using ERC20 tokens for a contract call on a destination chain.
* @dev This function is called on the source chain before calling the gateway to execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call
* @param gasToken The address of the ERC20 token used to pay for gas
* @param gasFeeAmount The amount of tokens to pay for gas
* @param refundAddress The address where refunds, if any, should be sent
*/
function payGasForContractCall(
address sender,
string calldata destinationChain,
string calldata destinationAddress,
bytes calldata payload,
address gasToken,
uint256 gasFeeAmount,
address refundAddress
) external;
/**
* @notice Pay for gas using ERC20 tokens for a contract call with tokens on a destination chain.
* @dev This function is called on the source chain before calling the gateway to execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call with tokens will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call with tokens
* @param symbol The symbol of the token to be sent with the call
* @param amount The amount of tokens to be sent with the call
* @param gasToken The address of the ERC20 token used to pay for gas
* @param gasFeeAmount The amount of tokens to pay for gas
* @param refundAddress The address where refunds, if any, should be sent
*/
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;
/**
* @notice Pay for gas using native currency for a contract call on a destination chain.
* @dev This function is called on the source chain before calling the gateway to execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call
* @param refundAddress The address where refunds, if any, should be sent
*/
function payNativeGasForContractCall(
address sender,
string calldata destinationChain,
string calldata destinationAddress,
bytes calldata payload,
address refundAddress
) external payable;
/**
* @notice Pay for gas using native currency for a contract call with tokens on a destination chain.
* @dev This function is called on the source chain before calling the gateway to execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call with tokens will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call with tokens
* @param symbol The symbol of the token to be sent with the call
* @param amount The amount of tokens to be sent with the call
* @param refundAddress The address where refunds, if any, should be sent
*/
function payNativeGasForContractCallWithToken(
address sender,
string calldata destinationChain,
string calldata destinationAddress,
bytes calldata payload,
string calldata symbol,
uint256 amount,
address refundAddress
) external payable;
/**
* @notice Pay for gas using ERC20 tokens for an express contract call on a destination chain.
* @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call
* @param gasToken The address of the ERC20 token used to pay for gas
* @param gasFeeAmount The amount of tokens to pay for gas
* @param refundAddress The address where refunds, if any, should be sent
*/
function payGasForExpressCall(
address sender,
string calldata destinationChain,
string calldata destinationAddress,
bytes calldata payload,
address gasToken,
uint256 gasFeeAmount,
address refundAddress
) external;
/**
* @notice Pay for gas using ERC20 tokens for an express contract call with tokens on a destination chain.
* @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call with tokens will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call with tokens
* @param symbol The symbol of the token to be sent with the call
* @param amount The amount of tokens to be sent with the call
* @param gasToken The address of the ERC20 token used to pay for gas
* @param gasFeeAmount The amount of tokens to pay for gas
* @param refundAddress The address where refunds, if any, should be sent
*/
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;
/**
* @notice Pay for gas using native currency for an express contract call on a destination chain.
* @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call
* @param refundAddress The address where refunds, if any, should be sent
*/
function payNativeGasForExpressCall(
address sender,
string calldata destinationChain,
string calldata destinationAddress,
bytes calldata payload,
address refundAddress
) external payable;
/**
* @notice Pay for gas using native currency for an express contract call with tokens on a destination chain.
* @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
* @param sender The address making the payment
* @param destinationChain The target chain where the contract call with tokens will be made
* @param destinationAddress The target address on the destination chain
* @param payload Data payload for the contract call with tokens
* @param symbol The symbol of the token to be sent with the call
* @param amount The amount of tokens to be sent with the call
* @param refundAddress The address where refunds, if any, should be sent
*/
function payNativeGasForExpressCallWithToken(
address sender,
string calldata destinationChain,
string calldata destinationAddress,
bytes calldata payload,
string calldata symbol,
uint256 amount,
address refundAddress
) external payable;
/**
* @notice Add additional gas payment using ERC20 tokens after initiating a cross-chain call.
* @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
* @param txHash The transaction hash of the cross-chain call
* @param logIndex The log index for the cross-chain call
* @param gasToken The ERC20 token address used to add gas
* @param gasFeeAmount The amount of tokens to add as gas
* @param refundAddress The address where refunds, if any, should be sent
*/
function addGas(
bytes32 txHash,
uint256 logIndex,
address gasToken,
uint256 gasFeeAmount,
address refundAddress
) external;
/**
* @notice Add additional gas payment using native currency after initiating a cross-chain call.
* @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
* @param txHash The transaction hash of the cross-chain call
* @param logIndex The log index for the cross-chain call
* @param refundAddress The address where refunds, if any, should be sent
*/
function addNativeGas(
bytes32 txHash,
uint256 logIndex,
address refundAddress
) external payable;
/**
* @notice Add additional gas payment using ERC20 tokens after initiating an express cross-chain call.
* @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
* @param txHash The transaction hash of the cross-chain call
* @param logIndex The log index for the cross-chain call
* @param gasToken The ERC20 token address used to add gas
* @param gasFeeAmount The amount of tokens to add as gas
* @param refundAddress The address where refunds, if any, should be sent
*/
function addExpressGas(
bytes32 txHash,
uint256 logIndex,
address gasToken,
uint256 gasFeeAmount,
address refundAddress
) external;
/**
* @notice Add additional gas payment using native currency after initiating an express cross-chain call.
* @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
* @param txHash The transaction hash of the cross-chain call
* @param logIndex The log index for the cross-chain call
* @param refundAddress The address where refunds, if any, should be sent
*/
function addNativeExpressGas(
bytes32 txHash,
uint256 logIndex,
address refundAddress
) external payable;
/**
* @notice Allows the gasCollector to collect accumulated fees from the contract.
* @dev Use address(0) as the token address for native currency.
* @param receiver The address to receive the collected fees
* @param tokens Array of token addresses to be collected
* @param amounts Array of amounts to be collected for each respective token address
*/
function collectFees(
address payable receiver,
address[] calldata tokens,
uint256[] calldata amounts
) external;
/**
* @notice Refunds gas payment to the receiver in relation to a specific cross-chain transaction.
* @dev Only callable by the gasCollector.
* @dev Use address(0) as the token address to refund native currency.
* @param txHash The transaction hash of the cross-chain call
* @param logIndex The log index for the cross-chain call
* @param receiver The address to receive the refund
* @param token The token address to be refunded
* @param amount The amount to refund
*/
function refund(
bytes32 txHash,
uint256 logIndex,
address payable receiver,
address token,
uint256 amount
) external;
/**
* @notice Returns the address of the designated gas collector.
* @return address of the gas collector
*/
function gasCollector() external returns (address);
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IGovernable.sol
pragma solidity ^0.8.0;
/**
* @title IGovernable Interface
* @notice This is an interface used by the AxelarGateway contract to manage governance and mint limiter roles.
*/
interface IGovernable {
error NotGovernance();
error NotMintLimiter();
error InvalidGovernance();
error InvalidMintLimiter();
event GovernanceTransferred(address indexed previousGovernance, address indexed newGovernance);
event MintLimiterTransferred(address indexed previousGovernance, address indexed newGovernance);
/**
* @notice Returns the governance address.
* @return address of the governance
*/
function governance() external view returns (address);
/**
* @notice Returns the mint limiter address.
* @return address of the mint limiter
*/
function mintLimiter() external view returns (address);
/**
* @notice Transfer the governance role to another address.
* @param newGovernance The new governance address
*/
function transferGovernance(address newGovernance) external;
/**
* @notice Transfer the mint limiter role to another address.
* @param newGovernance The new mint limiter address
*/
function transferMintLimiter(address newGovernance) external;
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol
pragma solidity ^0.8.0;
interface IAxelarGateway is IImplementation, IGovernable {
/**********\
|* Errors *|
\**********/
error NotSelf();
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 ContractCallExecuted(bytes32 indexed commandId);
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);
/************************\
|* Governance Functions *|
\************************/
function setTokenMintLimits(string[] calldata symbols, uint256[] calldata limits) external;
function upgrade(
address newImplementation,
bytes32 newImplementationCodeHash,
bytes calldata setupParams
) external;
/**********************\
|* External Functions *|
\**********************/
function execute(bytes calldata input) external;
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarExecutable.sol
pragma solidity ^0.8.0;
interface IAxelarExecutable {
error InvalidAddress();
error NotApprovedByGateway();
function gateway() external view returns (IAxelarGateway);
function execute(
bytes32 commandId,
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload
) external;
function executeWithToken(
bytes32 commandId,
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload,
string calldata tokenSymbol,
uint256 amount
) external;
}
// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol
pragma solidity ^0.8.0;
contract AxelarExecutable is IAxelarExecutable {
IAxelarGateway public immutable gateway;
constructor(address gateway_) {
if (gateway_ == address(0)) revert InvalidAddress();
gateway = IAxelarGateway(gateway_);
}
function execute(
bytes32 commandId,
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload
) external {
bytes32 payloadHash = keccak256(payload);
if (!gateway.validateContractCall(commandId, sourceChain, sourceAddress, payloadHash))
revert NotApprovedByGateway();
_execute(sourceChain, sourceAddress, payload);
}
function executeWithToken(
bytes32 commandId,
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload,
string calldata tokenSymbol,
uint256 amount
) external {
bytes32 payloadHash = keccak256(payload);
if (
!gateway.validateContractCallAndMint(
commandId,
sourceChain,
sourceAddress,
payloadHash,
tokenSymbol,
amount
)
) revert NotApprovedByGateway();
_executeWithToken(sourceChain, sourceAddress, payload, tokenSymbol, amount);
}
function _execute(
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload
) internal virtual {}
function _executeWithToken(
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload,
string calldata tokenSymbol,
uint256 amount
) internal virtual {}
}
// File: contracts/SimpleGeneralMessage.sol
pragma solidity ^0.8.0;
contract SenderReceiver is AxelarExecutable {
IAxelarGasService public immutable gasService;
string public message;
constructor(address gateway_, address gasService_) AxelarExecutable(gateway_) {
gasService = IAxelarGasService(gasService_);
}
function sendMessage(
string calldata destinationChain,
string calldata destinationAddress,
string calldata message_
) external payable {
bytes memory payload = abi.encode(message_);
gasService.payNativeGasForContractCall{value: msg.value} (
address(this),
destinationChain,
destinationAddress,
payload,
msg.sender
);
gateway.callContract(destinationChain,destinationAddress,payload);
}
function _execute(
string calldata sourceChain,
string calldata sourceAddress,
bytes calldata payload_
) internal override {
message = abi.decode(payload_, (string));
}
}Contract ABI
API[{"inputs":[{"internalType":"address","name":"gateway_","type":"address"},{"internalType":"address","name":"gasService_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NotApprovedByGateway","type":"error"},{"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":"commandId","type":"bytes32"},{"internalType":"string","name":"sourceChain","type":"string"},{"internalType":"string","name":"sourceAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"executeWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasService","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":"message","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"destinationChain","type":"string"},{"internalType":"string","name":"destinationAddress","type":"string"},{"internalType":"string","name":"message_","type":"string"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60c06040523480156200001157600080fd5b506040516200132d3803806200132d83398181016040528101906200003791906200017b565b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a0576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050620001c2565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001438262000116565b9050919050565b620001558162000136565b81146200016157600080fd5b50565b60008151905062000175816200014a565b92915050565b6000806040838503121562000195576200019462000111565b5b6000620001a58582860162000164565b9250506020620001b88582860162000164565b9150509250929050565b60805160a05161112962000204600039600081816101710152610513015260008181610209015281816102a5015281816102e5015261041001526111296000f3fe6080604052600436106100555760003560e01c80630eabeffe1461005a578063116191b6146100765780631a98b2e0146100a157806349160658146100ca5780636a22d8cc146100f3578063e21f37ce1461011e575b600080fd5b610074600480360381019061006f9190610717565b610149565b005b34801561008257600080fd5b5061008b6102a3565b604051610098919061084a565b60405180910390f35b3480156100ad57600080fd5b506100c860048036038101906100c39190610927565b6102c7565b005b3480156100d657600080fd5b506100f160048036038101906100ec9190610a37565b6103f2565b005b3480156100ff57600080fd5b50610108610511565b6040516101159190610b21565b60405180910390f35b34801561012a57600080fd5b50610133610535565b6040516101409190610bd5565b60405180910390f35b6000828260405160200161015e929190610c33565b60405160208183030381529060405290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630c93e3bb34308a8a8a8a88336040518963ffffffff1660e01b81526004016101d59796959493929190610ccd565b6000604051808303818588803b1580156101ee57600080fd5b505af1158015610202573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631c92115f88888888866040518663ffffffff1660e01b8152600401610268959493929190610d39565b600060405180830381600087803b15801561028257600080fd5b505af1158015610296573d6000803e3d6000fd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600085856040516102d9929190610db9565b604051809103902090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631876eed98c8c8c8c8c878b8b8b6040518a63ffffffff1660e01b815260040161034c99989796959493929190610df0565b602060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039e9190610ea4565b6103d4576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e58a8a8a8a8a8a8a8a8a6105c3565b5050505050505050505050565b60008282604051610404929190610db9565b604051809103902090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f6970c38989898989876040518763ffffffff1660e01b815260040161047196959493929190610ed1565b602060405180830381600087803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190610ea4565b6104f9576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105078787878787876105ce565b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000805461054290610f57565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90610f57565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b505050505081565b505050505050505050565b81818101906105dd91906110aa565b600090805190602001906105f29291906105fb565b50505050505050565b82805461060790610f57565b90600052602060002090601f0160209004810192826106295760008555610670565b82601f1061064257805160ff1916838001178555610670565b82800160010185558215610670579182015b8281111561066f578251825591602001919060010190610654565b5b50905061067d9190610681565b5090565b5b8082111561069a576000816000905550600101610682565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126106d7576106d66106b2565b5b8235905067ffffffffffffffff8111156106f4576106f36106b7565b5b6020830191508360018202830111156107105761070f6106bc565b5b9250929050565b60008060008060008060608789031215610734576107336106a8565b5b600087013567ffffffffffffffff811115610752576107516106ad565b5b61075e89828a016106c1565b9650965050602087013567ffffffffffffffff811115610781576107806106ad565b5b61078d89828a016106c1565b9450945050604087013567ffffffffffffffff8111156107b0576107af6106ad565b5b6107bc89828a016106c1565b92509250509295509295509295565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061081061080b610806846107cb565b6107eb565b6107cb565b9050919050565b6000610822826107f5565b9050919050565b600061083482610817565b9050919050565b61084481610829565b82525050565b600060208201905061085f600083018461083b565b92915050565b6000819050919050565b61087881610865565b811461088357600080fd5b50565b6000813590506108958161086f565b92915050565b60008083601f8401126108b1576108b06106b2565b5b8235905067ffffffffffffffff8111156108ce576108cd6106b7565b5b6020830191508360018202830111156108ea576108e96106bc565b5b9250929050565b6000819050919050565b610904816108f1565b811461090f57600080fd5b50565b600081359050610921816108fb565b92915050565b60008060008060008060008060008060c08b8d03121561094a576109496106a8565b5b60006109588d828e01610886565b9a505060208b013567ffffffffffffffff811115610979576109786106ad565b5b6109858d828e016106c1565b995099505060408b013567ffffffffffffffff8111156109a8576109a76106ad565b5b6109b48d828e016106c1565b975097505060608b013567ffffffffffffffff8111156109d7576109d66106ad565b5b6109e38d828e0161089b565b955095505060808b013567ffffffffffffffff811115610a0657610a056106ad565b5b610a128d828e016106c1565b935093505060a0610a258d828e01610912565b9150509295989b9194979a5092959850565b60008060008060008060006080888a031215610a5657610a556106a8565b5b6000610a648a828b01610886565b975050602088013567ffffffffffffffff811115610a8557610a846106ad565b5b610a918a828b016106c1565b9650965050604088013567ffffffffffffffff811115610ab457610ab36106ad565b5b610ac08a828b016106c1565b9450945050606088013567ffffffffffffffff811115610ae357610ae26106ad565b5b610aef8a828b0161089b565b925092505092959891949750929550565b6000610b0b82610817565b9050919050565b610b1b81610b00565b82525050565b6000602082019050610b366000830184610b12565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b76578082015181840152602081019050610b5b565b83811115610b85576000848401525b50505050565b6000601f19601f8301169050919050565b6000610ba782610b3c565b610bb18185610b47565b9350610bc1818560208601610b58565b610bca81610b8b565b840191505092915050565b60006020820190508181036000830152610bef8184610b9c565b905092915050565b82818337600083830152505050565b6000610c128385610b47565b9350610c1f838584610bf7565b610c2883610b8b565b840190509392505050565b60006020820190508181036000830152610c4e818486610c06565b90509392505050565b6000610c62826107cb565b9050919050565b610c7281610c57565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610c9f82610c78565b610ca98185610c83565b9350610cb9818560208601610b58565b610cc281610b8b565b840191505092915050565b600060a082019050610ce2600083018a610c69565b8181036020830152610cf581888a610c06565b90508181036040830152610d0a818688610c06565b90508181036060830152610d1e8185610c94565b9050610d2d6080830184610c69565b98975050505050505050565b60006060820190508181036000830152610d54818789610c06565b90508181036020830152610d69818587610c06565b90508181036040830152610d7d8184610c94565b90509695505050505050565b600081905092915050565b6000610da08385610d89565b9350610dad838584610bf7565b82840190509392505050565b6000610dc6828486610d94565b91508190509392505050565b610ddb81610865565b82525050565b610dea816108f1565b82525050565b600060c082019050610e05600083018c610dd2565b8181036020830152610e18818a8c610c06565b90508181036040830152610e2d81888a610c06565b9050610e3c6060830187610dd2565b8181036080830152610e4f818587610c06565b9050610e5e60a0830184610de1565b9a9950505050505050505050565b60008115159050919050565b610e8181610e6c565b8114610e8c57600080fd5b50565b600081519050610e9e81610e78565b92915050565b600060208284031215610eba57610eb96106a8565b5b6000610ec884828501610e8f565b91505092915050565b6000608082019050610ee66000830189610dd2565b8181036020830152610ef9818789610c06565b90508181036040830152610f0e818587610c06565b9050610f1d6060830184610dd2565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f6f57607f821691505b60208210811415610f8357610f82610f28565b5b50919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610fc682610b8b565b810181811067ffffffffffffffff82111715610fe557610fe4610f8e565b5b80604052505050565b6000610ff861069e565b90506110048282610fbd565b919050565b600067ffffffffffffffff82111561102457611023610f8e565b5b61102d82610b8b565b9050602081019050919050565b600061104d61104884611009565b610fee565b90508281526020810184848401111561106957611068610f89565b5b611074848285610bf7565b509392505050565b600082601f830112611091576110906106b2565b5b81356110a184826020860161103a565b91505092915050565b6000602082840312156110c0576110bf6106a8565b5b600082013567ffffffffffffffff8111156110de576110dd6106ad565b5b6110ea8482850161107c565b9150509291505056fea2646970667358221220cc6a8f3bfa12742258d1dd436c09ba40df86b08492e9e4a4401e704dddb2fa4b64736f6c634300080900330000000000000000000000005769d84dd62a6fd969856c75c7d321b84d455929000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc6
Deployed Bytecode
0x6080604052600436106100555760003560e01c80630eabeffe1461005a578063116191b6146100765780631a98b2e0146100a157806349160658146100ca5780636a22d8cc146100f3578063e21f37ce1461011e575b600080fd5b610074600480360381019061006f9190610717565b610149565b005b34801561008257600080fd5b5061008b6102a3565b604051610098919061084a565b60405180910390f35b3480156100ad57600080fd5b506100c860048036038101906100c39190610927565b6102c7565b005b3480156100d657600080fd5b506100f160048036038101906100ec9190610a37565b6103f2565b005b3480156100ff57600080fd5b50610108610511565b6040516101159190610b21565b60405180910390f35b34801561012a57600080fd5b50610133610535565b6040516101409190610bd5565b60405180910390f35b6000828260405160200161015e929190610c33565b60405160208183030381529060405290507f000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc673ffffffffffffffffffffffffffffffffffffffff16630c93e3bb34308a8a8a8a88336040518963ffffffff1660e01b81526004016101d59796959493929190610ccd565b6000604051808303818588803b1580156101ee57600080fd5b505af1158015610202573d6000803e3d6000fd5b50505050507f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592973ffffffffffffffffffffffffffffffffffffffff16631c92115f88888888866040518663ffffffff1660e01b8152600401610268959493929190610d39565b600060405180830381600087803b15801561028257600080fd5b505af1158015610296573d6000803e3d6000fd5b5050505050505050505050565b7f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592981565b600085856040516102d9929190610db9565b604051809103902090507f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592973ffffffffffffffffffffffffffffffffffffffff16631876eed98c8c8c8c8c878b8b8b6040518a63ffffffff1660e01b815260040161034c99989796959493929190610df0565b602060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039e9190610ea4565b6103d4576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e58a8a8a8a8a8a8a8a8a6105c3565b5050505050505050505050565b60008282604051610404929190610db9565b604051809103902090507f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592973ffffffffffffffffffffffffffffffffffffffff16635f6970c38989898989876040518763ffffffff1660e01b815260040161047196959493929190610ed1565b602060405180830381600087803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190610ea4565b6104f9576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105078787878787876105ce565b5050505050505050565b7f000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc681565b6000805461054290610f57565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90610f57565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b505050505081565b505050505050505050565b81818101906105dd91906110aa565b600090805190602001906105f29291906105fb565b50505050505050565b82805461060790610f57565b90600052602060002090601f0160209004810192826106295760008555610670565b82601f1061064257805160ff1916838001178555610670565b82800160010185558215610670579182015b8281111561066f578251825591602001919060010190610654565b5b50905061067d9190610681565b5090565b5b8082111561069a576000816000905550600101610682565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126106d7576106d66106b2565b5b8235905067ffffffffffffffff8111156106f4576106f36106b7565b5b6020830191508360018202830111156107105761070f6106bc565b5b9250929050565b60008060008060008060608789031215610734576107336106a8565b5b600087013567ffffffffffffffff811115610752576107516106ad565b5b61075e89828a016106c1565b9650965050602087013567ffffffffffffffff811115610781576107806106ad565b5b61078d89828a016106c1565b9450945050604087013567ffffffffffffffff8111156107b0576107af6106ad565b5b6107bc89828a016106c1565b92509250509295509295509295565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061081061080b610806846107cb565b6107eb565b6107cb565b9050919050565b6000610822826107f5565b9050919050565b600061083482610817565b9050919050565b61084481610829565b82525050565b600060208201905061085f600083018461083b565b92915050565b6000819050919050565b61087881610865565b811461088357600080fd5b50565b6000813590506108958161086f565b92915050565b60008083601f8401126108b1576108b06106b2565b5b8235905067ffffffffffffffff8111156108ce576108cd6106b7565b5b6020830191508360018202830111156108ea576108e96106bc565b5b9250929050565b6000819050919050565b610904816108f1565b811461090f57600080fd5b50565b600081359050610921816108fb565b92915050565b60008060008060008060008060008060c08b8d03121561094a576109496106a8565b5b60006109588d828e01610886565b9a505060208b013567ffffffffffffffff811115610979576109786106ad565b5b6109858d828e016106c1565b995099505060408b013567ffffffffffffffff8111156109a8576109a76106ad565b5b6109b48d828e016106c1565b975097505060608b013567ffffffffffffffff8111156109d7576109d66106ad565b5b6109e38d828e0161089b565b955095505060808b013567ffffffffffffffff811115610a0657610a056106ad565b5b610a128d828e016106c1565b935093505060a0610a258d828e01610912565b9150509295989b9194979a5092959850565b60008060008060008060006080888a031215610a5657610a556106a8565b5b6000610a648a828b01610886565b975050602088013567ffffffffffffffff811115610a8557610a846106ad565b5b610a918a828b016106c1565b9650965050604088013567ffffffffffffffff811115610ab457610ab36106ad565b5b610ac08a828b016106c1565b9450945050606088013567ffffffffffffffff811115610ae357610ae26106ad565b5b610aef8a828b0161089b565b925092505092959891949750929550565b6000610b0b82610817565b9050919050565b610b1b81610b00565b82525050565b6000602082019050610b366000830184610b12565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b76578082015181840152602081019050610b5b565b83811115610b85576000848401525b50505050565b6000601f19601f8301169050919050565b6000610ba782610b3c565b610bb18185610b47565b9350610bc1818560208601610b58565b610bca81610b8b565b840191505092915050565b60006020820190508181036000830152610bef8184610b9c565b905092915050565b82818337600083830152505050565b6000610c128385610b47565b9350610c1f838584610bf7565b610c2883610b8b565b840190509392505050565b60006020820190508181036000830152610c4e818486610c06565b90509392505050565b6000610c62826107cb565b9050919050565b610c7281610c57565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610c9f82610c78565b610ca98185610c83565b9350610cb9818560208601610b58565b610cc281610b8b565b840191505092915050565b600060a082019050610ce2600083018a610c69565b8181036020830152610cf581888a610c06565b90508181036040830152610d0a818688610c06565b90508181036060830152610d1e8185610c94565b9050610d2d6080830184610c69565b98975050505050505050565b60006060820190508181036000830152610d54818789610c06565b90508181036020830152610d69818587610c06565b90508181036040830152610d7d8184610c94565b90509695505050505050565b600081905092915050565b6000610da08385610d89565b9350610dad838584610bf7565b82840190509392505050565b6000610dc6828486610d94565b91508190509392505050565b610ddb81610865565b82525050565b610dea816108f1565b82525050565b600060c082019050610e05600083018c610dd2565b8181036020830152610e18818a8c610c06565b90508181036040830152610e2d81888a610c06565b9050610e3c6060830187610dd2565b8181036080830152610e4f818587610c06565b9050610e5e60a0830184610de1565b9a9950505050505050505050565b60008115159050919050565b610e8181610e6c565b8114610e8c57600080fd5b50565b600081519050610e9e81610e78565b92915050565b600060208284031215610eba57610eb96106a8565b5b6000610ec884828501610e8f565b91505092915050565b6000608082019050610ee66000830189610dd2565b8181036020830152610ef9818789610c06565b90508181036040830152610f0e818587610c06565b9050610f1d6060830184610dd2565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f6f57607f821691505b60208210811415610f8357610f82610f28565b5b50919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610fc682610b8b565b810181811067ffffffffffffffff82111715610fe557610fe4610f8e565b5b80604052505050565b6000610ff861069e565b90506110048282610fbd565b919050565b600067ffffffffffffffff82111561102457611023610f8e565b5b61102d82610b8b565b9050602081019050919050565b600061104d61104884611009565b610fee565b90508281526020810184848401111561106957611068610f89565b5b611074848285610bf7565b509392505050565b600082601f830112611091576110906106b2565b5b81356110a184826020860161103a565b91505092915050565b6000602082840312156110c0576110bf6106a8565b5b600082013567ffffffffffffffff8111156110de576110dd6106ad565b5b6110ea8482850161107c565b9150509291505056fea2646970667358221220cc6a8f3bfa12742258d1dd436c09ba40df86b08492e9e4a4401e704dddb2fa4b64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d455929000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc6
-----Decoded View---------------
Arg [0] : gateway_ (address): 0x5769D84DD62a6fD969856c75c7D321b84d455929
Arg [1] : gasService_ (address): 0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d455929
Arg [1] : 000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc6
Deployed Bytecode Sourcemap
29014:1032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29295:526;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27196:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27838:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27399:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29065:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29117:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29295:526;29474:20;29508:8;;29497:20;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29474:43;;29528:10;:38;;;29574:9;29608:4;29628:16;;29659:18;;29692:7;29714:10;29528:207;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29748:7;:20;;;29769:16;;29786:18;;29805:7;29748:65;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29463:358;29295:526;;;;;;:::o;27196:39::-;;;:::o;27838:689::-;28093:19;28125:7;;28115:18;;;;;;;:::i;:::-;;;;;;;;28093:40;;28165:7;:35;;;28219:9;28247:11;;28277:13;;28309:11;28339;;28369:6;28165:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28146:285;;28409:22;;;;;;;;;;;;;;28146:285;28444:75;28462:11;;28475:13;;28490:7;;28499:11;;28512:6;28444:17;:75::i;:::-;28082:445;27838:689;;;;;;;;;;:::o;27399:431::-;27582:19;27614:7;;27604:18;;;;;;;:::i;:::-;;;;;;;;27582:40;;27640:7;:28;;;27669:9;27680:11;;27693:13;;27708:11;27640:80;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27635:129;;27742:22;;;;;;;;;;;;;;27635:129;27777:45;27786:11;;27799:13;;27814:7;;27777:8;:45::i;:::-;27571:259;27399:431;;;;;;;:::o;29065:45::-;;;:::o;29117:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28698:227::-;;;;;;;;;;:::o;29829:214::-;30016:8;;30005:30;;;;;;;:::i;:::-;29995:7;:40;;;;;;;;;;;;:::i;:::-;;29829:214;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;717:553;775:8;785:6;835:3;828:4;820:6;816:17;812:27;802:122;;843:79;;:::i;:::-;802:122;956:6;943:20;933:30;;986:18;978:6;975:30;972:117;;;1008:79;;:::i;:::-;972:117;1122:4;1114:6;1110:17;1098:29;;1176:3;1168:4;1160:6;1156:17;1146:8;1142:32;1139:41;1136:128;;;1183:79;;:::i;:::-;1136:128;717:553;;;;;:::o;1276:1219::-;1389:6;1397;1405;1413;1421;1429;1478:2;1466:9;1457:7;1453:23;1449:32;1446:119;;;1484:79;;:::i;:::-;1446:119;1632:1;1621:9;1617:17;1604:31;1662:18;1654:6;1651:30;1648:117;;;1684:79;;:::i;:::-;1648:117;1797:65;1854:7;1845:6;1834:9;1830:22;1797:65;:::i;:::-;1779:83;;;;1575:297;1939:2;1928:9;1924:18;1911:32;1970:18;1962:6;1959:30;1956:117;;;1992:79;;:::i;:::-;1956:117;2105:65;2162:7;2153:6;2142:9;2138:22;2105:65;:::i;:::-;2087:83;;;;1882:298;2247:2;2236:9;2232:18;2219:32;2278:18;2270:6;2267:30;2264:117;;;2300:79;;:::i;:::-;2264:117;2413:65;2470:7;2461:6;2450:9;2446:22;2413:65;:::i;:::-;2395:83;;;;2190:298;1276:1219;;;;;;;;:::o;2501:126::-;2538:7;2578:42;2571:5;2567:54;2556:65;;2501:126;;;:::o;2633:60::-;2661:3;2682:5;2675:12;;2633:60;;;:::o;2699:142::-;2749:9;2782:53;2800:34;2809:24;2827:5;2809:24;:::i;:::-;2800:34;:::i;:::-;2782:53;:::i;:::-;2769:66;;2699:142;;;:::o;2847:126::-;2897:9;2930:37;2961:5;2930:37;:::i;:::-;2917:50;;2847:126;;;:::o;2979:148::-;3051:9;3084:37;3115:5;3084:37;:::i;:::-;3071:50;;2979:148;;;:::o;3133:175::-;3242:59;3295:5;3242:59;:::i;:::-;3237:3;3230:72;3133:175;;:::o;3314:266::-;3429:4;3467:2;3456:9;3452:18;3444:26;;3480:93;3570:1;3559:9;3555:17;3546:6;3480:93;:::i;:::-;3314:266;;;;:::o;3586:77::-;3623:7;3652:5;3641:16;;3586:77;;;:::o;3669:122::-;3742:24;3760:5;3742:24;:::i;:::-;3735:5;3732:35;3722:63;;3781:1;3778;3771:12;3722:63;3669:122;:::o;3797:139::-;3843:5;3881:6;3868:20;3859:29;;3897:33;3924:5;3897:33;:::i;:::-;3797:139;;;;:::o;3955:552::-;4012:8;4022:6;4072:3;4065:4;4057:6;4053:17;4049:27;4039:122;;4080:79;;:::i;:::-;4039:122;4193:6;4180:20;4170:30;;4223:18;4215:6;4212:30;4209:117;;;4245:79;;:::i;:::-;4209:117;4359:4;4351:6;4347:17;4335:29;;4413:3;4405:4;4397:6;4393:17;4383:8;4379:32;4376:41;4373:128;;;4420:79;;:::i;:::-;4373:128;3955:552;;;;;:::o;4513:77::-;4550:7;4579:5;4568:16;;4513:77;;;:::o;4596:122::-;4669:24;4687:5;4669:24;:::i;:::-;4662:5;4659:35;4649:63;;4708:1;4705;4698:12;4649:63;4596:122;:::o;4724:139::-;4770:5;4808:6;4795:20;4786:29;;4824:33;4851:5;4824:33;:::i;:::-;4724:139;;;;:::o;4869:1855::-;5020:6;5028;5036;5044;5052;5060;5068;5076;5084;5092;5141:3;5129:9;5120:7;5116:23;5112:33;5109:120;;;5148:79;;:::i;:::-;5109:120;5268:1;5293:53;5338:7;5329:6;5318:9;5314:22;5293:53;:::i;:::-;5283:63;;5239:117;5423:2;5412:9;5408:18;5395:32;5454:18;5446:6;5443:30;5440:117;;;5476:79;;:::i;:::-;5440:117;5589:65;5646:7;5637:6;5626:9;5622:22;5589:65;:::i;:::-;5571:83;;;;5366:298;5731:2;5720:9;5716:18;5703:32;5762:18;5754:6;5751:30;5748:117;;;5784:79;;:::i;:::-;5748:117;5897:65;5954:7;5945:6;5934:9;5930:22;5897:65;:::i;:::-;5879:83;;;;5674:298;6039:2;6028:9;6024:18;6011:32;6070:18;6062:6;6059:30;6056:117;;;6092:79;;:::i;:::-;6056:117;6205:64;6261:7;6252:6;6241:9;6237:22;6205:64;:::i;:::-;6187:82;;;;5982:297;6346:3;6335:9;6331:19;6318:33;6378:18;6370:6;6367:30;6364:117;;;6400:79;;:::i;:::-;6364:117;6513:65;6570:7;6561:6;6550:9;6546:22;6513:65;:::i;:::-;6495:83;;;;6289:299;6627:3;6654:53;6699:7;6690:6;6679:9;6675:22;6654:53;:::i;:::-;6644:63;;6598:119;4869:1855;;;;;;;;;;;;;:::o;6730:1363::-;6851:6;6859;6867;6875;6883;6891;6899;6948:3;6936:9;6927:7;6923:23;6919:33;6916:120;;;6955:79;;:::i;:::-;6916:120;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7230:2;7219:9;7215:18;7202:32;7261:18;7253:6;7250:30;7247:117;;;7283:79;;:::i;:::-;7247:117;7396:65;7453:7;7444:6;7433:9;7429:22;7396:65;:::i;:::-;7378:83;;;;7173:298;7538:2;7527:9;7523:18;7510:32;7569:18;7561:6;7558:30;7555:117;;;7591:79;;:::i;:::-;7555:117;7704:65;7761:7;7752:6;7741:9;7737:22;7704:65;:::i;:::-;7686:83;;;;7481:298;7846:2;7835:9;7831:18;7818:32;7877:18;7869:6;7866:30;7863:117;;;7899:79;;:::i;:::-;7863:117;8012:64;8068:7;8059:6;8048:9;8044:22;8012:64;:::i;:::-;7994:82;;;;7789:297;6730:1363;;;;;;;;;;:::o;8099:151::-;8174:9;8207:37;8238:5;8207:37;:::i;:::-;8194:50;;8099:151;;;:::o;8256:181::-;8368:62;8424:5;8368:62;:::i;:::-;8363:3;8356:75;8256:181;;:::o;8443:272::-;8561:4;8599:2;8588:9;8584:18;8576:26;;8612:96;8705:1;8694:9;8690:17;8681:6;8612:96;:::i;:::-;8443:272;;;;:::o;8721:99::-;8773:6;8807:5;8801:12;8791:22;;8721:99;;;:::o;8826:169::-;8910:11;8944:6;8939:3;8932:19;8984:4;8979:3;8975:14;8960:29;;8826:169;;;;:::o;9001:307::-;9069:1;9079:113;9093:6;9090:1;9087:13;9079:113;;;9178:1;9173:3;9169:11;9163:18;9159:1;9154:3;9150:11;9143:39;9115:2;9112:1;9108:10;9103:15;;9079:113;;;9210:6;9207:1;9204:13;9201:101;;;9290:1;9281:6;9276:3;9272:16;9265:27;9201:101;9050:258;9001:307;;;:::o;9314:102::-;9355:6;9406:2;9402:7;9397:2;9390:5;9386:14;9382:28;9372:38;;9314:102;;;:::o;9422:364::-;9510:3;9538:39;9571:5;9538:39;:::i;:::-;9593:71;9657:6;9652:3;9593:71;:::i;:::-;9586:78;;9673:52;9718:6;9713:3;9706:4;9699:5;9695:16;9673:52;:::i;:::-;9750:29;9772:6;9750:29;:::i;:::-;9745:3;9741:39;9734:46;;9514:272;9422:364;;;;:::o;9792:313::-;9905:4;9943:2;9932:9;9928:18;9920:26;;9992:9;9986:4;9982:20;9978:1;9967:9;9963:17;9956:47;10020:78;10093:4;10084:6;10020:78;:::i;:::-;10012:86;;9792:313;;;;:::o;10111:154::-;10195:6;10190:3;10185;10172:30;10257:1;10248:6;10243:3;10239:16;10232:27;10111:154;;;:::o;10295:304::-;10393:3;10414:71;10478:6;10473:3;10414:71;:::i;:::-;10407:78;;10495:43;10531:6;10526:3;10519:5;10495:43;:::i;:::-;10563:29;10585:6;10563:29;:::i;:::-;10558:3;10554:39;10547:46;;10295:304;;;;;:::o;10605:333::-;10728:4;10766:2;10755:9;10751:18;10743:26;;10815:9;10809:4;10805:20;10801:1;10790:9;10786:17;10779:47;10843:88;10926:4;10917:6;10909;10843:88;:::i;:::-;10835:96;;10605:333;;;;;:::o;10944:96::-;10981:7;11010:24;11028:5;11010:24;:::i;:::-;10999:35;;10944:96;;;:::o;11046:118::-;11133:24;11151:5;11133:24;:::i;:::-;11128:3;11121:37;11046:118;;:::o;11170:98::-;11221:6;11255:5;11249:12;11239:22;;11170:98;;;:::o;11274:168::-;11357:11;11391:6;11386:3;11379:19;11431:4;11426:3;11422:14;11407:29;;11274:168;;;;:::o;11448:360::-;11534:3;11562:38;11594:5;11562:38;:::i;:::-;11616:70;11679:6;11674:3;11616:70;:::i;:::-;11609:77;;11695:52;11740:6;11735:3;11728:4;11721:5;11717:16;11695:52;:::i;:::-;11772:29;11794:6;11772:29;:::i;:::-;11767:3;11763:39;11756:46;;11538:270;11448:360;;;;:::o;11814:973::-;12097:4;12135:3;12124:9;12120:19;12112:27;;12149:71;12217:1;12206:9;12202:17;12193:6;12149:71;:::i;:::-;12267:9;12261:4;12257:20;12252:2;12241:9;12237:18;12230:48;12295:88;12378:4;12369:6;12361;12295:88;:::i;:::-;12287:96;;12430:9;12424:4;12420:20;12415:2;12404:9;12400:18;12393:48;12458:88;12541:4;12532:6;12524;12458:88;:::i;:::-;12450:96;;12593:9;12587:4;12583:20;12578:2;12567:9;12563:18;12556:48;12621:76;12692:4;12683:6;12621:76;:::i;:::-;12613:84;;12707:73;12775:3;12764:9;12760:19;12751:6;12707:73;:::i;:::-;11814:973;;;;;;;;;;:::o;12793:751::-;13020:4;13058:2;13047:9;13043:18;13035:26;;13107:9;13101:4;13097:20;13093:1;13082:9;13078:17;13071:47;13135:88;13218:4;13209:6;13201;13135:88;:::i;:::-;13127:96;;13270:9;13264:4;13260:20;13255:2;13244:9;13240:18;13233:48;13298:88;13381:4;13372:6;13364;13298:88;:::i;:::-;13290:96;;13433:9;13427:4;13423:20;13418:2;13407:9;13403:18;13396:48;13461:76;13532:4;13523:6;13461:76;:::i;:::-;13453:84;;12793:751;;;;;;;;:::o;13550:147::-;13651:11;13688:3;13673:18;;13550:147;;;;:::o;13725:314::-;13839:3;13860:88;13941:6;13936:3;13860:88;:::i;:::-;13853:95;;13958:43;13994:6;13989:3;13982:5;13958:43;:::i;:::-;14026:6;14021:3;14017:16;14010:23;;13725:314;;;;;:::o;14045:291::-;14185:3;14207:103;14306:3;14297:6;14289;14207:103;:::i;:::-;14200:110;;14327:3;14320:10;;14045:291;;;;;:::o;14342:118::-;14429:24;14447:5;14429:24;:::i;:::-;14424:3;14417:37;14342:118;;:::o;14466:::-;14553:24;14571:5;14553:24;:::i;:::-;14548:3;14541:37;14466:118;;:::o;14590:1108::-;14913:4;14951:3;14940:9;14936:19;14928:27;;14965:71;15033:1;15022:9;15018:17;15009:6;14965:71;:::i;:::-;15083:9;15077:4;15073:20;15068:2;15057:9;15053:18;15046:48;15111:88;15194:4;15185:6;15177;15111:88;:::i;:::-;15103:96;;15246:9;15240:4;15236:20;15231:2;15220:9;15216:18;15209:48;15274:88;15357:4;15348:6;15340;15274:88;:::i;:::-;15266:96;;15372:72;15440:2;15429:9;15425:18;15416:6;15372:72;:::i;:::-;15492:9;15486:4;15482:20;15476:3;15465:9;15461:19;15454:49;15520:88;15603:4;15594:6;15586;15520:88;:::i;:::-;15512:96;;15618:73;15686:3;15675:9;15671:19;15662:6;15618:73;:::i;:::-;14590:1108;;;;;;;;;;;;:::o;15704:90::-;15738:7;15781:5;15774:13;15767:21;15756:32;;15704:90;;;:::o;15800:116::-;15870:21;15885:5;15870:21;:::i;:::-;15863:5;15860:32;15850:60;;15906:1;15903;15896:12;15850:60;15800:116;:::o;15922:137::-;15976:5;16007:6;16001:13;15992:22;;16023:30;16047:5;16023:30;:::i;:::-;15922:137;;;;:::o;16065:345::-;16132:6;16181:2;16169:9;16160:7;16156:23;16152:32;16149:119;;;16187:79;;:::i;:::-;16149:119;16307:1;16332:61;16385:7;16376:6;16365:9;16361:22;16332:61;:::i;:::-;16322:71;;16278:125;16065:345;;;;:::o;16416:775::-;16653:4;16691:3;16680:9;16676:19;16668:27;;16705:71;16773:1;16762:9;16758:17;16749:6;16705:71;:::i;:::-;16823:9;16817:4;16813:20;16808:2;16797:9;16793:18;16786:48;16851:88;16934:4;16925:6;16917;16851:88;:::i;:::-;16843:96;;16986:9;16980:4;16976:20;16971:2;16960:9;16956:18;16949:48;17014:88;17097:4;17088:6;17080;17014:88;:::i;:::-;17006:96;;17112:72;17180:2;17169:9;17165:18;17156:6;17112:72;:::i;:::-;16416:775;;;;;;;;;:::o;17197:180::-;17245:77;17242:1;17235:88;17342:4;17339:1;17332:15;17366:4;17363:1;17356:15;17383:320;17427:6;17464:1;17458:4;17454:12;17444:22;;17511:1;17505:4;17501:12;17532:18;17522:81;;17588:4;17580:6;17576:17;17566:27;;17522:81;17650:2;17642:6;17639:14;17619:18;17616:38;17613:84;;;17669:18;;:::i;:::-;17613:84;17434:269;17383:320;;;:::o;17709:117::-;17818:1;17815;17808:12;17832:180;17880:77;17877:1;17870:88;17977:4;17974:1;17967:15;18001:4;17998:1;17991:15;18018:281;18101:27;18123:4;18101:27;:::i;:::-;18093:6;18089:40;18231:6;18219:10;18216:22;18195:18;18183:10;18180:34;18177:62;18174:88;;;18242:18;;:::i;:::-;18174:88;18282:10;18278:2;18271:22;18061:238;18018:281;;:::o;18305:129::-;18339:6;18366:20;;:::i;:::-;18356:30;;18395:33;18423:4;18415:6;18395:33;:::i;:::-;18305:129;;;:::o;18440:308::-;18502:4;18592:18;18584:6;18581:30;18578:56;;;18614:18;;:::i;:::-;18578:56;18652:29;18674:6;18652:29;:::i;:::-;18644:37;;18736:4;18730;18726:15;18718:23;;18440:308;;;:::o;18754:412::-;18832:5;18857:66;18873:49;18915:6;18873:49;:::i;:::-;18857:66;:::i;:::-;18848:75;;18946:6;18939:5;18932:21;18984:4;18977:5;18973:16;19022:3;19013:6;19008:3;19004:16;19001:25;18998:112;;;19029:79;;:::i;:::-;18998:112;19119:41;19153:6;19148:3;19143;19119:41;:::i;:::-;18838:328;18754:412;;;;;:::o;19186:340::-;19242:5;19291:3;19284:4;19276:6;19272:17;19268:27;19258:122;;19299:79;;:::i;:::-;19258:122;19416:6;19403:20;19441:79;19516:3;19508:6;19501:4;19493:6;19489:17;19441:79;:::i;:::-;19432:88;;19248:278;19186:340;;;;:::o;19532:509::-;19601:6;19650:2;19638:9;19629:7;19625:23;19621:32;19618:119;;;19656:79;;:::i;:::-;19618:119;19804:1;19793:9;19789:17;19776:31;19834:18;19826:6;19823:30;19820:117;;;19856:79;;:::i;:::-;19820:117;19961:63;20016:7;20007:6;19996:9;19992:22;19961:63;:::i;:::-;19951:73;;19747:287;19532:509;;;;:::o
Swarm Source
ipfs://cc6a8f3bfa12742258d1dd436c09ba40df86b08492e9e4a4401e704dddb2fa4b
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.