Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 255 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim Swap | 230144871 | 20 days ago | IN | 0 ETH | 0.00000194 | ||||
| Participate Swap | 230144868 | 20 days ago | IN | 0 ETH | 0.0000018 | ||||
| Initiate Swap | 230144865 | 20 days ago | IN | 0 ETH | 0.00000698 | ||||
| Claim Swap | 230144723 | 20 days ago | IN | 0 ETH | 0.00000194 | ||||
| Participate Swap | 230144716 | 20 days ago | IN | 0 ETH | 0.0000018 | ||||
| Initiate Swap | 230144712 | 20 days ago | IN | 0 ETH | 0.00000698 | ||||
| Claim Swap | 230143458 | 20 days ago | IN | 0 ETH | 0.00000194 | ||||
| Participate Swap | 230143455 | 20 days ago | IN | 0 ETH | 0.00000179 | ||||
| Initiate Swap | 230143451 | 20 days ago | IN | 0 ETH | 0.00000698 | ||||
| Claim Swap | 230143097 | 20 days ago | IN | 0 ETH | 0.00000196 | ||||
| Participate Swap | 230143090 | 20 days ago | IN | 0 ETH | 0.00000179 | ||||
| Initiate Swap | 230143082 | 20 days ago | IN | 0 ETH | 0.00000698 | ||||
| Claim Swap | 230140601 | 20 days ago | IN | 0 ETH | 0.00000205 | ||||
| Participate Swap | 230140594 | 20 days ago | IN | 0 ETH | 0.00000179 | ||||
| Initiate Swap | 230140587 | 20 days ago | IN | 0 ETH | 0.00000699 | ||||
| Claim Swap | 230140314 | 20 days ago | IN | 0 ETH | 0.00000194 | ||||
| Participate Swap | 230140310 | 20 days ago | IN | 0 ETH | 0.0000018 | ||||
| Initiate Swap | 230140308 | 20 days ago | IN | 0 ETH | 0.00000698 | ||||
| Claim Swap | 230140070 | 20 days ago | IN | 0 ETH | 0.00000194 | ||||
| Participate Swap | 230140067 | 20 days ago | IN | 0 ETH | 0.0000018 | ||||
| Initiate Swap | 230140065 | 20 days ago | IN | 0 ETH | 0.00000699 | ||||
| Claim Swap | 230139759 | 20 days ago | IN | 0 ETH | 0.00000228 | ||||
| Participate Swap | 230139752 | 20 days ago | IN | 0 ETH | 0.00000179 | ||||
| Initiate Swap | 230139745 | 20 days ago | IN | 0 ETH | 0.00000698 | ||||
| Add Whitelisted ... | 230139709 | 20 days ago | IN | 0 ETH | 0.0000009 |
Loading...
Loading
Contract Name:
XFTMultiAssetSwap
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract XFTMultiAssetSwap is ReentrancyGuard {
struct TokenEntry {
IERC20 token;
uint256 amount;
}
struct Swap {
address initiator;
address participant;
TokenEntry[] initiatorTokens;
uint256 basketPriceUSD;
IERC20 participantToken;
uint256 participantAmount;
bytes32 hashlock;
uint256 timelock;
bool initiatorDeposited;
bool participantDeposited;
bool completed;
bool refunded;
}
mapping(bytes32 => Swap) public swaps;
mapping(address => bool) public whitelistedTokens;
bytes32[] public allSwapIds;
address public constant USDXT = 0xC1BF9854E43b84f3abec5f5d1C72F0a6f602034b;
event SwapInitiated(
bytes32 indexed swapId,
address indexed initiator,
address indexed participant,
uint256 totalTokenCount,
uint256 basketPriceUSD,
address participantToken,
uint256 participantAmount,
bytes32 hashlock,
uint256 timelock
);
event SwapParticipated(
bytes32 indexed swapId,
address indexed participant,
address participantToken,
uint256 amount
);
event SwapCompleted(
bytes32 indexed swapId,
bytes32 preimage
);
event SwapRefunded(
bytes32 indexed swapId,
address indexed refunder
);
event TokenWhitelisted(address indexed token, bool whitelisted);
modifier swapExists(bytes32 _swapId) {
require(swaps[_swapId].initiator != address(0), "Swap does not exist");
_;
}
modifier onlyInitiator(bytes32 _swapId) {
require(msg.sender == swaps[_swapId].initiator, "Only initiator allowed");
_;
}
modifier onlyParticipant(bytes32 _swapId) {
require(msg.sender == swaps[_swapId].participant, "Only participant allowed");
_;
}
constructor() {
whitelistedTokens[USDXT] = true;
emit TokenWhitelisted(USDXT, true);
}
function addWhitelistedToken(address token) external {
whitelistedTokens[token] = true;
emit TokenWhitelisted(token, true);
}
// Step 1: Alice initiates swap with basket + asking price
function initiateSwap(
bytes32 _swapId,
address _participant,
address[] calldata _initiatorTokens,
uint256[] calldata _initiatorAmounts,
uint256 _basketPriceUSD,
address _participantToken,
bytes32 _hashlock,
uint256 _timelock
) external nonReentrant {
require(swaps[_swapId].initiator == address(0), "Swap exists");
require(_participant != address(0), "Invalid participant");
require(_participant != msg.sender, "Self swap not allowed");
require(_initiatorTokens.length == _initiatorAmounts.length, "Array length mismatch");
require(_initiatorTokens.length > 0, "No initiator tokens");
require(_basketPriceUSD > 0, "Invalid basket price");
require(whitelistedTokens[_participantToken], "Participant token not whitelisted");
require(_timelock > block.timestamp + 1 hours, "Timelock too short");
require(_hashlock != bytes32(0), "Invalid hashlock");
uint256 totalTokenCount = 0;
for (uint256 i = 0; i < _initiatorAmounts.length; i++) {
require(_initiatorAmounts[i] > 0, "Invalid initiator amount");
totalTokenCount += _initiatorAmounts[i];
}
require(totalTokenCount > 0, "Zero total tokens");
Swap storage swap = swaps[_swapId];
swap.initiator = msg.sender;
swap.participant = _participant;
swap.basketPriceUSD = _basketPriceUSD;
swap.participantToken = IERC20(_participantToken);
swap.participantAmount = _basketPriceUSD;
swap.hashlock = _hashlock;
swap.timelock = _timelock;
swap.initiatorDeposited = false;
swap.participantDeposited = false;
swap.completed = false;
swap.refunded = false;
// Store basket tokens
for (uint256 i = 0; i < _initiatorTokens.length; i++) {
swap.initiatorTokens.push(TokenEntry({
token: IERC20(_initiatorTokens[i]),
amount: _initiatorAmounts[i]
}));
}
// Alice deposits her basket tokens
for (uint256 i = 0; i < swap.initiatorTokens.length; i++) {
require(
swap.initiatorTokens[i].token.transferFrom(
msg.sender,
address(this),
swap.initiatorTokens[i].amount
),
"Initiator transfer failed"
);
}
swap.initiatorDeposited = true;
allSwapIds.push(_swapId);
emit SwapInitiated(
_swapId,
msg.sender,
_participant,
totalTokenCount,
_basketPriceUSD,
_participantToken,
_basketPriceUSD,
_hashlock,
_timelock
);
}
// Step 2: Bob accepts by depositing USDXT
function participateSwap(bytes32 _swapId)
external
nonReentrant
swapExists(_swapId)
onlyParticipant(_swapId)
{
Swap storage swap = swaps[_swapId];
require(!swap.participantDeposited, "Already participated");
require(!swap.completed, "Swap completed");
require(!swap.refunded, "Swap refunded");
require(block.timestamp < swap.timelock, "Swap expired");
require(swap.initiatorDeposited, "Initiator not deposited");
// Bob deposits USDXT equal to Alice's asking price
require(
swap.participantToken.transferFrom(
msg.sender,
address(this),
swap.participantAmount
),
"Participant transfer failed"
);
swap.participantDeposited = true;
emit SwapParticipated(
_swapId,
msg.sender,
address(swap.participantToken),
swap.participantAmount
);
}
// Step 3: ATOMIC SWAP - Anyone can claim with correct preimage
function claimSwap(bytes32 _swapId, bytes32 _preimage)
external
nonReentrant
swapExists(_swapId)
{
Swap storage swap = swaps[_swapId];
require(!swap.completed, "Swap completed");
require(!swap.refunded, "Swap refunded");
require(swap.initiatorDeposited && swap.participantDeposited, "Both deposits required");
require(block.timestamp < swap.timelock, "Swap expired");
require(sha256(abi.encodePacked(_preimage)) == swap.hashlock, "Bad preimage");
swap.completed = true;
// ATOMIC TRANSFER: Alice gets USDXT, Bob gets basket
require(
swap.participantToken.transfer(
swap.initiator,
swap.participantAmount
),
"USDXT to Alice failed"
);
for (uint256 i = 0; i < swap.initiatorTokens.length; i++) {
require(
swap.initiatorTokens[i].token.transfer(
swap.participant,
swap.initiatorTokens[i].amount
),
"Basket to Bob failed"
);
}
emit SwapCompleted(_swapId, _preimage);
}
// Refund after timelock expires
function refundSwap(bytes32 _swapId)
external
nonReentrant
swapExists(_swapId)
{
Swap storage swap = swaps[_swapId];
require(!swap.completed, "Swap completed");
require(!swap.refunded, "Swap refunded");
require(block.timestamp >= swap.timelock, "Too early");
require(
msg.sender == swap.initiator || msg.sender == swap.participant,
"Not swap party"
);
swap.refunded = true;
// Refund Alice's basket
if (swap.initiatorDeposited) {
for (uint256 i = 0; i < swap.initiatorTokens.length; i++) {
require(
swap.initiatorTokens[i].token.transfer(
swap.initiator,
swap.initiatorTokens[i].amount
),
"Refund Alice failed"
);
}
}
// Refund Bob's USDXT
if (swap.participantDeposited) {
require(
swap.participantToken.transfer(
swap.participant,
swap.participantAmount
),
"Refund Bob failed"
);
}
emit SwapRefunded(_swapId, msg.sender);
}
// SIMPLE VIEW FUNCTIONS
function getSwap(bytes32 _swapId)
external
view
returns (
address initiator,
address participant,
uint256 basketPriceUSD,
uint256 participantAmount,
bytes32 hashlock,
uint256 timelock,
bool initiatorDeposited,
bool participantDeposited,
bool completed,
bool refunded
)
{
Swap storage swap = swaps[_swapId];
return (
swap.initiator,
swap.participant,
swap.basketPriceUSD,
swap.participantAmount,
swap.hashlock,
swap.timelock,
swap.initiatorDeposited,
swap.participantDeposited,
swap.completed,
swap.refunded
);
}
function getBasketTokens(bytes32 _swapId)
external
view
returns (address[] memory tokens, uint256[] memory amounts)
{
Swap storage swap = swaps[_swapId];
uint256 length = swap.initiatorTokens.length;
tokens = new address[](length);
amounts = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
tokens[i] = address(swap.initiatorTokens[i].token);
amounts[i] = swap.initiatorTokens[i].amount;
}
}
function getAllSwaps() external view returns (bytes32[] memory) {
return allSwapIds;
}
function getActiveSwaps() external view returns (bytes32[] memory activeSwapIds) {
uint256 activeCount = 0;
for (uint256 i = 0; i < allSwapIds.length; i++) {
Swap storage swap = swaps[allSwapIds[i]];
if (!swap.completed && !swap.refunded && swap.initiatorDeposited && !swap.participantDeposited && block.timestamp < swap.timelock) {
activeCount++;
}
}
activeSwapIds = new bytes32[](activeCount);
uint256 index = 0;
for (uint256 i = 0; i < allSwapIds.length; i++) {
Swap storage swap = swaps[allSwapIds[i]];
if (!swap.completed && !swap.refunded && swap.initiatorDeposited && !swap.participantDeposited && block.timestamp < swap.timelock) {
activeSwapIds[index] = allSwapIds[i];
index++;
}
}
}
function getSwapStatus(bytes32 _swapId) external view returns (string memory) {
Swap storage swap = swaps[_swapId];
if (swap.initiator == address(0)) {
return "DOES_NOT_EXIST";
} else if (swap.completed) {
return "COMPLETED";
} else if (swap.refunded) {
return "REFUNDED";
} else if (block.timestamp >= swap.timelock) {
return "EXPIRED";
} else if (!swap.initiatorDeposited) {
return "PENDING_ALICE_DEPOSIT";
} else if (!swap.participantDeposited) {
return "PENDING_BOB_ACCEPTANCE";
} else {
return "READY_FOR_CLAIM";
}
}
}// 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);
}{
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"preimage","type":"bytes32"}],"name":"SwapCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalTokenCount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"basketPriceUSD","type":"uint256"},{"indexed":false,"internalType":"address","name":"participantToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"participantAmount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timelock","type":"uint256"}],"name":"SwapInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"participant","type":"address"},{"indexed":false,"internalType":"address","name":"participantToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapParticipated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"swapId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"refunder","type":"address"}],"name":"SwapRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"TokenWhitelisted","type":"event"},{"inputs":[],"name":"USDXT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addWhitelistedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allSwapIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"},{"internalType":"bytes32","name":"_preimage","type":"bytes32"}],"name":"claimSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActiveSwaps","outputs":[{"internalType":"bytes32[]","name":"activeSwapIds","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllSwaps","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"getBasketTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"getSwap","outputs":[{"internalType":"address","name":"initiator","type":"address"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"basketPriceUSD","type":"uint256"},{"internalType":"uint256","name":"participantAmount","type":"uint256"},{"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"internalType":"uint256","name":"timelock","type":"uint256"},{"internalType":"bool","name":"initiatorDeposited","type":"bool"},{"internalType":"bool","name":"participantDeposited","type":"bool"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"getSwapStatus","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"address[]","name":"_initiatorTokens","type":"address[]"},{"internalType":"uint256[]","name":"_initiatorAmounts","type":"uint256[]"},{"internalType":"uint256","name":"_basketPriceUSD","type":"uint256"},{"internalType":"address","name":"_participantToken","type":"address"},{"internalType":"bytes32","name":"_hashlock","type":"bytes32"},{"internalType":"uint256","name":"_timelock","type":"uint256"}],"name":"initiateSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"participateSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_swapId","type":"bytes32"}],"name":"refundSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"swaps","outputs":[{"internalType":"address","name":"initiator","type":"address"},{"internalType":"address","name":"participant","type":"address"},{"internalType":"uint256","name":"basketPriceUSD","type":"uint256"},{"internalType":"contract IERC20","name":"participantToken","type":"address"},{"internalType":"uint256","name":"participantAmount","type":"uint256"},{"internalType":"bytes32","name":"hashlock","type":"bytes32"},{"internalType":"uint256","name":"timelock","type":"uint256"},{"internalType":"bool","name":"initiatorDeposited","type":"bool"},{"internalType":"bool","name":"participantDeposited","type":"bool"},{"internalType":"bool","name":"completed","type":"bool"},{"internalType":"bool","name":"refunded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608080604052346100745760016000557fef81a9943b96c8df4ef243401c9bf5159146166211356898b52d382086168d92602073c1bf9854e43b84f3abec5f5d1c72f0a6f602034b9283600052600282526040600020600160ff1982541617905560018152a2604051611c1c908161007a8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631818a9fa1461141d5780631d03a89e14610cd35780632f263f2814610c9b578063363cb34d14610c335780633da0e66e14610b8c5780634c00057514610b3f5780637319cade146108ba578063ccd65d2b1461088b578063cfd53d06146106c0578063d6cfeae014610635578063daf9c210146105f6578063eb84e7f214610541578063f298495b146103e85763fe2510ee146100b657600080fd5b346103e3576020806003193601126103e3576004356100d36118f2565b8060005260019182815260018060a01b036100f681604060002054161515611948565b8260005283825260406000209060088201805461011960ff8260101c161561198a565b61012960ff8260181c16156119c7565b600784015442106103b25782845416331480156103a4575b1561036e5763ff000000198116630100000017825560ff1661026f575b5460081c60ff16610199575b50505033907fc672feaa452bd52b0000f3d29c943cd9331556ab05529d49e984311220c16c19600080a3600055005b6004828101548684015460059094015460405163a9059cbb60e01b81529484166001600160a01b03169285019290925260248401919091528391839116816000816044810103925af190811561026357600091610236575b50156101fe57808061016a565b6064906040519062461bcd60e51b8252600482015260116024820152701499599d5b9908109bd88819985a5b1959607a1b6044820152fd5b6102569150823d841161025c575b61024e818361189c565b8101906118da565b386101f1565b503d610244565b6040513d6000823e3d90fd5b600283016000875b610283575b505061015e565b8154811015610369576102e6868561029b84866118be565b50541686885416908b6102ae86886118be565b50015460405163a9059cbb60e01b81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af19081156102635760009161034c575b5015610311579061030a8892611861565b9091610277565b60405162461bcd60e51b81526004810187905260136024820152721499599d5b9908105b1a58d94819985a5b1959606a1b6044820152606490fd5b6103639150873d891161025c5761024e818361189c565b386102f9565b61027c565b60405162461bcd60e51b815260048101869052600e60248201526d4e6f74207377617020706172747960901b6044820152606490fd5b508287850154163314610141565b60405162461bcd60e51b8152600481018690526009602482015268546f6f206561726c7960b81b6044820152606490fd5b600080fd5b346103e3576020806003193601126103e35760043560005260019081815260026040600020019182549161041b83611a3e565b92610429604051948561189c565b80845261043581611a3e565b9482850191601f1980970136843761044c81611a3e565b9161045a604051938461189c565b81835261046682611a3e565b838601980136893760005b8281106104ee57505050604051946040860190604087525180915260608601929060005b8181106104d2575050508482038584015251808252908201949160005b8281106104bf5785870386f35b83518752958101959281019284016104b2565b82516001600160a01b0316855293850193918501918601610495565b8061050261053692849b999b9897986118be565b50546001600160a01b0316610517828b611a56565b528961052382856118be565b5001546105308287611a56565b52611861565b979597949394610471565b346103e35760203660031901126103e3576004356000526001602052610160604060002060ff60018060a01b03808354169281600182015416916003820154906004830154166005830154906006840154926008600786015495015495604051988952602089015260408801526060870152608086015260a085015260c0840152818116151560e0840152818160081c161515610100840152818160101c16151561012084015260181c161515610140820152f35b346103e35760203660031901126103e3576001600160a01b0361061761176f565b166000526002602052602060ff604060002054166040519015158152f35b346103e35760003660031901126103e357604051806003549182815260208091019260036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b8282106106a9576106a5856106998189038261189c565b60405191829182611826565b0390f35b835486529485019460019384019390910190610682565b346103e35760003660031901126103e35760008060038054915b8281106107e557506106eb83611a3e565b926106f9604051948561189c565b808452610708601f1991611a3e565b01602090368286013760009060005b84811061072c57604051806106a58882611826565b610735816117b6565b905490851b1c6000526001825260406000206008908181015460ff90818160101c161593846107d6575b846107cc575b846107bf575b505050816107b1575b50610788575b61078390611861565b610717565b916107a961078391610799856117b6565b905490871b1c610530828a611a56565b92905061077a565b600791500154421087610774565b1c1615915088808061076b565b8183169450610765565b9350818160181c16159361075f565b6107ee816117b6565b905490831b1c600052600160205260406000206008908181015460ff90818160101c1615938461087c575b84610872575b84610865575b50505081610857575b50610842575b61083d90611861565b6106da565b9261084f61083d91611861565b939050610834565b60079150015442108561082e565b1c16159150868080610825565b818316945061081f565b9350818160181c161593610819565b346103e35760003660031901126103e357602060405173c1bf9854e43b84f3abec5f5d1c72f0a6f602034b8152f35b346103e3576020806003193601126103e3576004356108d76118f2565b60008181526001835260409020546001600160a01b03906108fb9082161515611948565b816000526001835280600160406000200154163303610afa57816000526001835260406000209260088401805460ff8160081c16610abe578061094560ff809360101c161561198a565b610954828260181c16156119c7565b61096360078801544210611a03565b1615610a795760048581018054600590970180546040516323b872dd60e01b81523394810194909452306024850152604484015296909391908290829060649082906000908a165af190811561026357600091610a5c575b5015610a185750805461010061ff001990911617905554925460408051929094166001600160a01b03168252602082015233927f36a01c935797536d077135d008f5d95df22b54744528d9cd0f795ab881c52a9191a36001600055005b6064906040519062461bcd60e51b82526004820152601b60248201527f5061727469636970616e74207472616e73666572206661696c656400000000006044820152fd5b610a739150823d841161025c5761024e818361189c565b876109bb565b60405162461bcd60e51b815260048101839052601760248201527f496e69746961746f72206e6f74206465706f73697465640000000000000000006044820152606490fd5b60405162461bcd60e51b8152600481018490526014602482015273105b1c9958591e481c185c9d1a58da5c185d195960621b6044820152606490fd5b60405162461bcd60e51b815260048101849052601860248201527f4f6e6c79207061727469636970616e7420616c6c6f77656400000000000000006044820152606490fd5b346103e35760203660031901126103e357610b5b600435611a6a565b60408051809260208252610b7e8151809281602086015260208686019101611803565b601f01601f19168101030190f35b346103e35760203660031901126103e3576004356000526001602052610140604060002060ff60018060a01b0391828154169260018201541690600381015460058201546006830154916008600785015494015494604051978852602088015260408701526060860152608085015260a0840152818116151560c0840152818160081c16151560e0840152818160101c16151561010084015260181c161515610120820152f35b346103e35760203660031901126103e3576001600160a01b03610c5461176f565b168060005260026020526040600020600160ff198254161790557fef81a9943b96c8df4ef243401c9bf5159146166211356898b52d382086168d92602060405160018152a2005b346103e35760203660031901126103e3576004356003548110156103e357610cc46020916117b6565b90549060031b1c604051908152f35b346103e3576101003660031901126103e3576024356001600160a01b03811681036103e35760443567ffffffffffffffff81116103e357610d18903690600401611785565b909160643567ffffffffffffffff81116103e357610d3a903690600401611785565b60a43594909291906001600160a01b03861686036103e357610d5a6118f2565b6004356000908152600160205260409020546001600160a01b03166113ea576001600160a01b038316156113af576001600160a01b0383163314611372578385036113355784156112fa57608435156112be576001600160a01b03861660009081526002602052604090205460ff161561126f57610e1042018042116111a25760e43511156112355760c435156111fd5760009360005b81811061116c57508415611133576004356000526001602052604060002095336001600160601b0360a01b8854161787556001870160018060a01b0386166001600160601b0360a01b82541617905560843560038801556004870160018060a01b0389166001600160601b0360a01b825416179055608435600588015560c435600688015560e435600788015563ffffffff19600888015416600888015560005b81811061106457505050505060005b6002840154811015610f995760006020610f0e610ec184600289016118be565b50546001600160a01b03166001610edb8660028b016118be565b5001546040516323b872dd60e01b8152336004820152306024820152604481019190915293849283919082906064820190565b03925af190811561026357600091610f7a575b5015610f3557610f3090611861565b610ea1565b60405162461bcd60e51b815260206004820152601960248201527f496e69746961746f72207472616e73666572206661696c6564000000000000006044820152606490fd5b610f93915060203d60201161025c5761024e818361189c565b86610f21565b5060088301805460ff191660011790556003548490600160401b81101561104e57806001610fca92016003556117b6565b81549060031b90600435821b91600019901b1916179055604051928352608435602084015260018060a01b03166040830152608435606083015260c435608083015260e43560a083015260018060a01b03169033907fc8bea22eed072b9aab051e260502f9c16ac334a1e82898448c564da3aac4fc8c60c060043592a46001600055005b634e487b7160e01b600052604160045260246000fd5b61106f818386611870565b35906001600160a01b03821682036103e35761108c818588611870565b356040519283604081011067ffffffffffffffff60408601111761104e57604084810190526001600160a01b0316835260208301526002890154600160401b81101561104e578060016110e8920160028c015560028b016118be565b61111d576001602061111894828060a01b038151166001600160601b0360a01b8554161784550151910155611861565b610e92565b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b81526020600482015260116024820152705a65726f20746f74616c20746f6b656e7360781b6044820152606490fd5b94611178868386611870565b35156111b857611189868386611870565b3581018091116111a25761119d9095611861565b610df1565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e69746961746f7220616d6f756e7400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420686173686c6f636b60801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271151a5b595b1bd8dac81d1bdbc81cda1bdc9d60721b6044820152606490fd5b60405162461bcd60e51b815260206004820152602160248201527f5061727469636970616e7420746f6b656e206e6f742077686974656c697374656044820152601960fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206261736b657420707269636560601b6044820152606490fd5b60405162461bcd60e51b81526020600482015260136024820152724e6f20696e69746961746f7220746f6b656e7360681b6044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527414d95b19881cddd85c081b9bdd08185b1b1bddd959605a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c185c9d1a58da5c185b9d606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a537761702065786973747360a81b6044820152606490fd5b346103e35760403660031901126103e35760043560249081359161143f6118f2565b8160005260019260209184835260018060a01b039061146682604060002054161515611948565b84600052858452604060002060088101805461148860ff8260101c161561198a565b61149860ff8260181c16156119c7565b60ff811680611762575b15611725576114b660078401544210611a03565b8660006114e3604051838101908a82528481526114d281611880565b604051928392839251928391611803565b8101039060025afa15610263576000516006840154036116f2576201000062ff000019919091161790556004818101548254600584015460405163a9059cbb60e01b8082529288166001600160a01b03169481019490945260248401529291908790829060449082906000908a165af1908115610263576000916116d5575b50156116995787919293600083600284019301935b6115ad575b89897f7430d80e0e3cfb925010ff8993f6a56392199211e297fc7825278f29980ccf518a8a604051908152a2600055005b82548110156116945761160988836115c584876118be565b50541684875416908d6115d886896118be565b5001546040518a81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af190811561026357600091611677575b501561163c57906116318a9695949392611861565b909192939495611577565b60405162461bcd60e51b8152600481018990526014818801527310985cdad95d081d1bc8109bd88819985a5b195960621b6044820152606490fd5b61168e9150893d8b1161025c5761024e818361189c565b8b61161c565b61157c565b60405162461bcd60e51b815260048101879052601581850152741554d11615081d1bc8105b1a58d94819985a5b1959605a1b6044820152606490fd5b6116ec9150873d891161025c5761024e818361189c565b89611562565b60405162461bcd60e51b815260048101889052600c818601526b42616420707265696d61676560a01b6044820152606490fd5b60405162461bcd60e51b81526004810188905260168186015275109bdd1a0819195c1bdcda5d1cc81c995c5d5a5c995960521b6044820152606490fd5b5060ff8160081c166114a2565b600435906001600160a01b03821682036103e357565b9181601f840112156103e35782359167ffffffffffffffff83116103e3576020808501948460051b0101116103e357565b6003548110156117ed5760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b634e487b7160e01b600052603260045260246000fd5b60005b8381106118165750506000910152565b8181015183820152602001611806565b6020908160408183019282815285518094520193019160005b82811061184d575050505090565b83518552938101939281019260010161183f565b60001981146111a25760010190565b91908110156117ed5760051b0190565b6040810190811067ffffffffffffffff82111761104e57604052565b90601f8019910116810190811067ffffffffffffffff82111761104e57604052565b80548210156117ed5760005260206000209060011b0190600090565b908160209103126103e3575180151581036103e35790565b600260005414611903576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b1561194f57565b60405162461bcd60e51b815260206004820152601360248201527214ddd85c08191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b1561199157565b60405162461bcd60e51b815260206004820152600e60248201526d14ddd85c0818dbdb5c1b195d195960921b6044820152606490fd5b156119ce57565b60405162461bcd60e51b815260206004820152600d60248201526c14ddd85c081c99599d5b991959609a1b6044820152606490fd5b15611a0a57565b60405162461bcd60e51b815260206004820152600c60248201526b14ddd85c08195e1c1a5c995960a21b6044820152606490fd5b67ffffffffffffffff811161104e5760051b60200190565b80518210156117ed5760209160051b010190565b60005260206001815260408060002060018060a01b0381541615600014611ab457506d1113d154d7d393d517d1561254d560921b905191611aaa83611880565b600e835282015290565b60088101549060ff8260101c16600014611aed5750506810d3d354131155115160ba1b905191611ae383611880565b6009835282015290565b60ff8260181c16600014611b1f57505067149151955391115160c21b905191611b1583611880565b6008835282015290565b600701544210611b4b5750661156141254915160ca1b905191611b4183611880565b6007835282015290565b60ff8116611b8357507414115391125391d7d0531250d157d1115413d4d255605a1b905191611b7983611880565b6015835282015290565b60081c60ff16611bbd577550454e44494e475f424f425f414343455054414e434560501b905191611bb383611880565b6016835282015290565b6e52454144595f464f525f434c41494d60881b905191611bdc83611880565b600f83528201529056fea2646970667358221220aa8265e9309f4858f979f87c26da4d9ccf7172f79feeadf01f969164da40253c64736f6c63430008120033
Deployed Bytecode
0x6080604052600436101561001257600080fd5b60003560e01c80631818a9fa1461141d5780631d03a89e14610cd35780632f263f2814610c9b578063363cb34d14610c335780633da0e66e14610b8c5780634c00057514610b3f5780637319cade146108ba578063ccd65d2b1461088b578063cfd53d06146106c0578063d6cfeae014610635578063daf9c210146105f6578063eb84e7f214610541578063f298495b146103e85763fe2510ee146100b657600080fd5b346103e3576020806003193601126103e3576004356100d36118f2565b8060005260019182815260018060a01b036100f681604060002054161515611948565b8260005283825260406000209060088201805461011960ff8260101c161561198a565b61012960ff8260181c16156119c7565b600784015442106103b25782845416331480156103a4575b1561036e5763ff000000198116630100000017825560ff1661026f575b5460081c60ff16610199575b50505033907fc672feaa452bd52b0000f3d29c943cd9331556ab05529d49e984311220c16c19600080a3600055005b6004828101548684015460059094015460405163a9059cbb60e01b81529484166001600160a01b03169285019290925260248401919091528391839116816000816044810103925af190811561026357600091610236575b50156101fe57808061016a565b6064906040519062461bcd60e51b8252600482015260116024820152701499599d5b9908109bd88819985a5b1959607a1b6044820152fd5b6102569150823d841161025c575b61024e818361189c565b8101906118da565b386101f1565b503d610244565b6040513d6000823e3d90fd5b600283016000875b610283575b505061015e565b8154811015610369576102e6868561029b84866118be565b50541686885416908b6102ae86886118be565b50015460405163a9059cbb60e01b81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af19081156102635760009161034c575b5015610311579061030a8892611861565b9091610277565b60405162461bcd60e51b81526004810187905260136024820152721499599d5b9908105b1a58d94819985a5b1959606a1b6044820152606490fd5b6103639150873d891161025c5761024e818361189c565b386102f9565b61027c565b60405162461bcd60e51b815260048101869052600e60248201526d4e6f74207377617020706172747960901b6044820152606490fd5b508287850154163314610141565b60405162461bcd60e51b8152600481018690526009602482015268546f6f206561726c7960b81b6044820152606490fd5b600080fd5b346103e3576020806003193601126103e35760043560005260019081815260026040600020019182549161041b83611a3e565b92610429604051948561189c565b80845261043581611a3e565b9482850191601f1980970136843761044c81611a3e565b9161045a604051938461189c565b81835261046682611a3e565b838601980136893760005b8281106104ee57505050604051946040860190604087525180915260608601929060005b8181106104d2575050508482038584015251808252908201949160005b8281106104bf5785870386f35b83518752958101959281019284016104b2565b82516001600160a01b0316855293850193918501918601610495565b8061050261053692849b999b9897986118be565b50546001600160a01b0316610517828b611a56565b528961052382856118be565b5001546105308287611a56565b52611861565b979597949394610471565b346103e35760203660031901126103e3576004356000526001602052610160604060002060ff60018060a01b03808354169281600182015416916003820154906004830154166005830154906006840154926008600786015495015495604051988952602089015260408801526060870152608086015260a085015260c0840152818116151560e0840152818160081c161515610100840152818160101c16151561012084015260181c161515610140820152f35b346103e35760203660031901126103e3576001600160a01b0361061761176f565b166000526002602052602060ff604060002054166040519015158152f35b346103e35760003660031901126103e357604051806003549182815260208091019260036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b916000905b8282106106a9576106a5856106998189038261189c565b60405191829182611826565b0390f35b835486529485019460019384019390910190610682565b346103e35760003660031901126103e35760008060038054915b8281106107e557506106eb83611a3e565b926106f9604051948561189c565b808452610708601f1991611a3e565b01602090368286013760009060005b84811061072c57604051806106a58882611826565b610735816117b6565b905490851b1c6000526001825260406000206008908181015460ff90818160101c161593846107d6575b846107cc575b846107bf575b505050816107b1575b50610788575b61078390611861565b610717565b916107a961078391610799856117b6565b905490871b1c610530828a611a56565b92905061077a565b600791500154421087610774565b1c1615915088808061076b565b8183169450610765565b9350818160181c16159361075f565b6107ee816117b6565b905490831b1c600052600160205260406000206008908181015460ff90818160101c1615938461087c575b84610872575b84610865575b50505081610857575b50610842575b61083d90611861565b6106da565b9261084f61083d91611861565b939050610834565b60079150015442108561082e565b1c16159150868080610825565b818316945061081f565b9350818160181c161593610819565b346103e35760003660031901126103e357602060405173c1bf9854e43b84f3abec5f5d1c72f0a6f602034b8152f35b346103e3576020806003193601126103e3576004356108d76118f2565b60008181526001835260409020546001600160a01b03906108fb9082161515611948565b816000526001835280600160406000200154163303610afa57816000526001835260406000209260088401805460ff8160081c16610abe578061094560ff809360101c161561198a565b610954828260181c16156119c7565b61096360078801544210611a03565b1615610a795760048581018054600590970180546040516323b872dd60e01b81523394810194909452306024850152604484015296909391908290829060649082906000908a165af190811561026357600091610a5c575b5015610a185750805461010061ff001990911617905554925460408051929094166001600160a01b03168252602082015233927f36a01c935797536d077135d008f5d95df22b54744528d9cd0f795ab881c52a9191a36001600055005b6064906040519062461bcd60e51b82526004820152601b60248201527f5061727469636970616e74207472616e73666572206661696c656400000000006044820152fd5b610a739150823d841161025c5761024e818361189c565b876109bb565b60405162461bcd60e51b815260048101839052601760248201527f496e69746961746f72206e6f74206465706f73697465640000000000000000006044820152606490fd5b60405162461bcd60e51b8152600481018490526014602482015273105b1c9958591e481c185c9d1a58da5c185d195960621b6044820152606490fd5b60405162461bcd60e51b815260048101849052601860248201527f4f6e6c79207061727469636970616e7420616c6c6f77656400000000000000006044820152606490fd5b346103e35760203660031901126103e357610b5b600435611a6a565b60408051809260208252610b7e8151809281602086015260208686019101611803565b601f01601f19168101030190f35b346103e35760203660031901126103e3576004356000526001602052610140604060002060ff60018060a01b0391828154169260018201541690600381015460058201546006830154916008600785015494015494604051978852602088015260408701526060860152608085015260a0840152818116151560c0840152818160081c16151560e0840152818160101c16151561010084015260181c161515610120820152f35b346103e35760203660031901126103e3576001600160a01b03610c5461176f565b168060005260026020526040600020600160ff198254161790557fef81a9943b96c8df4ef243401c9bf5159146166211356898b52d382086168d92602060405160018152a2005b346103e35760203660031901126103e3576004356003548110156103e357610cc46020916117b6565b90549060031b1c604051908152f35b346103e3576101003660031901126103e3576024356001600160a01b03811681036103e35760443567ffffffffffffffff81116103e357610d18903690600401611785565b909160643567ffffffffffffffff81116103e357610d3a903690600401611785565b60a43594909291906001600160a01b03861686036103e357610d5a6118f2565b6004356000908152600160205260409020546001600160a01b03166113ea576001600160a01b038316156113af576001600160a01b0383163314611372578385036113355784156112fa57608435156112be576001600160a01b03861660009081526002602052604090205460ff161561126f57610e1042018042116111a25760e43511156112355760c435156111fd5760009360005b81811061116c57508415611133576004356000526001602052604060002095336001600160601b0360a01b8854161787556001870160018060a01b0386166001600160601b0360a01b82541617905560843560038801556004870160018060a01b0389166001600160601b0360a01b825416179055608435600588015560c435600688015560e435600788015563ffffffff19600888015416600888015560005b81811061106457505050505060005b6002840154811015610f995760006020610f0e610ec184600289016118be565b50546001600160a01b03166001610edb8660028b016118be565b5001546040516323b872dd60e01b8152336004820152306024820152604481019190915293849283919082906064820190565b03925af190811561026357600091610f7a575b5015610f3557610f3090611861565b610ea1565b60405162461bcd60e51b815260206004820152601960248201527f496e69746961746f72207472616e73666572206661696c6564000000000000006044820152606490fd5b610f93915060203d60201161025c5761024e818361189c565b86610f21565b5060088301805460ff191660011790556003548490600160401b81101561104e57806001610fca92016003556117b6565b81549060031b90600435821b91600019901b1916179055604051928352608435602084015260018060a01b03166040830152608435606083015260c435608083015260e43560a083015260018060a01b03169033907fc8bea22eed072b9aab051e260502f9c16ac334a1e82898448c564da3aac4fc8c60c060043592a46001600055005b634e487b7160e01b600052604160045260246000fd5b61106f818386611870565b35906001600160a01b03821682036103e35761108c818588611870565b356040519283604081011067ffffffffffffffff60408601111761104e57604084810190526001600160a01b0316835260208301526002890154600160401b81101561104e578060016110e8920160028c015560028b016118be565b61111d576001602061111894828060a01b038151166001600160601b0360a01b8554161784550151910155611861565b610e92565b634e487b7160e01b600052600060045260246000fd5b60405162461bcd60e51b81526020600482015260116024820152705a65726f20746f74616c20746f6b656e7360781b6044820152606490fd5b94611178868386611870565b35156111b857611189868386611870565b3581018091116111a25761119d9095611861565b610df1565b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420696e69746961746f7220616d6f756e7400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420686173686c6f636b60801b6044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271151a5b595b1bd8dac81d1bdbc81cda1bdc9d60721b6044820152606490fd5b60405162461bcd60e51b815260206004820152602160248201527f5061727469636970616e7420746f6b656e206e6f742077686974656c697374656044820152601960fa1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206261736b657420707269636560601b6044820152606490fd5b60405162461bcd60e51b81526020600482015260136024820152724e6f20696e69746961746f7220746f6b656e7360681b6044820152606490fd5b60405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601560248201527414d95b19881cddd85c081b9bdd08185b1b1bddd959605a1b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c185c9d1a58da5c185b9d606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a537761702065786973747360a81b6044820152606490fd5b346103e35760403660031901126103e35760043560249081359161143f6118f2565b8160005260019260209184835260018060a01b039061146682604060002054161515611948565b84600052858452604060002060088101805461148860ff8260101c161561198a565b61149860ff8260181c16156119c7565b60ff811680611762575b15611725576114b660078401544210611a03565b8660006114e3604051838101908a82528481526114d281611880565b604051928392839251928391611803565b8101039060025afa15610263576000516006840154036116f2576201000062ff000019919091161790556004818101548254600584015460405163a9059cbb60e01b8082529288166001600160a01b03169481019490945260248401529291908790829060449082906000908a165af1908115610263576000916116d5575b50156116995787919293600083600284019301935b6115ad575b89897f7430d80e0e3cfb925010ff8993f6a56392199211e297fc7825278f29980ccf518a8a604051908152a2600055005b82548110156116945761160988836115c584876118be565b50541684875416908d6115d886896118be565b5001546040518a81526001600160a01b03909316600484015260248301529092839190829060009082906044820190565b03925af190811561026357600091611677575b501561163c57906116318a9695949392611861565b909192939495611577565b60405162461bcd60e51b8152600481018990526014818801527310985cdad95d081d1bc8109bd88819985a5b195960621b6044820152606490fd5b61168e9150893d8b1161025c5761024e818361189c565b8b61161c565b61157c565b60405162461bcd60e51b815260048101879052601581850152741554d11615081d1bc8105b1a58d94819985a5b1959605a1b6044820152606490fd5b6116ec9150873d891161025c5761024e818361189c565b89611562565b60405162461bcd60e51b815260048101889052600c818601526b42616420707265696d61676560a01b6044820152606490fd5b60405162461bcd60e51b81526004810188905260168186015275109bdd1a0819195c1bdcda5d1cc81c995c5d5a5c995960521b6044820152606490fd5b5060ff8160081c166114a2565b600435906001600160a01b03821682036103e357565b9181601f840112156103e35782359167ffffffffffffffff83116103e3576020808501948460051b0101116103e357565b6003548110156117ed5760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b634e487b7160e01b600052603260045260246000fd5b60005b8381106118165750506000910152565b8181015183820152602001611806565b6020908160408183019282815285518094520193019160005b82811061184d575050505090565b83518552938101939281019260010161183f565b60001981146111a25760010190565b91908110156117ed5760051b0190565b6040810190811067ffffffffffffffff82111761104e57604052565b90601f8019910116810190811067ffffffffffffffff82111761104e57604052565b80548210156117ed5760005260206000209060011b0190600090565b908160209103126103e3575180151581036103e35790565b600260005414611903576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b1561194f57565b60405162461bcd60e51b815260206004820152601360248201527214ddd85c08191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b1561199157565b60405162461bcd60e51b815260206004820152600e60248201526d14ddd85c0818dbdb5c1b195d195960921b6044820152606490fd5b156119ce57565b60405162461bcd60e51b815260206004820152600d60248201526c14ddd85c081c99599d5b991959609a1b6044820152606490fd5b15611a0a57565b60405162461bcd60e51b815260206004820152600c60248201526b14ddd85c08195e1c1a5c995960a21b6044820152606490fd5b67ffffffffffffffff811161104e5760051b60200190565b80518210156117ed5760209160051b010190565b60005260206001815260408060002060018060a01b0381541615600014611ab457506d1113d154d7d393d517d1561254d560921b905191611aaa83611880565b600e835282015290565b60088101549060ff8260101c16600014611aed5750506810d3d354131155115160ba1b905191611ae383611880565b6009835282015290565b60ff8260181c16600014611b1f57505067149151955391115160c21b905191611b1583611880565b6008835282015290565b600701544210611b4b5750661156141254915160ca1b905191611b4183611880565b6007835282015290565b60ff8116611b8357507414115391125391d7d0531250d157d1115413d4d255605a1b905191611b7983611880565b6015835282015290565b60081c60ff16611bbd577550454e44494e475f424f425f414343455054414e434560501b905191611bb383611880565b6016835282015290565b6e52454144595f464f525f434c41494d60881b905191611bdc83611880565b600f83528201529056fea2646970667358221220aa8265e9309f4858f979f87c26da4d9ccf7172f79feeadf01f969164da40253c64736f6c63430008120033
Loading...
Loading
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.