Latest 25 from a total of 80 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 22376927 | 438 days ago | IN | 0 ETH | 0.0000018 | ||||
| Execute | 22074430 | 445 days ago | IN | 0 ETH | 0.00000135 | ||||
| Execute | 21771991 | 452 days ago | IN | 0 ETH | 0.00000089 | ||||
| Execute | 21469618 | 459 days ago | IN | 0 ETH | 0.0000012 | ||||
| Execute | 21167184 | 466 days ago | IN | 0 ETH | 0.00000049 | ||||
| Execute | 20864838 | 473 days ago | IN | 0 ETH | 0.00000044 | ||||
| Execute | 20562427 | 480 days ago | IN | 0 ETH | 0.0000008 | ||||
| Execute | 20260025 | 487 days ago | IN | 0 ETH | 0.00000048 | ||||
| Execute | 19957609 | 494 days ago | IN | 0 ETH | 0.00000075 | ||||
| Execute | 19655201 | 501 days ago | IN | 0 ETH | 0.00000047 | ||||
| Execute | 19352828 | 508 days ago | IN | 0 ETH | 0.00000029 | ||||
| Execute | 19050390 | 515 days ago | IN | 0 ETH | 0.00000022 | ||||
| Execute | 18748133 | 522 days ago | IN | 0 ETH | 0.00000035 | ||||
| Execute | 18445608 | 529 days ago | IN | 0 ETH | 0.00000064 | ||||
| Execute | 18143293 | 536 days ago | IN | 0 ETH | 0.00000033 | ||||
| Execute | 17840914 | 543 days ago | IN | 0 ETH | 0.00000071 | ||||
| Execute | 17538571 | 550 days ago | IN | 0 ETH | 0.0000003 | ||||
| Execute | 17235966 | 557 days ago | IN | 0 ETH | 0.00000096 | ||||
| Execute | 16933586 | 564 days ago | IN | 0 ETH | 0.00000073 | ||||
| Execute | 16631299 | 571 days ago | IN | 0 ETH | 0.00000052 | ||||
| Execute | 16328773 | 578 days ago | IN | 0 ETH | 0.00000063 | ||||
| Execute | 16026399 | 585 days ago | IN | 0 ETH | 0.00000045 | ||||
| Execute | 15723994 | 592 days ago | IN | 0 ETH | 0.00000093 | ||||
| Execute | 15421705 | 599 days ago | IN | 0 ETH | 0.00000078 | ||||
| Execute | 15119178 | 606 days ago | IN | 0 ETH | 0.00000028 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AxelarReceiver
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;
import {AxelarExecutable} from '@axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol';
import {IAxelarGateway} from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol';
import {StringToAddress} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/libs/AddressString.sol";
import {ArcBaseWithRainbowRoad} from "../bases/ArcBaseWithRainbowRoad.sol";
import {IRainbowRoad} from "../interfaces/IRainbowRoad.sol";
/**
* Receives messages from the Axelar Gateway
*/
contract AxelarReceiver is ArcBaseWithRainbowRoad, AxelarExecutable
{
using StringToAddress for string;
mapping(string => mapping(address => bool)) public messageSenders;
event MessageReceived(string sourceChainSelector, address messageSender, string action, address actionRecipient);
constructor(address _rainbowRoad, address _gateway) AxelarExecutable(_gateway) ArcBaseWithRainbowRoad(_rainbowRoad)
{
}
function enableMessageSender(string calldata sourceChainSelector, address messageSender) external onlyOwner
{
require(!messageSenders[sourceChainSelector][messageSender], 'Message sender for source chain is enabled');
messageSenders[sourceChainSelector][messageSender] = true;
}
function disableMessageSender(string calldata sourceChainSelector, address messageSender) external onlyOwner
{
require(messageSenders[sourceChainSelector][messageSender], 'Message sender for source chain is disabled');
messageSenders[sourceChainSelector][messageSender] = false;
}
function _execute(string calldata sourceChainSelector, string calldata sourceAddress, bytes calldata message) internal override
{
_requireNotPaused();
address messageSender = sourceAddress.toAddress();
require(messageSenders[sourceChainSelector][messageSender], 'Unsupported source chain/message sender');
(string memory action, address actionRecipient, bytes memory payload) = abi.decode(message, (string, address, bytes));
rainbowRoad.receiveAction(action, actionRecipient, payload);
emit MessageReceived(sourceChainSelector, messageSender, action, actionRecipient);
}
receive() external payable {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { IAxelarGateway } from '../interfaces/IAxelarGateway.sol';
import { IAxelarExecutable } from '../interfaces/IAxelarExecutable.sol';
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 {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { IAxelarGateway } from './IAxelarGateway.sol';
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;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { IGovernable } from './IGovernable.sol';
interface IAxelarGateway is IGovernable {
/**********\
|* 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
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;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library StringToAddress {
error InvalidAddressString();
function toAddress(string memory addressString) internal pure returns (address) {
bytes memory stringBytes = bytes(addressString);
uint160 addressNumber = 0;
uint8 stringByte;
if (stringBytes.length != 42 || stringBytes[0] != '0' || stringBytes[1] != 'x') revert InvalidAddressString();
for (uint256 i = 2; i < 42; ++i) {
stringByte = uint8(stringBytes[i]);
if ((stringByte >= 97) && (stringByte <= 102)) stringByte -= 87;
else if ((stringByte >= 65) && (stringByte <= 70)) stringByte -= 55;
else if ((stringByte >= 48) && (stringByte <= 57)) stringByte -= 48;
else revert InvalidAddressString();
addressNumber |= uint160(uint256(stringByte) << ((41 - i) << 2));
}
return address(addressNumber);
}
}
library AddressToString {
function toString(address address_) internal pure returns (string memory) {
bytes memory addressBytes = abi.encodePacked(address_);
bytes memory characters = '0123456789abcdef';
bytes memory stringBytes = new bytes(42);
stringBytes[0] = '0';
stringBytes[1] = 'x';
for (uint256 i; i < 20; ++i) {
stringBytes[2 + i * 2] = characters[uint8(addressBytes[i] >> 4)];
stringBytes[3 + i * 2] = characters[uint8(addressBytes[i] & 0x0f)];
}
return string(stringBytes);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)
pragma solidity ^0.8.0;
import "./Ownable.sol";
/**
* @dev Contract module which provides access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership} and {acceptOwnership}.
*
* This module is used through inheritance. It will make available all functions
* from parent (Ownable).
*/
abstract contract Ownable2Step is Ownable {
address private _pendingOwner;
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
/**
* @dev Returns the address of the pending owner.
*/
function pendingOwner() public view virtual returns (address) {
return _pendingOwner;
}
/**
* @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual override onlyOwner {
_pendingOwner = newOwner;
emit OwnershipTransferStarted(owner(), newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual override {
delete _pendingOwner;
super._transferOwnership(newOwner);
}
/**
* @dev The new owner accepts the ownership transfer.
*/
function acceptOwnership() public virtual {
address sender = _msgSender();
require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner");
_transferOwnership(sender);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}// 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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;
import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/**
* Provides set of properties, functions, and modifiers to help with
* security and access control of extending contracts
*/
contract ArcBase is Ownable2Step, Pausable, ReentrancyGuard
{
function pause() public onlyOwner
{
_pause();
}
function unpause() public onlyOwner
{
_unpause();
}
function withdrawNative(address beneficiary) public onlyOwner {
uint256 amount = address(this).balance;
(bool sent, ) = beneficiary.call{value: amount}("");
require(sent, 'Unable to withdraw');
}
function withdrawToken(address beneficiary, address token) public onlyOwner {
uint256 amount = IERC20(token).balanceOf(address(this));
IERC20(token).transfer(beneficiary, amount);
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;
import {ArcBase} from "./ArcBase.sol";
import {IRainbowRoad} from "../interfaces/IRainbowRoad.sol";
/**
* Extends the ArcBase contract to provide
* for interactions with the Rainbow Road
*/
contract ArcBaseWithRainbowRoad is ArcBase
{
IRainbowRoad public rainbowRoad;
constructor(address _rainbowRoad)
{
require(_rainbowRoad != address(0), 'Rainbow Road cannot be zero address');
rainbowRoad = IRainbowRoad(_rainbowRoad);
}
function setRainbowRoad(address _rainbowRoad) external onlyOwner
{
require(_rainbowRoad != address(0), 'Rainbow Road cannot be zero address');
rainbowRoad = IRainbowRoad(_rainbowRoad);
}
/// @dev Only calls from the Rainbow Road are accepted.
modifier onlyRainbowRoad()
{
require(msg.sender == address(rainbowRoad), 'Must be called by Rainbow Road');
_;
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;
interface IArc {
function burn(uint amount) external;
function transfer(address, uint) external returns (bool);
function transferFrom(address _from, address _to, uint _value) external;
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;
import {IArc} from "./IArc.sol";
interface IRainbowRoad {
function acceptTeam() external;
function actionHandlers(string calldata action) external view returns (address);
function arc() external view returns (IArc);
function blockToken(address tokenAddress) external;
function disableFeeManager(address feeManager) external;
function disableOpenTokenWhitelisting() external;
function disableReceiver(address receiver) external;
function disableSender(address sender) external;
function disableSendFeeBurn() external;
function disableSendFeeCharge() external;
function disableWhitelistingFeeBurn() external;
function disableWhitelistingFeeCharge() external;
function enableFeeManager(address feeManager) external;
function enableOpenTokenWhitelisting() external;
function enableReceiver(address receiver) external;
function enableSendFeeBurn() external;
function enableSender(address sender) external;
function enableSendFeeCharge() external;
function enableWhitelistingFeeBurn() external;
function enableWhitelistingFeeCharge() external;
function sendFee() external view returns (uint256);
function whitelistingFee() external view returns (uint256);
function chargeSendFee() external view returns (bool);
function chargeWhitelistingFee() external view returns (bool);
function burnSendFee() external view returns (bool);
function burnWhitelistingFee() external view returns (bool);
function openTokenWhitelisting() external view returns (bool);
function config(string calldata configName) external view returns (bytes memory);
function blockedTokens(address tokenAddress) external view returns (bool);
function feeManagers(address feeManager) external view returns (bool);
function receiveAction(string calldata action, address to, bytes calldata payload) external;
function sendAction(string calldata action, address from, bytes calldata payload) external;
function setActionHandler(string memory action, address handler) external;
function setArc(address _arc) external;
function setSendFee(uint256 _fee) external;
function setTeam(address _team) external;
function setTeamRate(uint256 _teamRate) external;
function setToken(string calldata tokenSymbol, address tokenAddress) external;
function setWhitelistingFee(uint256 _fee) external;
function team() external view returns (address);
function teamRate() external view returns (uint256);
function tokens(string calldata tokenSymbol) external view returns (address);
function MAX_TEAM_RATE() external view returns (uint256);
function receivers(address receiver) external view returns (bool);
function senders(address sender) external view returns (bool);
function unblockToken(address tokenAddress) external;
function whitelist(address tokenAddress) external;
}{
"optimizer": {
"enabled": true,
"runs": 10000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_rainbowRoad","type":"address"},{"internalType":"address","name":"_gateway","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidAddressString","type":"error"},{"inputs":[],"name":"NotApprovedByGateway","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"sourceChainSelector","type":"string"},{"indexed":false,"internalType":"address","name":"messageSender","type":"address"},{"indexed":false,"internalType":"string","name":"action","type":"string"},{"indexed":false,"internalType":"address","name":"actionRecipient","type":"address"}],"name":"MessageReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"sourceChainSelector","type":"string"},{"internalType":"address","name":"messageSender","type":"address"}],"name":"disableMessageSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"sourceChainSelector","type":"string"},{"internalType":"address","name":"messageSender","type":"address"}],"name":"enableMessageSender","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"}],"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":"gateway","outputs":[{"internalType":"contract IAxelarGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"messageSenders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rainbowRoad","outputs":[{"internalType":"contract IRainbowRoad","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rainbowRoad","type":"address"}],"name":"setRainbowRoad","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040523480156200001157600080fd5b5060405162001df038038062001df0833981016040819052620000349162000194565b8082620000413362000109565b6001805460ff60a01b191681556002556001600160a01b038116620000b85760405162461bcd60e51b815260206004820152602360248201527f5261696e626f7720526f61642063616e6e6f74206265207a65726f206164647260448201526265737360e81b606482015260840160405180910390fd5b600380546001600160a01b0319166001600160a01b039283161790558116620000f45760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b031660805250620001cc9050565b600180546001600160a01b0319169055620001248162000127565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200018f57600080fd5b919050565b60008060408385031215620001a857600080fd5b620001b38362000177565b9150620001c36020840162000177565b90509250929050565b608051611bfa620001f6600039600081816101ab01528181610452015261079e0152611bfa6000f3fe60806040526004361061012d5760003560e01c80636a936817116100a55780638da5cb5b11610074578063bfb5944a11610059578063bfb5944a14610390578063e30c3978146103b0578063f2fde38b146103db57600080fd5b80638da5cb5b14610345578063b8b3a3f21461037057600080fd5b80636a936817146102d9578063715018a61461030657806379ba50971461031b5780638456cb591461033057600080fd5b80633aeac4e1116100fc57806349160658116100e1578063491606581461026957806359f07ac7146102895780635c975abb146102a957600080fd5b80633aeac4e1146102345780633f4ba83a1461025457600080fd5b80630cf7d20214610139578063116191b6146101995780631a98b2e0146101f25780632f622e6b1461021457600080fd5b3661013457005b600080fd5b34801561014557600080fd5b50610184610154366004611579565b81516020818401810180516004825292820194820194909420919093529091526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101a557600080fd5b506101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b3480156101fe57600080fd5b5061021261020d366004611614565b6103fb565b005b34801561022057600080fd5b5061021261022f3660046116ee565b61051d565b34801561024057600080fd5b5061021261024f36600461170b565b6105f9565b34801561026057600080fd5b50610212610735565b34801561027557600080fd5b50610212610284366004611739565b610747565b34801561029557600080fd5b506102126102a43660046117dd565b61086e565b3480156102b557600080fd5b5060015474010000000000000000000000000000000000000000900460ff16610184565b3480156102e557600080fd5b506003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031257600080fd5b506102126109c4565b34801561032757600080fd5b506102126109d6565b34801561033c57600080fd5b50610212610a8b565b34801561035157600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101cd565b34801561037c57600080fd5b5061021261038b3660046117dd565b610a9b565b34801561039c57600080fd5b506102126103ab3660046116ee565b610b8b565b3480156103bc57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff166101cd565b3480156103e757600080fd5b506102126103f63660046116ee565b610c7d565b6000858560405161040d929190611834565b6040519081900381207f1876eed9000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631876eed990610497908e908e908e908e908e9089908d908d908d9060040161188d565b6020604051808303816000875af11580156104b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104da91906118ec565b610510576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b610525610d2d565b604051479060009073ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d806000811461057f576040519150601f19603f3d011682016040523d82523d6000602084013e610584565b606091505b50509050806105f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e61626c6520746f207769746864726177000000000000000000000000000060448201526064015b60405180910390fd5b505050565b610601610d2d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610692919061190e565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018390529192509083169063a9059cbb906044016020604051808303816000875af115801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f91906118ec565b50505050565b61073d610d2d565b610745610dae565b565b60008282604051610759929190611834565b6040519081900381207f5f6970c3000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635f6970c3906107dd908b908b908b908b908b908990600401611927565b6020604051808303816000875af11580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082091906118ec565b610856576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610864878787878787610e2b565b5050505050505050565b610876610d2d565b60048383604051610888929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff84166000908152925290205460ff16610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4d6573736167652073656e64657220666f7220736f7572636520636861696e2060448201527f69732064697361626c656400000000000000000000000000000000000000000060648201526084016105eb565b60006004848460405161095d929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff9490941660009081529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555050565b6109cc610d2d565b6107456000611036565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016105eb565b610a8881611036565b50565b610a93610d2d565b610745611067565b610aa3610d2d565b60048383604051610ab5929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff84166000908152925290205460ff1615610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4d6573736167652073656e64657220666f7220736f7572636520636861696e2060448201527f697320656e61626c65640000000000000000000000000000000000000000000060648201526084016105eb565b60016004848460405161095d929190611834565b610b93610d2d565b73ffffffffffffffffffffffffffffffffffffffff8116610c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5261696e626f7720526f61642063616e6e6f74206265207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105eb565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c85610d2d565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155610ce860005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60005473ffffffffffffffffffffffffffffffffffffffff163314610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105eb565b610db66110d6565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e3361115a565b6000610e7485858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111df92505050565b905060048787604051610e88929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff84166000908152925290205460ff16610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e737570706f7274656420736f7572636520636861696e2f6d65737361676560448201527f2073656e6465720000000000000000000000000000000000000000000000000060648201526084016105eb565b60008080610f5985870187611968565b6003546040517f9cdbf4c4000000000000000000000000000000000000000000000000000000008152939650919450925073ffffffffffffffffffffffffffffffffffffffff1690639cdbf4c490610fb990869086908690600401611a58565b600060405180830381600087803b158015610fd357600080fd5b505af1158015610fe7573d6000803e3d6000fd5b505050507f8734405d89315fd0971b2593c5cf4c2763b7b9d3a004c76d2d8eabc8de0101148a8a868686604051611022959493929190611aa3565b60405180910390a150505050505050505050565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610a88816113f8565b61106f61115a565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e013390565b60015474010000000000000000000000000000000000000000900460ff16610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105eb565b60015474010000000000000000000000000000000000000000900460ff1615610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105eb565b6000808290506000808251602a14158061125357508260008151811061120757611207611afc565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f300000000000000000000000000000000000000000000000000000000000000014155b806112b857508260018151811061126c5761126c611afc565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f780000000000000000000000000000000000000000000000000000000000000014155b156112ef576040517fdf48f19e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025b602a8110156113ee5783818151811061130d5761130d611afc565b016020015160f81c91506061821080159061132c575060668260ff1611155b156113435761133c605783611b5a565b91506113c5565b60418260ff161015801561135b575060468260ff1611155b1561136b5761133c603783611b5a565b60308260ff1610158015611383575060398260ff1611155b156113935761133c603083611b5a565b6040517fdf48f19e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026113d2826029611b79565b60ff8416911b1b92909217916113e781611b8c565b90506112f2565b5090949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156114b7576114b761146d565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156114fd576114fd61146d565b8160405280935085815286868601111561151657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261154157600080fd5b6115508383356020850161149c565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a8857600080fd5b6000806040838503121561158c57600080fd5b823567ffffffffffffffff8111156115a357600080fd5b6115af85828601611530565b92505060208301356115c081611557565b809150509250929050565b60008083601f8401126115dd57600080fd5b50813567ffffffffffffffff8111156115f557600080fd5b60208301915083602082850101111561160d57600080fd5b9250929050565b60008060008060008060008060008060c08b8d03121561163357600080fd5b8a35995060208b013567ffffffffffffffff8082111561165257600080fd5b61165e8e838f016115cb565b909b50995060408d013591508082111561167757600080fd5b6116838e838f016115cb565b909950975060608d013591508082111561169c57600080fd5b6116a88e838f016115cb565b909750955060808d01359150808211156116c157600080fd5b506116ce8d828e016115cb565b9150809450508092505060a08b013590509295989b9194979a5092959850565b60006020828403121561170057600080fd5b813561155081611557565b6000806040838503121561171e57600080fd5b823561172981611557565b915060208301356115c081611557565b60008060008060008060006080888a03121561175457600080fd5b87359650602088013567ffffffffffffffff8082111561177357600080fd5b61177f8b838c016115cb565b909850965060408a013591508082111561179857600080fd5b6117a48b838c016115cb565b909650945060608a01359150808211156117bd57600080fd5b506117ca8a828b016115cb565b989b979a50959850939692959293505050565b6000806000604084860312156117f257600080fd5b833567ffffffffffffffff81111561180957600080fd5b611815868287016115cb565b909450925050602084013561182981611557565b809150509250925092565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b89815260c0602082015260006118a760c083018a8c611844565b82810360408401526118ba81898b611844565b905086606084015282810360808401526118d5818688611844565b9150508260a08301529a9950505050505050505050565b6000602082840312156118fe57600080fd5b8151801515811461155057600080fd5b60006020828403121561192057600080fd5b5051919050565b868152608060208201526000611941608083018789611844565b8281036040840152611954818688611844565b915050826060830152979650505050505050565b60008060006060848603121561197d57600080fd5b833567ffffffffffffffff8082111561199557600080fd5b6119a187838801611530565b9450602086013591506119b382611557565b909250604085013590808211156119c957600080fd5b508401601f810186136119db57600080fd5b6119ea8682356020840161149c565b9150509250925092565b6000815180845260005b81811015611a1a576020818501810151868301820152016119fe565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b606081526000611a6b60608301866119f4565b73ffffffffffffffffffffffffffffffffffffffff851660208401528281036040840152611a9981856119f4565b9695505050505050565b608081526000611ab7608083018789611844565b73ffffffffffffffffffffffffffffffffffffffff80871660208501528382036040850152611ae682876119f4565b9250808516606085015250509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8281168282160390811115611b7357611b73611b2b565b92915050565b81810381811115611b7357611b73611b2b565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bbd57611bbd611b2b565b506001019056fea26469706673582212208161eecb3ea38cac4875be1cf8b026a2de4c22cfa1491848720c89adf858db5d64736f6c634300081300330000000000000000000000009de5b4928296d96f48fe67ebb2ca1556827fc6a9000000000000000000000000e432150cce91c13a887f7d836923d5597add8e31
Deployed Bytecode
0x60806040526004361061012d5760003560e01c80636a936817116100a55780638da5cb5b11610074578063bfb5944a11610059578063bfb5944a14610390578063e30c3978146103b0578063f2fde38b146103db57600080fd5b80638da5cb5b14610345578063b8b3a3f21461037057600080fd5b80636a936817146102d9578063715018a61461030657806379ba50971461031b5780638456cb591461033057600080fd5b80633aeac4e1116100fc57806349160658116100e1578063491606581461026957806359f07ac7146102895780635c975abb146102a957600080fd5b80633aeac4e1146102345780633f4ba83a1461025457600080fd5b80630cf7d20214610139578063116191b6146101995780631a98b2e0146101f25780632f622e6b1461021457600080fd5b3661013457005b600080fd5b34801561014557600080fd5b50610184610154366004611579565b81516020818401810180516004825292820194820194909420919093529091526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101a557600080fd5b506101cd7f000000000000000000000000e432150cce91c13a887f7d836923d5597add8e3181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b3480156101fe57600080fd5b5061021261020d366004611614565b6103fb565b005b34801561022057600080fd5b5061021261022f3660046116ee565b61051d565b34801561024057600080fd5b5061021261024f36600461170b565b6105f9565b34801561026057600080fd5b50610212610735565b34801561027557600080fd5b50610212610284366004611739565b610747565b34801561029557600080fd5b506102126102a43660046117dd565b61086e565b3480156102b557600080fd5b5060015474010000000000000000000000000000000000000000900460ff16610184565b3480156102e557600080fd5b506003546101cd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031257600080fd5b506102126109c4565b34801561032757600080fd5b506102126109d6565b34801561033c57600080fd5b50610212610a8b565b34801561035157600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101cd565b34801561037c57600080fd5b5061021261038b3660046117dd565b610a9b565b34801561039c57600080fd5b506102126103ab3660046116ee565b610b8b565b3480156103bc57600080fd5b5060015473ffffffffffffffffffffffffffffffffffffffff166101cd565b3480156103e757600080fd5b506102126103f63660046116ee565b610c7d565b6000858560405161040d929190611834565b6040519081900381207f1876eed9000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e432150cce91c13a887f7d836923d5597add8e311690631876eed990610497908e908e908e908e908e9089908d908d908d9060040161188d565b6020604051808303816000875af11580156104b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104da91906118ec565b610510576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050505050565b610525610d2d565b604051479060009073ffffffffffffffffffffffffffffffffffffffff84169083908381818185875af1925050503d806000811461057f576040519150601f19603f3d011682016040523d82523d6000602084013e610584565b606091505b50509050806105f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e61626c6520746f207769746864726177000000000000000000000000000060448201526064015b60405180910390fd5b505050565b610601610d2d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610692919061190e565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018390529192509083169063a9059cbb906044016020604051808303816000875af115801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f91906118ec565b50505050565b61073d610d2d565b610745610dae565b565b60008282604051610759929190611834565b6040519081900381207f5f6970c3000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e432150cce91c13a887f7d836923d5597add8e311690635f6970c3906107dd908b908b908b908b908b908990600401611927565b6020604051808303816000875af11580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082091906118ec565b610856576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610864878787878787610e2b565b5050505050505050565b610876610d2d565b60048383604051610888929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff84166000908152925290205460ff16610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4d6573736167652073656e64657220666f7220736f7572636520636861696e2060448201527f69732064697361626c656400000000000000000000000000000000000000000060648201526084016105eb565b60006004848460405161095d929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff9490941660009081529390915290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555050565b6109cc610d2d565b6107456000611036565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084016105eb565b610a8881611036565b50565b610a93610d2d565b610745611067565b610aa3610d2d565b60048383604051610ab5929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff84166000908152925290205460ff1615610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4d6573736167652073656e64657220666f7220736f7572636520636861696e2060448201527f697320656e61626c65640000000000000000000000000000000000000000000060648201526084016105eb565b60016004848460405161095d929190611834565b610b93610d2d565b73ffffffffffffffffffffffffffffffffffffffff8116610c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5261696e626f7720526f61642063616e6e6f74206265207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105eb565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c85610d2d565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155610ce860005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60005473ffffffffffffffffffffffffffffffffffffffff163314610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105eb565b610db66110d6565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610e3361115a565b6000610e7485858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111df92505050565b905060048787604051610e88929190611834565b908152604080516020928190038301902073ffffffffffffffffffffffffffffffffffffffff84166000908152925290205460ff16610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f556e737570706f7274656420736f7572636520636861696e2f6d65737361676560448201527f2073656e6465720000000000000000000000000000000000000000000000000060648201526084016105eb565b60008080610f5985870187611968565b6003546040517f9cdbf4c4000000000000000000000000000000000000000000000000000000008152939650919450925073ffffffffffffffffffffffffffffffffffffffff1690639cdbf4c490610fb990869086908690600401611a58565b600060405180830381600087803b158015610fd357600080fd5b505af1158015610fe7573d6000803e3d6000fd5b505050507f8734405d89315fd0971b2593c5cf4c2763b7b9d3a004c76d2d8eabc8de0101148a8a868686604051611022959493929190611aa3565b60405180910390a150505050505050505050565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610a88816113f8565b61106f61115a565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e013390565b60015474010000000000000000000000000000000000000000900460ff16610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105eb565b60015474010000000000000000000000000000000000000000900460ff1615610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105eb565b6000808290506000808251602a14158061125357508260008151811061120757611207611afc565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f300000000000000000000000000000000000000000000000000000000000000014155b806112b857508260018151811061126c5761126c611afc565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f780000000000000000000000000000000000000000000000000000000000000014155b156112ef576040517fdf48f19e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025b602a8110156113ee5783818151811061130d5761130d611afc565b016020015160f81c91506061821080159061132c575060668260ff1611155b156113435761133c605783611b5a565b91506113c5565b60418260ff161015801561135b575060468260ff1611155b1561136b5761133c603783611b5a565b60308260ff1610158015611383575060398260ff1611155b156113935761133c603083611b5a565b6040517fdf48f19e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026113d2826029611b79565b60ff8416911b1b92909217916113e781611b8c565b90506112f2565b5090949350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156114b7576114b761146d565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156114fd576114fd61146d565b8160405280935085815286868601111561151657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261154157600080fd5b6115508383356020850161149c565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a8857600080fd5b6000806040838503121561158c57600080fd5b823567ffffffffffffffff8111156115a357600080fd5b6115af85828601611530565b92505060208301356115c081611557565b809150509250929050565b60008083601f8401126115dd57600080fd5b50813567ffffffffffffffff8111156115f557600080fd5b60208301915083602082850101111561160d57600080fd5b9250929050565b60008060008060008060008060008060c08b8d03121561163357600080fd5b8a35995060208b013567ffffffffffffffff8082111561165257600080fd5b61165e8e838f016115cb565b909b50995060408d013591508082111561167757600080fd5b6116838e838f016115cb565b909950975060608d013591508082111561169c57600080fd5b6116a88e838f016115cb565b909750955060808d01359150808211156116c157600080fd5b506116ce8d828e016115cb565b9150809450508092505060a08b013590509295989b9194979a5092959850565b60006020828403121561170057600080fd5b813561155081611557565b6000806040838503121561171e57600080fd5b823561172981611557565b915060208301356115c081611557565b60008060008060008060006080888a03121561175457600080fd5b87359650602088013567ffffffffffffffff8082111561177357600080fd5b61177f8b838c016115cb565b909850965060408a013591508082111561179857600080fd5b6117a48b838c016115cb565b909650945060608a01359150808211156117bd57600080fd5b506117ca8a828b016115cb565b989b979a50959850939692959293505050565b6000806000604084860312156117f257600080fd5b833567ffffffffffffffff81111561180957600080fd5b611815868287016115cb565b909450925050602084013561182981611557565b809150509250925092565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b89815260c0602082015260006118a760c083018a8c611844565b82810360408401526118ba81898b611844565b905086606084015282810360808401526118d5818688611844565b9150508260a08301529a9950505050505050505050565b6000602082840312156118fe57600080fd5b8151801515811461155057600080fd5b60006020828403121561192057600080fd5b5051919050565b868152608060208201526000611941608083018789611844565b8281036040840152611954818688611844565b915050826060830152979650505050505050565b60008060006060848603121561197d57600080fd5b833567ffffffffffffffff8082111561199557600080fd5b6119a187838801611530565b9450602086013591506119b382611557565b909250604085013590808211156119c957600080fd5b508401601f810186136119db57600080fd5b6119ea8682356020840161149c565b9150509250925092565b6000815180845260005b81811015611a1a576020818501810151868301820152016119fe565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b606081526000611a6b60608301866119f4565b73ffffffffffffffffffffffffffffffffffffffff851660208401528281036040840152611a9981856119f4565b9695505050505050565b608081526000611ab7608083018789611844565b73ffffffffffffffffffffffffffffffffffffffff80871660208501528382036040850152611ae682876119f4565b9250808516606085015250509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8281168282160390811115611b7357611b73611b2b565b92915050565b81810381811115611b7357611b73611b2b565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bbd57611bbd611b2b565b506001019056fea26469706673582212208161eecb3ea38cac4875be1cf8b026a2de4c22cfa1491848720c89adf858db5d64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009de5b4928296d96f48fe67ebb2ca1556827fc6a9000000000000000000000000e432150cce91c13a887f7d836923d5597add8e31
-----Decoded View---------------
Arg [0] : _rainbowRoad (address): 0x9DE5b4928296D96f48Fe67ebB2cA1556827fc6A9
Arg [1] : _gateway (address): 0xe432150cce91c13a887f7D836923d5597adD8E31
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009de5b4928296d96f48fe67ebb2ca1556827fc6a9
Arg [1] : 000000000000000000000000e432150cce91c13a887f7d836923d5597add8e31
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.