Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 24 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24728979 | 23 hrs ago | 0.05499703 ETH | ||||
| Receive Revenue | 24728940 | 23 hrs ago | 0.00193974 ETH | ||||
| Receive Revenue | 24728940 | 23 hrs ago | 0.00198521 ETH | ||||
| Receive Revenue | 24728940 | 23 hrs ago | 0.00200192 ETH | ||||
| Receive Revenue | 24728939 | 23 hrs ago | 0.00204696 ETH | ||||
| Receive Revenue | 24728939 | 23 hrs ago | 0.00208344 ETH | ||||
| Receive Revenue | 24728938 | 23 hrs ago | 0.00212517 ETH | ||||
| Receive Revenue | 24728937 | 23 hrs ago | 0.00217058 ETH | ||||
| Receive Revenue | 24728937 | 23 hrs ago | 0.00221621 ETH | ||||
| Receive Revenue | 24728936 | 23 hrs ago | 0.00220126 ETH | ||||
| Receive Revenue | 24728935 | 23 hrs ago | 0.0022563 ETH | ||||
| Receive Revenue | 24728935 | 23 hrs ago | 0.00229837 ETH | ||||
| Receive Revenue | 24728935 | 23 hrs ago | 0.00234191 ETH | ||||
| Receive Revenue | 24728935 | 23 hrs ago | 0.00239911 ETH | ||||
| Receive Revenue | 24728934 | 23 hrs ago | 0.00246179 ETH | ||||
| Receive Revenue | 24728934 | 23 hrs ago | 0.00252696 ETH | ||||
| Receive Revenue | 24728934 | 23 hrs ago | 0.00259475 ETH | ||||
| Receive Revenue | 24728933 | 23 hrs ago | 0.00266531 ETH | ||||
| Receive Revenue | 24728933 | 23 hrs ago | 0.00273879 ETH | ||||
| Receive Revenue | 24728933 | 23 hrs ago | 0.00281009 ETH | ||||
| Receive Revenue | 24728933 | 23 hrs ago | 0.00288314 ETH | ||||
| Receive Revenue | 24728932 | 23 hrs ago | 0.00296236 ETH | ||||
| Receive Revenue | 24728931 | 23 hrs ago | 0.0030449 ETH | ||||
| Receive Revenue | 24728928 | 23 hrs ago | 0.00224262 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NCITreasury
Compiler Version
v0.8.19+commit.7dd6d404
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.19;
/**
* @title NCITreasury
* @notice Primary treasury for the New Coin Index protocol.
*
* @dev Receives ETH from NCIToken's auto-swap tax mechanism and maintains
* internal accounting across four allocation buckets:
*
* 70% → Index Capital (used by NCIAcquisitionEngine for positions)
* 15% → Infrastructure (protocol ops, development, hosting)
* 10% → Emergency Reserve (liquidty backstop, black-swan fund)
* 5% → Community (grants, incentives, DAO allocation)
*
* Access levels:
* Owner - full admin (set operator, update wallets, emergency withdraw)
* Operator - authorised to call allocateForAcquisition() and
* receiveFromAcquisition(); intended to be NCIAcquisitionEngine
*
* Time-lock: any single withdrawal > TIMELOCK_THRESHOLD (10 ETH) must be
* queued for TIMELOCK_DELAY (48 hours) before execution.
*/
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
contract NCITreasury is Ownable, ReentrancyGuard {
// =========================================================================
// Constants
// =========================================================================
uint256 public constant TIMELOCK_THRESHOLD = 10 ether;
uint256 public constant TIMELOCK_DELAY = 48 hours;
uint256 public constant INDEX_SHARE_BPS = 7_000; // 70%
uint256 public constant INFRA_SHARE_BPS = 1_500; // 15%
uint256 public constant EMERGENCY_SHARE_BPS = 1_000; // 10%
uint256 public constant COMMUNITY_SHARE_BPS = 500; // 5%
uint256 public constant BPS_DENOMINATOR = 10_000;
// =========================================================================
// State - balances (virtual accounting, not separate ETH pools)
// =========================================================================
/// @notice Portion of treasury ETH allocated to index capital activities.
uint256 public indexCapitalBalance;
/// @notice Portion allocated to infrastructure / operations.
uint256 public infraBalance;
/// @notice Portion allocated to the emergency reserve.
uint256 public emergencyBalance;
/// @notice Portion allocated to community programmes.
uint256 public communityBalance;
/// @notice Total ETH ever received by this contract.
uint256 public totalETHReceived;
/// @notice Total ETH ever disbursed (to operator for acquisitions, to wallets, etc.).
uint256 public totalETHDisbursed;
// =========================================================================
// State - access control
// =========================================================================
/// @notice Authorised operator (expected to be NCIAcquisitionEngine).
address public operator;
// =========================================================================
// State - time-lock queue
// =========================================================================
struct WithdrawalRequest {
address payable recipient;
uint256 amount;
uint256 unlocksAt;
bool executed;
bool cancelled;
string reason;
}
/// @notice Sequential ID counter for withdrawal requests.
uint256 public nextRequestId;
mapping(uint256 => WithdrawalRequest) public withdrawalRequests;
// =========================================================================
// Events
// =========================================================================
event RevenueReceived(uint256 amount, uint256 toIndex, uint256 toInfra, uint256 toEmergency, uint256 toCommunity);
event AcquisitionFunded(address indexed acquisitionEngine, uint256 amount, uint256 requestId);
event AcquisitionProceedsReceived(uint256 amount, uint256 profit);
event WithdrawalQueued(uint256 indexed requestId, address indexed recipient, uint256 amount, uint256 unlocksAt, string reason);
event WithdrawalExecuted(uint256 indexed requestId, address indexed recipient, uint256 amount);
event WithdrawalCancelled(uint256 indexed requestId);
event ImmediateWithdrawal(address indexed recipient, uint256 amount, string bucket, string reason);
event OperatorUpdated(address indexed oldOperator, address indexed newOperator);
event EmergencyWithdraw(address indexed to, uint256 amount);
// =========================================================================
// Modifiers
// =========================================================================
modifier onlyOperator() {
require(msg.sender == operator || msg.sender == owner(), "Treasury: not operator");
_;
}
// =========================================================================
// Constructor
// =========================================================================
constructor() Ownable() {}
// =========================================================================
// Revenue ingress
// =========================================================================
/**
* @notice Receive ETH from NCIToken and split it into allocation buckets.
* @dev Called by NCIToken._distributeETH() via INCITreasury interface.
* The split mirrors the token contract's TREASURY_SHARE allocation
* (this function handles the internal sub-split within the treasury).
*/
function receiveRevenue() external payable {
uint256 amount = msg.value;
require(amount > 0, "Treasury: zero value");
uint256 toIndex = (amount * INDEX_SHARE_BPS) / BPS_DENOMINATOR;
uint256 toInfra = (amount * INFRA_SHARE_BPS) / BPS_DENOMINATOR;
uint256 toEmergency = (amount * EMERGENCY_SHARE_BPS) / BPS_DENOMINATOR;
uint256 toCommunity = amount - toIndex - toInfra - toEmergency;
indexCapitalBalance += toIndex;
infraBalance += toInfra;
emergencyBalance += toEmergency;
communityBalance += toCommunity;
totalETHReceived += amount;
emit RevenueReceived(amount, toIndex, toInfra, toEmergency, toCommunity);
}
/// @notice Plain ETH receive - allocates using same split as receiveRevenue().
receive() external payable {
if (msg.value > 0) {
uint256 amount = msg.value;
uint256 toIndex = (amount * INDEX_SHARE_BPS) / BPS_DENOMINATOR;
uint256 toInfra = (amount * INFRA_SHARE_BPS) / BPS_DENOMINATOR;
uint256 toEmerg = (amount * EMERGENCY_SHARE_BPS) / BPS_DENOMINATOR;
uint256 toComm = amount - toIndex - toInfra - toEmerg;
indexCapitalBalance += toIndex;
infraBalance += toInfra;
emergencyBalance += toEmerg;
communityBalance += toComm;
totalETHReceived += amount;
emit RevenueReceived(amount, toIndex, toInfra, toEmerg, toComm);
}
}
// =========================================================================
// Operator - acquisition funding
// =========================================================================
/**
* @notice Send ETH from the index capital bucket to the operator address
* (NCIAcquisitionEngine) to fund a token acquisition.
* @param amount ETH to send (wei).
* @param requestId Off-chain request reference for traceability.
*/
function allocateForAcquisition(uint256 amount, uint256 requestId)
external
onlyOperator
nonReentrant
{
require(amount > 0, "Treasury: zero amount");
require(amount <= indexCapitalBalance, "Treasury: insufficient index capital");
require(address(this).balance >= amount, "Treasury: insufficient ETH balance");
indexCapitalBalance -= amount;
totalETHDisbursed += amount;
(bool success,) = payable(operator).call{value: amount}("");
require(success, "Treasury: ETH transfer failed");
emit AcquisitionFunded(operator, amount, requestId);
}
/**
* @notice Receive ETH back from the acquisition engine (position exit
* proceeds). Any amount above `costBasis` is treated as profit
* and re-allocated proportionally.
* @param costBasis The original amount that was sent out for this position.
*/
function receiveFromAcquisition(uint256 costBasis) external payable onlyOperator {
require(msg.value > 0, "Treasury: zero value");
uint256 profit = msg.value > costBasis ? msg.value - costBasis : 0;
// Return cost basis to index capital
uint256 toIndex = costBasis > msg.value ? msg.value : costBasis;
indexCapitalBalance += toIndex;
// Distribute profit across all buckets
if (profit > 0) {
uint256 profitToIndex = (profit * INDEX_SHARE_BPS) / BPS_DENOMINATOR;
uint256 profitToInfra = (profit * INFRA_SHARE_BPS) / BPS_DENOMINATOR;
uint256 profitToEmerg = (profit * EMERGENCY_SHARE_BPS) / BPS_DENOMINATOR;
uint256 profitToComm = profit - profitToIndex - profitToInfra - profitToEmerg;
indexCapitalBalance += profitToIndex;
infraBalance += profitToInfra;
emergencyBalance += profitToEmerg;
communityBalance += profitToComm;
}
totalETHReceived += msg.value;
emit AcquisitionProceedsReceived(msg.value, profit);
}
// =========================================================================
// Owner - withdrawals
// =========================================================================
/**
* @notice Immediately withdraw a small amount (< TIMELOCK_THRESHOLD) from
* the specified bucket without queuing.
* @param bucket One of: "index", "infra", "emergency", "community".
* @param recipient Where to send the ETH.
* @param amount How much ETH (wei) to withdraw.
* @param reason Human-readable reason for the withdrawal.
*/
function immediateWithdraw(
string calldata bucket,
address payable recipient,
uint256 amount,
string calldata reason
) external onlyOwner nonReentrant {
require(amount > 0, "Treasury: zero amount");
require(amount < TIMELOCK_THRESHOLD, "Treasury: use queueWithdrawal for large amounts");
require(recipient != address(0), "Treasury: zero recipient");
_deductFromBucket(bucket, amount);
totalETHDisbursed += amount;
(bool s,) = recipient.call{value: amount}("");
require(s, "Treasury: send failed");
emit ImmediateWithdrawal(recipient, amount, bucket, reason);
}
/**
* @notice Queue a large withdrawal (>= TIMELOCK_THRESHOLD). Must be
* executed 48 hours later via executeWithdrawal().
*/
function queueWithdrawal(
string calldata bucket,
address payable recipient,
uint256 amount,
string calldata reason
) external onlyOwner returns (uint256 requestId) {
require(amount > 0, "Treasury: zero amount");
require(recipient != address(0), "Treasury: zero recipient");
// Validate bucket balance now (actual deduction happens on execute)
_validateBucketBalance(bucket, amount);
requestId = nextRequestId++;
uint256 unlocksAt = block.timestamp + TIMELOCK_DELAY;
withdrawalRequests[requestId] = WithdrawalRequest({
recipient: recipient,
amount: amount,
unlocksAt: unlocksAt,
executed: false,
cancelled: false,
reason: reason
});
emit WithdrawalQueued(requestId, recipient, amount, unlocksAt, reason);
}
/**
* @notice Execute a previously queued withdrawal after the time-lock expires.
*/
function executeWithdrawal(uint256 requestId, string calldata bucket)
external
onlyOwner
nonReentrant
{
WithdrawalRequest storage req = withdrawalRequests[requestId];
require(!req.executed, "Treasury: already executed");
require(!req.cancelled, "Treasury: cancelled");
require(block.timestamp >= req.unlocksAt, "Treasury: time-lock active");
require(req.amount > 0, "Treasury: zero request");
_deductFromBucket(bucket, req.amount);
req.executed = true;
totalETHDisbursed += req.amount;
(bool s,) = req.recipient.call{value: req.amount}("");
require(s, "Treasury: send failed");
emit WithdrawalExecuted(requestId, req.recipient, req.amount);
}
/// @notice Cancel a queued (not yet executed) withdrawal.
function cancelWithdrawal(uint256 requestId) external onlyOwner {
WithdrawalRequest storage req = withdrawalRequests[requestId];
require(!req.executed, "Treasury: already executed");
require(!req.cancelled, "Treasury: already cancelled");
req.cancelled = true;
emit WithdrawalCancelled(requestId);
}
// =========================================================================
// Owner - admin
// =========================================================================
/**
* @notice Set the authorised operator address (should be NCIAcquisitionEngine).
*/
function setOperator(address _operator) external onlyOwner {
require(_operator != address(0), "Treasury: zero operator");
emit OperatorUpdated(operator, _operator);
operator = _operator;
}
/**
* @notice Emergency drain - sends all ETH to owner. Should only be used
* in a true emergency after ownership has been confirmed safe.
*/
function emergencyWithdraw() external onlyOwner nonReentrant {
uint256 bal = address(this).balance;
require(bal > 0, "Treasury: nothing to withdraw");
// Reset all bucket balances
indexCapitalBalance = 0;
infraBalance = 0;
emergencyBalance = 0;
communityBalance = 0;
(bool s,) = owner().call{value: bal}("");
require(s, "Treasury: emergency withdraw failed");
emit EmergencyWithdraw(owner(), bal);
}
// =========================================================================
// View functions
// =========================================================================
/// @notice Real ETH balance held by this contract.
function contractETHBalance() external view returns (uint256) {
return address(this).balance;
}
/// @notice Returns all four virtual bucket balances in one call.
function getAllBalances()
external
view
returns (
uint256 index,
uint256 infra,
uint256 emergency,
uint256 community
)
{
return (indexCapitalBalance, infraBalance, emergencyBalance, communityBalance);
}
/// @notice Returns details of a specific withdrawal request.
function getWithdrawalRequest(uint256 requestId)
external
view
returns (WithdrawalRequest memory)
{
return withdrawalRequests[requestId];
}
/// @notice Returns the number of seconds remaining on a time-locked request
/// (0 if unlocked or does not exist).
function timelockRemaining(uint256 requestId) external view returns (uint256) {
WithdrawalRequest storage req = withdrawalRequests[requestId];
if (req.executed || req.cancelled || block.timestamp >= req.unlocksAt) {
return 0;
}
return req.unlocksAt - block.timestamp;
}
// =========================================================================
// Internal helpers
// =========================================================================
function _deductFromBucket(string memory bucket, uint256 amount) private {
bytes32 b = keccak256(bytes(bucket));
if (b == keccak256("index")) {
require(indexCapitalBalance >= amount, "Treasury: insufficient index capital");
indexCapitalBalance -= amount;
} else if (b == keccak256("infra")) {
require(infraBalance >= amount, "Treasury: insufficient infra balance");
infraBalance -= amount;
} else if (b == keccak256("emergency")) {
require(emergencyBalance >= amount, "Treasury: insufficient emergency balance");
emergencyBalance -= amount;
} else if (b == keccak256("community")) {
require(communityBalance >= amount, "Treasury: insufficient community balance");
communityBalance -= amount;
} else {
revert("Treasury: unknown bucket");
}
}
function _validateBucketBalance(string memory bucket, uint256 amount) private view {
bytes32 b = keccak256(bytes(bucket));
if (b == keccak256("index")) {
require(indexCapitalBalance >= amount, "Treasury: insufficient index capital");
} else if (b == keccak256("infra")) {
require(infraBalance >= amount, "Treasury: insufficient infra balance");
} else if (b == keccak256("emergency")) {
require(emergencyBalance >= amount, "Treasury: insufficient emergency balance");
} else if (b == keccak256("community")) {
require(communityBalance >= amount, "Treasury: insufficient community balance");
} else {
revert("Treasury: unknown bucket");
}
}
// =========================================================================
// Emergency Token Recovery
// =========================================================================
/**
* @notice Rescue ERC-20 tokens accidentally sent to this contract.
* @dev This contract is not designed to hold ERC-20 tokens directly -
* it only holds ETH. Any ERC-20 received is considered stuck and
* recoverable by the owner only.
* @param token Address of the stuck ERC-20 token.
* @param to Recipient of the recovered tokens.
* @param amount Amount to recover. Pass 0 to recover entire balance.
*/
function rescueERC20(address token, address to, uint256 amount) external onlyOwner nonReentrant {
require(token != address(0), "Treasury: zero token");
require(to != address(0), "Treasury: zero address");
// Minimal ERC-20 interface - avoids importing full IERC20
(bool ok, bytes memory data) = token.call(
abi.encodeWithSignature("balanceOf(address)", address(this))
);
require(ok, "Treasury: balanceOf failed");
uint256 bal = abi.decode(data, (uint256));
uint256 send = amount == 0 ? bal : amount;
require(send <= bal, "Treasury: insufficient token balance");
(bool sent,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", to, send));
require(sent, "Treasury: token transfer failed");
emit ERC20Rescued(token, to, send);
}
/// @notice Emitted when ERC-20 tokens are rescued from the treasury.
event ERC20Rescued(address indexed token, address indexed to, uint256 amount);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (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.4) (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"viaIR": true,
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"acquisitionEngine","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"AcquisitionFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"profit","type":"uint256"}],"name":"AcquisitionProceedsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Rescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"bucket","type":"string"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"ImmediateWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorUpdated","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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toInfra","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toEmergency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toCommunity","type":"uint256"}],"name":"RevenueReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"WithdrawalCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlocksAt","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"WithdrawalQueued","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COMMUNITY_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INDEX_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INFRA_SHARE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"allocateForAcquisition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"cancelWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"string","name":"bucket","type":"string"}],"name":"executeWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllBalances","outputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"infra","type":"uint256"},{"internalType":"uint256","name":"emergency","type":"uint256"},{"internalType":"uint256","name":"community","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"getWithdrawalRequest","outputs":[{"components":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlocksAt","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"internalType":"struct NCITreasury.WithdrawalRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"bucket","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"immediateWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"indexCapitalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infraBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRequestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"bucket","type":"string"},{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"queueWithdrawal","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"costBasis","type":"uint256"}],"name":"receiveFromAcquisition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"receiveRevenue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"timelockRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHDisbursed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHReceived","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawalRequests","outputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlocksAt","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080806040523461005f5760008054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600180556120b490816100658239f35b600080fdfe608060408181526004918236101561014f575b50361561001e57600080fd5b341590811561002957005b611b5890813402913483041483171561013a57612710809204916105dc803402903482041485171561012557819004936103e8908134029134830414171561012557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca2695916101209304906100ac826100a7886100a78934611adf565b611adf565b926100b986600254611b02565b6002556100c887600354611b02565b6003556100d6838254611b02565b90556100e483600554611b02565b6005556100f334600654611b02565b6006555194859434869192608093969594919660a084019784526020840152604083015260608201520152565b0390a1005b601186634e487b7160e01b6000525260246000fd5b601184634e487b7160e01b6000525260246000fd5b600090813560e01c908163047cbe10146118085750806311841c41146117ed5780632741e9f2146117cf5780633b4dfafb146117b05780633efcfda4146116f157806342dfb2321461151e57806344e822501461146c57806348b58c511461144f5780634d37025c1461142c5780634d3dbec41461140d578063570ca735146113e457806357800d80146113c75780635ba1c1a9146113a95780636a84a9851461138a5780636e1682a01461136b5780636fa9f02d1461121e578063715018a6146111c45780638593906114611054578063867e7c271461101c5780638da5cb5b14610ff45780638e4cbc8314610fd5578063937b258114610f55578063a2d044d214610d9e578063ae48565114610cac578063b2118a8d146109f6578063b3ab15fb1461093f578063bdf06c6914610922578063c00dd0b714610514578063db2e21bc146103f2578063e1a45218146103d5578063e751ebf5146103b2578063f2fde38b146102eb5763fb1ff7af0361001257346102e85760203660031901126102e857506102e160209235611dc6565b9051908152f35b80fd5b5091346103ae5760203660031901126103ae57610306611a2e565b9061030f611a44565b6001600160a01b0391821692831561035c57505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b5090346103d157816003193601126103d1576020906007549051908152f35b5080fd5b5090346103d157816003193601126103d157602090516127108152f35b5091346103ae57826003193601126103ae5761040c611a44565b610414611c3c565b479081156104d15783600255836003558381558360055560018060a01b03908480808086868254165af1610446611c0c565b501561048257507f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695916020918554169351908152a26001805580f35b608490602085519162461bcd60e51b8352820152602360248201527f54726561737572793a20656d657267656e6379207769746864726177206661696044820152621b195960ea1b6064820152fd5b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a206e6f7468696e6720746f2077697468647261770000006044820152fd5b5091346103ae5761055e9161052836611857565b9394610535989198611a44565b610540831515611b54565b6001600160a01b0393841695610557871515611c92565b3691611cde565b9687516020809901207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f92811460001461083857506105a0826002541015611b98565b6009549660001980891461082557600189016009556202a3004201948542116108125790828885898f8f8f98978f8d93600a8e948351996105e08b6118f4565b8a52808a01958652838a0196875261060860608b0199848b5260808c0199858b523691611cde565b9d60a08b019e8f52835252209551166bffffffffffffffffffffffff60a01b86541617855551600185015551600284015560038301915115159060ff61ff0084549251151560081b1692169061ffff19161717905501925180519267ffffffffffffffff84116107ff575061067d84546118ba565b601f81116107bc575b509b8a9b9c819b98999a9b508d91601f8511600114610713579284927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639a9b95926106ff98979593610708575b50508260011b9260031b1c19161790555b885194859485528b8501526060898501526060840191611d59565b0390a351908152f35b0151915038806106d3565b9291908e601f1986169087865280862095905b82821061078c5750509285926106ff989795927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639c9d9760019610610774575b50505050811b0190556106e4565b01519060f88460031b161c1916905538808080610766565b849798999b9d9a9c506001819394959782939798870151815501970194018f9b999c9a9897969594939291610726565b848e528c8e20601f850160051c8101918e86106107f5575b601f0160051c01905b8181106107ea5750610686565b8e81556001016107dd565b90915081906107d4565b634e487b7160e01b8e526041905260248dfd5b634e487b7160e01b8c526011835260248cfd5b634e487b7160e01b8b526011825260248bfd5b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103610873575061086e826003541015611ede565b6105a0565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036108a8575061086e8288541015611e81565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f53036108dc5761086e826005541015611e24565b855162461bcd60e51b8152602081890181815260189181019190915277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b604082015281906060010390fd5b5090346103d157816003193601126103d157602090516103e88152f35b5091346103ae5760203660031901126103ae5761095a611a2e565b90610963611a44565b6001600160a01b039182169283156109b3575050816008549182167ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad038580a36001600160a01b0319161760085580f35b906020606492519162461bcd60e51b8352820152601760248201527f54726561737572793a207a65726f206f70657261746f720000000000000000006044820152fd5b5082346103d15760603660031901126103d157610a11611a2e565b6001600160a01b0360248035828116949193929190859003610ca8576044803592610a3a611a44565b610a42611c3c565b8416948515610c70578615610c365788516370a0823160e01b60208083019182523084840152838352969167ffffffffffffffff91906060810183811182821017610c24578d52518b9182919082865af1610a9b611c0c565b9015610be3578781805181010312610bdf578701519580610bd95750855b8611610b8c578a518781019163a9059cbb60e01b83528a858301528786830152858252608082019082821090821117610b7a578c52518a9283929083905af1610b00611c0c565b5015610b3957505050907f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e5918651908152a36001805580f35b885162461bcd60e51b8152928301859052601f908301527f54726561737572793a20746f6b656e207472616e73666572206661696c65640090820152606490fd5b634e487b7160e01b8c5260418752848cfd5b506084847f54726561737572793a20696e73756666696369656e7420746f6b656e2062616c85858a8f519462461bcd60e51b86528501528084015282015263616e636560e01b6064820152fd5b95610ab9565b8a80fd5b8b5162461bcd60e51b8152808701899052601a818601527f54726561737572793a2062616c616e63654f66206661696c656400000000000081870152606490fd5b634e487b7160e01b8d5260418852858dfd5b6064929160167554726561737572793a207a65726f206164647265737360501b9260208c519562461bcd60e51b8752860152840152820152fd5b606492916014732a3932b0b9bab93c9d103d32b937903a37b5b2b760611b9260208c519562461bcd60e51b8752860152840152820152fd5b8580fd5b508290346102e857602090816003193601126102e8579083610d9a92606060a08351610cd7816118f4565b838152838682015283858201528383820152836080820152015284358152600a83522092845193610d07856118f4565b60018060a01b0395868254168652600182015490848701918252600283015491818801928352610d5860038501549560608a019560ff88161515875260ff60808c019860081c161515885201611948565b9560a089019687528251998a99828b525116908901525190870152516060860152511515608085015251151560a08401525160c08084015260e08301906119ee565b0390f35b509060203660031901126103d157600854833590610dd190336001600160a01b0391821614908115610f48575b50611b0f565b610ddc341515611a9c565b803411600014610f4157610df08134611adf565b905b34811115610f385750610e08345b600254611b02565b8060025581158015610e57575b847fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b338585610e4534600654611b02565b6006558151903482526020820152a180f35b611b58908184029184830414811715610f2557612710809204916105dc8086029086820414831715610f1257819004916103e89081870291878304141715610f125792610ef383610ee883610ee28a6100a77fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b339e9f996100a7610efd9a610f079e9d04998a94611adf565b97611b02565b600255600354611b02565b6003558254611b02565b9055600554611b02565b600555839238610e15565b634e487b7160e01b885260118952602488fd5b634e487b7160e01b865260118752602486fd5b610e0890610e00565b8290610df2565b9050845416331438610dcb565b50346102e85760203660031901126102e85781610d9a9184358152600a602052209160ff60018060a01b0384541693600181015495610f9f60028301549160038401549301611948565b938051978897885260208801528601528181161515606086015260081c161515608084015260c060a084015260c08301906119ee565b5090346103d157816003193601126103d1576020906005549051908152f35b5090346103d157816003193601126103d157905490516001600160a01b039091168152602090f35b5091346103ae57826003193601126103ae57608092506002549160035491549060055492815194855260208501528301526060820152f35b509190346103ae57806003193601126103ae576008548235926001600160a01b03918216331480156111b8575b61108a90611b0f565b611092611c3c565b61109d841515611b54565b6002546110ac81861115611b98565b84471061116a57846110bd91611adf565b6002556110cc84600754611b02565b600755848080808786600854165af16110e3611c0c565b50156111275750907f548c9dd20f39d6f37ad6e223b8b731b33e008439efe7d3eefe4510cf69f91aed91600854169281519081526024356020820152a26001805580f35b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a20455448207472616e73666572206661696c65640000006044820152fd5b835162461bcd60e51b8152602081840152602260248201527f54726561737572793a20696e73756666696369656e74204554482062616c616e604482015261636560f01b6064820152608490fd5b50845482163314611081565b50346102e857806003193601126102e8576111dd611a44565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5091346103ae5761122e36611857565b9194969290939561123d611a44565b611245611c3c565b611250861515611b54565b678ac7230489e8000086101561131057506001600160a01b031695611276871515611c92565b84611282368884611cde565b9061128c91611f36565b846007549061129a91611b02565b60075587808080888b5af16112ad611c0c565b506112b790611d15565b82519586958652602086016060905260608601906112d492611d59565b91848303908501526112e592611d59565b037fe8d94e3a81117f0e80d635521a494c5710685347eb6fea78a7f89e9def859fa491a26001805580f35b608490602085519162461bcd60e51b8352820152602f60248201527f54726561737572793a207573652071756575655769746864726177616c20666f60448201526e72206c6172676520616d6f756e747360881b6064820152fd5b5090346103d157816003193601126103d1576020906006549051908152f35b5090346103d157816003193601126103d1576020906009549051908152f35b5090346103d157816003193601126103d157602090516202a3008152f35b5090346103d157816003193601126103d157602090516101f48152f35b5090346103d157816003193601126103d15760085490516001600160a01b039091168152602090f35b5090346103d157816003193601126103d1576020906003549051908152f35b5090346103d157816003193601126103d15760209051678ac7230489e800008152f35b5090346103d157816003193601126103d15760209051611b588152f35b5090816003193601126103d1573415906114868215611a9c565b611b5890813402913483041483171561150b57612710809204916105dc8034029034820414851715610f2557819004936103e89081340291348304141715610f2557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca269596916115059304906100ac826100a7886100a78934611adf565b0390a180f35b634e487b7160e01b845260118552602484fd5b509190346103ae57806003193601126103ae5781359060243567ffffffffffffffff81116116ed576115539036908501611824565b939061155d611a44565b611565611c3c565b838652600a60205282862091600383019160ff835461158682821615611d7a565b60081c166116b4576002840154421061167157600184019687549283156116355750602094926115de7fd6cddb3d69146e96ebc2c87b1b3dd0b20ee2d3b0eadf134e011afb434a3e56e69795936115e3933691611cde565b611f36565b600160ff198254161790556115fb8654600754611b02565b60075560018060a01b039061162488808080868654168c54905af161161e611c0c565b50611d15565b541694549051908152a36001805580f35b606490602088519162461bcd60e51b83528201526016602482015275151c99585cdd5c9e4e881e995c9bc81c995c5d595cdd60521b6044820152fd5b845162461bcd60e51b8152602081840152601a60248201527f54726561737572793a2074696d652d6c6f636b206163746976650000000000006044820152606490fd5b845162461bcd60e51b81526020818401526013602482015272151c99585cdd5c9e4e8818d85b98d95b1b1959606a1b6044820152606490fd5b8480fd5b5091346103ae5760203660031901126103ae5780359161170f611a44565b828452600a6020526003818520019182549161172e60ff841615611d7a565b60ff8360081c1661176d57505061ff0019166101001790557fe8de1e631ea541ac8e6cb398aafb71b991eb58d489298f7bc93ba7e17fa2042b8280a280f35b906020606492519162461bcd60e51b8352820152601b60248201527f54726561737572793a20616c72656164792063616e63656c6c656400000000006044820152fd5b5090346103d157816003193601126103d1576020906002549051908152f35b5091346103ae57826003193601126103ae5760209250549051908152f35b5090346103d157816003193601126103d15751478152602090f35b9050346103d157816003193601126103d157806105dc60209252f35b9181601f840112156118525782359167ffffffffffffffff8311611852576020838186019501011161185257565b600080fd5b9060806003198301126118525767ffffffffffffffff600435818111611852578361188491600401611824565b909390926024356001600160a01b0381168103611852579260443592606435918211611852576118b691600401611824565b9091565b90600182811c921680156118ea575b60208310146118d457565b634e487b7160e01b600052602260045260246000fd5b91607f16916118c9565b60c0810190811067ffffffffffffffff82111761191057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761191057604052565b906040519182600082549261195c846118ba565b9081845260019485811690816000146119cb5750600114611988575b505061198692500383611926565b565b9093915060005260209081600020936000915b8183106119b357505061198693508201013880611978565b8554888401850152948501948794509183019161199b565b91505061198694506020925060ff191682840152151560051b8201013880611978565b919082519283825260005b848110611a1a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016119f9565b600435906001600160a01b038216820361185257565b6000546001600160a01b03163303611a5857565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15611aa357565b60405162461bcd60e51b815260206004820152601460248201527354726561737572793a207a65726f2076616c756560601b6044820152606490fd5b91908203918211611aec57565b634e487b7160e01b600052601160045260246000fd5b91908201809211611aec57565b15611b1657565b60405162461bcd60e51b81526020600482015260166024820152752a3932b0b9bab93c9d103737ba1037b832b930ba37b960511b6044820152606490fd5b15611b5b57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881e995c9bc8185b5bdd5b9d605a1b6044820152606490fd5b15611b9f57565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e646578206361706044820152631a5d185b60e21b6064820152608490fd5b67ffffffffffffffff811161191057601f01601f191660200190565b3d15611c37573d90611c1d82611bf0565b91611c2b6040519384611926565b82523d6000602084013e565b606090565b600260015414611c4d576002600155565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15611c9957565b60405162461bcd60e51b815260206004820152601860248201527f54726561737572793a207a65726f20726563697069656e7400000000000000006044820152606490fd5b929192611cea82611bf0565b91611cf86040519384611926565b829481845281830111611852578281602093846000960137010152565b15611d1c57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881cd95b990819985a5b1959605a1b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b15611d8157565b60405162461bcd60e51b815260206004820152601a60248201527f54726561737572793a20616c72656164792065786563757465640000000000006044820152606490fd5b600052600a6020526040600020600381015460ff8116908115611e16575b508015611e08575b611e02576002611dff9101544290611adf565b90565b50600090565b506002810154421015611dec565b60ff915060081c1638611de4565b15611e2b57565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420636f6d6d756e6974796044820152672062616c616e636560c01b6064820152608490fd5b15611e8857565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420656d657267656e63796044820152672062616c616e636560c01b6064820152608490fd5b15611ee557565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e6672612062616c604482015263616e636560e01b6064820152608490fd5b602081519101207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f928114600014611f805750611f7b906002546100a782821015611b98565b600255565b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103611fc05750611fbb906003546100a782821015611ede565b600355565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036120005750611ffb906004546100a782821015611e81565b600455565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f530361203e57612039906005546100a782821015611e24565b600555565b60405162461bcd60e51b8152602060048201526018602482015277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b6044820152606490fdfea264697066735822122075b6894821563ed131b8311cea478399ae26c749b110f94e809ea448d0e8b96564736f6c63430008130033
Deployed Bytecode
0x608060408181526004918236101561014f575b50361561001e57600080fd5b341590811561002957005b611b5890813402913483041483171561013a57612710809204916105dc803402903482041485171561012557819004936103e8908134029134830414171561012557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca2695916101209304906100ac826100a7886100a78934611adf565b611adf565b926100b986600254611b02565b6002556100c887600354611b02565b6003556100d6838254611b02565b90556100e483600554611b02565b6005556100f334600654611b02565b6006555194859434869192608093969594919660a084019784526020840152604083015260608201520152565b0390a1005b601186634e487b7160e01b6000525260246000fd5b601184634e487b7160e01b6000525260246000fd5b600090813560e01c908163047cbe10146118085750806311841c41146117ed5780632741e9f2146117cf5780633b4dfafb146117b05780633efcfda4146116f157806342dfb2321461151e57806344e822501461146c57806348b58c511461144f5780634d37025c1461142c5780634d3dbec41461140d578063570ca735146113e457806357800d80146113c75780635ba1c1a9146113a95780636a84a9851461138a5780636e1682a01461136b5780636fa9f02d1461121e578063715018a6146111c45780638593906114611054578063867e7c271461101c5780638da5cb5b14610ff45780638e4cbc8314610fd5578063937b258114610f55578063a2d044d214610d9e578063ae48565114610cac578063b2118a8d146109f6578063b3ab15fb1461093f578063bdf06c6914610922578063c00dd0b714610514578063db2e21bc146103f2578063e1a45218146103d5578063e751ebf5146103b2578063f2fde38b146102eb5763fb1ff7af0361001257346102e85760203660031901126102e857506102e160209235611dc6565b9051908152f35b80fd5b5091346103ae5760203660031901126103ae57610306611a2e565b9061030f611a44565b6001600160a01b0391821692831561035c57505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b5090346103d157816003193601126103d1576020906007549051908152f35b5080fd5b5090346103d157816003193601126103d157602090516127108152f35b5091346103ae57826003193601126103ae5761040c611a44565b610414611c3c565b479081156104d15783600255836003558381558360055560018060a01b03908480808086868254165af1610446611c0c565b501561048257507f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695916020918554169351908152a26001805580f35b608490602085519162461bcd60e51b8352820152602360248201527f54726561737572793a20656d657267656e6379207769746864726177206661696044820152621b195960ea1b6064820152fd5b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a206e6f7468696e6720746f2077697468647261770000006044820152fd5b5091346103ae5761055e9161052836611857565b9394610535989198611a44565b610540831515611b54565b6001600160a01b0393841695610557871515611c92565b3691611cde565b9687516020809901207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f92811460001461083857506105a0826002541015611b98565b6009549660001980891461082557600189016009556202a3004201948542116108125790828885898f8f8f98978f8d93600a8e948351996105e08b6118f4565b8a52808a01958652838a0196875261060860608b0199848b5260808c0199858b523691611cde565b9d60a08b019e8f52835252209551166bffffffffffffffffffffffff60a01b86541617855551600185015551600284015560038301915115159060ff61ff0084549251151560081b1692169061ffff19161717905501925180519267ffffffffffffffff84116107ff575061067d84546118ba565b601f81116107bc575b509b8a9b9c819b98999a9b508d91601f8511600114610713579284927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639a9b95926106ff98979593610708575b50508260011b9260031b1c19161790555b885194859485528b8501526060898501526060840191611d59565b0390a351908152f35b0151915038806106d3565b9291908e601f1986169087865280862095905b82821061078c5750509285926106ff989795927f8335f69c14b76acee7eb7d11e9399a90beca1b4d5d0b19a9c5889b0726c750639c9d9760019610610774575b50505050811b0190556106e4565b01519060f88460031b161c1916905538808080610766565b849798999b9d9a9c506001819394959782939798870151815501970194018f9b999c9a9897969594939291610726565b848e528c8e20601f850160051c8101918e86106107f5575b601f0160051c01905b8181106107ea5750610686565b8e81556001016107dd565b90915081906107d4565b634e487b7160e01b8e526041905260248dfd5b634e487b7160e01b8c526011835260248cfd5b634e487b7160e01b8b526011825260248bfd5b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103610873575061086e826003541015611ede565b6105a0565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036108a8575061086e8288541015611e81565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f53036108dc5761086e826005541015611e24565b855162461bcd60e51b8152602081890181815260189181019190915277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b604082015281906060010390fd5b5090346103d157816003193601126103d157602090516103e88152f35b5091346103ae5760203660031901126103ae5761095a611a2e565b90610963611a44565b6001600160a01b039182169283156109b3575050816008549182167ffbe5b6cbafb274f445d7fed869dc77a838d8243a22c460de156560e8857cad038580a36001600160a01b0319161760085580f35b906020606492519162461bcd60e51b8352820152601760248201527f54726561737572793a207a65726f206f70657261746f720000000000000000006044820152fd5b5082346103d15760603660031901126103d157610a11611a2e565b6001600160a01b0360248035828116949193929190859003610ca8576044803592610a3a611a44565b610a42611c3c565b8416948515610c70578615610c365788516370a0823160e01b60208083019182523084840152838352969167ffffffffffffffff91906060810183811182821017610c24578d52518b9182919082865af1610a9b611c0c565b9015610be3578781805181010312610bdf578701519580610bd95750855b8611610b8c578a518781019163a9059cbb60e01b83528a858301528786830152858252608082019082821090821117610b7a578c52518a9283929083905af1610b00611c0c565b5015610b3957505050907f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e5918651908152a36001805580f35b885162461bcd60e51b8152928301859052601f908301527f54726561737572793a20746f6b656e207472616e73666572206661696c65640090820152606490fd5b634e487b7160e01b8c5260418752848cfd5b506084847f54726561737572793a20696e73756666696369656e7420746f6b656e2062616c85858a8f519462461bcd60e51b86528501528084015282015263616e636560e01b6064820152fd5b95610ab9565b8a80fd5b8b5162461bcd60e51b8152808701899052601a818601527f54726561737572793a2062616c616e63654f66206661696c656400000000000081870152606490fd5b634e487b7160e01b8d5260418852858dfd5b6064929160167554726561737572793a207a65726f206164647265737360501b9260208c519562461bcd60e51b8752860152840152820152fd5b606492916014732a3932b0b9bab93c9d103d32b937903a37b5b2b760611b9260208c519562461bcd60e51b8752860152840152820152fd5b8580fd5b508290346102e857602090816003193601126102e8579083610d9a92606060a08351610cd7816118f4565b838152838682015283858201528383820152836080820152015284358152600a83522092845193610d07856118f4565b60018060a01b0395868254168652600182015490848701918252600283015491818801928352610d5860038501549560608a019560ff88161515875260ff60808c019860081c161515885201611948565b9560a089019687528251998a99828b525116908901525190870152516060860152511515608085015251151560a08401525160c08084015260e08301906119ee565b0390f35b509060203660031901126103d157600854833590610dd190336001600160a01b0391821614908115610f48575b50611b0f565b610ddc341515611a9c565b803411600014610f4157610df08134611adf565b905b34811115610f385750610e08345b600254611b02565b8060025581158015610e57575b847fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b338585610e4534600654611b02565b6006558151903482526020820152a180f35b611b58908184029184830414811715610f2557612710809204916105dc8086029086820414831715610f1257819004916103e89081870291878304141715610f125792610ef383610ee883610ee28a6100a77fe0f760fc7dd65acd2d38c939ba57f7f5a804965501648635de94212c4e448b339e9f996100a7610efd9a610f079e9d04998a94611adf565b97611b02565b600255600354611b02565b6003558254611b02565b9055600554611b02565b600555839238610e15565b634e487b7160e01b885260118952602488fd5b634e487b7160e01b865260118752602486fd5b610e0890610e00565b8290610df2565b9050845416331438610dcb565b50346102e85760203660031901126102e85781610d9a9184358152600a602052209160ff60018060a01b0384541693600181015495610f9f60028301549160038401549301611948565b938051978897885260208801528601528181161515606086015260081c161515608084015260c060a084015260c08301906119ee565b5090346103d157816003193601126103d1576020906005549051908152f35b5090346103d157816003193601126103d157905490516001600160a01b039091168152602090f35b5091346103ae57826003193601126103ae57608092506002549160035491549060055492815194855260208501528301526060820152f35b509190346103ae57806003193601126103ae576008548235926001600160a01b03918216331480156111b8575b61108a90611b0f565b611092611c3c565b61109d841515611b54565b6002546110ac81861115611b98565b84471061116a57846110bd91611adf565b6002556110cc84600754611b02565b600755848080808786600854165af16110e3611c0c565b50156111275750907f548c9dd20f39d6f37ad6e223b8b731b33e008439efe7d3eefe4510cf69f91aed91600854169281519081526024356020820152a26001805580f35b606490602084519162461bcd60e51b8352820152601d60248201527f54726561737572793a20455448207472616e73666572206661696c65640000006044820152fd5b835162461bcd60e51b8152602081840152602260248201527f54726561737572793a20696e73756666696369656e74204554482062616c616e604482015261636560f01b6064820152608490fd5b50845482163314611081565b50346102e857806003193601126102e8576111dd611a44565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5091346103ae5761122e36611857565b9194969290939561123d611a44565b611245611c3c565b611250861515611b54565b678ac7230489e8000086101561131057506001600160a01b031695611276871515611c92565b84611282368884611cde565b9061128c91611f36565b846007549061129a91611b02565b60075587808080888b5af16112ad611c0c565b506112b790611d15565b82519586958652602086016060905260608601906112d492611d59565b91848303908501526112e592611d59565b037fe8d94e3a81117f0e80d635521a494c5710685347eb6fea78a7f89e9def859fa491a26001805580f35b608490602085519162461bcd60e51b8352820152602f60248201527f54726561737572793a207573652071756575655769746864726177616c20666f60448201526e72206c6172676520616d6f756e747360881b6064820152fd5b5090346103d157816003193601126103d1576020906006549051908152f35b5090346103d157816003193601126103d1576020906009549051908152f35b5090346103d157816003193601126103d157602090516202a3008152f35b5090346103d157816003193601126103d157602090516101f48152f35b5090346103d157816003193601126103d15760085490516001600160a01b039091168152602090f35b5090346103d157816003193601126103d1576020906003549051908152f35b5090346103d157816003193601126103d15760209051678ac7230489e800008152f35b5090346103d157816003193601126103d15760209051611b588152f35b5090816003193601126103d1573415906114868215611a9c565b611b5890813402913483041483171561150b57612710809204916105dc8034029034820414851715610f2557819004936103e89081340291348304141715610f2557917f49f764441a3795648b4ea0d16d1fd6e217af6b9e7a1fb723695fc403fbedca269596916115059304906100ac826100a7886100a78934611adf565b0390a180f35b634e487b7160e01b845260118552602484fd5b509190346103ae57806003193601126103ae5781359060243567ffffffffffffffff81116116ed576115539036908501611824565b939061155d611a44565b611565611c3c565b838652600a60205282862091600383019160ff835461158682821615611d7a565b60081c166116b4576002840154421061167157600184019687549283156116355750602094926115de7fd6cddb3d69146e96ebc2c87b1b3dd0b20ee2d3b0eadf134e011afb434a3e56e69795936115e3933691611cde565b611f36565b600160ff198254161790556115fb8654600754611b02565b60075560018060a01b039061162488808080868654168c54905af161161e611c0c565b50611d15565b541694549051908152a36001805580f35b606490602088519162461bcd60e51b83528201526016602482015275151c99585cdd5c9e4e881e995c9bc81c995c5d595cdd60521b6044820152fd5b845162461bcd60e51b8152602081840152601a60248201527f54726561737572793a2074696d652d6c6f636b206163746976650000000000006044820152606490fd5b845162461bcd60e51b81526020818401526013602482015272151c99585cdd5c9e4e8818d85b98d95b1b1959606a1b6044820152606490fd5b8480fd5b5091346103ae5760203660031901126103ae5780359161170f611a44565b828452600a6020526003818520019182549161172e60ff841615611d7a565b60ff8360081c1661176d57505061ff0019166101001790557fe8de1e631ea541ac8e6cb398aafb71b991eb58d489298f7bc93ba7e17fa2042b8280a280f35b906020606492519162461bcd60e51b8352820152601b60248201527f54726561737572793a20616c72656164792063616e63656c6c656400000000006044820152fd5b5090346103d157816003193601126103d1576020906002549051908152f35b5091346103ae57826003193601126103ae5760209250549051908152f35b5090346103d157816003193601126103d15751478152602090f35b9050346103d157816003193601126103d157806105dc60209252f35b9181601f840112156118525782359167ffffffffffffffff8311611852576020838186019501011161185257565b600080fd5b9060806003198301126118525767ffffffffffffffff600435818111611852578361188491600401611824565b909390926024356001600160a01b0381168103611852579260443592606435918211611852576118b691600401611824565b9091565b90600182811c921680156118ea575b60208310146118d457565b634e487b7160e01b600052602260045260246000fd5b91607f16916118c9565b60c0810190811067ffffffffffffffff82111761191057604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761191057604052565b906040519182600082549261195c846118ba565b9081845260019485811690816000146119cb5750600114611988575b505061198692500383611926565b565b9093915060005260209081600020936000915b8183106119b357505061198693508201013880611978565b8554888401850152948501948794509183019161199b565b91505061198694506020925060ff191682840152151560051b8201013880611978565b919082519283825260005b848110611a1a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016119f9565b600435906001600160a01b038216820361185257565b6000546001600160a01b03163303611a5857565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15611aa357565b60405162461bcd60e51b815260206004820152601460248201527354726561737572793a207a65726f2076616c756560601b6044820152606490fd5b91908203918211611aec57565b634e487b7160e01b600052601160045260246000fd5b91908201809211611aec57565b15611b1657565b60405162461bcd60e51b81526020600482015260166024820152752a3932b0b9bab93c9d103737ba1037b832b930ba37b960511b6044820152606490fd5b15611b5b57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881e995c9bc8185b5bdd5b9d605a1b6044820152606490fd5b15611b9f57565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e646578206361706044820152631a5d185b60e21b6064820152608490fd5b67ffffffffffffffff811161191057601f01601f191660200190565b3d15611c37573d90611c1d82611bf0565b91611c2b6040519384611926565b82523d6000602084013e565b606090565b600260015414611c4d576002600155565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b15611c9957565b60405162461bcd60e51b815260206004820152601860248201527f54726561737572793a207a65726f20726563697069656e7400000000000000006044820152606490fd5b929192611cea82611bf0565b91611cf86040519384611926565b829481845281830111611852578281602093846000960137010152565b15611d1c57565b60405162461bcd60e51b8152602060048201526015602482015274151c99585cdd5c9e4e881cd95b990819985a5b1959605a1b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b15611d8157565b60405162461bcd60e51b815260206004820152601a60248201527f54726561737572793a20616c72656164792065786563757465640000000000006044820152606490fd5b600052600a6020526040600020600381015460ff8116908115611e16575b508015611e08575b611e02576002611dff9101544290611adf565b90565b50600090565b506002810154421015611dec565b60ff915060081c1638611de4565b15611e2b57565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420636f6d6d756e6974796044820152672062616c616e636560c01b6064820152608490fd5b15611e8857565b60405162461bcd60e51b815260206004820152602860248201527f54726561737572793a20696e73756666696369656e7420656d657267656e63796044820152672062616c616e636560c01b6064820152608490fd5b15611ee557565b60405162461bcd60e51b8152602060048201526024808201527f54726561737572793a20696e73756666696369656e7420696e6672612062616c604482015263616e636560e01b6064820152608490fd5b602081519101207f9e310eac0fc3caf498f54ca7de305dd7db1bb3be52d70ac9d1debd5ddfc18f928114600014611f805750611f7b906002546100a782821015611b98565b600255565b7f7ec1a553ec72a25536c526ab96b229e4a3bd279c93fc303f7a506b74e64a07108103611fc05750611fbb906003546100a782821015611ede565b600355565b7fe5a31645935587b4a5c783b64ab89f9fb6558bf985184df9e5bf815f41c7f65b81036120005750611ffb906004546100a782821015611e81565b600455565b7f6697469966e6db36e8e7163442550033ec984b278e48453a9cf46343df642f530361203e57612039906005546100a782821015611e24565b600555565b60405162461bcd60e51b8152602060048201526018602482015277151c99585cdd5c9e4e881d5b9adb9bdddb88189d58dad95d60421b6044820152606490fdfea264697066735822122075b6894821563ed131b8311cea478399ae26c749b110f94e809ea448d0e8b96564736f6c63430008130033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.