Contract 0xcEB26b07874eC2AD1990a376106c35F33A611918

Contract Overview

Balance:
0 Ether
Txn Hash
Method
Block
From
To
Value
0x80fd7ddacecc8cb6a2b1ee54abe597e842adebb53a3b2e6939c1de22a6dca01aSubmit Puzzle So...100938352021-04-23 9:18:09437 days 14 hrs ago0x994bc996406b871e4dabd6522a16aea2962bfb3e IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000217215
0xde1825c9359261c8c05b3b68d81ff8be02ed89ab0b5701450b16a79a5b505f40Submit Puzzle So...100882442021-04-22 11:32:48438 days 12 hrs ago0xf2e0a860360bdbb40e4f36fb429cc626365740fa IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000045791
0xd4c61ddcd1fe06cf8190980531d3602a71e5d9675af5e9d6d4935f3134912b24Submit Puzzle So...100882392021-04-22 11:31:54438 days 12 hrs ago0xf2e0a860360bdbb40e4f36fb429cc626365740fa IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000296621
0x43d58506a16f1df64abd5130409afc1a3319c7fdf34c2d814b1e59e5aa8b186cSubmit Puzzle So...100722162021-04-19 19:44:03441 days 4 hrs ago0xc34db996ece262125a7cc088dc3acfa108a7b588 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000593652
0xf8f1885eaa17c15d9b5186af11b76a4ba30ce367c4524f53454f0c35d12552a9Submit Puzzle So...100705732021-04-19 15:30:39441 days 8 hrs ago0x40d1d0c7623b3d5401a7b27e8cc7f1e1dbb82437 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000627582
0x07bed98e90f708fe44aea7552092ab19a2be597723f046856c6ac104a0367ec7Submit Puzzle So...100666052021-04-19 0:13:56441 days 23 hrs ago0xf2e0a860360bdbb40e4f36fb429cc626365740fa IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000889863
0xc5b7ccaccb5a9f6a39bb3904cea217d168a6e702ece91c7a2f13e4a3dd7f817dSubmit Puzzle So...100656942021-04-18 20:56:45442 days 2 hrs ago0xc34db996ece262125a7cc088dc3acfa108a7b588 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001158693
0x20764d60ff847875444664c6ba82e39a412a04d2bc04b3c4dba6a9259931f642Submit Puzzle So...100650212021-04-18 19:16:33442 days 4 hrs ago0xc34db996ece262125a7cc088dc3acfa108a7b588 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000217515
0xfa01b8cb4b70425b1cd5d35aff6c5d091a711782587ea8c04c8c6f01a0585307Submit Puzzle So...100644192021-04-18 17:22:35442 days 6 hrs ago0x40d1d0c7623b3d5401a7b27e8cc7f1e1dbb82437 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001483415
0x6ed24fc29428e7b39eb1e0a9ecd2777c5e760de2f2c7e46fb0ad5a352102a090Submit Puzzle So...100643672021-04-18 17:14:57442 days 6 hrs ago0x65077f7b6aba073221fcf2da08e0c23af346dc15 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001568795
0xf153a17ef82eb78255fc98e17206074ea533a68fb87e1358c1ddd3dfd73fbb73Submit Puzzle So...100643442021-04-18 17:11:27442 days 6 hrs ago0x65077f7b6aba073221fcf2da08e0c23af346dc15 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000217875
0x2590ff3c429406c19d9b5b51b13381b91b1dba1ddf25eba0e7dca136f42e9ccdSubmit Puzzle So...100641292021-04-18 16:40:41442 days 7 hrs ago0x40d1d0c7623b3d5401a7b27e8cc7f1e1dbb82437 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001568975
0x7a8cb77074e3843fbff7d5485dc927bc43f29c603caf58acdbafcc5ddb0f82f2Submit Puzzle So...100638432021-04-18 15:44:04442 days 8 hrs ago0x40d1d0c7623b3d5401a7b27e8cc7f1e1dbb82437 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001568975
0x31c9678acba8524ae087b73987c0ea84d2350f88754ae8af2de29828453b71f7Submit Puzzle So...100637222021-04-18 15:17:01442 days 8 hrs ago0x40d1d0c7623b3d5401a7b27e8cc7f1e1dbb82437 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001483475
0x1208d2cdec8b917d25f20adf0a5dce6ee479d13340c633968bc93a0f931d00fbSubmit Puzzle So...100636922021-04-18 15:11:40442 days 8 hrs ago0x65077f7b6aba073221fcf2da08e0c23af346dc15 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000229225
0xd9e5b2eb1ba846ce4f3c0a628f590b83b9ce88b33180bc1724caac2d359baff1Submit Puzzle So...100636922021-04-18 15:11:40442 days 8 hrs ago0x65077f7b6aba073221fcf2da08e0c23af346dc15 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001568855
0x178d810d4c3993e197ce70d4544f8ad0c609b0fe7c195b893532c54cefb4500eSubmit Puzzle So...100611262021-04-18 8:31:31442 days 15 hrs ago0xcdac38500f333a970bb663ebe76c4bea627ac3a2 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001482515
0x19ac27b059ab40e306ac9e1dfa0ee3494cb97a6be81b7090b74090131e00cd59Add Program Hash100609772021-04-18 8:05:00442 days 15 hrs ago0xd31dbf74027bb9ffe7d1b18861ed21d83cca673e IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.00023125
0x6e7d9802f07722eba1baa5f50479f6bcddb3693c15cc68011b1d769e6c750217Add Program Hash100609772021-04-18 8:05:00442 days 15 hrs ago0xd31dbf74027bb9ffe7d1b18861ed21d83cca673e IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000231145
0x8c6c4f830182a63c890ea99d6de3daae364bdac201785f15e67f741d51206ee8Add Program Hash100609772021-04-18 8:05:00442 days 15 hrs ago0xd31dbf74027bb9ffe7d1b18861ed21d83cca673e IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.00023125
0x0d3f80b22978b58bc6dc8bb92bee2c78bab88f8069021a37cb896fd0df302722Add Program Hash100609772021-04-18 8:05:00442 days 15 hrs ago0xd31dbf74027bb9ffe7d1b18861ed21d83cca673e IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.00023125
0xbaa706a2dc0edbafba0ad5af5ca9125ee566db725659cc22eb744da5b2e6677aAdd Program Hash100609772021-04-18 8:05:00442 days 15 hrs ago0xd31dbf74027bb9ffe7d1b18861ed21d83cca673e IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.00023125
0x4a407241c7f985ec95df7b1c8102e384569905b05eb67ad98605aace740f18d3Submit Puzzle So...100600202021-04-18 5:20:17442 days 18 hrs ago0x6b19d836008f9c93004947e38a267743e2dd8048 IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.001482635
0xafed2b1b2da6e465b9316a3593828acd2c7f667d15aa4670e3787d2c854da509Submit Puzzle So...100368842021-04-14 7:56:48446 days 15 hrs ago0xf369af734e1b0221fa3fe25f885e7a105a26b41b IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.000593172
0x58f7fc875c349d05de3922607e2bd9b6e6614a1b68cd86931aaaffc49f585a30Submit Puzzle So...100368662021-04-14 7:53:34446 days 15 hrs ago0xf369af734e1b0221fa3fe25f885e7a105a26b41b IN  0xceb26b07874ec2ad1990a376106c35f33a6119180 Ether0.0000872
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x80fd7ddacecc8cb6a2b1ee54abe597e842adebb53a3b2e6939c1de22a6dca01a100938352021-04-23 9:18:09437 days 14 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xde1825c9359261c8c05b3b68d81ff8be02ed89ab0b5701450b16a79a5b505f40100882442021-04-22 11:32:48438 days 12 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xd4c61ddcd1fe06cf8190980531d3602a71e5d9675af5e9d6d4935f3134912b24100882392021-04-22 11:31:54438 days 12 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x43d58506a16f1df64abd5130409afc1a3319c7fdf34c2d814b1e59e5aa8b186c100722162021-04-19 19:44:03441 days 4 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xf8f1885eaa17c15d9b5186af11b76a4ba30ce367c4524f53454f0c35d12552a9100705732021-04-19 15:30:39441 days 8 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x07bed98e90f708fe44aea7552092ab19a2be597723f046856c6ac104a0367ec7100666052021-04-19 0:13:56441 days 23 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xc5b7ccaccb5a9f6a39bb3904cea217d168a6e702ece91c7a2f13e4a3dd7f817d100656942021-04-18 20:56:45442 days 2 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x20764d60ff847875444664c6ba82e39a412a04d2bc04b3c4dba6a9259931f642100650212021-04-18 19:16:33442 days 4 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xfa01b8cb4b70425b1cd5d35aff6c5d091a711782587ea8c04c8c6f01a0585307100644192021-04-18 17:22:35442 days 6 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x6ed24fc29428e7b39eb1e0a9ecd2777c5e760de2f2c7e46fb0ad5a352102a090100643672021-04-18 17:14:57442 days 6 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xf153a17ef82eb78255fc98e17206074ea533a68fb87e1358c1ddd3dfd73fbb73100643442021-04-18 17:11:27442 days 6 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x2590ff3c429406c19d9b5b51b13381b91b1dba1ddf25eba0e7dca136f42e9ccd100641292021-04-18 16:40:41442 days 7 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x7a8cb77074e3843fbff7d5485dc927bc43f29c603caf58acdbafcc5ddb0f82f2100638432021-04-18 15:44:04442 days 8 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x31c9678acba8524ae087b73987c0ea84d2350f88754ae8af2de29828453b71f7100637222021-04-18 15:17:01442 days 8 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x1208d2cdec8b917d25f20adf0a5dce6ee479d13340c633968bc93a0f931d00fb100636922021-04-18 15:11:40442 days 8 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xd9e5b2eb1ba846ce4f3c0a628f590b83b9ce88b33180bc1724caac2d359baff1100636922021-04-18 15:11:40442 days 8 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x178d810d4c3993e197ce70d4544f8ad0c609b0fe7c195b893532c54cefb4500e100611262021-04-18 8:31:31442 days 15 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x4a407241c7f985ec95df7b1c8102e384569905b05eb67ad98605aace740f18d3100600202021-04-18 5:20:17442 days 18 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xafed2b1b2da6e465b9316a3593828acd2c7f667d15aa4670e3787d2c854da509100368842021-04-14 7:56:48446 days 15 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x58f7fc875c349d05de3922607e2bd9b6e6614a1b68cd86931aaaffc49f585a30100368662021-04-14 7:53:34446 days 15 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x3d667bb7bdc9598a78dd908e8befdf5a039209467f6d13f7d97ec6bb330388a6100273852021-04-12 23:31:40448 days 14 mins ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x47fdce35c2e4667579cbe826543b9c235e4d9a32d0b3e3afa2cbcb7f0504fbbd100273852021-04-12 23:31:40448 days 14 mins ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0xbabb8598c31843b418e563fbeee84d1f8f0dc1a95b9e6b14454a439d700159ba100273852021-04-12 23:31:40448 days 14 mins ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x436eb6922eec9c09d64d0630e63f21437f212ae934df16dc4dbec8a025771796100273842021-04-12 23:31:22448 days 14 mins ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
0x802f95bc2a19969aee6b482391df16f48abfa01392a588cf468c8b5a02f9c8f999822372021-04-05 16:22:02455 days 7 hrs ago 0xceb26b07874ec2ad1990a376106c35f33a611918 0x4cd99a1fc780d874a34008fdc6da2961d540fe640 Ether
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xCA1401c37949ca3f0a9B7128Bf99aC38b7598e89

