ETH Price: $3,326.18 (+0.50%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Register Continu...217020592025-01-25 14:16:479 hrs ago1737814607IN
0xe583BcDE...2ba2eC460
0 ETH0.001869947.75681182
Register Continu...217020582025-01-25 14:16:359 hrs ago1737814595IN
0xe583BcDE...2ba2eC460
0 ETH0.001848297.66779088
Register Continu...217020582025-01-25 14:16:359 hrs ago1737814595IN
0xe583BcDE...2ba2eC460
0 ETH0.001849497.66779088
Register Continu...217020572025-01-25 14:16:239 hrs ago1737814583IN
0xe583BcDE...2ba2eC460
0 ETH0.002319047.91624686
Register Continu...217020572025-01-25 14:16:239 hrs ago1737814583IN
0xe583BcDE...2ba2eC460
0 ETH0.013726627.91624686
Register Continu...217020562025-01-25 14:16:119 hrs ago1737814571IN
0xe583BcDE...2ba2eC460
0 ETH0.010874777.76300296
Register Continu...217020552025-01-25 14:15:599 hrs ago1737814559IN
0xe583BcDE...2ba2eC460
0 ETH0.013549017.47968018
Register Continu...217020552025-01-25 14:15:599 hrs ago1737814559IN
0xe583BcDE...2ba2eC460
0 ETH0.011877827.47968018
Register Continu...217020542025-01-25 14:15:479 hrs ago1737814547IN
0xe583BcDE...2ba2eC460
0 ETH0.012046227.37676604
Register Continu...217020542025-01-25 14:15:479 hrs ago1737814547IN
0xe583BcDE...2ba2eC460
0 ETH0.012349157.37676604
Register Continu...216985982025-01-25 2:39:5920 hrs ago1737772799IN
0xe583BcDE...2ba2eC460
0 ETH0.00124595.16745462
Register Continu...216985982025-01-25 2:39:5920 hrs ago1737772799IN
0xe583BcDE...2ba2eC460
0 ETH0.00447665.16745462
Register Continu...216985972025-01-25 2:39:4720 hrs ago1737772787IN
0xe583BcDE...2ba2eC460
0 ETH0.008631934.89672524
Register Continu...216985972025-01-25 2:39:4720 hrs ago1737772787IN
0xe583BcDE...2ba2eC460
0 ETH0.008417644.89672524
Register Continu...216985962025-01-25 2:39:3520 hrs ago1737772775IN
0xe583BcDE...2ba2eC460
0 ETH0.008420874.78083871
Register Continu...216985962025-01-25 2:39:3520 hrs ago1737772775IN
0xe583BcDE...2ba2eC460
0 ETH0.008458424.78083871
Register Continu...216985952025-01-25 2:39:2320 hrs ago1737772763IN
0xe583BcDE...2ba2eC460
0 ETH0.008846994.66322727
Register Continu...216985952025-01-25 2:39:2320 hrs ago1737772763IN
0xe583BcDE...2ba2eC460
0 ETH0.008610234.66322727
Register Continu...216952692025-01-24 15:30:3532 hrs ago1737732635IN
0xe583BcDE...2ba2eC460
0 ETH0.0352117824.65849275
Register Continu...216952682025-01-24 15:30:2332 hrs ago1737732623IN
0xe583BcDE...2ba2eC460
0 ETH0.0449428924.07359435
Register Continu...216952682025-01-24 15:30:2332 hrs ago1737732623IN
0xe583BcDE...2ba2eC460
0 ETH0.0427143524.07359435
Register Continu...216952672025-01-24 15:30:1132 hrs ago1737732611IN
0xe583BcDE...2ba2eC460
0 ETH0.0372002222.0950002
Register Continu...216952672025-01-24 15:30:1132 hrs ago1737732611IN
0xe583BcDE...2ba2eC460
0 ETH0.040031322.0950002
Register Continu...216952662025-01-24 15:29:5932 hrs ago1737732599IN
0xe583BcDE...2ba2eC460
0 ETH0.0337518721.46381516
Register Continu...216952662025-01-24 15:29:5932 hrs ago1737732599IN
0xe583BcDE...2ba2eC460
0 ETH0.0338760821.46381516
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MemoryPageFactRegistry

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license
File 1 of 5 : MemoryPageFactRegistry.sol
/*
  Copyright 2019-2024 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

import "./IMemoryPageRegistry.sol";
import "../../components/FactRegistry.sol";

contract MemoryPageFactRegistryConstants {
    // A page based on a list of pairs (address, value).
    // In this case, memoryHash = hash(address, value, address, value, address, value, ...).
    uint256 internal constant REGULAR_PAGE = 0;
    // A page based on adjacent memory cells, starting from a given address.
    // In this case, memoryHash = hash(value, value, value, ...).
    uint256 internal constant CONTINUOUS_PAGE = 1;
}

/*
  A fact registry for the claim:
    I know n pairs (addr, value) for which the hash of the pairs is memoryHash, and the cumulative
    product: \prod_i( z - (addr_i + alpha * value_i) ) is prod.
  The exact format of the hash depends on the type of the page
  (see MemoryPageFactRegistryConstants).
  The fact consists of (pageType, prime, n, z, alpha, prod, memoryHash, address).
  Note that address is only available for CONTINUOUS_PAGE, and otherwise it is 0.
*/
contract MemoryPageFactRegistry is
    FactRegistry,
    MemoryPageFactRegistryConstants,
    IMemoryPageRegistry
{
    event LogMemoryPageFactRegular(bytes32 factHash, uint256 memoryHash, uint256 prod);
    event LogMemoryPageFactContinuous(bytes32 factHash, uint256 memoryHash, uint256 prod);

    /*
      Registers a fact based of the given memory (address, value) pairs (REGULAR_PAGE).
    */
    function registerRegularMemoryPage(
        uint256[] calldata memoryPairs,
        uint256 z,
        uint256 alpha,
        uint256 prime
    )
        external
        returns (
            bytes32 factHash,
            uint256 memoryHash,
            uint256 prod
        )
    {
        // Ensure 'memoryPairs.length' is bounded as a sanity check (the bound is somewhat arbitrary).
        require(memoryPairs.length < 2**20, "Too many memory values.");
        require(memoryPairs.length % 2 == 0, "Size of memoryPairs must be even.");
        require(z < prime, "Invalid value of z.");
        require(alpha < prime, "Invalid value of alpha.");
        (factHash, memoryHash, prod) = computeFactHash(memoryPairs, z, alpha, prime);
        emit LogMemoryPageFactRegular(factHash, memoryHash, prod);

        registerFact(factHash);
    }

    function computeFactHash(
        uint256[] memory memoryPairs,
        uint256 z,
        uint256 alpha,
        uint256 prime
    )
        private
        pure
        returns (
            bytes32 factHash,
            uint256 memoryHash,
            uint256 prod
        )
    {
        uint256 memorySize = memoryPairs.length / 2; // NOLINT: divide-before-multiply.

        prod = 1;

        assembly {
            let memoryPtr := add(memoryPairs, 0x20)

            // Each value of memoryPairs is a pair: (address, value).
            let lastPtr := add(memoryPtr, mul(memorySize, 0x40))
            for {
                let ptr := memoryPtr
            } lt(ptr, lastPtr) {
                ptr := add(ptr, 0x40)
            } {
                // Compute address + alpha * value.
                let address_value_lin_comb := addmod(
                    // address=
                    mload(ptr),
                    mulmod(
                        // value=
                        mload(add(ptr, 0x20)),
                        alpha,
                        prime
                    ),
                    prime
                )
                prod := mulmod(prod, add(z, sub(prime, address_value_lin_comb)), prime)
            }

            memoryHash := keccak256(
                memoryPtr,
                mul(
                    // 0x20 * 2.
                    0x40,
                    memorySize
                )
            )
        }

        factHash = keccak256(
            abi.encodePacked(
                REGULAR_PAGE,
                prime,
                memorySize,
                z,
                alpha,
                prod,
                memoryHash,
                uint256(0)
            )
        );
    }

    /*
      Receives a list of MemoryPageEntry. Each element in the list holds arguments for a seperate
      call to registerContinuousMemoryPage.
    */
    function registerContinuousPageBatch(MemoryPageEntry[] calldata memoryPageEntries) external {
        for (uint256 i = 0; i < memoryPageEntries.length; i++) {
            registerContinuousMemoryPage(
                memoryPageEntries[i].startAddr,
                memoryPageEntries[i].values,
                memoryPageEntries[i].z,
                memoryPageEntries[i].alpha,
                memoryPageEntries[i].prime
            );
        }
    }

    /*
      Registers a fact based on the given values, assuming continuous addresses.
      values should be [value at startAddr, value at (startAddr + 1), ...].
    */
    function registerContinuousMemoryPage(
        // NOLINT: external-function.
        uint256 startAddr,
        uint256[] memory values,
        uint256 z,
        uint256 alpha,
        uint256 prime
    )
        public
        override
        returns (
            bytes32 factHash,
            uint256 memoryHash,
            uint256 prod
        )
    {
        require(values.length < 2**20, "Too many memory values.");
        require(prime < 2**254, "prime is too big for the optimizations in this function.");
        require(z < prime, "Invalid value of z.");
        require(alpha < prime, "Invalid value of alpha.");
        // Ensure 'startAddr' less then prime and bounded as a sanity check (the bound is somewhat arbitrary).
        require((startAddr < prime) && (startAddr < 2**64), "Invalid value of startAddr.");

        uint256 nValues = values.length;

        assembly {
            // Initialize prod to 1.
            prod := 1
            // Initialize valuesPtr to point to the first value in the array.
            let valuesPtr := add(values, 0x20)

            let minus_z := mod(sub(prime, z), prime)

            // Start by processing full batches of 8 cells, addr represents the last address in each
            // batch.
            let addr := add(startAddr, 7)
            let lastAddr := add(startAddr, nValues)
            for {

            } lt(addr, lastAddr) {
                addr := add(addr, 8)
            } {
                // Compute the product of (lin_comb - z) instead of (z - lin_comb), since we're
                // doing an even number of iterations, the result is the same.
                prod := mulmod(
                    prod,
                    mulmod(
                        add(add(sub(addr, 7), mulmod(mload(valuesPtr), alpha, prime)), minus_z),
                        add(
                            add(sub(addr, 6), mulmod(mload(add(valuesPtr, 0x20)), alpha, prime)),
                            minus_z
                        ),
                        prime
                    ),
                    prime
                )

                prod := mulmod(
                    prod,
                    mulmod(
                        add(
                            add(sub(addr, 5), mulmod(mload(add(valuesPtr, 0x40)), alpha, prime)),
                            minus_z
                        ),
                        add(
                            add(sub(addr, 4), mulmod(mload(add(valuesPtr, 0x60)), alpha, prime)),
                            minus_z
                        ),
                        prime
                    ),
                    prime
                )

                prod := mulmod(
                    prod,
                    mulmod(
                        add(
                            add(sub(addr, 3), mulmod(mload(add(valuesPtr, 0x80)), alpha, prime)),
                            minus_z
                        ),
                        add(
                            add(sub(addr, 2), mulmod(mload(add(valuesPtr, 0xa0)), alpha, prime)),
                            minus_z
                        ),
                        prime
                    ),
                    prime
                )

                prod := mulmod(
                    prod,
                    mulmod(
                        add(
                            add(sub(addr, 1), mulmod(mload(add(valuesPtr, 0xc0)), alpha, prime)),
                            minus_z
                        ),
                        add(add(addr, mulmod(mload(add(valuesPtr, 0xe0)), alpha, prime)), minus_z),
                        prime
                    ),
                    prime
                )

                valuesPtr := add(valuesPtr, 0x100)
            }

            // Handle leftover.
            // Translate addr to the beginning of the last incomplete batch.
            addr := sub(addr, 7)
            for {

            } lt(addr, lastAddr) {
                addr := add(addr, 1)
            } {
                let address_value_lin_comb := addmod(
                    addr,
                    mulmod(mload(valuesPtr), alpha, prime),
                    prime
                )
                prod := mulmod(prod, add(z, sub(prime, address_value_lin_comb)), prime)
                valuesPtr := add(valuesPtr, 0x20)
            }

            memoryHash := keccak256(add(values, 0x20), mul(0x20, nValues))
        }

        factHash = keccak256(
            abi.encodePacked(CONTINUOUS_PAGE, prime, nValues, z, alpha, prod, memoryHash, startAddr)
        );

        emit LogMemoryPageFactContinuous(factHash, memoryHash, prod);

        registerFact(factHash);
    }
}

File 2 of 5 : FactRegistry.sol
/*
  Copyright 2019-2024 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;

import "../interfaces/IQueryableFactRegistry.sol";

contract FactRegistry is IQueryableFactRegistry {
    // Mapping: fact hash -> true.
    mapping(bytes32 => bool) private verifiedFact;

    // Indicates whether the Fact Registry has at least one fact registered.
    bool anyFactRegistered = false;

    /*
      Checks if a fact was registered.
    */
    function isValid(bytes32 fact) external view virtual override returns (bool) {
        return internalIsValid(fact);
    }

    /*
      The internal implementation that checks if the fact was registered.
    */
    function internalIsValid(bytes32 fact) internal view virtual returns (bool) {
        return verifiedFact[fact];
    }

    function registerFact(bytes32 factHash) internal {
        // This function stores the fact hash in the mapping.
        verifiedFact[factHash] = true;

        // Mark first time off.
        if (!anyFactRegistered) {
            anyFactRegistered = true;
        }
    }

    /*
      Indicates whether at least one fact was registered.
    */
    function hasRegisteredFact() external view override returns (bool) {
        return anyFactRegistered;
    }
}

