Source Code
Latest 15 from a total of 15 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Register Gradien... | 38128397 | 65 days ago | IN | 0 ETH | 0.00000424 | ||||
| Register Gradien... | 38128346 | 65 days ago | IN | 0 ETH | 0.00000551 | ||||
| Register Gradien... | 38097411 | 66 days ago | IN | 0 ETH | 0.00000055 | ||||
| Register Gradien... | 38097394 | 66 days ago | IN | 0 ETH | 0.00000057 | ||||
| Register Gradien... | 38097362 | 66 days ago | IN | 0 ETH | 0.00000057 | ||||
| Register Gradien... | 38097347 | 66 days ago | IN | 0 ETH | 0.00000056 | ||||
| Register Gradien... | 38097322 | 66 days ago | IN | 0 ETH | 0.00000056 | ||||
| Register Gradien... | 38097308 | 66 days ago | IN | 0 ETH | 0.00000074 | ||||
| Register Gradien... | 38097292 | 66 days ago | IN | 0 ETH | 0.00000041 | ||||
| Register Gradien... | 38097278 | 66 days ago | IN | 0 ETH | 0.0000007 | ||||
| Register Gradien... | 38097228 | 66 days ago | IN | 0 ETH | 0.00000009 | ||||
| Register Gradien... | 38097212 | 66 days ago | IN | 0 ETH | 0.00000009 | ||||
| Register Gradien... | 38097197 | 66 days ago | IN | 0 ETH | 0.00000009 | ||||
| Register Gradien... | 38097180 | 66 days ago | IN | 0 ETH | 0.00000009 | ||||
| Register Gradien... | 38097136 | 66 days ago | IN | 0 ETH | 0.0000001 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
VoidlyGradientRegistry
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;
/**
* @title VoidlyGradientRegistry
* @notice Append-only registry for federated-learning gradient attestations (IPFS CIDs).
* @dev Optimized for L2 (e.g., Base). Event model is indexer-friendly and on-chain reads are paginatable.
*/
contract VoidlyGradientRegistry {
// -------------------------------------------------------------------------
// Errors
// -------------------------------------------------------------------------
error NodeIdRequired();
error IpfsHashRequired();
error AttestationHashRequired();
error NoAttestationsFound();
error NotAuthorized();
error IndexOutOfBounds();
error InvalidNewOwner();
error CountZero();
error UnknownNode();
// -------------------------------------------------------------------------
// Types
// -------------------------------------------------------------------------
struct Attestation {
// NOTE: Two dynamic fields first; fixed fields (uint64,address) follow and pack together in one slot.
string ipfsHash; // CID for gradient data (e.g., "Qm..."/CIDv0 or "bafy..."/CIDv1)
string attestationHash; // CID for Ed25519 signature payload
uint64 timestamp; // Block timestamp (gas-lean vs uint256)
address nodeOperator; // submitter (msg.sender)
}
// -------------------------------------------------------------------------
// Storage
// -------------------------------------------------------------------------
uint256 public constant VERSION = 1;
address public owner;
address public pendingOwner;
// nodeKey = keccak256(nodeId); using bytes32 key is cheaper than string mapping
mapping(bytes32 => Attestation[]) private _attestations;
mapping(bytes32 => bool) private _seenNode;
uint256 public totalAttestations; // global counter
uint256 public nodeCount; // count of unique nodeIds observed
// -------------------------------------------------------------------------
// Events
// -------------------------------------------------------------------------
/**
* @dev NOTE: `nodeId` is NON-indexed so its literal value is visible in logs.
* We index `nodeKey` (keccak) for cheap filtering + `operator` for actor filtering.
*/
event GradientRegistered(
bytes32 indexed nodeKey,
address indexed operator,
string nodeId,
string ipfsHash,
string attestationHash,
uint64 timestamp
);
event NodeRegistered(
bytes32 indexed nodeKey,
address indexed firstOperator,
string nodeId
);
event NodeSlashed(
bytes32 indexed nodeKey,
address indexed operator,
string nodeId,
string reason
);
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
// -------------------------------------------------------------------------
// Constructor / ownership
// -------------------------------------------------------------------------
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
if (msg.sender != owner) revert NotAuthorized();
_;
}
/// @notice Start two-step ownership transfer (safer for multisigs / ops).
function transferOwnership(address newOwner) external onlyOwner {
if (newOwner == address(0)) revert InvalidNewOwner();
pendingOwner = newOwner;
emit OwnershipTransferStarted(owner, newOwner);
}
/// @notice Accept ownership after `transferOwnership`.
function acceptOwnership() external {
if (msg.sender != pendingOwner) revert NotAuthorized();
address prev = owner;
owner = msg.sender;
pendingOwner = address(0);
emit OwnershipTransferred(prev, owner);
}
// -------------------------------------------------------------------------
// Core
// -------------------------------------------------------------------------
/**
* @notice Register a gradient attestation.
* @dev Permissionless by design; the protocol layer should decide which CIDs/IDs to trust.
*/
function registerGradient(
string calldata nodeId,
string calldata ipfsHash,
string calldata attestationHash
) external {
if (bytes(nodeId).length == 0) revert NodeIdRequired();
if (bytes(ipfsHash).length == 0) revert IpfsHashRequired();
if (bytes(attestationHash).length == 0) revert AttestationHashRequired();
bytes32 nodeKey = _nodeKey(nodeId);
if (!_seenNode[nodeKey]) {
_seenNode[nodeKey] = true;
unchecked { nodeCount += 1; }
emit NodeRegistered(nodeKey, msg.sender, nodeId);
}
uint64 t = uint64(block.timestamp);
Attestation storage a = _attestations[nodeKey].push();
a.ipfsHash = ipfsHash;
a.attestationHash = attestationHash;
a.timestamp = t;
a.nodeOperator = msg.sender;
unchecked { totalAttestations += 1; }
emit GradientRegistered(
nodeKey,
msg.sender,
nodeId,
ipfsHash,
attestationHash,
t
);
}
// -------------------------------------------------------------------------
// Views
// -------------------------------------------------------------------------
/// @notice Return the full history (prefer range pagination for large sets).
function getNodeHistory(string calldata nodeId)
external
view
returns (Attestation[] memory)
{
return _attestations[_nodeKey(nodeId)];
}
/// @notice Return the latest attestation for a node.
function getLatestAttestation(string calldata nodeId)
external
view
returns (Attestation memory)
{
Attestation[] storage arr = _attestations[_nodeKey(nodeId)];
uint256 len = arr.length;
if (len == 0) revert NoAttestationsFound();
return arr[len - 1];
}
/// @notice Return the number of attestations stored for a node.
function getAttestationCount(string calldata nodeId)
external
view
returns (uint256)
{
return _attestations[_nodeKey(nodeId)].length;
}
/// @notice Return the attestation at a given index (with bounds check).
function getAttestationAt(
string calldata nodeId,
uint256 index
) external view returns (Attestation memory) {
Attestation[] storage arr = _attestations[_nodeKey(nodeId)];
if (index >= arr.length) revert IndexOutOfBounds();
return arr[index];
}
/// @notice Paginate results to avoid returning huge arrays via eth_call.
/// @param start inclusive start index
/// @param count how many to return (must be > 0). Will clamp at end of array.
function getAttestationsRange(
string calldata nodeId,
uint256 start,
uint256 count
) external view returns (Attestation[] memory) {
if (count == 0) revert CountZero();
Attestation[] storage arr = _attestations[_nodeKey(nodeId)];
uint256 len = arr.length;
if (start >= len) revert IndexOutOfBounds();
uint256 end = start + count;
if (end > len) end = len;
uint256 n = end - start;
Attestation[] memory out = new Attestation[](n);
for (uint256 i = 0; i < n; ) {
out[i] = arr[start + i];
unchecked { ++i; }
}
return out;
}
/// @notice Whether we have ever seen this nodeId (based on keccak(nodeId)).
function existsNode(string calldata nodeId) external view returns (bool) {
return _seenNode[_nodeKey(nodeId)];
}
// -------------------------------------------------------------------------
// Slashing (event-only placeholder)
// -------------------------------------------------------------------------
/// @notice Record a slashing event (no funds movement; integrate real slashing later).
function slashNode(string calldata nodeId, string calldata reason)
external
onlyOwner
{
bytes32 nodeKey = _nodeKey(nodeId);
if (!_seenNode[nodeKey]) revert UnknownNode();
emit NodeSlashed(nodeKey, msg.sender, nodeId, reason);
}
// -------------------------------------------------------------------------
// Internal utilities
// -------------------------------------------------------------------------
function _nodeKey(string memory nodeId) private pure returns (bytes32) {
return keccak256(bytes(nodeId));
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"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"},{"inputs":[],"name":"AttestationHashRequired","type":"error"},{"inputs":[],"name":"CountZero","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidNewOwner","type":"error"},{"inputs":[],"name":"IpfsHashRequired","type":"error"},{"inputs":[],"name":"NoAttestationsFound","type":"error"},{"inputs":[],"name":"NodeIdRequired","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"UnknownNode","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nodeKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"string","name":"nodeId","type":"string"},{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"},{"indexed":false,"internalType":"string","name":"attestationHash","type":"string"},{"indexed":false,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"GradientRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nodeKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"firstOperator","type":"address"},{"indexed":false,"internalType":"string","name":"nodeId","type":"string"}],"name":"NodeRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nodeKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"string","name":"nodeId","type":"string"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"NodeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"existsNode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAttestationAt","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"getAttestationCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getAttestationsRange","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"getLatestAttestation","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"getNodeHistory","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"}],"name":"registerGradient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"string","name":"reason","type":"string"}],"name":"slashNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAttestations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916331790556114ff806100326000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e16d98b511610066578063e16d98b5146101f7578063e30c39781461021a578063f2fde38b1461022d578063ffa1ad741461024057600080fd5b80638da5cb5b1461019357806395cac59f146101be578063d666ac41146101d1578063d7a14203146101e457600080fd5b80636da49b83116100d35780636da49b831461015a57806379ba5097146101635780638128e6c61461016d578063837f9ef31461018057600080fd5b8063011f1241146100fa57806314e4058e146101235780636048574214610143575b600080fd5b61010d610108366004610f1c565b610248565b60405161011a919061100d565b60405180910390f35b610136610131366004611027565b61044c565b60405161011a9190611068565b61014c60045481565b60405190815260200161011a565b61014c60055481565b61016b610656565b005b61010d61017b366004611027565b6106d8565b61014c61018e366004611027565b61077b565b6000546101a6906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b6101366101cc3660046110ca565b6107d8565b61016b6101df36600461111a565b610ab5565b61016b6101f23660046111b3565b610c9f565b61020a610205366004611027565b610d8c565b604051901515815260200161011a565b6001546101a6906001600160a01b031681565b61016b61023b36600461121e565b610dec565b61014c600181565b610250610e9a565b60006002600061029587878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020019081526020016000209050808054905083106102c957604051634e23d03560e01b815260040160405180910390fd5b8083815481106102db576102db611247565b90600052602060002090600302016040518060800160405290816000820180546103049061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103309061125d565b801561037d5780601f106103525761010080835404028352916020019161037d565b820191906000526020600020905b81548152906001019060200180831161036057829003601f168201915b505050505081526020016001820180546103969061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c29061125d565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b031660409091015295945050505050565b60606002600061049185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561064957838290600052602060002090600302016040518060800160405290816000820180546104f29061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461051e9061125d565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b505050505081526020016001820180546105849061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546105b09061125d565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b5050509183525050600291909101546001600160401b038116602080840191909152600160401b9091046001600160a01b031660409092019190915290825260019290920191016104bf565b5050505090505b92915050565b6001546001600160a01b031633146106815760405163ea8e4eb560e01b815260040160405180910390fd5b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6106e0610e9a565b60006002600061072586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260200190815260200160002090506000818054905090508060000361075f5760405163792120e960e01b815260040160405180910390fd5b8161076b6001836112ad565b815481106102db576102db611247565b6000600260006107c085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020549392505050565b6060816000036107fb576040516311f6547b60e21b815260040160405180910390fd5b60006002600061084088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020805490915080851061087557604051634e23d03560e01b815260040160405180910390fd5b600061088185876112c0565b90508181111561088e5750805b600061089a87836112ad565b90506000816001600160401b038111156108b6576108b66112d3565b6040519080825280602002602001820160405280156108ef57816020015b6108dc610e9a565b8152602001906001900390816108d45790505b50905060005b82811015610aa75785610908828b6112c0565b8154811061091857610918611247565b90600052602060002090600302016040518060800160405290816000820180546109419061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461096d9061125d565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b505050505081526020016001820180546109d39061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff9061125d565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b03166040909101528251839083908110610a9457610a94611247565b60209081029190910101526001016108f5565b509998505050505050505050565b6000859003610ad757604051637900159560e01b815260040160405180910390fd5b6000839003610af95760405163eabfb56d60e01b815260040160405180910390fd5b6000819003610b1b57604051638a41014160e01b815260040160405180910390fd5b6000610b5c87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610bd95760008181526003602052604090819020805460ff1916600190811790915560058054909101905551339082907f8326de45f66576db8724d4b3fca6bd518de1924e3dd3a2a62722d49e2ed3418390610bd0908b908b90611312565b60405180910390a35b600081815260026020908152604082208054600181018255908352912042916003020180610c0887898361137d565b5060018101610c1885878361137d565b506002810180546001600160401b0384166001600160e01b03199091161733600160401b81029190911790915560048054600101905560405184907f783b044dce7b053b4c6530b32077a369784582a0132610e0359c9e28b69f8eea90610c8c908d908d908d908d908d908d908c9061143d565b60405180910390a3505050505050505050565b6000546001600160a01b03163314610cca5760405163ea8e4eb560e01b815260040160405180910390fd5b6000610d0b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610d3d57604051638b7114df60e01b815260040160405180910390fd5b336001600160a01b0316817fc53877e0156390b35fbfb90b9bcef46d8f85fe9c2906f3d4130418739a02868c87878787604051610d7d9493929190611497565b60405180910390a35050505050565b600060036000610dd185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260208101919091526040016000205460ff169392505050565b6000546001600160a01b03163314610e175760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038116610e3e57604051632a52b3c360e11b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b805160209091012090565b6040518060800160405280606081526020016060815260200160006001600160401b0316815260200160006001600160a01b031681525090565b60008083601f840112610ee657600080fd5b5081356001600160401b03811115610efd57600080fd5b602083019150836020828501011115610f1557600080fd5b9250929050565b600080600060408486031215610f3157600080fd5b83356001600160401b03811115610f4757600080fd5b610f5386828701610ed4565b909790965060209590950135949350505050565b6000815180845260005b81811015610f8d57602081850181015186830182015201610f71565b506000602082860101526020601f19601f83011685010191505092915050565b6000815160808452610fc26080850182610f67565b905060208301518482036020860152610fdb8282610f67565b6040858101516001600160401b0316908701526060948501516001600160a01b03169490950193909352509192915050565b6020815260006110206020830184610fad565b9392505050565b6000806020838503121561103a57600080fd5b82356001600160401b0381111561105057600080fd5b61105c85828601610ed4565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156110bd57603f198886030184526110ab858351610fad565b9450928501929085019060010161108f565b5092979650505050505050565b600080600080606085870312156110e057600080fd5b84356001600160401b038111156110f657600080fd5b61110287828801610ed4565b90989097506020870135966040013595509350505050565b6000806000806000806060878903121561113357600080fd5b86356001600160401b038082111561114a57600080fd5b6111568a838b01610ed4565b9098509650602089013591508082111561116f57600080fd5b61117b8a838b01610ed4565b9096509450604089013591508082111561119457600080fd5b506111a189828a01610ed4565b979a9699509497509295939492505050565b600080600080604085870312156111c957600080fd5b84356001600160401b03808211156111e057600080fd5b6111ec88838901610ed4565b9096509450602087013591508082111561120557600080fd5b5061121287828801610ed4565b95989497509550505050565b60006020828403121561123057600080fd5b81356001600160a01b038116811461102057600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061127157607f821691505b60208210810361129157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561065057610650611297565b8082018082111561065057610650611297565b634e487b7160e01b600052604160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006113266020830184866112e9565b949350505050565b601f82111561137857600081815260208120601f850160051c810160208610156113555750805b601f850160051c820191505b8181101561137457828155600101611361565b5050505b505050565b6001600160401b03831115611394576113946112d3565b6113a8836113a2835461125d565b8361132e565b6000601f8411600181146113dc57600085156113c45750838201355b600019600387901b1c1916600186901b178355611436565b600083815260209020601f19861690835b8281101561140d57868501358255602094850194600190920191016113ed565b508682101561142a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60808152600061145160808301898b6112e9565b828103602084015261146481888a6112e9565b905082810360408401526114798186886112e9565b9150506001600160401b038316606083015298975050505050505050565b6040815260006114ab6040830186886112e9565b82810360208401526114be8185876112e9565b97965050505050505056fea26469706673582212206c7156ab15df2881698700e98ccd73bb0037c7dfcd54dc99ce31a2c83445fb7364736f6c63430008140033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e16d98b511610066578063e16d98b5146101f7578063e30c39781461021a578063f2fde38b1461022d578063ffa1ad741461024057600080fd5b80638da5cb5b1461019357806395cac59f146101be578063d666ac41146101d1578063d7a14203146101e457600080fd5b80636da49b83116100d35780636da49b831461015a57806379ba5097146101635780638128e6c61461016d578063837f9ef31461018057600080fd5b8063011f1241146100fa57806314e4058e146101235780636048574214610143575b600080fd5b61010d610108366004610f1c565b610248565b60405161011a919061100d565b60405180910390f35b610136610131366004611027565b61044c565b60405161011a9190611068565b61014c60045481565b60405190815260200161011a565b61014c60055481565b61016b610656565b005b61010d61017b366004611027565b6106d8565b61014c61018e366004611027565b61077b565b6000546101a6906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b6101366101cc3660046110ca565b6107d8565b61016b6101df36600461111a565b610ab5565b61016b6101f23660046111b3565b610c9f565b61020a610205366004611027565b610d8c565b604051901515815260200161011a565b6001546101a6906001600160a01b031681565b61016b61023b36600461121e565b610dec565b61014c600181565b610250610e9a565b60006002600061029587878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020019081526020016000209050808054905083106102c957604051634e23d03560e01b815260040160405180910390fd5b8083815481106102db576102db611247565b90600052602060002090600302016040518060800160405290816000820180546103049061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103309061125d565b801561037d5780601f106103525761010080835404028352916020019161037d565b820191906000526020600020905b81548152906001019060200180831161036057829003601f168201915b505050505081526020016001820180546103969061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c29061125d565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b031660409091015295945050505050565b60606002600061049185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561064957838290600052602060002090600302016040518060800160405290816000820180546104f29061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461051e9061125d565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b505050505081526020016001820180546105849061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546105b09061125d565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b5050509183525050600291909101546001600160401b038116602080840191909152600160401b9091046001600160a01b031660409092019190915290825260019290920191016104bf565b5050505090505b92915050565b6001546001600160a01b031633146106815760405163ea8e4eb560e01b815260040160405180910390fd5b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6106e0610e9a565b60006002600061072586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260200190815260200160002090506000818054905090508060000361075f5760405163792120e960e01b815260040160405180910390fd5b8161076b6001836112ad565b815481106102db576102db611247565b6000600260006107c085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020549392505050565b6060816000036107fb576040516311f6547b60e21b815260040160405180910390fd5b60006002600061084088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020805490915080851061087557604051634e23d03560e01b815260040160405180910390fd5b600061088185876112c0565b90508181111561088e5750805b600061089a87836112ad565b90506000816001600160401b038111156108b6576108b66112d3565b6040519080825280602002602001820160405280156108ef57816020015b6108dc610e9a565b8152602001906001900390816108d45790505b50905060005b82811015610aa75785610908828b6112c0565b8154811061091857610918611247565b90600052602060002090600302016040518060800160405290816000820180546109419061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461096d9061125d565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b505050505081526020016001820180546109d39061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff9061125d565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b03166040909101528251839083908110610a9457610a94611247565b60209081029190910101526001016108f5565b509998505050505050505050565b6000859003610ad757604051637900159560e01b815260040160405180910390fd5b6000839003610af95760405163eabfb56d60e01b815260040160405180910390fd5b6000819003610b1b57604051638a41014160e01b815260040160405180910390fd5b6000610b5c87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610bd95760008181526003602052604090819020805460ff1916600190811790915560058054909101905551339082907f8326de45f66576db8724d4b3fca6bd518de1924e3dd3a2a62722d49e2ed3418390610bd0908b908b90611312565b60405180910390a35b600081815260026020908152604082208054600181018255908352912042916003020180610c0887898361137d565b5060018101610c1885878361137d565b506002810180546001600160401b0384166001600160e01b03199091161733600160401b81029190911790915560048054600101905560405184907f783b044dce7b053b4c6530b32077a369784582a0132610e0359c9e28b69f8eea90610c8c908d908d908d908d908d908d908c9061143d565b60405180910390a3505050505050505050565b6000546001600160a01b03163314610cca5760405163ea8e4eb560e01b815260040160405180910390fd5b6000610d0b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610d3d57604051638b7114df60e01b815260040160405180910390fd5b336001600160a01b0316817fc53877e0156390b35fbfb90b9bcef46d8f85fe9c2906f3d4130418739a02868c87878787604051610d7d9493929190611497565b60405180910390a35050505050565b600060036000610dd185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260208101919091526040016000205460ff169392505050565b6000546001600160a01b03163314610e175760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038116610e3e57604051632a52b3c360e11b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b805160209091012090565b6040518060800160405280606081526020016060815260200160006001600160401b0316815260200160006001600160a01b031681525090565b60008083601f840112610ee657600080fd5b5081356001600160401b03811115610efd57600080fd5b602083019150836020828501011115610f1557600080fd5b9250929050565b600080600060408486031215610f3157600080fd5b83356001600160401b03811115610f4757600080fd5b610f5386828701610ed4565b909790965060209590950135949350505050565b6000815180845260005b81811015610f8d57602081850181015186830182015201610f71565b506000602082860101526020601f19601f83011685010191505092915050565b6000815160808452610fc26080850182610f67565b905060208301518482036020860152610fdb8282610f67565b6040858101516001600160401b0316908701526060948501516001600160a01b03169490950193909352509192915050565b6020815260006110206020830184610fad565b9392505050565b6000806020838503121561103a57600080fd5b82356001600160401b0381111561105057600080fd5b61105c85828601610ed4565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156110bd57603f198886030184526110ab858351610fad565b9450928501929085019060010161108f565b5092979650505050505050565b600080600080606085870312156110e057600080fd5b84356001600160401b038111156110f657600080fd5b61110287828801610ed4565b90989097506020870135966040013595509350505050565b6000806000806000806060878903121561113357600080fd5b86356001600160401b038082111561114a57600080fd5b6111568a838b01610ed4565b9098509650602089013591508082111561116f57600080fd5b61117b8a838b01610ed4565b9096509450604089013591508082111561119457600080fd5b506111a189828a01610ed4565b979a9699509497509295939492505050565b600080600080604085870312156111c957600080fd5b84356001600160401b03808211156111e057600080fd5b6111ec88838901610ed4565b9096509450602087013591508082111561120557600080fd5b5061121287828801610ed4565b95989497509550505050565b60006020828403121561123057600080fd5b81356001600160a01b038116811461102057600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061127157607f821691505b60208210810361129157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561065057610650611297565b8082018082111561065057610650611297565b634e487b7160e01b600052604160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006113266020830184866112e9565b949350505050565b601f82111561137857600081815260208120601f850160051c810160208610156113555750805b601f850160051c820191505b8181101561137457828155600101611361565b5050505b505050565b6001600160401b03831115611394576113946112d3565b6113a8836113a2835461125d565b8361132e565b6000601f8411600181146113dc57600085156113c45750838201355b600019600387901b1c1916600186901b178355611436565b600083815260209020601f19861690835b8281101561140d57868501358255602094850194600190920191016113ed565b508682101561142a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60808152600061145160808301898b6112e9565b828103602084015261146481888a6112e9565b905082810360408401526114798186886112e9565b9150506001600160401b038316606083015298975050505050505050565b6040815260006114ab6040830186886112e9565b82810360208401526114be8185876112e9565b97965050505050505056fea26469706673582212206c7156ab15df2881698700e98ccd73bb0037c7dfcd54dc99ce31a2c83445fb7364736f6c63430008140033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.