Contract Name:
CairoPuzzleSubmission

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: CairoPuzzleSubmission.sol
/*
  Copyright 2019,2020 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.
*/
pragma solidity ^0.6.11;

import "PuzzleSubmission.sol";
import "ProgramHashMgmt.sol";
import "IFactRegistry.sol";

contract CairoPuzzleSubmission is ProgramHashMgmt, PuzzleSubmission {
    event SuccessfulSubmission(
        bytes32 programHash,
        address submitter,
        uint256 timestap,
        string submitterName,
        address rewardAddress
    );

    IFactRegistry cairoVerifier;

    constructor(address verifierAddress) public {
        cairoVerifier = IFactRegistry(verifierAddress);
    }

    function getSubmittersCount(bytes32 programHash) public
        view
        returns(uint256)
    {
        return submissionLists[programHash].length;
    }

    /*
      Provides the submission details of the submitter in the n-th place for the given puzzle.
      The place is zero based.
    */
    function getNthPlace(bytes32 programHash, uint256 place)
        external
        view
        returns(address, address, string memory, uint256)
    {
        require(isRegisteredPuzzle(programHash), "PROGRAM_HASH_DOES_NOT_BELONG_TO_A_PUZZLE");
        require(place < getSubmittersCount(programHash) , "INDEX_ERROR");
        SubmissionDetails storage submission = submissionLists[programHash][place];
        return (
            submission.sender,
            submission.rewardAddress,
            submission.submitterName,
            submission.timestamp);
    }

    /*
      Registers a puzzle solution.
      This function should be called only after the GPS fact is successfully registered on-chain.
      You can use calcSubmissionFact to get the value of the fact expected by this contract,
      and make sure it's registered on the GPS contract, using its isValid() method.

      rewardAddress - The Ethereum MAINNET address, to which rewards should be sent.
      submitterName - The name of the submitter.
      programHash - The program hash of the puzzle.
    */
    function submitPuzzleSolution(
        address rewardAddress,
        string calldata submitterName,
        bytes32 programHash)
        external
    {
        require(isRegisteredPuzzle(programHash), "PROGRAM_HASH_DOES_NOT_BELONG_TO_A_PUZZLE");
        bytes32 submissionFact = calcSubmissionFact(programHash, msg.sender);
        require(cairoVerifier.isValid(submissionFact), "CAIRO_FACT_NOT_REGISTERED_IN_GPS_CONTRACT");
        require(
            submitters[programHash][msg.sender] == 0,
            "REQUESTED_REGISTRATION_ALREADY_PERFORMED");
        recordSubmission(rewardAddress, submitterName, programHash);

        emit SuccessfulSubmission(
            programHash,
            msg.sender,
            block.timestamp,
            submitterName,
            rewardAddress);
    }

    function calcSubmissionFact(bytes32 programHash, address sender)
        public
        pure
        returns(bytes32)
    {
        bytes32 senderHash = keccak256(abi.encode(uint256(sender)));
        return keccak256(abi.encode(programHash, senderHash));
    }
}

