Source Code
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Attestation ... | 25651496 | 311 days ago | IN | 0 ETH | 0.00000204 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AvsPrice
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.4;
import "./IAvsLogic.sol";
import "./IAttestationCenter.sol";
/**
* @title RedStone AVS Price Contract
* @author RedStone Finance
* @notice Manages price updates by RedStone AVS via attestation verification.
*/
contract AvsPrice is IAvsLogic {
/**
* @notice Emitted when the price is updated.
* @param price The new price value.
* @param priceTime The timestamp when the new price was recorded.
*/
event PriceUpdated(uint256 indexed price, uint256 indexed priceTime);
/**
* @notice Emitted when the attestation center address is set.
* @param attestationCenter New address of the attestation center.
*/
event AttestationCenterUpdated(address attestationCenter);
/**
* @notice Thrown when an invalid price time is provided.
* @param newPriceTime The invalid price time that was provided.
* @param currentPriceTime The current price time in the contract.
* @param blockTimestamp The block timestamp.
*/
error InvalidPriceTime(
uint256 newPriceTime,
uint256 currentPriceTime,
uint256 blockTimestamp
);
/// @notice The owner of the contract.
address public owner = msg.sender;
/// @notice The address of the attestation center contract.
address public attestationCenter;
/// @notice The current price value.
uint256 public price;
/// @notice The timestamp when the current price was recorded.
uint256 public priceTime;
/**
* @notice Function called before a task is submitted. Currently does nothing.
*/
function beforeTaskSubmission(
IAttestationCenter.TaskInfo calldata /*_taskInfo*/,
bool /*_isApproved*/,
bytes calldata /*_tpSignature*/,
uint256[2] calldata /*_taSignature*/,
uint256[] calldata /*_operatorIds*/
) external {}
/**
* @notice Processes the task after submission if it is approved. Extracts new price and time from the task data.
* @dev Updates the price and priceTime if the task is approved and called by the attestation center.
* @param taskInfo The task information containing the data.
* @param isApproved Indicates if the task has been approved.
*/
function afterTaskSubmission(
IAttestationCenter.TaskInfo calldata taskInfo,
bool isApproved,
bytes calldata /*_tpSignature*/,
uint256[2] calldata /*_taSignature*/,
uint256[] calldata /*_operatorIds*/
) external {
require(
msg.sender == attestationCenter,
"Caller must be the attestation center"
);
if (isApproved) {
bytes calldata data = taskInfo.data;
uint128 newPrice;
uint128 newPriceTime;
assembly {
// 60 = REDSTONE_MARKER_BS + UNSIGNED_METADATA_BYTE_SIZE_BS + MEDIAN_AND_TIMESTAMP_BS + 32
newPrice := calldataload(add(data.offset, sub(data.length, 60)))
// 44 = REDSTONE_MARKER_BS + UNSIGNED_METADATA_BYTE_SIZE_BS + 32
newPriceTime := calldataload(add(data.offset, sub(data.length, 44)))
}
if (newPriceTime <= priceTime || newPriceTime > block.timestamp) {
revert InvalidPriceTime(newPriceTime, priceTime, block.timestamp);
}
price = newPrice;
priceTime = newPriceTime;
emit PriceUpdated(price, priceTime);
}
}
/**
* @notice Sets the attestation center address.
* @dev Only callable by the owner. Emits an AttestationCenterUpdated event with the new address.
* @param attestationCenter_ The address of the new attestation center.
*/
function setAttestationCenter(address attestationCenter_) external {
require(msg.sender == owner, "Caller must be the owner");
attestationCenter = attestationCenter_;
emit AttestationCenterUpdated(attestationCenter);
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.4;
/**
* @author Othentic Labs LTD.
* @notice Terms of Service: https://www.othentic.xyz/terms-of-service
*/
import {IAvsLogic} from "./IAvsLogic.sol";
import "./IOBLS.sol";
interface IAttestationCenter {
enum OperatorStatus {
INACTIVE,
ACTIVE
}
enum PaymentStatus {
REDEEMED,
COMMITTED,
CHALLENGED
}
struct PaymentDetails {
address operator;
uint256 lastPaidTaskNumber;
uint256 feeToClaim;
PaymentStatus paymentStatus;
}
struct PaymentRequestMessage {
address operator;
uint256 feeToClaim;
}
struct TaskInfo {
string proofOfTask;
bytes data;
address taskPerformer;
uint16 taskDefinitionId;
}
event OperatorRegisteredToNetwork(address operator, uint256 shares);
event OperatorUnregisteredFromNetwork(uint256 operatorId);
event OperatorSharesModified(address operator, uint256 shares);
event PaymentRequested(
address operator,
uint256 lastPaidTaskNumber,
uint256 feeToClaim
);
event PaymentsRequested(
PaymentRequestMessage[] operators,
uint256 lastPaidTaskNumber
);
event ClearPaymentRejected(
address operator,
uint256 requestedTaskNumber,
uint256 requestedAmountClaimed
);
event TaskSubmited(
address operator,
uint32 taskNumber,
string proofOfTask,
bytes data,
uint16 taskDefinitionId
);
event TaskRejected(
address operator,
uint32 taskNumber,
string proofOfTask,
bytes data,
uint16 taskDefinitionId
);
event SetAvsLogic(address avsLogic);
event SetAvsGovernanceMultisig(address newAvsGovernanceMultisig);
event SetObls(address obls);
event SetMessageHandler(address newMessageHandler);
event RewardAccumulated(
uint256 indexed _operatorId,
uint256 _baseRewardFeeForOperator,
uint32 indexed _taskNumber
);
event SetFeeCalculator(address feeCalculator);
error InvalidOperatorId();
error InvalidOperatorsForPayment();
error PaymentReedemed();
error PaymentClaimed();
error InvalidPaymentClaim();
error MessageAlreadySigned();
error InactiveTaskPerformer();
error InactiveAggregator();
error InvalidTaskDefinition();
error OperatorNotRegistered();
error InvalidPerformerSignature();
function taskNumber() external view returns (uint32);
function baseRewardFee() external view returns (uint256);
function numOfOperators() external view returns (uint256);
function getOperatorPaymentDetail(
uint256 _operatorId
) external view returns (PaymentDetails memory);
function operatorsIdsByAddress(
address _operator
) external view returns (uint256);
function avsLogic() external view returns (IAvsLogic);
function obls() external view returns (IOBLS);
function submitTask(
TaskInfo calldata _taskInfo,
bool _isApproved,
bytes calldata _tpSignature,
uint256[2] calldata _taSignature,
uint256[] calldata _attestersIds
) external;
function requestPayment(uint256 _operatorId) external;
function requestBatchPayment() external;
function registerToNetwork(
address _operator,
uint256 _numOfShares,
uint256[4] memory _blsKey
) external;
function unRegisterOperatorFromNetwork(address _operator) external;
function modifyNumOfShares(
uint256 _operatorId,
uint256 _numOfShares
) external;
function clearPayment(
address _operator,
uint256 _lastPaidTaskNumber,
uint256 _amountClaimed
) external;
function clearBatchPayment(
PaymentRequestMessage[] memory _operators,
uint256 _lastPaidTaskNumber
) external;
function transferAvsGovernanceMultisig(
address _newAvsGovernanceMultisig
) external;
function setAvsLogic(IAvsLogic _avsLogic) external;
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.4;
/*______ __ __ __ __
/ \ / | / | / | / |
/$$$$$$ | _$$ |_ $$ |____ ______ _______ _$$ |_ $$/ _______
$$ | $$ |/ $$ | $$ \ / \ / \ / $$ | / | / |
$$ | $$ |$$$$$$/ $$$$$$$ |/$$$$$$ |$$$$$$$ |$$$$$$/ $$ |/$$$$$$$/
$$ | $$ | $$ | __ $$ | $$ |$$ $$ |$$ | $$ | $$ | __ $$ |$$ |
$$ \__$$ | $$ |/ |$$ | $$ |$$$$$$$$/ $$ | $$ | $$ |/ |$$ |$$ \_____
$$ $$/ $$ $$/ $$ | $$ |$$ |$$ | $$ | $$ $$/ $$ |$$ |
$$$$$$/ $$$$/ $$/ $$/ $$$$$$$/ $$/ $$/ $$$$/ $$/ $$$$$$$/
*/
import {IAttestationCenter} from "./IAttestationCenter.sol";
/**
* @author Othentic Labs LTD.
* @notice Terms of Service: https://www.othentic.xyz/terms-of-service
* @notice Depending on the application, it may be necessary to add reentrancy gaurds to hooks
*/
interface IAvsLogic {
function afterTaskSubmission(
IAttestationCenter.TaskInfo calldata _taskInfo,
bool _isApproved,
bytes calldata _tpSignature,
uint256[2] calldata _taSignature,
uint256[] calldata _attestersIds
) external;
function beforeTaskSubmission(
IAttestationCenter.TaskInfo calldata _taskInfo,
bool _isApproved,
bytes calldata _tpSignature,
uint256[2] calldata _taSignature,
uint256[] calldata _attestersIds
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/**
* @author Othentic Labs LTD.
*/
interface IOBLS {
struct BLSOperator {
uint256[4] blsKey;
uint256 numOfShares;
bool isActive;
}
struct OperatorUpdateShares {
uint256 operatorId;
uint256 numOfShares;
}
error NotOBLSManager();
error NotOBLSManagerOrShareSyncer();
error InsufficientVotingPower();
error InvalidOBLSSignature();
error InvalidOperatorIndexes();
error InactiveOperator();
event SharesSyncerModified(address syncer);
function totalNumOfSharesOfOperatorsSet() external view returns (uint256);
function numOfShares(uint256 _index) external view returns (uint256);
function isActive(uint256 _index) external view returns (bool);
function verifySignature(
uint256[2] calldata _message,
uint256[2] calldata _signature,
uint256[] calldata _indexs,
uint256 _requiredVotingPower
) external view;
function hashToPoint(
bytes32 domain,
bytes calldata message
) external view returns (uint256[2] memory);
function unRegisterOperator(uint256 _index) external;
function registerOperator(
uint256 _index,
uint256 _numOfShares,
uint256[4] memory _blsKey
) external;
function modifyOperatorShares(uint256 _index, uint256 _numOfShares) external;
function setOblsSharesSyncer(address _oblsSharesSyncer) external;
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"newPriceTime","type":"uint256"},{"internalType":"uint256","name":"currentPriceTime","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"name":"InvalidPriceTime","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"attestationCenter","type":"address"}],"name":"AttestationCenterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"priceTime","type":"uint256"}],"name":"PriceUpdated","type":"event"},{"inputs":[{"components":[{"internalType":"string","name":"proofOfTask","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"taskPerformer","type":"address"},{"internalType":"uint16","name":"taskDefinitionId","type":"uint16"}],"internalType":"struct IAttestationCenter.TaskInfo","name":"taskInfo","type":"tuple"},{"internalType":"bool","name":"isApproved","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256[2]","name":"","type":"uint256[2]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"afterTaskSubmission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"attestationCenter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"proofOfTask","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"taskPerformer","type":"address"},{"internalType":"uint16","name":"taskDefinitionId","type":"uint16"}],"internalType":"struct IAttestationCenter.TaskInfo","name":"","type":"tuple"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256[2]","name":"","type":"uint256[2]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"beforeTaskSubmission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"attestationCenter_","type":"address"}],"name":"setAttestationCenter","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b506109d1806100606000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a035b1fe1161005b578063a035b1fe146100d8578063d92807a2146100f6578063dd1a538714610114578063fc75df8a146101305761007d565b806311c6931114610082578063502f5bd01461009e5780638da5cb5b146100ba575b600080fd5b61009c600480360381019061009791906104f0565b61014e565b005b6100b860048036038101906100b39190610656565b610279565b005b6100c2610282565b6040516100cf919061073d565b60405180910390f35b6100e06102a6565b6040516100ed9190610771565b60405180910390f35b6100fe6102ac565b60405161010b919061073d565b60405180910390f35b61012e60048036038101906101299190610656565b6102d2565b005b610138610482565b6040516101459190610771565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d3906107e9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe819f65ca3b251721f51d18c07384cf599a0b07f6ed6f7fee6efb3e91bd1746c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161026e919061073d565b60405180910390a150565b50505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103599061087b565b60405180910390fd5b85156104795736600088806020019061037b91906108aa565b91509150600080603c83038401359150602c83038401359050600354816fffffffffffffffffffffffffffffffff161115806103c8575042816fffffffffffffffffffffffffffffffff16115b156104105780600354426040517f5d8a89d900000000000000000000000000000000000000000000000000000000815260040161040793929190610964565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600281905550806fffffffffffffffffffffffffffffffff166003819055506003546002547f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd69683860405160405180910390a3505050505b50505050505050565b60035481565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104bd82610492565b9050919050565b6104cd816104b2565b81146104d857600080fd5b50565b6000813590506104ea816104c4565b92915050565b60006020828403121561050657610505610488565b5b6000610514848285016104db565b91505092915050565b600080fd5b6000608082840312156105385761053761051d565b5b81905092915050565b60008115159050919050565b61055681610541565b811461056157600080fd5b50565b6000813590506105738161054d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261059e5761059d610579565b5b8235905067ffffffffffffffff8111156105bb576105ba61057e565b5b6020830191508360018202830111156105d7576105d6610583565b5b9250929050565b6000819050826020600202820111156105fa576105f9610583565b5b92915050565b60008083601f84011261061657610615610579565b5b8235905067ffffffffffffffff8111156106335761063261057e565b5b60208301915083602082028301111561064f5761064e610583565b5b9250929050565b600080600080600080600060c0888a03121561067557610674610488565b5b600088013567ffffffffffffffff8111156106935761069261048d565b5b61069f8a828b01610522565b97505060206106b08a828b01610564565b965050604088013567ffffffffffffffff8111156106d1576106d061048d565b5b6106dd8a828b01610588565b955095505060606106f08a828b016105de565b93505060a088013567ffffffffffffffff8111156107115761071061048d565b5b61071d8a828b01610600565b925092505092959891949750929550565b610737816104b2565b82525050565b6000602082019050610752600083018461072e565b92915050565b6000819050919050565b61076b81610758565b82525050565b60006020820190506107866000830184610762565b92915050565b600082825260208201905092915050565b7f43616c6c6572206d75737420626520746865206f776e65720000000000000000600082015250565b60006107d360188361078c565b91506107de8261079d565b602082019050919050565b60006020820190508181036000830152610802816107c6565b9050919050565b7f43616c6c6572206d75737420626520746865206174746573746174696f6e206360008201527f656e746572000000000000000000000000000000000000000000000000000000602082015250565b600061086560258361078c565b915061087082610809565b604082019050919050565b6000602082019050818103600083015261089481610858565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126108c7576108c661089b565b5b80840192508235915067ffffffffffffffff8211156108e9576108e86108a0565b5b602083019250600182023603831315610905576109046108a5565b5b509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061094e6109496109448461090d565b610929565b610758565b9050919050565b61095e81610933565b82525050565b60006060820190506109796000830186610955565b6109866020830185610762565b6109936040830184610762565b94935050505056fea26469706673582212207403a7950082e905b0502bc2cf08a430237aced6b67036ba58db68a83352d17564736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a035b1fe1161005b578063a035b1fe146100d8578063d92807a2146100f6578063dd1a538714610114578063fc75df8a146101305761007d565b806311c6931114610082578063502f5bd01461009e5780638da5cb5b146100ba575b600080fd5b61009c600480360381019061009791906104f0565b61014e565b005b6100b860048036038101906100b39190610656565b610279565b005b6100c2610282565b6040516100cf919061073d565b60405180910390f35b6100e06102a6565b6040516100ed9190610771565b60405180910390f35b6100fe6102ac565b60405161010b919061073d565b60405180910390f35b61012e60048036038101906101299190610656565b6102d2565b005b610138610482565b6040516101459190610771565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d3906107e9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe819f65ca3b251721f51d18c07384cf599a0b07f6ed6f7fee6efb3e91bd1746c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161026e919061073d565b60405180910390a150565b50505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103599061087b565b60405180910390fd5b85156104795736600088806020019061037b91906108aa565b91509150600080603c83038401359150602c83038401359050600354816fffffffffffffffffffffffffffffffff161115806103c8575042816fffffffffffffffffffffffffffffffff16115b156104105780600354426040517f5d8a89d900000000000000000000000000000000000000000000000000000000815260040161040793929190610964565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600281905550806fffffffffffffffffffffffffffffffff166003819055506003546002547f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd69683860405160405180910390a3505050505b50505050505050565b60035481565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104bd82610492565b9050919050565b6104cd816104b2565b81146104d857600080fd5b50565b6000813590506104ea816104c4565b92915050565b60006020828403121561050657610505610488565b5b6000610514848285016104db565b91505092915050565b600080fd5b6000608082840312156105385761053761051d565b5b81905092915050565b60008115159050919050565b61055681610541565b811461056157600080fd5b50565b6000813590506105738161054d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261059e5761059d610579565b5b8235905067ffffffffffffffff8111156105bb576105ba61057e565b5b6020830191508360018202830111156105d7576105d6610583565b5b9250929050565b6000819050826020600202820111156105fa576105f9610583565b5b92915050565b60008083601f84011261061657610615610579565b5b8235905067ffffffffffffffff8111156106335761063261057e565b5b60208301915083602082028301111561064f5761064e610583565b5b9250929050565b600080600080600080600060c0888a03121561067557610674610488565b5b600088013567ffffffffffffffff8111156106935761069261048d565b5b61069f8a828b01610522565b97505060206106b08a828b01610564565b965050604088013567ffffffffffffffff8111156106d1576106d061048d565b5b6106dd8a828b01610588565b955095505060606106f08a828b016105de565b93505060a088013567ffffffffffffffff8111156107115761071061048d565b5b61071d8a828b01610600565b925092505092959891949750929550565b610737816104b2565b82525050565b6000602082019050610752600083018461072e565b92915050565b6000819050919050565b61076b81610758565b82525050565b60006020820190506107866000830184610762565b92915050565b600082825260208201905092915050565b7f43616c6c6572206d75737420626520746865206f776e65720000000000000000600082015250565b60006107d360188361078c565b91506107de8261079d565b602082019050919050565b60006020820190508181036000830152610802816107c6565b9050919050565b7f43616c6c6572206d75737420626520746865206174746573746174696f6e206360008201527f656e746572000000000000000000000000000000000000000000000000000000602082015250565b600061086560258361078c565b915061087082610809565b604082019050919050565b6000602082019050818103600083015261089481610858565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126108c7576108c661089b565b5b80840192508235915067ffffffffffffffff8211156108e9576108e86108a0565b5b602083019250600182023603831315610905576109046108a5565b5b509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061094e6109496109448461090d565b610929565b610758565b9050919050565b61095e81610933565b82525050565b60006060820190506109796000830186610955565b6109866020830185610762565b6109936040830184610762565b94935050505056fea26469706673582212207403a7950082e905b0502bc2cf08a430237aced6b67036ba58db68a83352d17564736f6c63430008110033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 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.