File 3 of 5 : IFactRegistry.sol
/*
  Copyright 2019-2024 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity >=0.6.12;

/*
  The Fact Registry design pattern is a way to separate cryptographic verification from the
  business logic of the contract flow.

  A fact registry holds a hash table of verified "facts" which are represented by a hash of claims
  that the registry hash check and found valid. This table may be queried by accessing the
  isValid() function of the registry with a given hash.

  In addition, each fact registry exposes a registry specific function for submitting new claims
  together with their proofs. The information submitted varies from one registry to the other
  depending of the type of fact requiring verification.

  For further reading on the Fact Registry design pattern see this
  `StarkWare blog post <https://medium.com/starkware/the-fact-registry-a64aafb598b6>`_.
*/
interface IFactRegistry {
    /*
      Returns true if the given fact was previously registered in the contract.
    */
    function isValid(bytes32 fact) external view returns (bool);
}

File 4 of 5 : IMemoryPageRegistry.sol
/*
  Copyright 2019-2024 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;

struct MemoryPageEntry {
    uint256 startAddr;
    uint256[] values;
    uint256 z;
    uint256 alpha;
    uint256 prime;
}

interface IMemoryPageRegistry {
    function registerContinuousMemoryPage(
        uint256 startAddr,
        uint256[] memory values,
        uint256 z,
        uint256 alpha,
        uint256 prime
    )
        external
        returns (
            bytes32,
            uint256,
            uint256
        );
}

File 5 of 5 : IQueryableFactRegistry.sol
/*
  Copyright 2019-2024 StarkWare Industries Ltd.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  https://www.starkware.co/open-source-license/

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions
  and limitations under the License.
*/
// SPDX-License-Identifier: Apache-2.0.
pragma solidity ^0.6.12;