File 2 of 5: IFactRegistry.sol
/*
  Copyright 2019,2020 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.
*/
pragma solidity ^0.6.11;

/*
  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 3 of 5: ProgramHashMgmt.sol
/*
  Copyright 2019,2020 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.
*/
pragma solidity ^0.6.11;

import "SimpleAdminable.sol";

abstract contract ProgramHashMgmt is SimpleAdminable {
    // A map from program hash to true. True marks eligible puzzles.
    mapping (bytes32 => bool) puzzleProgramHashes;

    /*
      Indicates if puzzle exists.
    */
    function isRegisteredPuzzle(bytes32 programHash) public view returns(bool) {
        return puzzleProgramHashes[programHash];
    }

    function addProgramHash(bytes32 programHash) external onlyAdmin {
        puzzleProgramHashes[programHash] = true;
    }
}

File 4 of 5: PuzzleSubmission.sol
/*
  Copyright 2019,2020 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.
*/
pragma solidity ^0.6.11;

abstract contract PuzzleSubmission {
    // Full details of a submission.
    struct SubmissionDetails {
        bytes32 programHash;
        address sender;
        address rewardAddress; // Ethereum mainnet address of the submitter for accepting rewards.
        string submitterName;
        uint256 timestamp;
    }

    // Map programHash -> Lists of submission details.
    // Each list is ordered by the time of submission.
    mapping (bytes32 => SubmissionDetails[]) submissionLists;

    // Challenge submitters
    // A map programHash => sender => timestamp.
    mapping (bytes32 => mapping (address => uint256)) submitters;

    /*
      Creates and returns the storage pointer to the struct.
    */
    function submissionStructAllocator(bytes32 programHash)
        internal
        view
        returns(SubmissionDetails storage submission)
    {
        bytes32 location = keccak256(
            abi.encodePacked("SubmissionDetailsStorage", programHash, msg.sender));
        assembly {submission_slot := location}
    }

    function recordSubmission(
        address rewardAddresss,
        string calldata submitterName,
        bytes32 programHash) internal
    {
        SubmissionDetails storage submission = submissionStructAllocator(programHash);
        submitters[programHash][msg.sender] = block.timestamp;
        submission.programHash = programHash;
        submission.sender = msg.sender;
        submission.rewardAddress = rewardAddresss;
        submission.submitterName = submitterName;
        submission.timestamp = block.timestamp;
        submissionLists[programHash].push(submission);
    }
}

