Source Code
Latest 25 from a total of 76,814 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Relayer Toke... | 63049782 | 13 mins ago | IN | 0 BTT | 16.6647 | ||||
| Set Relayer Toke... | 63036690 | 7 hrs ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 63004400 | 26 hrs ago | IN | 0 BTT | 16.6755 | ||||
| Set Relayer Toke... | 62998290 | 29 hrs ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 62996545 | 30 hrs ago | IN | 0 BTT | 16.6647 | ||||
| Set Relayer Toke... | 62976472 | 42 hrs ago | IN | 0 BTT | 16.6647 | ||||
| Set Relayer Toke... | 62959890 | 2 days ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 62952037 | 2 days ago | IN | 0 BTT | 16.6647 | ||||
| Set Relayer Toke... | 62923236 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62921496 | 3 days ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 62921496 | 3 days ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 62921496 | 3 days ago | IN | 0 BTT | 16.6755 | ||||
| Set Relayer Toke... | 62921495 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62921495 | 3 days ago | IN | 0 BTT | 16.6611 | ||||
| Set Relayer Toke... | 62921494 | 3 days ago | IN | 0 BTT | 16.6647 | ||||
| Set Relayer Toke... | 62921493 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62921493 | 3 days ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 62921492 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62921492 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62921491 | 3 days ago | IN | 0 BTT | 16.6647 | ||||
| Set Relayer Toke... | 62921491 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62921490 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62912764 | 3 days ago | IN | 0 BTT | 16.6719 | ||||
| Set Relayer Toke... | 62896182 | 3 days ago | IN | 0 BTT | 16.6683 | ||||
| Set Relayer Toke... | 62889200 | 3 days ago | IN | 0 BTT | 16.6647 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 62563858 | 11 days ago | 22,887,238.151041 BTT | ||||
| 62254250 | 18 days ago | 8,325,526.110291 BTT | ||||
| 62158051 | 21 days ago | 4,472,130.687797 BTT | ||||
| 62064967 | 23 days ago | 22,887,238.151041 BTT | ||||
| 61304906 | 41 days ago | 4,472,130.687797 BTT | ||||
| 61046532 | 47 days ago | 4,472,130.687797 BTT | ||||
| 61038568 | 48 days ago | 22,887,238.151041 BTT | ||||
| 61038550 | 48 days ago | 22,887,238.151041 BTT | ||||
| 61038528 | 48 days ago | 22,887,238.151041 BTT | ||||
| 61037375 | 48 days ago | 22,887,238.151041 BTT | ||||
| 61037358 | 48 days ago | 22,887,238.151041 BTT | ||||
| 61037285 | 48 days ago | 22,887,238.151041 BTT | ||||
| 61022656 | 48 days ago | 4,472,130.687797 BTT | ||||
| 60868847 | 52 days ago | 20,568,962.414722 BTT | ||||
| 60868818 | 52 days ago | 20,568,962.414722 BTT | ||||
| 60786276 | 54 days ago | 20,568,962.414722 BTT | ||||
| 60786224 | 54 days ago | 20,568,962.414722 BTT | ||||
| 60744343 | 55 days ago | 20,568,962.414722 BTT | ||||
| 60744318 | 55 days ago | 20,568,962.414722 BTT | ||||
| 60744261 | 55 days ago | 20,568,962.414722 BTT | ||||
| 60729404 | 55 days ago | 4,472,130.687797 BTT | ||||
| 60705814 | 55 days ago | 20,568,962.414722 BTT | ||||
| 60704864 | 55 days ago | 20,568,962.414722 BTT | ||||
| 60685132 | 56 days ago | 8,325,526.110291 BTT | ||||
| 60663633 | 56 days ago | 8,325,526.110291 BTT |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RelayerMaster
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/**
*Submitted for verification at bttcscan.com on 2024-05-16
*/
// Sources flattened with hardhat v2.22.1 https://hardhat.org
// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
// File contracts/lib/utils/Context.sol
// Original license: SPDX_License_Identifier: MIT
pragma solidity >=0.6.0 <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 GSN 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 payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File contracts/lib/access/Ownable.sol
// Original license: SPDX_License_Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @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 () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File contracts/lib/token/ERC20/IERC20.sol
// Original license: SPDX_License_Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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 `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool);
/**
* @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);
}
// File contracts/lib/math/SafeMath.sol
// Original license: SPDX_License_Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}
// File contracts/lib/utils/Address.sol
// Original license: SPDX_License_Identifier: MIT
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File contracts/lib/token/ERC20/SafeERC20.sol
// Original license: SPDX_License_Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File contracts/child/ChildToken/ChildERC20Exit/RelayerMaster.sol
pragma solidity 0.6.6;
// Original pragma directive: pragma experimental ABIEncoderV2
contract RelayerMaster is Ownable{
using SafeERC20 for IERC20;
address public childERC20Relay;
address public childERC20RelayStake;
event Recovered(address from, address token, uint256 amount);
mapping(address => mapping(address => mapping(bytes32 => bool))) acl;
constructor(address _childERC20Relay, address _ChildERC20RelayStake) public{
childERC20Relay = _childERC20Relay;
childERC20RelayStake = _ChildERC20RelayStake;
}
receive() external payable {
}
fallback() external payable auth(childERC20Relay,msg.sig){
if(msg.sender != childERC20Relay){
forward(childERC20Relay, msg.data);
}
}
function permit(address user, address target, bytes32 sig, bool allow) external onlyOwner {
acl[user][target][sig] = allow;
}
function execute(bytes calldata _calldata) payable external auth(childERC20RelayStake,getSelector(_calldata)){
if(msg.sender != childERC20RelayStake){
forward(childERC20RelayStake, _calldata);
}
}
function recoverBTT(address payable _to, uint256 _amount) external auth(address(this),msg.sig){
require(_to != address(0), "RelayerMaster: need non-zero value");
require(_amount > 0, "RelayerMaster: need non-zero value");
_to.transfer(_amount);
emit Recovered(msg.sender, _to, _amount);
}
function recoverERC20(address tokenAddress, address to, uint256 tokenAmount) external auth(address(this),msg.sig) {
IERC20(tokenAddress).safeTransfer(to, tokenAmount);
emit Recovered(msg.sender, to, tokenAmount);
}
function canCall(address user, address target, bytes32 sig) public view returns (bool){
return acl[user][target][sig];
}
modifier auth(address target, bytes4 selector){
require(acl[msg.sender][target][selector], "RelayerMaster: INSUFFICIENT_PERMISSIONS");
_;
}
function getSelector(bytes memory _calldata) internal pure returns(bytes4){
bytes4 selector;
assembly {
selector := mload(add(_calldata, 32))
}
return selector;
}
function forward(address _dst, bytes memory _calldata) internal {
// solium-disable-next-line security/no-inline-assembly
assembly {
let result := call(
sub(gas(), 10000),
_dst,
callvalue(),
add(_calldata, 0x20),
mload(_calldata),
0,
0
)
let size := returndatasize()
let ptr := mload(0x40)
returndatacopy(ptr, 0, size)
// revert instead of invalid() bc if the underlying call failed with invalid() it already wasted gas.
// if the call returned error data, forward it
switch result
case 0 {
revert(ptr, size)
}
default {
return(ptr, size)
}
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_childERC20Relay","type":"address"},{"internalType":"address","name":"_ChildERC20RelayStake","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"from","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"sig","type":"bytes32"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childERC20Relay","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childERC20RelayStake","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"sig","type":"bytes32"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverBTT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610f42380380610f4283398101604081905261002f916100c1565b60006100426001600160e01b036100bd16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610112565b3390565b600080604083850312156100d3578182fd5b82516100de816100fa565b60208401519092506100ef816100fa565b809150509250929050565b6001600160a01b038116811461010f57600080fd5b50565b610e21806101216000396000f3fe6080604052600436106100955760003560e01c8063883e283b11610059578063883e283b14610202578063897f5318146102245780638da5cb5b14610239578063a2d3ebf61461024e578063f2fde38b1461026e5761009c565b806309c5eabe146101625780631171bda9146101775780631c49896b146101975780632f7df536146101b7578063715018a6146101ed5761009c565b3661009c57005b6001543360009081526003602090815260408083206001600160a01b039094168084529382528083206001600160e01b031984351680855292529091205460ff166101025760405162461bcd60e51b81526004016100f990610cd1565b60405180910390fd5b6001546001600160a01b0316331461015e5760015460408051602036601f810182900482028301820190935282825261015e936001600160a01b0316926000918190840183828082843760009201919091525061028e92505050565b5050005b610175610170366004610ab9565b6102b7565b005b34801561018357600080fd5b50610175610192366004610a89565b6103ba565b3480156101a357600080fd5b506101756101b2366004610a37565b610465565b3480156101c357600080fd5b506101d76101d23660046109f7565b6104e8565b6040516101e49190610b90565b60405180910390f35b3480156101f957600080fd5b50610175610521565b34801561020e57600080fd5b506102176105aa565b6040516101e49190610b3f565b34801561023057600080fd5b506102176105b9565b34801561024557600080fd5b506102176105c8565b34801561025a57600080fd5b506101756102693660046109cc565b6105d7565b34801561027a57600080fd5b506101756102893660046109b0565b6106e4565b60008082516020840134866127105a03f13d604051816000823e8280156102b3578282f35b8282fd5b600254604080516020601f85018190048102820181019092528381526001600160a01b03909216916103039185908590819084018382808284376000920191909152506107a492505050565b3360009081526003602090815260408083206001600160a01b038616845282528083206001600160e01b03198516845290915290205460ff166103585760405162461bcd60e51b81526004016100f990610cd1565b6002546001600160a01b031633146103b457600254604080516020601f87018190048102820181019092528581526103b4926001600160a01b031691879087908190840183828082843760009201919091525061028e92505050565b50505050565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166104095760405162461bcd60e51b81526004016100f990610cd1565b6104236001600160a01b038616858563ffffffff6107ab16565b7ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b64833858560405161045693929190610b53565b60405180910390a15050505050565b61046d610806565b6001600160a01b031661047e6105c8565b6001600160a01b0316146104a45760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0393841660009081526003602090815260408083209590961682529384528481209281529190925291909120805460ff1916911515919091179055565b6001600160a01b03808416600090815260036020908152604080832093861683529281528282208483529052205460ff165b9392505050565b610529610806565b6001600160a01b031661053a6105c8565b6001600160a01b0316146105605760405162461bcd60e51b81526004016100f990610c9c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002546001600160a01b031681565b6001546001600160a01b031681565b6000546001600160a01b031690565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166106265760405162461bcd60e51b81526004016100f990610cd1565b6001600160a01b03841661064c5760405162461bcd60e51b81526004016100f990610bce565b6000831161066c5760405162461bcd60e51b81526004016100f990610bce565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156106a2573d6000803e3d6000fd5b507ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6483385856040516106d693929190610b53565b60405180910390a150505050565b6106ec610806565b6001600160a01b03166106fd6105c8565b6001600160a01b0316146107235760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0381166107495760405162461bcd60e51b81526004016100f990610c10565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6020015190565b6108018363a9059cbb60e01b84846040516024016107ca929190610b77565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261080a565b505050565b3390565b606061085f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108999092919063ffffffff16565b805190915015610801578080602001905181019061087d9190610a9d565b6108015760405162461bcd60e51b81526004016100f990610d4f565b60606108a884846000856108b0565b949350505050565b6060824710156108d25760405162461bcd60e51b81526004016100f990610c56565b6108db85610971565b6108f75760405162461bcd60e51b81526004016100f990610d18565b60006060866001600160a01b031685876040516109149190610b23565b60006040518083038185875af1925050503d8060008114610951576040519150601f19603f3d011682016040523d82523d6000602084013e610956565b606091505b5091509150610966828286610977565b979650505050505050565b3b151590565b6060831561098657508161051a565b8251156109965782518084602001fd5b8160405162461bcd60e51b81526004016100f99190610b9b565b6000602082840312156109c1578081fd5b813561051a81610dc5565b600080604083850312156109de578081fd5b82356109e981610dc5565b946020939093013593505050565b600080600060608486031215610a0b578081fd5b8335610a1681610dc5565b92506020840135610a2681610dc5565b929592945050506040919091013590565b60008060008060808587031215610a4c578081fd5b8435610a5781610dc5565b93506020850135610a6781610dc5565b9250604085013591506060850135610a7e81610ddd565b939692955090935050565b600080600060608486031215610a0b578283fd5b600060208284031215610aae578081fd5b815161051a81610ddd565b60008060208385031215610acb578182fd5b823567ffffffffffffffff80821115610ae2578384fd5b81850186601f820112610af3578485fd5b8035925081831115610b03578485fd5b866020848301011115610b14578485fd5b60200196919550909350505050565b60008251610b35818460208701610d99565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082528251806020840152610bba816040850160208701610d99565b601f01601f19169190910160400192915050565b60208082526022908201527f52656c617965724d61737465723a206e656564206e6f6e2d7a65726f2076616c604082015261756560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f52656c617965724d61737465723a20494e53554646494349454e545f5045524d604082015266495353494f4e5360c81b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b83811015610db4578181015183820152602001610d9c565b838111156103b45750506000910152565b6001600160a01b0381168114610dda57600080fd5b50565b8015158114610dda57600080fdfea2646970667358221220cce4181848c6f1206e0255bb6398287f762e3b5583af7129d9e4d4c079aad04f64736f6c634300060600330000000000000000000000002c166b83394838d650e4985ce93de26cfa68a25d000000000000000000000000dca98bbf5377f2a30b86b6207c925beca1688fb7
Deployed Bytecode
0x6080604052600436106100955760003560e01c8063883e283b11610059578063883e283b14610202578063897f5318146102245780638da5cb5b14610239578063a2d3ebf61461024e578063f2fde38b1461026e5761009c565b806309c5eabe146101625780631171bda9146101775780631c49896b146101975780632f7df536146101b7578063715018a6146101ed5761009c565b3661009c57005b6001543360009081526003602090815260408083206001600160a01b039094168084529382528083206001600160e01b031984351680855292529091205460ff166101025760405162461bcd60e51b81526004016100f990610cd1565b60405180910390fd5b6001546001600160a01b0316331461015e5760015460408051602036601f810182900482028301820190935282825261015e936001600160a01b0316926000918190840183828082843760009201919091525061028e92505050565b5050005b610175610170366004610ab9565b6102b7565b005b34801561018357600080fd5b50610175610192366004610a89565b6103ba565b3480156101a357600080fd5b506101756101b2366004610a37565b610465565b3480156101c357600080fd5b506101d76101d23660046109f7565b6104e8565b6040516101e49190610b90565b60405180910390f35b3480156101f957600080fd5b50610175610521565b34801561020e57600080fd5b506102176105aa565b6040516101e49190610b3f565b34801561023057600080fd5b506102176105b9565b34801561024557600080fd5b506102176105c8565b34801561025a57600080fd5b506101756102693660046109cc565b6105d7565b34801561027a57600080fd5b506101756102893660046109b0565b6106e4565b60008082516020840134866127105a03f13d604051816000823e8280156102b3578282f35b8282fd5b600254604080516020601f85018190048102820181019092528381526001600160a01b03909216916103039185908590819084018382808284376000920191909152506107a492505050565b3360009081526003602090815260408083206001600160a01b038616845282528083206001600160e01b03198516845290915290205460ff166103585760405162461bcd60e51b81526004016100f990610cd1565b6002546001600160a01b031633146103b457600254604080516020601f87018190048102820181019092528581526103b4926001600160a01b031691879087908190840183828082843760009201919091525061028e92505050565b50505050565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166104095760405162461bcd60e51b81526004016100f990610cd1565b6104236001600160a01b038616858563ffffffff6107ab16565b7ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b64833858560405161045693929190610b53565b60405180910390a15050505050565b61046d610806565b6001600160a01b031661047e6105c8565b6001600160a01b0316146104a45760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0393841660009081526003602090815260408083209590961682529384528481209281529190925291909120805460ff1916911515919091179055565b6001600160a01b03808416600090815260036020908152604080832093861683529281528282208483529052205460ff165b9392505050565b610529610806565b6001600160a01b031661053a6105c8565b6001600160a01b0316146105605760405162461bcd60e51b81526004016100f990610c9c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002546001600160a01b031681565b6001546001600160a01b031681565b6000546001600160a01b031690565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166106265760405162461bcd60e51b81526004016100f990610cd1565b6001600160a01b03841661064c5760405162461bcd60e51b81526004016100f990610bce565b6000831161066c5760405162461bcd60e51b81526004016100f990610bce565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156106a2573d6000803e3d6000fd5b507ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6483385856040516106d693929190610b53565b60405180910390a150505050565b6106ec610806565b6001600160a01b03166106fd6105c8565b6001600160a01b0316146107235760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0381166107495760405162461bcd60e51b81526004016100f990610c10565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6020015190565b6108018363a9059cbb60e01b84846040516024016107ca929190610b77565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261080a565b505050565b3390565b606061085f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108999092919063ffffffff16565b805190915015610801578080602001905181019061087d9190610a9d565b6108015760405162461bcd60e51b81526004016100f990610d4f565b60606108a884846000856108b0565b949350505050565b6060824710156108d25760405162461bcd60e51b81526004016100f990610c56565b6108db85610971565b6108f75760405162461bcd60e51b81526004016100f990610d18565b60006060866001600160a01b031685876040516109149190610b23565b60006040518083038185875af1925050503d8060008114610951576040519150601f19603f3d011682016040523d82523d6000602084013e610956565b606091505b5091509150610966828286610977565b979650505050505050565b3b151590565b6060831561098657508161051a565b8251156109965782518084602001fd5b8160405162461bcd60e51b81526004016100f99190610b9b565b6000602082840312156109c1578081fd5b813561051a81610dc5565b600080604083850312156109de578081fd5b82356109e981610dc5565b946020939093013593505050565b600080600060608486031215610a0b578081fd5b8335610a1681610dc5565b92506020840135610a2681610dc5565b929592945050506040919091013590565b60008060008060808587031215610a4c578081fd5b8435610a5781610dc5565b93506020850135610a6781610dc5565b9250604085013591506060850135610a7e81610ddd565b939692955090935050565b600080600060608486031215610a0b578283fd5b600060208284031215610aae578081fd5b815161051a81610ddd565b60008060208385031215610acb578182fd5b823567ffffffffffffffff80821115610ae2578384fd5b81850186601f820112610af3578485fd5b8035925081831115610b03578485fd5b866020848301011115610b14578485fd5b60200196919550909350505050565b60008251610b35818460208701610d99565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082528251806020840152610bba816040850160208701610d99565b601f01601f19169190910160400192915050565b60208082526022908201527f52656c617965724d61737465723a206e656564206e6f6e2d7a65726f2076616c604082015261756560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f52656c617965724d61737465723a20494e53554646494349454e545f5045524d604082015266495353494f4e5360c81b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b83811015610db4578181015183820152602001610d9c565b838111156103b45750506000910152565b6001600160a01b0381168114610dda57600080fd5b50565b8015158114610dda57600080fdfea2646970667358221220cce4181848c6f1206e0255bb6398287f762e3b5583af7129d9e4d4c079aad04f64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002c166b83394838d650e4985ce93de26cfa68a25d000000000000000000000000dca98bbf5377f2a30b86b6207c925beca1688fb7
-----Decoded View---------------
Arg [0] : _childERC20Relay (address): 0x2C166B83394838D650E4985cE93dE26CFA68A25D
Arg [1] : _ChildERC20RelayStake (address): 0xdCA98bbf5377F2A30b86B6207C925Beca1688fb7
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002c166b83394838d650e4985ce93de26cfa68a25d
Arg [1] : 000000000000000000000000dca98bbf5377f2a30b86b6207c925beca1688fb7
Deployed Bytecode Sourcemap
25893:3086:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26460:15;;27784:10;26460:15;27780;;;:3;:15;;;;;;;;-1:-1:-1;;;;;26460:15:0;;;27780:23;;;;;;;;;-1:-1:-1;;;;;;26476:7:0;;;27780:33;;;;;;;;;;;27772:85;;;;-1:-1:-1;;;27772:85:0;;;;;;;;;;;;;;;;;26512:15:::1;::::0;-1:-1:-1;;;;;26512:15:0::1;26498:10;:29;26495:94;;26551:15;::::0;26543:34:::1;::::0;;::::1;26568:8;26543:34;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;26551:15:0::1;::::0;-1:-1:-1;;26568:8:0;;26543:34;::::1;-1:-1:-1::0;26568:8:0;;-1:-1:-1;26543:34:0;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26543:7:0::1;::::0;-1:-1:-1;;;26543:34:0:i:1;:::-;26427:169:::0;;25893:3086;26751:232;;;;;;;;;:::i;:::-;;27328:237;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27328:237:0;;;;;;;;:::i;26604:139::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;26604:139:0;;;;;;;;:::i;27573:134::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27573:134:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2967:148;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2967:148:0;;;:::i;26003:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26003:35:0;;;:::i;:::-;;;;;;;;25966:30;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25966:30:0;;;:::i;2316:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2316:87:0;;;:::i;26991:329::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;26991:329:0;;;;;;;;:::i;3270:244::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;3270:244:0;;;;;;;;:::i;28113:861::-;28469:1;28453;28428:9;28422:16;28402:4;28391:9;28387:20;28361:11;28342:4;28321:5;28314;28310:17;28291:194;28511:16;28560:4;28554:11;28602:4;28599:1;28594:3;28579:28;28805:6;28825:58;;;;28936:4;28931:3;28924:17;28825:58;28863:4;28858:3;28851:17;26751:232;26816:20;;26837:22;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26816:20:0;;;;26837:22;;26849:9;;;;;;26837:22;;26849:9;;;;26837:22;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;26837:11:0;;-1:-1:-1;;;26837:22:0:i;:::-;27784:10;27780:15;;;;:3;:15;;;;;;;;-1:-1:-1;;;;;27780:23:0;;;;;;;;;-1:-1:-1;;;;;;27780:33:0;;;;;;;;;;;;27772:85;;;;-1:-1:-1;;;27772:85:0;;;;;;;;;26888:20:::1;::::0;-1:-1:-1;;;;;26888:20:0::1;26874:10;:34;26871:105;;26932:20;::::0;26924:40:::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;26932:20:0::1;::::0;26954:9;;;;;;26924:40;::::1;26954:9:::0;;;;26924:40;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26924:7:0::1;::::0;-1:-1:-1;;;26924:40:0:i:1;:::-;26751:232:::0;;;;:::o;27328:237::-;27784:10;27433:7;27780:15;;;:3;:15;;;;;;;;27427:4;27780:23;;;;;;;;;-1:-1:-1;;;;;;27433:7:0;;;27780:33;;;;;;;;;;27772:85;;;;-1:-1:-1;;;27772:85:0;;;;;;;;;27453:50:::1;-1:-1:-1::0;;;;;27453:33:0;::::1;27487:2:::0;27491:11;27453:50:::1;:33;:50;:::i;:::-;27519:38;27529:10;27541:2;27545:11;27519:38;;;;;;;;;;;;;;;;;27328:237:::0;;;;;:::o;26604:139::-;2547:12;:10;:12::i;:::-;-1:-1:-1;;;;;2536:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2536:23:0;;2528:68;;;;-1:-1:-1;;;2528:68:0;;;;;;;;;-1:-1:-1;;;;;26705:9:0;;::::1;;::::0;;;:3:::1;:9;::::0;;;;;;;:17;;;::::1;::::0;;;;;;;;:22;;;;;;;;;;;:30;;-1:-1:-1;;26705:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26604:139::o;27573:134::-;-1:-1:-1;;;;;27677:9:0;;;27654:4;27677:9;;;:3;:9;;;;;;;;:17;;;;;;;;;;;:22;;;;;;;;;27573:134;;;;;;:::o;2967:148::-;2547:12;:10;:12::i;:::-;-1:-1:-1;;;;;2536:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2536:23:0;;2528:68;;;;-1:-1:-1;;;2528:68:0;;;;;;;;;3074:1:::1;3058:6:::0;;3037:40:::1;::::0;-1:-1:-1;;;;;3058:6:0;;::::1;::::0;3037:40:::1;::::0;3074:1;;3037:40:::1;3105:1;3088:19:::0;;-1:-1:-1;;;;;;3088:19:0::1;::::0;;2967:148::o;26003:35::-;;;-1:-1:-1;;;;;26003:35:0;;:::o;25966:30::-;;;-1:-1:-1;;;;;25966:30:0;;:::o;2316:87::-;2362:7;2389:6;-1:-1:-1;;;;;2389:6:0;2316:87;:::o;26991:329::-;27784:10;27077:7;27780:15;;;:3;:15;;;;;;;;27071:4;27780:23;;;;;;;;;-1:-1:-1;;;;;;27077:7:0;;;27780:33;;;;;;;;;;27772:85;;;;-1:-1:-1;;;27772:85:0;;;;;;;;;-1:-1:-1;;;;;27104:17:0;::::1;27096:64;;;;-1:-1:-1::0;;;27096:64:0::1;;;;;;;;;27189:1;27179:7;:11;27171:58;;;;-1:-1:-1::0;;;27171:58:0::1;;;;;;;;;27240:21;::::0;-1:-1:-1;;;;;27240:12:0;::::1;::::0;:21;::::1;;;::::0;27253:7;;27240:21:::1;::::0;;;27253:7;27240:12;:21;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27240:21:0;27277:35;27287:10;27299:3;27304:7;27277:35;;;;;;;;;;;;;;;;;26991:329:::0;;;;:::o;3270:244::-;2547:12;:10;:12::i;:::-;-1:-1:-1;;;;;2536:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2536:23:0;;2528:68;;;;-1:-1:-1;;;2528:68:0;;;;;;;;;-1:-1:-1;;;;;3359:22:0;::::1;3351:73;;;;-1:-1:-1::0;;;3351:73:0::1;;;;;;;;;3461:6;::::0;;3440:38:::1;::::0;-1:-1:-1;;;;;3440:38:0;;::::1;::::0;3461:6;::::1;::::0;3440:38:::1;::::0;::::1;3489:6;:17:::0;;-1:-1:-1;;;;;;3489:17:0::1;-1:-1:-1::0;;;;;3489:17:0;;;::::1;::::0;;;::::1;::::0;;3270:244::o;27885:220::-;28057:2;28042:18;28036:25;;27885:220::o;22653:177::-;22736:86;22756:5;22786:23;;;22811:2;22815:5;22763:58;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;22763:58:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;22763:58:0;;;179:29:-1;;;;160:49;;;22736:19:0;:86::i;:::-;22653:177;;;:::o;811:106::-;899:10;811:106;:::o;24958:761::-;25382:23;25408:69;25436:4;25408:69;;;;;;;;;;;;;;;;;25416:5;-1:-1:-1;;;;;25408:27:0;;;:69;;;;;:::i;:::-;25492:17;;25382:95;;-1:-1:-1;25492:21:0;25488:224;;25634:10;25623:30;;;;;;;;;;;;;;25615:85;;;;-1:-1:-1;;;25615:85:0;;;;;;;;17608:195;17711:12;17743:52;17765:6;17773:4;17779:1;17782:12;17743:21;:52::i;:::-;17736:59;17608:195;-1:-1:-1;;;;17608:195:0:o;18660:530::-;18787:12;18845:5;18820:21;:30;;18812:81;;;;-1:-1:-1;;;18812:81:0;;;;;;;;;18912:18;18923:6;18912:10;:18::i;:::-;18904:60;;;;-1:-1:-1;;;18904:60:0;;;;;;;;;19038:12;19052:23;19079:6;-1:-1:-1;;;;;19079:11:0;19099:5;19107:4;19079:33;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19037:75:0;;;;19130:52;19148:7;19157:10;19169:12;19130:17;:52::i;:::-;19123:59;18660:530;-1:-1:-1;;;;;;;18660:530:0:o;14690:422::-;15057:20;15096:8;;;14690:422::o;21200:742::-;21315:12;21344:7;21340:595;;;-1:-1:-1;21375:10:0;21368:17;;21340:595;21489:17;;:21;21485:439;;21752:10;21746:17;21813:15;21800:10;21796:2;21792:19;21785:44;21700:148;21895:12;21888:20;;-1:-1:-1;;;21888:20:0;;;;;;;;;1193:241:-1;;1297:2;1285:9;1276:7;1272:23;1268:32;1265:2;;;-1:-1;;1303:12;1265:2;85:6;72:20;97:33;124:5;97:33;;1441:382;;;1570:2;1558:9;1549:7;1545:23;1541:32;1538:2;;;-1:-1;;1576:12;1538:2;230:6;217:20;242:41;277:5;242:41;;;1628:71;1736:2;1775:22;;;;1123:20;;-1:-1;;;1532:291;1830:491;;;;1968:2;1956:9;1947:7;1943:23;1939:32;1936:2;;;-1:-1;;1974:12;1936:2;85:6;72:20;97:33;124:5;97:33;;;2026:63;-1:-1;2126:2;2165:22;;72:20;97:33;72:20;97:33;;;1930:391;;2134:63;;-1:-1;;;2234:2;2273:22;;;;628:20;;1930:391;2328:611;;;;;2480:3;2468:9;2459:7;2455:23;2451:33;2448:2;;;-1:-1;;2487:12;2448:2;85:6;72:20;97:33;124:5;97:33;;;2539:63;-1:-1;2639:2;2678:22;;72:20;97:33;72:20;97:33;;;2647:63;-1:-1;2747:2;2786:22;;628:20;;-1:-1;2855:2;2891:22;;359:20;384:30;359:20;384:30;;;2442:497;;;;-1:-1;2442:497;;-1:-1;;2442:497;2946:491;;;;3084:2;3072:9;3063:7;3059:23;3055:32;3052:2;;;-1:-1;;3090:12;3444:257;;3556:2;3544:9;3535:7;3531:23;3527:32;3524:2;;;-1:-1;;3562:12;3524:2;507:6;501:13;519:30;543:5;519:30;;3708:365;;;3831:2;3819:9;3810:7;3806:23;3802:32;3799:2;;;-1:-1;;3837:12;3799:2;3895:17;3882:31;3933:18;;3925:6;3922:30;3919:2;;;-1:-1;;3955:12;3919:2;4040:6;4029:9;4025:22;826:3;819:4;811:6;807:17;803:27;793:2;;-1:-1;;834:12;793:2;877:6;864:20;854:30;;3933:18;896:6;893:30;890:2;;;-1:-1;;926:12;890:2;1021:3;3831:2;1001:17;962:6;987:32;;984:41;981:2;;;-1:-1;;1028:12;981:2;3831;958:17;;3983:74;;-1:-1;3793:280;;-1:-1;;;;3793:280;7897:262;;4620:5;13150:12;4731:52;4776:6;4771:3;4764:4;4757:5;4753:16;4731:52;;;4795:16;;;;;8022:137;-1:-1;;8022:137;8166:213;-1:-1;;;;;14082:54;;;;4300:37;;8284:2;8269:18;;8255:124;8386:467;-1:-1;;;;;14082:54;;;4159:58;;14082:54;;;;8756:2;8741:18;;4159:58;8839:2;8824:18;;7848:37;;;;8576:2;8561:18;;8547:306;9318:324;-1:-1;;;;;14082:54;;;;4300:37;;9628:2;9613:18;;7848:37;9464:2;9449:18;;9435:207;9649:201;13915:13;;13908:21;4414:34;;9761:2;9746:18;;9732:118;9857:301;;9995:2;10016:17;10009:47;4968:5;13150:12;13589:6;9995:2;9984:9;9980:18;13577:19;5062:52;5107:6;13617:14;9984:9;13617:14;9995:2;5088:5;5084:16;5062:52;;;14967:7;14951:14;-1:-1;;14947:28;5126:39;;;;13617:14;5126:39;;9966:192;-1:-1;;9966:192;10165:407;10356:2;10370:47;;;5402:2;10341:18;;;13577:19;5438:34;13617:14;;;5418:55;-1:-1;;;5493:12;;;5486:26;5531:12;;;10327:245;10579:407;10770:2;10784:47;;;5782:2;10755:18;;;13577:19;5818:34;13617:14;;;5798:55;-1:-1;;;5873:12;;;5866:30;5915:12;;;10741:245;10993:407;11184:2;11198:47;;;6166:2;11169:18;;;13577:19;6202:34;13617:14;;;6182:55;-1:-1;;;6257:12;;;6250:30;6299:12;;;11155:245;11407:407;11598:2;11612:47;;;11583:18;;;13577:19;6586:34;13617:14;;;6566:55;6640:12;;;11569:245;11821:407;12012:2;12026:47;;;6891:2;11997:18;;;13577:19;6927:34;13617:14;;;6907:55;-1:-1;;;6982:12;;;6975:31;7025:12;;;11983:245;12235:407;12426:2;12440:47;;;7276:2;12411:18;;;13577:19;7312:31;13617:14;;;7292:52;7363:12;;;12397:245;12649:407;12840:2;12854:47;;;7614:2;12825:18;;;13577:19;7650:34;13617:14;;;7630:55;-1:-1;;;7705:12;;;7698:34;7751:12;;;12811:245;14607:268;14672:1;14679:101;14693:6;14690:1;14687:13;14679:101;;;14760:11;;;14754:18;14741:11;;;14734:39;14715:2;14708:10;14679:101;;;14795:6;14792:1;14789:13;14786:2;;;-1:-1;;14672:1;14842:16;;14835:27;14656:219;14988:117;-1:-1;;;;;14082:54;;15047:35;;15037:2;;15096:1;;15086:12;15037:2;15031:74;;15252:111;15333:5;13915:13;13908:21;15311:5;15308:32;15298:2;;15354:1;;15344:12
Swarm Source
ipfs://cce4181848c6f1206e0255bb6398287f762e3b5583af7129d9e4d4c079aad04f
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$7,312.12
Net Worth in BTT
Token Allocations
USDD_T
48.41%
TRX
13.02%
BTTC
11.90%
Others
26.68%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BTTC | 48.41% | $0.999425 | 3,541.5109 | $3,539.47 | |
| BTTC | 13.02% | $0.296274 | 3,212.1595 | $951.68 | |
| BTTC | 11.90% | <$0.000001 | 2,144,619,907.8428 | $870.37 | |
| BTTC | 7.25% | $0.296274 | 1,790.3987 | $530.45 | |
| BTTC | 6.82% | $0.998552 | 499.2924 | $498.57 | |
| BTTC | 4.61% | $2,958.44 | 0.1139 | $337.08 | |
| BTTC | 4.15% | $0.296274 | 1,023.909 | $303.36 | |
| BTTC | 0.88% | $0.999425 | 64.5259 | $64.49 | |
| BTTC | 0.81% | <$0.000001 | 167,102,726.4527 | $59.32 | |
| BTTC | 0.54% | <$0.000001 | 96,853,482.6614 | $39.31 | |
| BTTC | 0.42% | <$0.000001 | 74,940,292.1939 | $30.42 | |
| BTTC | 0.38% | $0.999425 | 27.4862 | $27.47 | |
| BTTC | 0.29% | <$0.000001 | 60,743,630.9844 | $21.56 | |
| BTTC | 0.11% | $0.999349 | 8.0294 | $8.02 | |
| BTTC | 0.11% | $0.000026 | 302,557.5561 | $7.9 | |
| BTTC | 0.11% | $0.998552 | 7.8507 | $7.84 | |
| BTTC | 0.09% | $887.52 | 0.00765 | $6.79 | |
| BTTC | 0.04% | $0.998552 | 2.7528 | $2.75 | |
| BTTC | 0.03% | <$0.000001 | 5,289,325.8523 | $1.88 | |
| BTTC | 0.02% | $0.999664 | 1.781 | $1.78 | |
| BTTC | 0.02% | $0.000026 | 61,657.3294 | $1.61 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.