import "./IFactRegistry.sol";

/*
  Extends the IFactRegistry interface with a query method that indicates
  whether the fact registry has successfully registered any fact or is still empty of such facts.
*/
interface IQueryableFactRegistry is IFactRegistry {
    /*
      Returns true if at least one fact has been registered.
    */
    function hasRegisteredFact() external view returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"factHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"memoryHash","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prod","type":"uint256"}],"name":"LogMemoryPageFactContinuous","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"factHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"memoryHash","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prod","type":"uint256"}],"name":"LogMemoryPageFactRegular","type":"event"},{"inputs":[],"name":"hasRegisteredFact","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"fact","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startAddr","type":"uint256"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"uint256","name":"z","type":"uint256"},{"internalType":"uint256","name":"alpha","type":"uint256"},{"internalType":"uint256","name":"prime","type":"uint256"}],"name":"registerContinuousMemoryPage","outputs":[{"internalType":"bytes32","name":"factHash","type":"bytes32"},{"internalType":"uint256","name":"memoryHash","type":"uint256"},{"internalType":"uint256","name":"prod","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"startAddr","type":"uint256"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"uint256","name":"z","type":"uint256"},{"internalType":"uint256","name":"alpha","type":"uint256"},{"internalType":"uint256","name":"prime","type":"uint256"}],"internalType":"struct MemoryPageEntry[]","name":"memoryPageEntries","type":"tuple[]"}],"name":"registerContinuousPageBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"memoryPairs","type":"uint256[]"},{"internalType":"uint256","name":"z","type":"uint256"},{"internalType":"uint256","name":"alpha","type":"uint256"},{"internalType":"uint256","name":"prime","type":"uint256"}],"name":"registerRegularMemoryPage","outputs":[{"internalType":"bytes32","name":"factHash","type":"bytes32"},{"internalType":"uint256","name":"memoryHash","type":"uint256"},{"internalType":"uint256","name":"prod","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001805460ff1916905534801561001a57600080fd5b50610a958061002a6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063405a63621461005c5780635578ceae146100875780636a9385671461009a578063739ef303146100ba578063d6354e15146100cf575b600080fd5b61006f61006a3660046106d3565b6100d7565b60405161007e9392919061084c565b60405180910390f35b61006f610095366004610743565b6101fe565b6100ad6100a836600461072b565b610445565b60405161007e9190610841565b6100cd6100c8366004610693565b610456565b005b6100ad61055e565b600080806210000087106101065760405162461bcd60e51b81526004016100fd90610862565b60405180910390fd5b60028706156101275760405162461bcd60e51b81526004016100fd906108fd565b8386106101465760405162461bcd60e51b81526004016100fd90610899565b8385106101655760405162461bcd60e51b81526004016100fd906108c6565b6101a68888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250899150889050610567565b60405192955090935091507f98fd0d40bd3e226c28fb29ff2d386bd8f9e19f2f8436441e6b854651d3b687b3906101e29085908590859061084c565b60405180910390a16101f383610601565b955095509592505050565b6000806000621000008751106102265760405162461bcd60e51b81526004016100fd90610862565b600160fe1b84106102495760405162461bcd60e51b81526004016100fd90610975565b8386106102685760405162461bcd60e51b81526004016100fd90610899565b8385106102875760405162461bcd60e51b81526004016100fd906108c6565b838810801561029e57506801000000000000000088105b6102ba5760405162461bcd60e51b81526004016100fd9061093e565b5085516001906020880187860386900660078b018b84015b8082101561037a578889848b8d602089015109600686030101858c8e89510960078703010109870995508889848b8d606089015109600486030101858c8e60408a01510960058703010109870995508889848b8d60a089015109600286030101858c8e60808a01510960038703010109870995508889848b8d60e089015109850101858c8e60c08a0151096001870301010987099550610100840193506008820191506102d2565b6007820391505b808210156103ae5788898b8651098308925088838a038c0187099550602084019350600182019150610381565b50505050806020026020890120925060018582898986888f6040516020016103dd98979695949392919061080b565b6040516020818303038152906040528051906020012093507fb8b9c39aeba1cfd98c38dfeebe11c2f7e02b334cbe9f05f22b442a5d9c1ea0c58484846040516104289392919061084c565b60405180910390a161043984610601565b50955095509592505050565b600061045082610635565b92915050565b60005b818110156105595761054e83838381811061047057fe5b90506020028101906104829190610a19565b3584848481811061048f57fe5b90506020028101906104a19190610a19565b6104af9060208101906109d2565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791508690508181106104ef57fe5b90506020028101906105019190610a19565b6040013586868681811061051157fe5b90506020028101906105239190610a19565b6060013587878781811061053357fe5b90506020028101906105459190610a19565b608001356101fe565b505050600101610459565b505050565b60015460ff1690565b600080600080600288518161057857fe5b0490506001915060208801604082028101815b818110156105b25787888a60208401510982510888818a038c01870995505060400161058b565b5050816040028120935050600085828989868860006040516020016105de98979695949392919061080b565b604051602081830303815290604052805190602001209350509450945094915050565b6000818152602081905260409020805460ff191660019081179091555460ff16610632576001805460ff1916811790555b50565b60009081526020819052604090205460ff1690565b60008083601f84011261065b578182fd5b50813567ffffffffffffffff811115610672578182fd5b602083019150836020808302850101111561068c57600080fd5b9250929050565b600080602083850312156106a5578182fd5b823567ffffffffffffffff8111156106bb578283fd5b6106c78582860161064a565b90969095509350505050565b6000806000806000608086880312156106ea578081fd5b853567ffffffffffffffff811115610700578182fd5b61070c8882890161064a565b9099909850602088013597604081013597506060013595509350505050565b60006020828403121561073c578081fd5b5035919050565b600080600080600060a0868803121561075a578081fd5b8535945060208087013567ffffffffffffffff80821115610779578384fd5b818901915089601f83011261078c578384fd5b81358181111561079a578485fd5b83810291506107aa848301610a38565b8181528481019084860184860187018e10156107c4578788fd5b8795505b838610156107e65780358352600195909501949186019186016107c8565b50999c999b505050506040880135976060810135976080909101359650945050505050565b978852602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b901515815260200190565b9283526020830191909152604082015260600190565b60208082526017908201527f546f6f206d616e79206d656d6f72792076616c7565732e000000000000000000604082015260600190565b60208082526013908201527224b73b30b634b2103b30b63ab29037b3103d1760691b604082015260600190565b60208082526017908201527f496e76616c69642076616c7565206f6620616c7068612e000000000000000000604082015260600190565b60208082526021908201527f53697a65206f66206d656d6f72795061697273206d757374206265206576656e6040820152601760f91b606082015260800190565b6020808252601b908201527f496e76616c69642076616c7565206f66207374617274416464722e0000000000604082015260600190565b60208082526038908201527f7072696d6520697320746f6f2062696720666f7220746865206f7074696d697a60408201527f6174696f6e7320696e20746869732066756e6374696f6e2e0000000000000000606082015260800190565b6000808335601e198436030181126109e8578283fd5b83018035915067ffffffffffffffff821115610a02578283fd5b602090810192508102360382131561068c57600080fd5b60008235609e19833603018112610a2e578182fd5b9190910192915050565b60405181810167ffffffffffffffff81118282101715610a5757600080fd5b60405291905056fea26469706673582212208a513390e34ff15c4135920681efb8c9e87a3b3af98b66ba3df7fbc2b3330e2164736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063405a63621461005c5780635578ceae146100875780636a9385671461009a578063739ef303146100ba578063d6354e15146100cf575b600080fd5b61006f61006a3660046106d3565b6100d7565b60405161007e9392919061084c565b60405180910390f35b61006f610095366004610743565b6101fe565b6100ad6100a836600461072b565b610445565b60405161007e9190610841565b6100cd6100c8366004610693565b610456565b005b6100ad61055e565b600080806210000087106101065760405162461bcd60e51b81526004016100fd90610862565b60405180910390fd5b60028706156101275760405162461bcd60e51b81526004016100fd906108fd565b8386106101465760405162461bcd60e51b81526004016100fd90610899565b8385106101655760405162461bcd60e51b81526004016100fd906108c6565b6101a68888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250899150889050610567565b60405192955090935091507f98fd0d40bd3e226c28fb29ff2d386bd8f9e19f2f8436441e6b854651d3b687b3906101e29085908590859061084c565b60405180910390a16101f383610601565b955095509592505050565b6000806000621000008751106102265760405162461bcd60e51b81526004016100fd90610862565b600160fe1b84106102495760405162461bcd60e51b81526004016100fd90610975565b8386106102685760405162461bcd60e51b81526004016100fd90610899565b8385106102875760405162461bcd60e51b81526004016100fd906108c6565b838810801561029e57506801000000000000000088105b6102ba5760405162461bcd60e51b81526004016100fd9061093e565b5085516001906020880187860386900660078b018b84015b8082101561037a578889848b8d602089015109600686030101858c8e89510960078703010109870995508889848b8d606089015109600486030101858c8e60408a01510960058703010109870995508889848b8d60a089015109600286030101858c8e60808a01510960038703010109870995508889848b8d60e089015109850101858c8e60c08a0151096001870301010987099550610100840193506008820191506102d2565b6007820391505b808210156103ae5788898b8651098308925088838a038c0187099550602084019350600182019150610381565b50505050806020026020890120925060018582898986888f6040516020016103dd98979695949392919061080b565b6040516020818303038152906040528051906020012093507fb8b9c39aeba1cfd98c38dfeebe11c2f7e02b334cbe9f05f22b442a5d9c1ea0c58484846040516104289392919061084c565b60405180910390a161043984610601565b50955095509592505050565b600061045082610635565b92915050565b60005b818110156105595761054e83838381811061047057fe5b90506020028101906104829190610a19565b3584848481811061048f57fe5b90506020028101906104a19190610a19565b6104af9060208101906109d2565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791508690508181106104ef57fe5b90506020028101906105019190610a19565b6040013586868681811061051157fe5b90506020028101906105239190610a19565b6060013587878781811061053357fe5b90506020028101906105459190610a19565b608001356101fe565b505050600101610459565b505050565b60015460ff1690565b600080600080600288518161057857fe5b0490506001915060208801604082028101815b818110156105b25787888a60208401510982510888818a038c01870995505060400161058b565b5050816040028120935050600085828989868860006040516020016105de98979695949392919061080b565b604051602081830303815290604052805190602001209350509450945094915050565b6000818152602081905260409020805460ff191660019081179091555460ff16610632576001805460ff1916811790555b50565b60009081526020819052604090205460ff1690565b60008083601f84011261065b578182fd5b50813567ffffffffffffffff811115610672578182fd5b602083019150836020808302850101111561068c57600080fd5b9250929050565b600080602083850312156106a5578182fd5b823567ffffffffffffffff8111156106bb578283fd5b6106c78582860161064a565b90969095509350505050565b6000806000806000608086880312156106ea578081fd5b853567ffffffffffffffff811115610700578182fd5b61070c8882890161064a565b9099909850602088013597604081013597506060013595509350505050565b60006020828403121561073c578081fd5b5035919050565b600080600080600060a0868803121561075a578081fd5b8535945060208087013567ffffffffffffffff80821115610779578384fd5b818901915089601f83011261078c578384fd5b81358181111561079a578485fd5b83810291506107aa848301610a38565b8181528481019084860184860187018e10156107c4578788fd5b8795505b838610156107e65780358352600195909501949186019186016107c8565b50999c999b505050506040880135976060810135976080909101359650945050505050565b978852602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b901515815260200190565b9283526020830191909152604082015260600190565b60208082526017908201527f546f6f206d616e79206d656d6f72792076616c7565732e000000000000000000604082015260600190565b60208082526013908201527224b73b30b634b2103b30b63ab29037b3103d1760691b604082015260600190565b60208082526017908201527f496e76616c69642076616c7565206f6620616c7068612e000000000000000000604082015260600190565b60208082526021908201527f53697a65206f66206d656d6f72795061697273206d757374206265206576656e6040820152601760f91b606082015260800190565b6020808252601b908201527f496e76616c69642076616c7565206f66207374617274416464722e0000000000604082015260600190565b60208082526038908201527f7072696d6520697320746f6f2062696720666f7220746865206f7074696d697a60408201527f6174696f6e7320696e20746869732066756e6374696f6e2e0000000000000000606082015260800190565b6000808335601e198436030181126109e8578283fd5b83018035915067ffffffffffffffff821115610a02578283fd5b602090810192508102360382131561068c57600080fd5b60008235609e19833603018112610a2e578182fd5b9190910192915050565b60405181810167ffffffffffffffff81118282101715610a5757600080fd5b60405291905056fea26469706673582212208a513390e34ff15c4135920681efb8c9e87a3b3af98b66ba3df7fbc2b3330e2164736f6c634300060c0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.