File 5 of 5: SimpleAdminable.sol
/*
  Copyright 2019,2020 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.
*/
pragma solidity ^0.6.11;

abstract contract SimpleAdminable {

    address owner;
    address ownerCandidate;
    mapping(address => bool) admins;

    constructor() internal {
        owner = msg.sender;
        admins[msg.sender] = true;
    }

    // Admin/Owner Modifiers.
    modifier onlyOwner() {
        require(isOwner(msg.sender), "ONLY_OWNER");
        _;
    }

    function isOwner(address testedAddress) public view returns (bool) {
        return owner == testedAddress;
    }

    modifier onlyAdmin() {
        require(isAdmin(msg.sender), "ONLY_ADMIN");
        _;
    }

    function isAdmin(address testedAddress) public view returns (bool) {
        return admins[testedAddress];
    }

    function registerAdmin(address newAdmin) external onlyOwner {
        if (!isAdmin(newAdmin)) {
            admins[newAdmin] = true;
        }
    }

    function removeAdmin(address removedAdmin) external onlyOwner {
        require(!isOwner(removedAdmin), "OWNER_CANNOT_BE_REMOVED_AS_ADMIN");
        delete admins[removedAdmin];
    }

    function nominateNewOwner(address newOwner) external onlyOwner {
        require(!isOwner(newOwner), "ALREADY_OWNER");
        ownerCandidate = newOwner;
    }

    function acceptOwnership() external {
        // Previous owner is still an admin.
        require(msg.sender == ownerCandidate, "NOT_A_CANDIDATE");
        owner = ownerCandidate;
        admins[ownerCandidate] = true;
        ownerCandidate = address(0x0);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"verifierAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"programHash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"submitter","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestap","type":"uint256"},{"indexed":false,"internalType":"string","name":"submitterName","type":"string"},{"indexed":false,"internalType":"address","name":"rewardAddress","type":"address"}],"name":"SuccessfulSubmission","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"programHash","type":"bytes32"}],"name":"addProgramHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"programHash","type":"bytes32"},{"internalType":"address","name":"sender","type":"address"}],"name":"calcSubmissionFact","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"programHash","type":"bytes32"},{"internalType":"uint256","name":"place","type":"uint256"}],"name":"getNthPlace","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"programHash","type":"bytes32"}],"name":"getSubmittersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"testedAddress","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"testedAddress","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"programHash","type":"bytes32"}],"name":"isRegisteredPuzzle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"registerAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"removedAdmin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardAddress","type":"address"},{"internalType":"string","name":"submitterName","type":"string"},{"internalType":"bytes32","name":"programHash","type":"bytes32"}],"name":"submitPuzzleSolution","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516112f63803806112f68339818101604052602081101561003357600080fd5b5051600080546001600160a01b0319908116339081178355825260026020526040909120805460ff19166001179055600680546001600160a01b039093169290911691909117905561126c8061008a6000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806379ba509711610081578063aa4f5f6d1161005b578063aa4f5f6d146103c0578063c38c5813146103dd578063f186082b14610410576100d4565b806379ba50971461026557806388f9a74e1461026d5780639664e92a146102b8576100d4565b80632f54bf6e116100b25780632f54bf6e146101885780634ac5a87a146101bb5780636306b39914610248576100d4565b80631627540c146100d95780631785f53c1461010e57806324d7806c14610141575b600080fd5b61010c600480360360208110156100ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661042d565b005b61010c6004803603602081101561012457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661055d565b6101746004803603602081101561015757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610692565b604080519115158252519081900360200190f35b6101746004803603602081101561019e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106bd565b61010c600480360360608110156101d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561020957600080fd5b82018360208201111561021b57600080fd5b8035906020019184600183028401116401000000008311171561023d57600080fd5b9193509150356106de565b61010c6004803603602081101561025e57600080fd5b50356109b7565b61010c610a64565b6102a66004803603604081101561028357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610b6c565b60408051918252519081900360200190f35b6102db600480360360408110156102ce57600080fd5b5080359060200135610bd0565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561038257818101518382015260200161036a565b50505050905090810190601f1680156103af5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6102a6600480360360208110156103d657600080fd5b5035610dc6565b61010c600480360360208110156103f357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dd8565b6101746004803603602081101561042657600080fd5b5035610eab565b610436336106bd565b6104a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4f4e4c595f4f574e455200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6104aa816106bd565b1561051657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f414c52454144595f4f574e455200000000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610566336106bd565b6105d157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4f4e4c595f4f574e455200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6105da816106bd565b1561064657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f574e45525f43414e4e4f545f42455f52454d4f5645445f41535f41444d494e604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b6106e781610eab565b61073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061120f6028913960400191505060405180910390fd5b60006107488233610b6c565b600654604080517f6a93856700000000000000000000000000000000000000000000000000000000815260048101849052905192935073ffffffffffffffffffffffffffffffffffffffff90911691636a93856791602480820192602092909190829003018186803b1580156107bd57600080fd5b505afa1580156107d1573d6000803e3d6000fd5b505050506040513d60208110156107e757600080fd5b505161083e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806111e66029913960400191505060405180910390fd5b6000828152600560209081526040808320338452909152902054156108ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806111be6028913960400191505060405180910390fd5b6108ba85858585610ec0565b7f1a3ffe4d1c14b48fe7b8737a18227a5de65f19ff07d7a2edca49c0de8faa196082334287878a604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252858582818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201829003995090975050505050505050a15050505050565b6109c033610692565b610a2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4f4e4c595f41444d494e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610aea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f545f415f43414e4449444154450000000000000000000000000000000000604482015290519081900360640190fd5b600180546000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000092831681178255815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016831790558154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff92909216602080840191909152815180840382018152838301835280519082012060608401949094526080808401949094528151808403909401845260a09092019052815191012090565b60008060606000610be086610eab565b610c35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061120f6028913960400191505060405180910390fd5b610c3e86610dc6565b8510610cab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f494e4445585f4552524f52000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000868152600460205260408120805487908110610cc557fe5b6000918252602091829020600160059092020181810154600280830154600484015460038501805460408051601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a841615610100029a909a019092169590950497880189900489028101890190945286845294975073ffffffffffffffffffffffffffffffffffffffff9384169691909316948491830182828015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050915094509450945094505092959194509250565b60009081526004602052604090205490565b610de1336106bd565b610e4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4f4e4c595f4f574e455200000000000000000000000000000000000000000000604482015290519081900360640190fd5b610e5581610692565b610ea85773ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b50565b60009081526003602052604090205460ff1690565b6000610ecb82611036565b60008381526005602090815260408083203380855292529091204290558382556001820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909217905560028201805490911673ffffffffffffffffffffffffffffffffffffffff88161790559050610f4d60038201858561108f565b504260048083019190915560008381526020918252604081208054600181810183559183529290912083546005909302019182558083015482820180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556002808601548186018054909316931692909217905560038085018054869594611025949386019390821615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019091160461112b565b506004918201549101555050505050565b604080517f5375626d697373696f6e44657461696c7353746f72616765000000000000000060208083019190915260388201939093523360601b60588201528151604c818303018152606c909101909152805191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106110ee578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855561111b565b8280016001018555821561111b579182015b8281111561111b578235825591602001919060010190611100565b506111279291506111a0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611164578054855561111b565b8280016001018555821561111b57600052602060002091601f016020900482015b8281111561111b578254825591600101919060010190611185565b6111ba91905b8082111561112757600081556001016111a6565b9056fe5245515545535445445f524547495354524154494f4e5f414c52454144595f504552464f524d4544434149524f5f464143545f4e4f545f524547495354455245445f494e5f4750535f434f4e545241435450524f4752414d5f484153485f444f45535f4e4f545f42454c4f4e475f544f5f415f50555a5a4c45a2646970667358221220a160341cfb14037f854f0e8073417f9fd93eaa1318aa83d3db0f8ce7cede525a64736f6c634300060b0033000000000000000000000000f0ec41069a89595adf5f27a4a90ff2df30d83d2e

