Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0.447848396396396375 ETH
Eth Value
$820.81 (@ $1,832.80/ETH)Latest 25 from a total of 34 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Bet On Quarters | 20863208 | 511 days ago | IN | 0.00898398 ETH | 0.00051114 | ||||
| Bet On Quarters | 20862503 | 511 days ago | IN | 0.02095595 ETH | 0.00087859 | ||||
| Bet On Quarters | 20862481 | 511 days ago | IN | 0.00898398 ETH | 0.0006071 | ||||
| Bet On Quarters | 20862211 | 511 days ago | IN | 0.00798798 ETH | 0.00059072 | ||||
| Bet On Quarters | 20833981 | 515 days ago | IN | 0.00699199 ETH | 0.0008951 | ||||
| Bet On Quarters | 20833977 | 515 days ago | IN | 0.00997997 ETH | 0.00094575 | ||||
| Bet On Quarters | 20833974 | 515 days ago | IN | 0.03591591 ETH | 0.00116498 | ||||
| Bet On Quarters | 20833968 | 515 days ago | IN | 0.00898398 ETH | 0.00113511 | ||||
| Bet On Quarters | 20833962 | 515 days ago | IN | 0.00997997 ETH | 0.00094808 | ||||
| Bet On Quarters | 20833959 | 515 days ago | IN | 0.03292792 ETH | 0.00101872 | ||||
| Bet On Quarters | 20833940 | 515 days ago | IN | 0.00798798 ETH | 0.00093917 | ||||
| Bet On Quarters | 20833903 | 515 days ago | IN | 0.00798798 ETH | 0.00133604 | ||||
| Bet On Quarters | 20829295 | 516 days ago | IN | 0.01497997 ETH | 0.00166878 | ||||
| Bet On Quarters | 20829253 | 516 days ago | IN | 0.00699199 ETH | 0.00179396 | ||||
| Bet On Quarters | 20828722 | 516 days ago | IN | 0.00699199 ETH | 0.0038157 | ||||
| Bet On Quarters | 20828691 | 516 days ago | IN | 0.05093593 ETH | 0.01329688 | ||||
| Bet On Quarters | 20828679 | 516 days ago | IN | 0.02197197 ETH | 0.0063666 | ||||
| Bet On Quarters | 20811626 | 518 days ago | IN | 0.00699199 ETH | 0.00164876 | ||||
| Bet On Quarters | 20811536 | 518 days ago | IN | 0.00599599 ETH | 0.00167368 | ||||
| Bet On Quarters | 20811485 | 518 days ago | IN | 0.00599599 ETH | 0.00145587 | ||||
| Bet On Quarters | 20811464 | 518 days ago | IN | 0.005 ETH | 0.00206126 | ||||
| Bet On Quarters | 20811451 | 518 days ago | IN | 0.01298798 ETH | 0.00175516 | ||||
| Bet On Quarters | 20811406 | 518 days ago | IN | 0.005 ETH | 0.00241814 | ||||
| Bet On Quarters | 20811396 | 518 days ago | IN | 0.005 ETH | 0.00246109 | ||||
| Bet On Quarters | 20808448 | 519 days ago | IN | 0.005 ETH | 0.0008778 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 20863208 | 511 days ago | 0.00179679 ETH | ||||
| Transfer | 20862503 | 511 days ago | 0.00419119 ETH | ||||
| Transfer | 20862481 | 511 days ago | 0.00179679 ETH | ||||
| Transfer | 20862211 | 511 days ago | 0.00159759 ETH | ||||
| Transfer | 20833981 | 515 days ago | 0.00139839 ETH | ||||
| Transfer | 20833977 | 515 days ago | 0.00199599 ETH | ||||
| Transfer | 20833974 | 515 days ago | 0.00718318 ETH | ||||
| Transfer | 20833968 | 515 days ago | 0.00179679 ETH | ||||
| Transfer | 20833962 | 515 days ago | 0.00199599 ETH | ||||
| Transfer | 20833959 | 515 days ago | 0.00658558 ETH | ||||
| Transfer | 20833940 | 515 days ago | 0.00159759 ETH | ||||
| Transfer | 20833903 | 515 days ago | 0.00159759 ETH | ||||
| Transfer | 20829295 | 516 days ago | 0.00299599 ETH | ||||
| Transfer | 20829253 | 516 days ago | 0.00139839 ETH | ||||
| Transfer | 20828722 | 516 days ago | 0.00139839 ETH | ||||
| Transfer | 20828691 | 516 days ago | 0.01018718 ETH | ||||
| Transfer | 20828679 | 516 days ago | 0.00439439 ETH | ||||
| Transfer | 20811626 | 518 days ago | 0.00139839 ETH | ||||
| Transfer | 20811536 | 518 days ago | 0.00119919 ETH | ||||
| Transfer | 20811485 | 518 days ago | 0.00119919 ETH | ||||
| Transfer | 20811464 | 518 days ago | 0.001 ETH | ||||
| Transfer | 20811451 | 518 days ago | 0.00259759 ETH | ||||
| Transfer | 20811406 | 518 days ago | 0.001 ETH | ||||
| Transfer | 20811396 | 518 days ago | 0.001 ETH | ||||
| Transfer | 20808448 | 519 days ago | 0.001 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TetherDeathPredictionMarket
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// Import OpenZeppelin's Ownable contract
import "@openzeppelin/contracts/access/Ownable.sol";
// Import IERC20 interface
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import '@openzeppelin/contracts/utils/ReentrancyGuard.sol';
// Uniswap V3 Pool interface
interface IUniswapV3Pool {
function slot0()
external
view
returns (
uint160 sqrtPriceX96,
int24 tick,
uint16 observationIndex,
uint16 observationCardinality,
uint16 observationCardinalityNext,
uint8 feeProtocol,
bool unlocked
);
function token0() external view returns (address);
function token1() external view returns (address);
}
// Uniswap V2 Pair interface
interface IUniswapV2Pair {
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function token0() external view returns (address);
function token1() external view returns (address);
}
contract TetherDeathPredictionMarket is Ownable, ReentrancyGuard {
IUniswapV3Pool public uniswapV3Pool = IUniswapV3Pool(0x3416cF6C708Da44DB2624D63ea0AAef7113527C6);
IUniswapV2Pair public uniswapV2Pair = IUniswapV2Pair(0x3041CbD36888bECc7bbCBc0045E3B1f144466f5f);
constructor() Ownable(msg.sender) {}
uint256 public constant BASE_COST = 0.005 ether; // 10 USDC with 6 decimals
uint256 public constant FIRST_THRESHOLD = 1000; // At 1,000 bets
uint256 public constant SECOND_THRESHOLD = 10000; // At 10,000 bets
uint256 public constant FEE_PERCENT = 20; // 20%
uint256 public constant TOTAL_QUARTERS = 8; // Q4 2024 to Q3 2027
uint256 public constant TETHER_IS_LEGIT = 0; // Special ID for "Tether is Legit"
uint256 public constant Q4_2024_START = 1727740800; // October 1, 2024
uint256 public constant QUARTER_DURATION = 91 days;
address public constant USDT_TOKEN_ADDRESS = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
address public constant USDC_TOKEN_ADDRESS = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
uint256 public tetherDeathTimestamp;
uint256 public winningQuarter;
bool public tetherIsDead;
// Mapping from quarter ID to total bets
mapping(uint256 => uint256) public totalBetsPerQuarter;
mapping(uint256 => uint256) public totalBetsPerQuarterValue;
// Mapping from quarter ID to user address to number of bets
mapping(uint256 => mapping(address => uint256)) public betsPerQuarterPerUser;
// Mapping to check if a user has withdrawn their winnings
mapping(address => bool) public hasWithdrawn;
event BetPlaced(address indexed user, uint256 quarter, uint256 numBets);
event TetherDeclaredDead(uint256 timestamp, uint256 quarter);
event TetherDeclaredLegit(uint256 timestamp);
event WinningsWithdrawn(address indexed user, uint256 amount);
receive() external payable {}
// Function to place bets on quarters with bonding curve pricing
function betOnQuarters(uint256[] calldata quarterIds, uint256[] calldata numBetsArray) external payable nonReentrant {
require(!tetherIsDead, "Betting is closed, Tether has died");
require(quarterIds.length > 0 && quarterIds.length <= TOTAL_QUARTERS, "Invalid number of quarters");
require(quarterIds.length == numBetsArray.length, "quarterIds and numBets length mismatch");
uint256 totalCost = 0;
for (uint256 i = 0; i < quarterIds.length; i++) {
uint256 quarterId = quarterIds[i];
uint256 numBets = numBetsArray[i];
require(quarterId <= TOTAL_QUARTERS || quarterId == TETHER_IS_LEGIT, "Invalid quarter ID");
require(numBets > 0, "Number of bets must be greater than zero");
// Calculate cost for this quarter and number of bets
uint256 betCost = getTotalBetCost(quarterId, numBets);
totalCost += betCost;
// Update bets per user
betsPerQuarterPerUser[quarterId][msg.sender] += numBets;
// Update total bets per quarter
totalBetsPerQuarter[quarterId] += numBets;
// Update total bets value per quarter (excluding fee)
uint256 netBetAmount = (betCost * (100 - FEE_PERCENT)) / 100;
totalBetsPerQuarterValue[quarterId] += netBetAmount;
emit BetPlaced(msg.sender, quarterId, numBets);
}
// Ensure the user sent the correct amount of ETH
require(msg.value >= totalCost, "Incorrect ETH amount sent");
// Calculate fee
uint256 totalFee = (totalCost * FEE_PERCENT) / 100;
// Transfer fee to owner
(bool success, ) = payable(owner()).call{value: totalFee}("");
require(success, "Fee transfer to owner failed");
// The remaining ETH stays in the contract automatically
}
// Function to calculate the total cost for a number of bets on a quarter
function getTotalBetCost(uint256 quarterId, uint256 numBets) public view returns (uint256) {
uint256 totalCost = 0;
uint256 n = totalBetsPerQuarter[quarterId]; // Existing bets on the quarter
for (uint256 i = 1; i <= numBets; i++) {
uint256 costPerBet = getCostPerBet(n + i);
totalCost += costPerBet;
}
return totalCost;
}
// Function to get the cost per bet based on the number of existing bets
function getCostPerBet(uint256 n) public pure returns (uint256) {
if (n <= FIRST_THRESHOLD) {
// Linear increase from 0.01 ETH to 1 ETH over the first 1,000 bets
uint256 costPerBet = BASE_COST + ((n - 1) * (1 ether - BASE_COST)) / (FIRST_THRESHOLD - 1);
return costPerBet;
} else if (n <= SECOND_THRESHOLD) {
// Linear increase from 1 ETH to 1000 ETH over the next 9,000 bets
uint256 costPerBet = 1 ether + ((n - FIRST_THRESHOLD) * (1000 ether - 1 ether)) / (SECOND_THRESHOLD - FIRST_THRESHOLD);
return costPerBet;
} else {
// Exponential increase, doubling each bet after 10,000 bets
uint256 exponent = n - SECOND_THRESHOLD;
uint256 costPerBet = 1000 ether * (2 ** exponent);
return costPerBet;
}
}
// Function to check the price for a number of bets on a quarter
function checkBetPrice(uint256 quarterId, uint256 numBets) external view returns (uint256 totalCost, uint256[] memory costPerBetArray) {
uint256 n = totalBetsPerQuarter[quarterId]; // Existing bets on the quarter
totalCost = 0;
costPerBetArray = new uint256[](numBets);
for (uint256 i = 1; i <= numBets; i++) {
uint256 costPerBet = getCostPerBet(n + i);
costPerBetArray[i - 1] = costPerBet;
totalCost += costPerBet;
}
return (totalCost, costPerBetArray);
}
// Function to declare Tether dead
function declareTetherDead() onlyOwner public {
require(!tetherIsDead, "Tether is already declared dead");
require(block.timestamp <= getQuarterEndTimestamp(TOTAL_QUARTERS), "Cannot declare Tether dead after betting period");
uint256 priceV3 = getUSDTPriceInUSDC_V3();
uint256 priceV2 = getUSDTPriceInUSDC_V2();
require(priceV3 <= 100000 && priceV2 <= 100000, "Tether is not dead yet"); // 0.1 USDC per USDT
tetherIsDead = true;
tetherDeathTimestamp = block.timestamp;
winningQuarter = getQuarterId(tetherDeathTimestamp);
emit TetherDeclaredDead(tetherDeathTimestamp, winningQuarter);
}
// Function to declare Tether legit after betting period ends
function declareTetherLegit() onlyOwner public {
require(!tetherIsDead, "Tether is already declared dead");
require(block.timestamp > getQuarterEndTimestamp(TOTAL_QUARTERS), "Betting period is not over yet");
tetherIsDead = true;
tetherDeathTimestamp = block.timestamp;
winningQuarter = TETHER_IS_LEGIT;
emit TetherDeclaredLegit(tetherDeathTimestamp);
}
// Function to withdraw winnings
function withdrawWinnings() external nonReentrant {
require(tetherIsDead, "Tether is not dead yet");
require(!hasWithdrawn[msg.sender], "Winnings already withdrawn");
uint256 userBets = betsPerQuarterPerUser[winningQuarter][msg.sender];
require(userBets > 0, "You did not bet on the winning quarter");
uint256 totalBets = totalBetsPerQuarter[winningQuarter];
uint256 contractBalance = address(this).balance;
uint256 winnings = (contractBalance * userBets) / totalBets;
// Mark as withdrawn
hasWithdrawn[msg.sender] = true;
(bool success, ) = msg.sender.call{value: winnings}("");
require(success, "ETH transfer failed");
emit WinningsWithdrawn(msg.sender, winnings);
}
// Function to get the USDT price in USDC from Uniswap V3
function getUSDTPriceInUSDC_V3() public view returns (uint256 price) {
(uint160 sqrtPriceX96, , , , , , ) = uniswapV3Pool.slot0();
address token0 = uniswapV3Pool.token0();
address token1 = uniswapV3Pool.token1();
address usdcAddress = USDC_TOKEN_ADDRESS;
address usdtAddress = USDT_TOKEN_ADDRESS;
uint256 decimalFactor = 1e6; // USDC and USDT have 6 decimals
if (token0 == usdcAddress && token1 == usdtAddress) {
// Price of USDT in USDC
uint256 numerator = uint256(sqrtPriceX96) * uint256(sqrtPriceX96) * decimalFactor;
uint256 denominator = 1 << 192;
price = numerator / denominator;
} else if (token0 == usdtAddress && token1 == usdcAddress) {
// Price of USDT in USDC
uint256 numerator = uint256(1 << 192) * decimalFactor;
uint256 denominator = uint256(sqrtPriceX96) * uint256(sqrtPriceX96);
price = numerator / denominator;
} else {
revert("Invalid V3 pool tokens");
}
}
// Function to get the USDT price in USDC from Uniswap V2
function getUSDTPriceInUSDC_V2() public view returns (uint256 price) {
(uint112 reserve0, uint112 reserve1, ) = uniswapV2Pair.getReserves();
address token0 = uniswapV2Pair.token0();
address token1 = uniswapV2Pair.token1();
address usdcAddress = USDC_TOKEN_ADDRESS;
address usdtAddress = USDT_TOKEN_ADDRESS;
uint256 decimalFactor = 1e6; // USDC and USDT have 6 decimals
if (token0 == usdcAddress && token1 == usdtAddress) {
// Price of USDT in USDC: reserveUSDC / reserveUSDT
price = (uint256(reserve0) * decimalFactor) / uint256(reserve1);
} else if (token0 == usdtAddress && token1 == usdcAddress) {
// Price of USDT in USDC: reserveUSDC / reserveUSDT
price = (uint256(reserve1) * decimalFactor) / uint256(reserve0);
} else {
revert("Invalid V2 pool tokens");
}
}
// Function to get the quarter ID based on a timestamp
function getQuarterId(uint256 timestamp) public pure returns (uint256) {
if (timestamp < Q4_2024_START) {
revert("Timestamp is before betting period starts");
}
uint256 timeSinceStart = timestamp - Q4_2024_START;
uint256 quarterId = (timeSinceStart / QUARTER_DURATION) + 1;
if (quarterId > TOTAL_QUARTERS) {
// After the last quarter, it's "Tether is Legit"
return TETHER_IS_LEGIT;
}
return quarterId;
}
// Function to get the end timestamp of a quarter
function getQuarterEndTimestamp(uint256 quarterId) public pure returns (uint256) {
require(quarterId >= 1 && quarterId <= TOTAL_QUARTERS, "Invalid quarter ID");
return Q4_2024_START + (quarterId * QUARTER_DURATION) - 1;
}
// Function to change the owner address
function changeOwner(address newOwner) external onlyOwner {
transferOwnership(newOwner);
}
// Function to get the total net USDC bet on a specific quarter (excluding fees)
function getTotalETHBetOnQuarter(uint256 quarterId) public view returns (uint256) {
return totalBetsPerQuarterValue[quarterId];
}
// Function to get the number of bets a user has on a specific quarter
function getUserBetsOnQuarter(address user, uint256 quarterId) external view returns (uint256) {
return betsPerQuarterPerUser[quarterId][user];
}
function getQuarterInfo(uint256 quarterId, address user) external view returns (uint256, uint256, uint256) {
return (totalBetsPerQuarter[quarterId], totalBetsPerQuarterValue[quarterId], betsPerQuarterPerUser[quarterId][user]);
}
function getContractBalance() external view returns (uint256) {
return address(this).balance;
}
function getTetherTrustScore() external view returns (uint256) {
uint256 allETH = address(this).balance;
uint256 USDTTrust = getTotalETHBetOnQuarter(0);
uint256 USDCTrustScore = (USDTTrust * 10000) / allETH;
return USDCTrustScore;
}
function getTetherPrice() external view returns (uint256) {
uint256 priceV3 = getUSDTPriceInUSDC_V3();
uint256 priceV2 = getUSDTPriceInUSDC_V2();
return (priceV3 + priceV2) / 2;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @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;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
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
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// 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;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"quarter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numBets","type":"uint256"}],"name":"BetPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quarter","type":"uint256"}],"name":"TetherDeclaredDead","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TetherDeclaredLegit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WinningsWithdrawn","type":"event"},{"inputs":[],"name":"BASE_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIRST_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Q4_2024_START","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUARTER_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECOND_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TETHER_IS_LEGIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_QUARTERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quarterIds","type":"uint256[]"},{"internalType":"uint256[]","name":"numBetsArray","type":"uint256[]"}],"name":"betOnQuarters","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"betsPerQuarterPerUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quarterId","type":"uint256"},{"internalType":"uint256","name":"numBets","type":"uint256"}],"name":"checkBetPrice","outputs":[{"internalType":"uint256","name":"totalCost","type":"uint256"},{"internalType":"uint256[]","name":"costPerBetArray","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declareTetherDead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"declareTetherLegit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"getCostPerBet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"quarterId","type":"uint256"}],"name":"getQuarterEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getQuarterId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"quarterId","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getQuarterInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTetherPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTetherTrustScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quarterId","type":"uint256"},{"internalType":"uint256","name":"numBets","type":"uint256"}],"name":"getTotalBetCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quarterId","type":"uint256"}],"name":"getTotalETHBetOnQuarter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUSDTPriceInUSDC_V2","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUSDTPriceInUSDC_V3","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"quarterId","type":"uint256"}],"name":"getUserBetsOnQuarter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasWithdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tetherDeathTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tetherIsDead","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalBetsPerQuarter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalBetsPerQuarterValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV3Pool","outputs":[{"internalType":"contract IUniswapV3Pool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"winningQuarter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600280546001600160a01b0319908116733416cf6c708da44db2624d63ea0aaef7113527c61790915560038054909116733041cbd36888becc7bbcbc0045e3b1f144466f5f17905534801561005857600080fd5b50338061007f57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008881610092565b50600180556100e2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611fe5806100f16000396000f3fe60806040526004361061023e5760003560e01c80638fb5f35d1161012e578063d8deaa7a116100ab578063efd321261161006f578063efd3212614610707578063f2fde38b14610727578063f4ed244c14610747578063f55ebd2a1461075c578063f7110b5a1461077c57600080fd5b8063d8deaa7a14610665578063e56bfa8f14610685578063e5f8a0481461069b578063eaf98d23146106dd578063eb3c7f53146106f257600080fd5b8063b3d673d8116100f2578063b3d673d81461058a578063b8b5e5c3146105b2578063bf38cd1514610622578063c8b3da0214610638578063cc42e83a1461065057600080fd5b80638fb5f35d146104f857806399fbde35146105255780639f929c201461053a578063a00d95261461054f578063a6f9dae11461056a57600080fd5b806356336efe116101bc578063736be62811610180578063736be6281461045e578063755f8ffd1461047e5780637cbe3705146104985780637f5c8cdc146104c55780638da5cb5b146104da57600080fd5b806356336efe146103b35780635e2c19db146103c957806369b1ed7d146104095780636f9fb98a14610436578063715018a61461044957600080fd5b806335b195cd1161020357806335b195cd146103095780633bebb4911461032957806349bd5a5e1461033e5780634b1e0a52146103765780634d286a3d1461038b57600080fd5b80622259801461024a578063117a5989146102815780631ef4f543146102c757806322caf11f146102dd5780632c0e3e3b146102f457600080fd5b3661024557005b600080fd5b34801561025657600080fd5b5061026a610265366004611b03565b610791565b604051610278929190611b25565b60405180910390f35b34801561028d57600080fd5b506102b961029c366004611b88565b600960209081526000928352604080842090915290825290205481565b604051908152602001610278565b3480156102d357600080fd5b506102b961271081565b3480156102e957600080fd5b506102b96277f88081565b34801561030057600080fd5b506102b9610855565b34801561031557600080fd5b506102b9610324366004611bb8565b61088b565b61033c610337366004611c16565b610940565b005b34801561034a57600080fd5b5060035461035e906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561038257600080fd5b506102b9610d95565b34801561039757600080fd5b5061035e73dac17f958d2ee523a2206206994597c13d831ec781565b3480156103bf57600080fd5b506102b960055481565b3480156103d557600080fd5b506103f96103e4366004611c82565b600a6020526000908152604090205460ff1681565b6040519015158152602001610278565b34801561041557600080fd5b506102b9610424366004611bb8565b60086020526000908152604090205481565b34801561044257600080fd5b50476102b9565b34801561045557600080fd5b5061033c611057565b34801561046a57600080fd5b506102b9610479366004611bb8565b61106b565b34801561048a57600080fd5b506006546103f99060ff1681565b3480156104a457600080fd5b506102b96104b3366004611bb8565b60009081526008602052604090205490565b3480156104d157600080fd5b5061033c6110ed565b3480156104e657600080fd5b506000546001600160a01b031661035e565b34801561050457600080fd5b506102b9610513366004611bb8565b60076020526000908152604090205481565b34801561053157600080fd5b506102b9600881565b34801561054657600080fd5b506102b9611292565b34801561055b57600080fd5b506102b96611c37937e0800081565b34801561057657600080fd5b5061033c610585366004611c82565b611536565b34801561059657600080fd5b5061035e73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b3480156105be57600080fd5b506106076105cd366004611b88565b6000828152600760209081526040808320546008835281842054600984528285206001600160a01b03871686529093529220549250925092565b60408051938452602084019290925290820152606001610278565b34801561062e57600080fd5b506102b960045481565b34801561064457600080fd5b506102b96366fb3b8081565b34801561065c57600080fd5b5061033c61154a565b34801561067157600080fd5b506102b9610680366004611b03565b611789565b34801561069157600080fd5b506102b96103e881565b3480156106a757600080fd5b506102b96106b6366004611c9f565b60009081526009602090815260408083206001600160a01b03949094168352929052205490565b3480156106e957600080fd5b506102b9601481565b3480156106fe57600080fd5b506102b96117df565b34801561071357600080fd5b506102b9610722366004611bb8565b61182e565b34801561073357600080fd5b5061033c610742366004611c82565b61191a565b34801561075357600080fd5b506102b9600081565b34801561076857600080fd5b5060025461035e906001600160a01b031681565b34801561078857600080fd5b5061033c611955565b6000828152600760205260408120546060908367ffffffffffffffff8111156107bc576107bc611ccb565b6040519080825280602002602001820160405280156107e5578160200160208202803683370190505b50915060015b84811161084b5760006108016107228385611cf7565b90508084610810600185611d0a565b8151811061082057610820611d1d565b60209081029190910101526108358186611cf7565b945050808061084390611d33565b9150506107eb565b50505b9250929050565b600080610860610d95565b9050600061086c611292565b9050600261087a8284611cf7565b6108849190611d4c565b9250505090565b60006366fb3b808210156108f85760405162461bcd60e51b815260206004820152602960248201527f54696d657374616d70206973206265666f72652062657474696e6720706572696044820152686f642073746172747360b81b60648201526084015b60405180910390fd5b60006109086366fb3b8084611d0a565b905060006109196277f88083611d4c565b610924906001611cf7565b90506008811115610939575060009392505050565b9392505050565b610948611a5c565b60065460ff16156109a65760405162461bcd60e51b815260206004820152602260248201527f42657474696e6720697320636c6f7365642c2054657468657220686173206469604482015261195960f21b60648201526084016108ef565b82158015906109b6575060088311155b610a025760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964206e756d626572206f6620717561727465727300000000000060448201526064016108ef565b828114610a605760405162461bcd60e51b815260206004820152602660248201527f7175617274657249647320616e64206e756d42657473206c656e677468206d696044820152650e6dac2e8c6d60d31b60648201526084016108ef565b6000805b84811015610c63576000868683818110610a8057610a80611d1d565b9050602002013590506000858584818110610a9d57610a9d611d1d565b905060200201359050600882111580610ab4575081155b610af55760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c5d585c9d195c88125160721b60448201526064016108ef565b60008111610b565760405162461bcd60e51b815260206004820152602860248201527f4e756d626572206f662062657473206d7573742062652067726561746572207460448201526768616e207a65726f60c01b60648201526084016108ef565b6000610b628383611789565b9050610b6e8186611cf7565b6000848152600960209081526040808320338452909152812080549297508492909190610b9c908490611cf7565b909155505060008381526007602052604081208054849290610bbf908490611cf7565b90915550600090506064610bd4601482611d0a565b610bde9084611d6e565b610be89190611d4c565b905080600860008681526020019081526020016000206000828254610c0d9190611cf7565b9091555050604080518581526020810185905233917e1ecf1d0c4d22f324b3ecb9cdf0e5f772bc74ac104e6626f4b3845433d03105910160405180910390a2505050508080610c5b90611d33565b915050610a64565b5080341015610cb45760405162461bcd60e51b815260206004820152601960248201527f496e636f72726563742045544820616d6f756e742073656e740000000000000060448201526064016108ef565b60006064610cc3601484611d6e565b610ccd9190611d4c565b90506000610ce36000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b5050905080610d835760405162461bcd60e51b815260206004820152601c60248201527f466565207472616e7366657220746f206f776e6572206661696c65640000000060448201526064016108ef565b505050610d8f60018055565b50505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190611d97565b50505050505090506000600260009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190611e3b565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190611e3b565b905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873dac17f958d2ee523a2206206994597c13d831ec7620f42406001600160a01b03851683148015610f645750816001600160a01b0316846001600160a01b0316145b15610fa357600081610f7f6001600160a01b03891680611d6e565b610f899190611d6e565b9050600160c01b610f9a8183611d4c565b9850505061104e565b816001600160a01b0316856001600160a01b0316148015610fd55750826001600160a01b0316846001600160a01b0316145b1561100d576000610fea82600160c01b611d6e565b905060006110016001600160a01b03891680611d6e565b9050610f9a8183611d4c565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c696420563320706f6f6c20746f6b656e7360501b60448201526064016108ef565b50505050505090565b61105f611a86565b6110696000611ab3565b565b60006001821015801561107f575060088211155b6110c05760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c5d585c9d195c88125160721b60448201526064016108ef565b60016110cf6277f88084611d6e565b6110dd906366fb3b80611cf7565b6110e79190611d0a565b92915050565b6110f5611a86565b60065460ff16156111485760405162461bcd60e51b815260206004820152601f60248201527f54657468657220697320616c7265616479206465636c6172656420646561640060448201526064016108ef565b611152600861106b565b4211156111b95760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f74206465636c61726520546574686572206465616420616674657260448201526e0818995d1d1a5b99c81c195c9a5bd9608a1b60648201526084016108ef565b60006111c3610d95565b905060006111cf611292565b9050620186a082111580156111e75750620186a08111155b61122c5760405162461bcd60e51b815260206004820152601660248201527515195d1a195c881a5cc81b9bdd0819195859081e595d60521b60448201526064016108ef565b6006805460ff191660011790554260048190556112489061088b565b60058190556004546040517f6fc60c8ed1fb5c8732791cfb7835138c8007b5a680c1992ba6fc2e0cf8f118d892611286928252602082015260400190565b60405180910390a15050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156112ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130e9190611e6f565b50915091506000600360009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138c9190611e3b565b90506000600360009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190611e3b565b905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873dac17f958d2ee523a2206206994597c13d831ec7620f42406001600160a01b038516831480156114605750816001600160a01b0316846001600160a01b0316145b1561149557856001600160701b031681886001600160701b03166114849190611d6e565b61148e9190611d4c565b975061152c565b816001600160a01b0316856001600160a01b03161480156114c75750826001600160a01b0316846001600160a01b0316145b156114eb57866001600160701b031681876001600160701b03166114849190611d6e565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c696420563220706f6f6c20746f6b656e7360501b60448201526064016108ef565b5050505050505090565b61153e611a86565b6115478161191a565b50565b611552611a5c565b60065460ff1661159d5760405162461bcd60e51b815260206004820152601660248201527515195d1a195c881a5cc81b9bdd0819195859081e595d60521b60448201526064016108ef565b336000908152600a602052604090205460ff16156115fd5760405162461bcd60e51b815260206004820152601a60248201527f57696e6e696e677320616c72656164792077697468647261776e00000000000060448201526064016108ef565b6005546000908152600960209081526040808320338452909152902054806116765760405162461bcd60e51b815260206004820152602660248201527f596f7520646964206e6f7420626574206f6e207468652077696e6e696e6720716044820152653ab0b93a32b960d11b60648201526084016108ef565b600554600090815260076020526040812054904790826116968584611d6e565b6116a09190611d4c565b336000818152600a6020526040808220805460ff19166001179055519293509183908381818185875af1925050503d80600081146116fa576040519150601f19603f3d011682016040523d82523d6000602084013e6116ff565b606091505b50509050806117465760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016108ef565b60405182815233907f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc29060200160405180910390a2505050505061106960018055565b600082815260076020526040812054819060015b8481116117d55760006117b36107228385611cf7565b90506117bf8185611cf7565b93505080806117cd90611d33565b91505061179d565b5090949350505050565b600080805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c754479060008261181c83612710611d6e565b6118269190611d4c565b949350505050565b60006103e8821161189157600061184860016103e8611d0a565b6118616611c37937e08000670de0b6b3a7640000611d0a565b61186c600186611d0a565b6118769190611d6e565b6118809190611d4c565b610939906611c37937e08000611cf7565b61271082116118e55760006118aa6103e8612710611d0a565b6118b66103e885611d0a565b6118c990683627e8f712373c0000611d6e565b6118d39190611d4c565b61093990670de0b6b3a7640000611cf7565b60006118f361271084611d0a565b90506000611902826002611fa3565b61182690683635c9adc5dea00000611d6e565b919050565b611922611a86565b6001600160a01b03811661194c57604051631e4fbdf760e01b8152600060048201526024016108ef565b61154781611ab3565b61195d611a86565b60065460ff16156119b05760405162461bcd60e51b815260206004820152601f60248201527f54657468657220697320616c7265616479206465636c6172656420646561640060448201526064016108ef565b6119ba600861106b565b4211611a085760405162461bcd60e51b815260206004820152601e60248201527f42657474696e6720706572696f64206973206e6f74206f76657220796574000060448201526064016108ef565b6006805460ff1916600117905542600481905560006005556040517f1ee5e1eb82cd4a8a8d10f1f025ca3792544f4e897f9ccd12a269705e4fa6b5d491611a529190815260200190565b60405180910390a1565b600260015403611a7f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000546001600160a01b031633146110695760405163118cdaa760e01b81523360048201526024016108ef565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215611b1657600080fd5b50508035926020909101359150565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015611b6657845183529383019391830191600101611b4a565b5090979650505050505050565b6001600160a01b038116811461154757600080fd5b60008060408385031215611b9b57600080fd5b823591506020830135611bad81611b73565b809150509250929050565b600060208284031215611bca57600080fd5b5035919050565b60008083601f840112611be357600080fd5b50813567ffffffffffffffff811115611bfb57600080fd5b6020830191508360208260051b850101111561084e57600080fd5b60008060008060408587031215611c2c57600080fd5b843567ffffffffffffffff80821115611c4457600080fd5b611c5088838901611bd1565b90965094506020870135915080821115611c6957600080fd5b50611c7687828801611bd1565b95989497509550505050565b600060208284031215611c9457600080fd5b813561093981611b73565b60008060408385031215611cb257600080fd5b8235611cbd81611b73565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110e7576110e7611ce1565b818103818111156110e7576110e7611ce1565b634e487b7160e01b600052603260045260246000fd5b600060018201611d4557611d45611ce1565b5060010190565b600082611d6957634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176110e7576110e7611ce1565b805161ffff8116811461191557600080fd5b600080600080600080600060e0888a031215611db257600080fd5b8751611dbd81611b73565b8097505060208801518060020b8114611dd557600080fd5b9550611de360408901611d85565b9450611df160608901611d85565b9350611dff60808901611d85565b925060a088015160ff81168114611e1557600080fd5b60c08901519092508015158114611e2b57600080fd5b8091505092959891949750929550565b600060208284031215611e4d57600080fd5b815161093981611b73565b80516001600160701b038116811461191557600080fd5b600080600060608486031215611e8457600080fd5b611e8d84611e58565b9250611e9b60208501611e58565b9150604084015163ffffffff81168114611eb457600080fd5b809150509250925092565b600181815b80851115611efa578160001904821115611ee057611ee0611ce1565b80851615611eed57918102915b93841c9390800290611ec4565b509250929050565b600082611f11575060016110e7565b81611f1e575060006110e7565b8160018114611f345760028114611f3e57611f5a565b60019150506110e7565b60ff841115611f4f57611f4f611ce1565b50506001821b6110e7565b5060208310610133831016604e8410600b8410161715611f7d575081810a6110e7565b611f878383611ebf565b8060001904821115611f9b57611f9b611ce1565b029392505050565b60006109398383611f0256fea2646970667358221220e9d245750b2b663eea589b22913e9961d91c00fe352765dd10666eea3c48dae464736f6c63430008140033
Deployed Bytecode
0x60806040526004361061023e5760003560e01c80638fb5f35d1161012e578063d8deaa7a116100ab578063efd321261161006f578063efd3212614610707578063f2fde38b14610727578063f4ed244c14610747578063f55ebd2a1461075c578063f7110b5a1461077c57600080fd5b8063d8deaa7a14610665578063e56bfa8f14610685578063e5f8a0481461069b578063eaf98d23146106dd578063eb3c7f53146106f257600080fd5b8063b3d673d8116100f2578063b3d673d81461058a578063b8b5e5c3146105b2578063bf38cd1514610622578063c8b3da0214610638578063cc42e83a1461065057600080fd5b80638fb5f35d146104f857806399fbde35146105255780639f929c201461053a578063a00d95261461054f578063a6f9dae11461056a57600080fd5b806356336efe116101bc578063736be62811610180578063736be6281461045e578063755f8ffd1461047e5780637cbe3705146104985780637f5c8cdc146104c55780638da5cb5b146104da57600080fd5b806356336efe146103b35780635e2c19db146103c957806369b1ed7d146104095780636f9fb98a14610436578063715018a61461044957600080fd5b806335b195cd1161020357806335b195cd146103095780633bebb4911461032957806349bd5a5e1461033e5780634b1e0a52146103765780634d286a3d1461038b57600080fd5b80622259801461024a578063117a5989146102815780631ef4f543146102c757806322caf11f146102dd5780632c0e3e3b146102f457600080fd5b3661024557005b600080fd5b34801561025657600080fd5b5061026a610265366004611b03565b610791565b604051610278929190611b25565b60405180910390f35b34801561028d57600080fd5b506102b961029c366004611b88565b600960209081526000928352604080842090915290825290205481565b604051908152602001610278565b3480156102d357600080fd5b506102b961271081565b3480156102e957600080fd5b506102b96277f88081565b34801561030057600080fd5b506102b9610855565b34801561031557600080fd5b506102b9610324366004611bb8565b61088b565b61033c610337366004611c16565b610940565b005b34801561034a57600080fd5b5060035461035e906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b34801561038257600080fd5b506102b9610d95565b34801561039757600080fd5b5061035e73dac17f958d2ee523a2206206994597c13d831ec781565b3480156103bf57600080fd5b506102b960055481565b3480156103d557600080fd5b506103f96103e4366004611c82565b600a6020526000908152604090205460ff1681565b6040519015158152602001610278565b34801561041557600080fd5b506102b9610424366004611bb8565b60086020526000908152604090205481565b34801561044257600080fd5b50476102b9565b34801561045557600080fd5b5061033c611057565b34801561046a57600080fd5b506102b9610479366004611bb8565b61106b565b34801561048a57600080fd5b506006546103f99060ff1681565b3480156104a457600080fd5b506102b96104b3366004611bb8565b60009081526008602052604090205490565b3480156104d157600080fd5b5061033c6110ed565b3480156104e657600080fd5b506000546001600160a01b031661035e565b34801561050457600080fd5b506102b9610513366004611bb8565b60076020526000908152604090205481565b34801561053157600080fd5b506102b9600881565b34801561054657600080fd5b506102b9611292565b34801561055b57600080fd5b506102b96611c37937e0800081565b34801561057657600080fd5b5061033c610585366004611c82565b611536565b34801561059657600080fd5b5061035e73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b3480156105be57600080fd5b506106076105cd366004611b88565b6000828152600760209081526040808320546008835281842054600984528285206001600160a01b03871686529093529220549250925092565b60408051938452602084019290925290820152606001610278565b34801561062e57600080fd5b506102b960045481565b34801561064457600080fd5b506102b96366fb3b8081565b34801561065c57600080fd5b5061033c61154a565b34801561067157600080fd5b506102b9610680366004611b03565b611789565b34801561069157600080fd5b506102b96103e881565b3480156106a757600080fd5b506102b96106b6366004611c9f565b60009081526009602090815260408083206001600160a01b03949094168352929052205490565b3480156106e957600080fd5b506102b9601481565b3480156106fe57600080fd5b506102b96117df565b34801561071357600080fd5b506102b9610722366004611bb8565b61182e565b34801561073357600080fd5b5061033c610742366004611c82565b61191a565b34801561075357600080fd5b506102b9600081565b34801561076857600080fd5b5060025461035e906001600160a01b031681565b34801561078857600080fd5b5061033c611955565b6000828152600760205260408120546060908367ffffffffffffffff8111156107bc576107bc611ccb565b6040519080825280602002602001820160405280156107e5578160200160208202803683370190505b50915060015b84811161084b5760006108016107228385611cf7565b90508084610810600185611d0a565b8151811061082057610820611d1d565b60209081029190910101526108358186611cf7565b945050808061084390611d33565b9150506107eb565b50505b9250929050565b600080610860610d95565b9050600061086c611292565b9050600261087a8284611cf7565b6108849190611d4c565b9250505090565b60006366fb3b808210156108f85760405162461bcd60e51b815260206004820152602960248201527f54696d657374616d70206973206265666f72652062657474696e6720706572696044820152686f642073746172747360b81b60648201526084015b60405180910390fd5b60006109086366fb3b8084611d0a565b905060006109196277f88083611d4c565b610924906001611cf7565b90506008811115610939575060009392505050565b9392505050565b610948611a5c565b60065460ff16156109a65760405162461bcd60e51b815260206004820152602260248201527f42657474696e6720697320636c6f7365642c2054657468657220686173206469604482015261195960f21b60648201526084016108ef565b82158015906109b6575060088311155b610a025760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964206e756d626572206f6620717561727465727300000000000060448201526064016108ef565b828114610a605760405162461bcd60e51b815260206004820152602660248201527f7175617274657249647320616e64206e756d42657473206c656e677468206d696044820152650e6dac2e8c6d60d31b60648201526084016108ef565b6000805b84811015610c63576000868683818110610a8057610a80611d1d565b9050602002013590506000858584818110610a9d57610a9d611d1d565b905060200201359050600882111580610ab4575081155b610af55760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c5d585c9d195c88125160721b60448201526064016108ef565b60008111610b565760405162461bcd60e51b815260206004820152602860248201527f4e756d626572206f662062657473206d7573742062652067726561746572207460448201526768616e207a65726f60c01b60648201526084016108ef565b6000610b628383611789565b9050610b6e8186611cf7565b6000848152600960209081526040808320338452909152812080549297508492909190610b9c908490611cf7565b909155505060008381526007602052604081208054849290610bbf908490611cf7565b90915550600090506064610bd4601482611d0a565b610bde9084611d6e565b610be89190611d4c565b905080600860008681526020019081526020016000206000828254610c0d9190611cf7565b9091555050604080518581526020810185905233917e1ecf1d0c4d22f324b3ecb9cdf0e5f772bc74ac104e6626f4b3845433d03105910160405180910390a2505050508080610c5b90611d33565b915050610a64565b5080341015610cb45760405162461bcd60e51b815260206004820152601960248201527f496e636f72726563742045544820616d6f756e742073656e740000000000000060448201526064016108ef565b60006064610cc3601484611d6e565b610ccd9190611d4c565b90506000610ce36000546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b5050905080610d835760405162461bcd60e51b815260206004820152601c60248201527f466565207472616e7366657220746f206f776e6572206661696c65640000000060448201526064016108ef565b505050610d8f60018055565b50505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190611d97565b50505050505090506000600260009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190611e3b565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b9190611e3b565b905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873dac17f958d2ee523a2206206994597c13d831ec7620f42406001600160a01b03851683148015610f645750816001600160a01b0316846001600160a01b0316145b15610fa357600081610f7f6001600160a01b03891680611d6e565b610f899190611d6e565b9050600160c01b610f9a8183611d4c565b9850505061104e565b816001600160a01b0316856001600160a01b0316148015610fd55750826001600160a01b0316846001600160a01b0316145b1561100d576000610fea82600160c01b611d6e565b905060006110016001600160a01b03891680611d6e565b9050610f9a8183611d4c565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c696420563320706f6f6c20746f6b656e7360501b60448201526064016108ef565b50505050505090565b61105f611a86565b6110696000611ab3565b565b60006001821015801561107f575060088211155b6110c05760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c5d585c9d195c88125160721b60448201526064016108ef565b60016110cf6277f88084611d6e565b6110dd906366fb3b80611cf7565b6110e79190611d0a565b92915050565b6110f5611a86565b60065460ff16156111485760405162461bcd60e51b815260206004820152601f60248201527f54657468657220697320616c7265616479206465636c6172656420646561640060448201526064016108ef565b611152600861106b565b4211156111b95760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f74206465636c61726520546574686572206465616420616674657260448201526e0818995d1d1a5b99c81c195c9a5bd9608a1b60648201526084016108ef565b60006111c3610d95565b905060006111cf611292565b9050620186a082111580156111e75750620186a08111155b61122c5760405162461bcd60e51b815260206004820152601660248201527515195d1a195c881a5cc81b9bdd0819195859081e595d60521b60448201526064016108ef565b6006805460ff191660011790554260048190556112489061088b565b60058190556004546040517f6fc60c8ed1fb5c8732791cfb7835138c8007b5a680c1992ba6fc2e0cf8f118d892611286928252602082015260400190565b60405180910390a15050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156112ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130e9190611e6f565b50915091506000600360009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138c9190611e3b565b90506000600360009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190611e3b565b905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873dac17f958d2ee523a2206206994597c13d831ec7620f42406001600160a01b038516831480156114605750816001600160a01b0316846001600160a01b0316145b1561149557856001600160701b031681886001600160701b03166114849190611d6e565b61148e9190611d4c565b975061152c565b816001600160a01b0316856001600160a01b03161480156114c75750826001600160a01b0316846001600160a01b0316145b156114eb57866001600160701b031681876001600160701b03166114849190611d6e565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c696420563220706f6f6c20746f6b656e7360501b60448201526064016108ef565b5050505050505090565b61153e611a86565b6115478161191a565b50565b611552611a5c565b60065460ff1661159d5760405162461bcd60e51b815260206004820152601660248201527515195d1a195c881a5cc81b9bdd0819195859081e595d60521b60448201526064016108ef565b336000908152600a602052604090205460ff16156115fd5760405162461bcd60e51b815260206004820152601a60248201527f57696e6e696e677320616c72656164792077697468647261776e00000000000060448201526064016108ef565b6005546000908152600960209081526040808320338452909152902054806116765760405162461bcd60e51b815260206004820152602660248201527f596f7520646964206e6f7420626574206f6e207468652077696e6e696e6720716044820152653ab0b93a32b960d11b60648201526084016108ef565b600554600090815260076020526040812054904790826116968584611d6e565b6116a09190611d4c565b336000818152600a6020526040808220805460ff19166001179055519293509183908381818185875af1925050503d80600081146116fa576040519150601f19603f3d011682016040523d82523d6000602084013e6116ff565b606091505b50509050806117465760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016108ef565b60405182815233907f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc29060200160405180910390a2505050505061106960018055565b600082815260076020526040812054819060015b8481116117d55760006117b36107228385611cf7565b90506117bf8185611cf7565b93505080806117cd90611d33565b91505061179d565b5090949350505050565b600080805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c754479060008261181c83612710611d6e565b6118269190611d4c565b949350505050565b60006103e8821161189157600061184860016103e8611d0a565b6118616611c37937e08000670de0b6b3a7640000611d0a565b61186c600186611d0a565b6118769190611d6e565b6118809190611d4c565b610939906611c37937e08000611cf7565b61271082116118e55760006118aa6103e8612710611d0a565b6118b66103e885611d0a565b6118c990683627e8f712373c0000611d6e565b6118d39190611d4c565b61093990670de0b6b3a7640000611cf7565b60006118f361271084611d0a565b90506000611902826002611fa3565b61182690683635c9adc5dea00000611d6e565b919050565b611922611a86565b6001600160a01b03811661194c57604051631e4fbdf760e01b8152600060048201526024016108ef565b61154781611ab3565b61195d611a86565b60065460ff16156119b05760405162461bcd60e51b815260206004820152601f60248201527f54657468657220697320616c7265616479206465636c6172656420646561640060448201526064016108ef565b6119ba600861106b565b4211611a085760405162461bcd60e51b815260206004820152601e60248201527f42657474696e6720706572696f64206973206e6f74206f76657220796574000060448201526064016108ef565b6006805460ff1916600117905542600481905560006005556040517f1ee5e1eb82cd4a8a8d10f1f025ca3792544f4e897f9ccd12a269705e4fa6b5d491611a529190815260200190565b60405180910390a1565b600260015403611a7f57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000546001600160a01b031633146110695760405163118cdaa760e01b81523360048201526024016108ef565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215611b1657600080fd5b50508035926020909101359150565b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015611b6657845183529383019391830191600101611b4a565b5090979650505050505050565b6001600160a01b038116811461154757600080fd5b60008060408385031215611b9b57600080fd5b823591506020830135611bad81611b73565b809150509250929050565b600060208284031215611bca57600080fd5b5035919050565b60008083601f840112611be357600080fd5b50813567ffffffffffffffff811115611bfb57600080fd5b6020830191508360208260051b850101111561084e57600080fd5b60008060008060408587031215611c2c57600080fd5b843567ffffffffffffffff80821115611c4457600080fd5b611c5088838901611bd1565b90965094506020870135915080821115611c6957600080fd5b50611c7687828801611bd1565b95989497509550505050565b600060208284031215611c9457600080fd5b813561093981611b73565b60008060408385031215611cb257600080fd5b8235611cbd81611b73565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156110e7576110e7611ce1565b818103818111156110e7576110e7611ce1565b634e487b7160e01b600052603260045260246000fd5b600060018201611d4557611d45611ce1565b5060010190565b600082611d6957634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176110e7576110e7611ce1565b805161ffff8116811461191557600080fd5b600080600080600080600060e0888a031215611db257600080fd5b8751611dbd81611b73565b8097505060208801518060020b8114611dd557600080fd5b9550611de360408901611d85565b9450611df160608901611d85565b9350611dff60808901611d85565b925060a088015160ff81168114611e1557600080fd5b60c08901519092508015158114611e2b57600080fd5b8091505092959891949750929550565b600060208284031215611e4d57600080fd5b815161093981611b73565b80516001600160701b038116811461191557600080fd5b600080600060608486031215611e8457600080fd5b611e8d84611e58565b9250611e9b60208501611e58565b9150604084015163ffffffff81168114611eb457600080fd5b809150509250925092565b600181815b80851115611efa578160001904821115611ee057611ee0611ce1565b80851615611eed57918102915b93841c9390800290611ec4565b509250929050565b600082611f11575060016110e7565b81611f1e575060006110e7565b8160018114611f345760028114611f3e57611f5a565b60019150506110e7565b60ff841115611f4f57611f4f611ce1565b50506001821b6110e7565b5060208310610133831016604e8410600b8410161715611f7d575081810a6110e7565b611f878383611ebf565b8060001904821115611f9b57611f9b611ce1565b029392505050565b60006109398383611f0256fea2646970667358221220e9d245750b2b663eea589b22913e9961d91c00fe352765dd10666eea3c48dae464736f6c63430008140033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$820.81
Net Worth in ETH
0.447848
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,832.8 | 0.4478 | $820.81 |
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.