ETH Price: $3,031.88 (-2.92%)
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Attestation ...256514962025-01-28 19:25:39311 days ago1738092339IN
0xf2ABAC32...371e532C8
0 ETH0.000002040.02595735

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AvsPrice

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
// 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;
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

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"}]

6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005057600080fd5b506109d1806100606000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a035b1fe1161005b578063a035b1fe146100d8578063d92807a2146100f6578063dd1a538714610114578063fc75df8a146101305761007d565b806311c6931114610082578063502f5bd01461009e5780638da5cb5b146100ba575b600080fd5b61009c600480360381019061009791906104f0565b61014e565b005b6100b860048036038101906100b39190610656565b610279565b005b6100c2610282565b6040516100cf919061073d565b60405180910390f35b6100e06102a6565b6040516100ed9190610771565b60405180910390f35b6100fe6102ac565b60405161010b919061073d565b60405180910390f35b61012e60048036038101906101299190610656565b6102d2565b005b610138610482565b6040516101459190610771565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d3906107e9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe819f65ca3b251721f51d18c07384cf599a0b07f6ed6f7fee6efb3e91bd1746c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161026e919061073d565b60405180910390a150565b50505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103599061087b565b60405180910390fd5b85156104795736600088806020019061037b91906108aa565b91509150600080603c83038401359150602c83038401359050600354816fffffffffffffffffffffffffffffffff161115806103c8575042816fffffffffffffffffffffffffffffffff16115b156104105780600354426040517f5d8a89d900000000000000000000000000000000000000000000000000000000815260040161040793929190610964565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600281905550806fffffffffffffffffffffffffffffffff166003819055506003546002547f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd69683860405160405180910390a3505050505b50505050505050565b60035481565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104bd82610492565b9050919050565b6104cd816104b2565b81146104d857600080fd5b50565b6000813590506104ea816104c4565b92915050565b60006020828403121561050657610505610488565b5b6000610514848285016104db565b91505092915050565b600080fd5b6000608082840312156105385761053761051d565b5b81905092915050565b60008115159050919050565b61055681610541565b811461056157600080fd5b50565b6000813590506105738161054d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261059e5761059d610579565b5b8235905067ffffffffffffffff8111156105bb576105ba61057e565b5b6020830191508360018202830111156105d7576105d6610583565b5b9250929050565b6000819050826020600202820111156105fa576105f9610583565b5b92915050565b60008083601f84011261061657610615610579565b5b8235905067ffffffffffffffff8111156106335761063261057e565b5b60208301915083602082028301111561064f5761064e610583565b5b9250929050565b600080600080600080600060c0888a03121561067557610674610488565b5b600088013567ffffffffffffffff8111156106935761069261048d565b5b61069f8a828b01610522565b97505060206106b08a828b01610564565b965050604088013567ffffffffffffffff8111156106d1576106d061048d565b5b6106dd8a828b01610588565b955095505060606106f08a828b016105de565b93505060a088013567ffffffffffffffff8111156107115761071061048d565b5b61071d8a828b01610600565b925092505092959891949750929550565b610737816104b2565b82525050565b6000602082019050610752600083018461072e565b92915050565b6000819050919050565b61076b81610758565b82525050565b60006020820190506107866000830184610762565b92915050565b600082825260208201905092915050565b7f43616c6c6572206d75737420626520746865206f776e65720000000000000000600082015250565b60006107d360188361078c565b91506107de8261079d565b602082019050919050565b60006020820190508181036000830152610802816107c6565b9050919050565b7f43616c6c6572206d75737420626520746865206174746573746174696f6e206360008201527f656e746572000000000000000000000000000000000000000000000000000000602082015250565b600061086560258361078c565b915061087082610809565b604082019050919050565b6000602082019050818103600083015261089481610858565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126108c7576108c661089b565b5b80840192508235915067ffffffffffffffff8211156108e9576108e86108a0565b5b602083019250600182023603831315610905576109046108a5565b5b509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061094e6109496109448461090d565b610929565b610758565b9050919050565b61095e81610933565b82525050565b60006060820190506109796000830186610955565b6109866020830185610762565b6109936040830184610762565b94935050505056fea26469706673582212207403a7950082e905b0502bc2cf08a430237aced6b67036ba58db68a83352d17564736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a035b1fe1161005b578063a035b1fe146100d8578063d92807a2146100f6578063dd1a538714610114578063fc75df8a146101305761007d565b806311c6931114610082578063502f5bd01461009e5780638da5cb5b146100ba575b600080fd5b61009c600480360381019061009791906104f0565b61014e565b005b6100b860048036038101906100b39190610656565b610279565b005b6100c2610282565b6040516100cf919061073d565b60405180910390f35b6100e06102a6565b6040516100ed9190610771565b60405180910390f35b6100fe6102ac565b60405161010b919061073d565b60405180910390f35b61012e60048036038101906101299190610656565b6102d2565b005b610138610482565b6040516101459190610771565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d3906107e9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe819f65ca3b251721f51d18c07384cf599a0b07f6ed6f7fee6efb3e91bd1746c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161026e919061073d565b60405180910390a150565b50505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103599061087b565b60405180910390fd5b85156104795736600088806020019061037b91906108aa565b91509150600080603c83038401359150602c83038401359050600354816fffffffffffffffffffffffffffffffff161115806103c8575042816fffffffffffffffffffffffffffffffff16115b156104105780600354426040517f5d8a89d900000000000000000000000000000000000000000000000000000000815260040161040793929190610964565b60405180910390fd5b816fffffffffffffffffffffffffffffffff16600281905550806fffffffffffffffffffffffffffffffff166003819055506003546002547f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd69683860405160405180910390a3505050505b50505050505050565b60035481565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104bd82610492565b9050919050565b6104cd816104b2565b81146104d857600080fd5b50565b6000813590506104ea816104c4565b92915050565b60006020828403121561050657610505610488565b5b6000610514848285016104db565b91505092915050565b600080fd5b6000608082840312156105385761053761051d565b5b81905092915050565b60008115159050919050565b61055681610541565b811461056157600080fd5b50565b6000813590506105738161054d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261059e5761059d610579565b5b8235905067ffffffffffffffff8111156105bb576105ba61057e565b5b6020830191508360018202830111156105d7576105d6610583565b5b9250929050565b6000819050826020600202820111156105fa576105f9610583565b5b92915050565b60008083601f84011261061657610615610579565b5b8235905067ffffffffffffffff8111156106335761063261057e565b5b60208301915083602082028301111561064f5761064e610583565b5b9250929050565b600080600080600080600060c0888a03121561067557610674610488565b5b600088013567ffffffffffffffff8111156106935761069261048d565b5b61069f8a828b01610522565b97505060206106b08a828b01610564565b965050604088013567ffffffffffffffff8111156106d1576106d061048d565b5b6106dd8a828b01610588565b955095505060606106f08a828b016105de565b93505060a088013567ffffffffffffffff8111156107115761071061048d565b5b61071d8a828b01610600565b925092505092959891949750929550565b610737816104b2565b82525050565b6000602082019050610752600083018461072e565b92915050565b6000819050919050565b61076b81610758565b82525050565b60006020820190506107866000830184610762565b92915050565b600082825260208201905092915050565b7f43616c6c6572206d75737420626520746865206f776e65720000000000000000600082015250565b60006107d360188361078c565b91506107de8261079d565b602082019050919050565b60006020820190508181036000830152610802816107c6565b9050919050565b7f43616c6c6572206d75737420626520746865206174746573746174696f6e206360008201527f656e746572000000000000000000000000000000000000000000000000000000602082015250565b600061086560258361078c565b915061087082610809565b604082019050919050565b6000602082019050818103600083015261089481610858565b9050919050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126108c7576108c661089b565b5b80840192508235915067ffffffffffffffff8211156108e9576108e86108a0565b5b602083019250600182023603831315610905576109046108a5565b5b509250929050565b60006fffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061094e6109496109448461090d565b610929565b610758565b9050919050565b61095e81610933565b82525050565b60006060820190506109796000830186610955565b6109866020830185610762565b6109936040830184610762565b94935050505056fea26469706673582212207403a7950082e905b0502bc2cf08a430237aced6b67036ba58db68a83352d17564736f6c63430008110033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.