Deployed ByteCode Sourcemap

712:2857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:159:4;;;;;;;;;;;;;;;;-1:-1:-1;1651:159:4;;;;:::i;:::-;;1462:183;;;;;;;;;;;;;;;;-1:-1:-1;1462:183:4;;;;:::i;1190:112::-;;;;;;;;;;;;;;;;-1:-1:-1;1190:112:4;;;;:::i;:::-;;;;;;;;;;;;;;;;;;974:113;;;;;;;;;;;;;;;;-1:-1:-1;974:113:4;;;;:::i;2503:797:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2503:797:0;-1:-1:-1;2503:797:0;;:::i;1018:120:2:-;;;;;;;;;;;;;;;;-1:-1:-1;1018:120:2;;:::i;1816:264:4:-;;;:::i;3306:261:0:-;;;;;;;;;;;;;;;;-1:-1:-1;3306:261:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1418:567;;;;;;;;;;;;;;;;-1:-1:-1;1418:567:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1115:157;;;;;;;;;;;;;;;;-1:-1:-1;1115:157:0;;:::i;1308:148:4:-;;;;;;;;;;;;;;;;-1:-1:-1;1308:148:4;;;;:::i;881:131:2:-;;;;;;;;;;;;;;;;-1:-1:-1;881:131:2;;:::i;1651:159:4:-;916:19;924:10;916:7;:19::i;:::-;908:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1733:17:::1;1741:8;1733:7;:17::i;:::-;1732:18;1724:44;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1778:14;:25:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1651:159::o;1462:183::-;916:19;924:10;916:7;:19::i;:::-;908:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1543:21:::1;1551:12;1543:7;:21::i;:::-;1542:22;1534:67;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1618:20;;;::::0;;;:6:::1;:20;::::0;;;;1611:27;;;::::1;::::0;;1462:183::o;1190:112::-;1274:21;;1251:4;1274:21;;;:6;:21;;;;;;;;;1190:112::o;974:113::-;1035:4;1058:5;:22;;;;:5;;:22;;974:113::o;2503:797:0:-;2672:31;2691:11;2672:18;:31::i;:::-;2664:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2758:22;2783:43;2802:11;2815:10;2783:18;:43::i;:::-;2844:13;;:37;;;;;;;;;;;;;;2758:68;;-1:-1:-1;2844:13:0;;;;;:21;;:37;;;;;;;;;;;;;;;:13;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2844:37:0;2836:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2958:23;;;;:10;:23;;;;;;;;2982:10;2958:35;;;;;;;;:40;2937:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3065:59;3082:13;3097;;3112:11;3065:16;:59::i;:::-;3140:153;3174:11;3199:10;3223:15;3252:13;;3279;3140:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3140:153:0;;-1:-1:-1;;;;;;;;3140:153:0;2503:797;;;;;:::o;1018:120:2:-;1132:19:4;1140:10;1132:7;:19::i;:::-;1124:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1092:32:2::1;::::0;;;:19:::1;:32;::::0;;;;:39;;;::::1;1127:4;1092:39;::::0;;1018:120::o;1816:264:4:-;1929:14;;;;1915:10;:28;1907:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1981:14;;;;1973:22;;1981:14;;;;1973:22;;;;;;;;2005;;:6;:22;;;;;:29;;;;;;;;2044;;;;;1816:264::o;3306:261:0:-;3469:27;;;3480:15;;;;;3469:27;;;;;;;;;;;;;;;;;;;;;;3459:38;;;;;;3524:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3514:46;;;;;;3306:261::o;1418:567::-;1521:7;1530;1539:13;1554:7;1585:31;1604:11;1585:18;:31::i;:::-;1577:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1687:31;1706:11;1687:18;:31::i;:::-;1679:5;:39;1671:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1745:36;1784:28;;;:15;:28;;;;;:35;;1813:5;;1784:35;;;;;;;;;;;;;;;1850:17;1784:35;;;;;1850:17;;;;1881:24;;;;;1957:20;;;;1919:24;;;1829:149;;;;;;;;;;;1850:17;1829:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1784:35;;-1:-1:-1;1850:17:0;;;;;1881:24;;;;;1919;;1829:149;;1919:24;1829:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1418:567;;;;;;;:::o;1115:157::-;1200:7;1230:28;;;:15;:28;;;;;:35;;1115:157::o;1308:148:4:-;916:19;924:10;916:7;:19::i;:::-;908:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1383:17:::1;1391:8;1383:7;:17::i;:::-;1378:72;;1416:16;::::0;::::1;;::::0;;;:6:::1;:16;::::0;;;;:23;;;::::1;1435:4;1416:23;::::0;;1378:72:::1;1308:148:::0;:::o;881:131:2:-;950:4;973:32;;;:19;:32;;;;;;;;;881:131::o;1665:587:3:-;1815:36;1854:38;1880:11;1854:25;:38::i;:::-;1902:23;;;;:10;:23;;;;;;;;1926:10;1902:35;;;;;;;;1940:15;1902:53;;1965:36;;;2011:17;;;:30;;;;;;;;;;;2051:24;;;:41;;;;;1902:35;2051:41;;;;;1965:36;-1:-1:-1;2102:40:3;:24;;;2129:13;;2102:40;:::i;:::-;-1:-1:-1;2175:15:3;2152:20;;;;:38;;;;2200:28;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2152:10;;2200:45;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2200:45:3;;;;;;;;-1:-1:-1;;;;;1665:587:3:o;1339:320::-;1535:69;;;;;;;;;;;;;;;;;;;1593:10;1535:69;;;;;;;;;;;;;;;;;;;;;;1512:93;;;;;;1624:29::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://a160341cfb14037f854f0e8073417f9fd93eaa1318aa83d3db0f8ce7cede525a
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

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.