Contract 0x247baae25D0c32fdA5CfB902c0d87D47587CF9Da 1

 

Contract Overview

Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Index
From
To
Value
0x2c613913f498fa1fbe6badb4dd168993ba5876333e52abc854671f5400f22ec2Pay Fee222831002022-09-07 14:46:1921 days 7 hrs ago0x71c4fa6a4fb81f67b670b06ddc44de24ed7f5326 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002543781440.001
0xa8d29d929f80319eebedf073f58d4effcbcdcd6f58eabf242e343c3233be2451Pay Fee152335242022-07-21 10:02:5269 days 12 hrs ago0x1cb727c6750883ad80a9cc12d39cdd3a9a83cf6c IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0000482599080.001
0xfd274ec30383f64cf72af31e23f4a7b93a605fb8e29c4bc5c9b281064ceac691Pay Fee151716922022-07-20 21:24:3370 days 45 mins ago0x7314f48b229909b088f6c73353a5ab1dbb00385f IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002101842210.001
0xd4223547fda7f835b582d792dc67fa5ff945742dda781a79012a90ae1dc32b73Pay Fee141297212022-07-09 1:36:2581 days 20 hrs ago0xe4b217f63fa4b9b10c87d2eae0d4a1065c6549a7 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0000564918250.001
0x1a35b96898c12ba19f4818c91b55bcc1b55fd18d5409ffb9163cf66ca56abddcPublish Verifica...111814652022-06-10 19:05:19110 days 3 hrs ago0xec98c7935ae1db71884969919de58cd776cc017c IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0003069674030.001
0xe8d77d3d9de5d93bcd2d5ced43c09e123e7acc7d79634fdc54fd3e51723be78aPay Fee111810292022-06-10 18:58:04110 days 3 hrs ago0xec98c7935ae1db71884969919de58cd776cc017c IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0001692086730.001
0x937a52680125b560102ce0fc13486121923563fe35252e0157bbf638d554f630Publish Personal...110839562022-06-09 20:17:04111 days 1 hr ago0x2dc03fe79f30c9633b9185ed723de1b02b5d72d2 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.000768743060.001
0x885f3eeb6d74e4c2ac8693d63bb8af56e74f0422847e6ac2e7d13dcc5a7a4cb1Publish Verifica...110838862022-06-09 20:16:19111 days 1 hr ago0x2dc03fe79f30c9633b9185ed723de1b02b5d72d2 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0006085194150.001
0x225efec15055e749b8316517158d4ccabace0009e4db81ae5a93f6b7950fac41Pay Fee110835972022-06-09 20:11:17111 days 1 hr ago0x2dc03fe79f30c9633b9185ed723de1b02b5d72d2 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.000432360520.001
0x4c80c5a3237b4c3cd17da214706ed29311dd19d275bd8bef3e82532d3f2305fePay Fee106662632022-06-05 17:37:52115 days 4 hrs ago0x3b9046998fd3976ddbc90577b36f995b056c5ad7 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0005138414320.001
0x0e592a1cf097f51b36e47c14aa54c453d173e9ef5998dbf5a431cf23eb2eae7ePay Fee105493572022-06-04 13:06:05116 days 9 hrs ago0x6c20fe5e057cbb478f3d7565df59d76c89656cd1 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0009943081520.001
0xe4d3d07b475ed79a31567013c5bbb102c9ff1a57005738b3f669b26031191ed0Pay Fee104264582022-06-03 11:52:10117 days 10 hrs ago0x043bd8f57401e46a5da19545ffb50370202cc179 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0001153681680.001
0xeabcae39dd9e809165b6dc85ec5388fd6f75235f6d0fda0d3708a6cf7e99f93bPay Fee103205132022-06-02 18:21:10118 days 3 hrs ago0x6f9b435a37fd0613a23c0b7ce1c1269e64c78c89 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002637189450.001
0x8ef2d1ef995afb7f6405bf2d05ab60e64d218c8a4a472e88174c46697607ecf5Pay Fee101576722022-06-02 2:44:23118 days 19 hrs ago0x7d0932a434241d67349f8732bbb296c46ec60560 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002694884950.001
0xd30ce470adc3f6a0fd0955819c95f5423f4189af490ec545e4f3060da56579aaPublish Verifica...92513152022-05-29 10:07:05122 days 12 hrs ago0x2e2ea30ba045df4bc38e80cf11e119e12e06c1c2 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0001213668470.001
0x36adb3ca98c5670c2447ac5e99660937e481ef1cd1ae741a5eb4610f9a4db12aPay Fee91242972022-05-27 12:28:35124 days 9 hrs ago0x82af599ae8a62842da38be6e5d4b14cd5882bddb IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0001386864790.001
0x6ca2deda5d450d52bdb9645fc6c89cb577d333fa98a0f436c6349a8f5e046d9aPay Fee90619882022-05-26 17:35:46125 days 4 hrs ago0xf2e8f75eaa752f7c64f1f8a9a5a77517243db990 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002686699620.001
0x6a7d3148f1735102b1e1f0213c92c5753bf9f70a2c5998f458ea05bd83fbd23dPay Fee89825612022-05-25 15:05:49126 days 7 hrs ago0x488a0ad3e1fa4f55973aa79f3d3154cdfc260f09 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002024438040.001
0xc4215afeed030149cfee127bc8b802abeec6e8ebd0d504f6b6445761277acae7Pay Fee89793872022-05-25 13:54:41126 days 8 hrs ago0x06f398ce76acc1fce97b7cab0eb2a96ba9230c9b IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0000573543340.001
0x0f504bc1ff6689dd72b216f97ab3545f7d6fc8d15d8b193e3181541fcafde7d0Publish Verifica...89725592022-05-25 11:46:58126 days 10 hrs ago0x94c90e0a573db26467e0e812090a9220c20edcd3 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.000175711380.001
0xbd089539477325125ebf06ba093ebf6522d292edb9a5b760a023d425e3d80c40Pay Fee89723992022-05-25 11:42:56126 days 10 hrs ago0x94c90e0a573db26467e0e812090a9220c20edcd3 IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0001081118460.001
0x9fa0305e75d4163068215c4a2b75ea3d418c90bedbe85698ebe0b0e8d89fd35bPay Fee88938922022-05-24 7:46:07127 days 14 hrs ago0x1e8cbbbfb827785ecc23dd0426a8907c7cdcca3a IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0000789965080.001
0x3a4f3144c086dd28f85640245b27c1537373cc759640213d45df1489ef9247d4Publish Verifica...88285292022-05-23 9:50:39128 days 12 hrs ago0xbc4ec4aef8254f7434b654df5d9df3eab15b252f IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.000060859950.001
0xcc9894b1c234996b44fa04620155776e7d0ab89fdf0b49a574afbad754aa1e6cPay Fee88283412022-05-23 9:47:02128 days 12 hrs ago0xbc4ec4aef8254f7434b654df5d9df3eab15b252f IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0000735825790.001
0x7a69404f35747ce2cbd5a1966393fbec23f60633a29ee78d04bdcec8e08c8b4ePublish Verifica...82488822022-05-14 13:00:51137 days 9 hrs ago0xa48c718ae6de6599c5a46fd6cabff54def39473a IN  0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether0.0002156428160.001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2c613913f498fa1fbe6badb4dd168993ba5876333e52abc854671f5400f22ec2222831002022-09-07 14:46:1921 days 7 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xa8d29d929f80319eebedf073f58d4effcbcdcd6f58eabf242e343c3233be2451152335242022-07-21 10:02:5269 days 12 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xfd274ec30383f64cf72af31e23f4a7b93a605fb8e29c4bc5c9b281064ceac691151716922022-07-20 21:24:3370 days 45 mins ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xd4223547fda7f835b582d792dc67fa5ff945742dda781a79012a90ae1dc32b73141297212022-07-09 1:36:2581 days 20 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xcccd411b2c483faa9658233c22e0ffabc2fa8d01065586ba9be2cd2903bcaabf127481052022-06-22 22:36:3197 days 23 hrs ago 0xba9f70f0a3432736d30b1f1c6acc8c031655f2fc 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0x3b8b47e7cbd569a45b85614dc57d0781074270e4747e65f6d01a161733f9c994127456032022-06-22 21:55:3198 days 14 mins ago 0xa67815a9f433cfb040191f9ca30f53e42a8a0e3a 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0xfeb4f7764568b17cf9d7bbb057de8f57c094ac785cab01f35e5efaf2f66df5d6126255132022-06-22 0:00:3798 days 22 hrs ago 0xa67815a9f433cfb040191f9ca30f53e42a8a0e3a 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0xc4037f9ff87de3b28c51ed306f8550a71499a3de7807afc4d969c6ee45bf309d126250642022-06-21 23:53:1698 days 22 hrs ago 0xa67815a9f433cfb040191f9ca30f53e42a8a0e3a 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0xc4037f9ff87de3b28c51ed306f8550a71499a3de7807afc4d969c6ee45bf309d126250642022-06-21 23:53:1698 days 22 hrs ago 0xa67815a9f433cfb040191f9ca30f53e42a8a0e3a 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0x60f889359299ee0bbe02b04e667d877f123e9bd990225747bee6975151b7b6f9126179602022-06-21 22:01:2099 days 8 mins ago 0xba9f70f0a3432736d30b1f1c6acc8c031655f2fc 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0x9bda3974e88a5f84e504733d37892b963d164e34823c7ebec0f6208b86ee5bbb126178842022-06-21 22:00:1599 days 9 mins ago 0xba9f70f0a3432736d30b1f1c6acc8c031655f2fc 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0x97867bacc095b0c807b5401145a3f1a620e1e2d9c51a1b77ea88f3859121b13b126094072022-06-21 19:52:1599 days 2 hrs ago 0xba9f70f0a3432736d30b1f1c6acc8c031655f2fc 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0x170149062ff353422fdd6ef02336c7bf5bc2d28d5bd088d1152e15e0d1eaa86e126084772022-06-21 19:45:5199 days 2 hrs ago 0xba9f70f0a3432736d30b1f1c6acc8c031655f2fc 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0x170149062ff353422fdd6ef02336c7bf5bc2d28d5bd088d1152e15e0d1eaa86e126084772022-06-21 19:45:5199 days 2 hrs ago 0xba9f70f0a3432736d30b1f1c6acc8c031655f2fc 0x247baae25d0c32fda5cfb902c0d87d47587cf9da0 Ether
0xe8d77d3d9de5d93bcd2d5ced43c09e123e7acc7d79634fdc54fd3e51723be78a111810292022-06-10 18:58:04110 days 3 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x225efec15055e749b8316517158d4ccabace0009e4db81ae5a93f6b7950fac41110835972022-06-09 20:11:17111 days 1 hr ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x4c80c5a3237b4c3cd17da214706ed29311dd19d275bd8bef3e82532d3f2305fe106662632022-06-05 17:37:52115 days 4 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x0e592a1cf097f51b36e47c14aa54c453d173e9ef5998dbf5a431cf23eb2eae7e105493572022-06-04 13:06:05116 days 9 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xe4d3d07b475ed79a31567013c5bbb102c9ff1a57005738b3f669b26031191ed0104264582022-06-03 11:52:10117 days 10 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xeabcae39dd9e809165b6dc85ec5388fd6f75235f6d0fda0d3708a6cf7e99f93b103205132022-06-02 18:21:10118 days 3 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x8ef2d1ef995afb7f6405bf2d05ab60e64d218c8a4a472e88174c46697607ecf5101576722022-06-02 2:44:23118 days 19 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x36adb3ca98c5670c2447ac5e99660937e481ef1cd1ae741a5eb4610f9a4db12a91242972022-05-27 12:28:35124 days 9 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x6ca2deda5d450d52bdb9645fc6c89cb577d333fa98a0f436c6349a8f5e046d9a90619882022-05-26 17:35:46125 days 4 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x6a7d3148f1735102b1e1f0213c92c5753bf9f70a2c5998f458ea05bd83fbd23d89825612022-05-25 15:05:49126 days 7 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xc4215afeed030149cfee127bc8b802abeec6e8ebd0d504f6b6445761277acae789793872022-05-25 13:54:41126 days 8 hrs ago 0x247baae25d0c32fda5cfb902c0d87d47587cf9da 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Verification

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Optimistic.Etherscan.io on 2022-05-14
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

contract Verification {
  address private _owner;
  address private signer;
  IERC20 private feeToken;
  uint private feeAmount;

  struct VerifiedPassport {
    uint expiration;
    bytes32 countryAndDocNumberHash;
  }

  struct PersonalDetails {
    bool over18;
    bool over21;
    uint countryCode;
  }

  mapping(address => VerifiedPassport) private accounts;
  mapping(address => PersonalDetails) private personalData;
  mapping(bytes32 => address) private idHashToAccount;
  mapping(address => uint) private hasPaidFee;

  event FeePaid(address indexed account);
  event VerificationUpdated(address indexed account, uint256 expiration);
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  event FeeTokenChanged(address indexed previousFeeToken, address indexed newFeeToken);
  event FeeAmountChanged(uint previousFeeAmount, uint newFeeAmount);
  event IsOver18(address indexed account);
  event IsOver21(address indexed account);
  event CountryOfOrigin(address indexed account, uint countryCode);

  constructor(address _signer, address _feeToken, uint _feeAmount) {
    require(_signer != address(0), "Signer must not be zero address");
    require(_feeToken != address(0), "Fee token must not be zero address");
    _transferOwnership(msg.sender);
    signer = _signer;
    feeToken = IERC20(_feeToken);
    feeAmount = _feeAmount;
  }

  function getFeeToken() external view returns (address) {
    return address(feeToken);
  }

  function getFeeAmount() external view returns (uint) {
    return feeAmount;
  }

  function owner() public view returns (address) {
    return _owner;
  }

  function payFeeFor(address account) public {
    emit FeePaid(account);
    hasPaidFee[account] = block.number;
    bool received = feeToken.transferFrom(msg.sender, address(this), feeAmount);
    require(received, "Fee transfer failed");
  }

  function payFee() external {
    payFeeFor(msg.sender);
  }

  function unsetPaidFee(address account) external onlyOwner {
    delete hasPaidFee[account];
  }

  function feePaidFor(address account) external view returns (uint) {
    return hasPaidFee[account];
  }

  function publishVerification(
    uint256 expiration,
    bytes32 countryAndDocNumberHash,
    bytes calldata signature
  ) external {
    // Signing server will only provide signature if fee has been paid,
    //  not necessary to require it here
    delete hasPaidFee[msg.sender];
    // Recreate hash as built by the client
    bytes32 hash = keccak256(abi.encode(msg.sender, expiration, countryAndDocNumberHash));
    (bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);
    bytes32 ethSignedHash = keccak256(
      abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

    address sigAddr = ecrecover(ethSignedHash, v, r, s);
    require(sigAddr == signer, "Invalid Signature");

    // Revoke verification for any other account that uses
    //  the same document number/country
    //  e.g. for case of stolen keys
    if(idHashToAccount[countryAndDocNumberHash] != address(0x0)) {
      _revokeVerification(idHashToAccount[countryAndDocNumberHash]);
    }
    // Update account state
    idHashToAccount[countryAndDocNumberHash] = msg.sender;
    accounts[msg.sender] = VerifiedPassport(expiration, countryAndDocNumberHash);
    emit VerificationUpdated(msg.sender, expiration);
  }

  function revokeVerification() external {
    require(accounts[msg.sender].expiration > 0, "Account not verified");
    _revokeVerification(msg.sender);
  }

  function revokeVerificationOf(address account) external onlyOwner {
    require(accounts[account].expiration > 0, "Account not verified");
    _revokeVerification(account);
  }

  function _revokeVerification(address account) internal {
    // Do not need to delete from idHashToAccount since that data is
    //  not used for determining account status
    delete accounts[account];
    // Revoking the verification also redacts the personal data
    delete personalData[account];
    emit VerificationUpdated(account, 0);
  }

  function addressActive(address toCheck) public view returns (bool) {
    return accounts[toCheck].expiration > block.timestamp;
  }

  function addressExpiration(address toCheck) external view returns (uint) {
    return accounts[toCheck].expiration;
  }

  function addressIdHash(address toCheck) external view returns(bytes32) {
    return accounts[toCheck].countryAndDocNumberHash;
  }

  function publishPersonalData(
    bool over18,
    bytes calldata over18Signature,
    bool over21,
    bytes calldata over21Signature,
    uint countryCode,
    bytes calldata countrySignature
  ) external {
    require(addressActive(msg.sender), "Account must be active");
    if(over18Signature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, over18 ? "over18" : "notOver18"));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(over18Signature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].over18 = over18;
      if(over18) {
        emit IsOver18(msg.sender);
      }
    }
    if(over21Signature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, over21 ? "over21" : "notOver21"));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(over21Signature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].over21 = over21;
      if(over21) {
        emit IsOver21(msg.sender);
      }
    }
    if(countrySignature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, countryCode));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(countrySignature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].countryCode = countryCode;
      emit CountryOfOrigin(msg.sender, countryCode);
    }
  }

  function redactPersonalData() external {
    delete personalData[msg.sender];
  }

  function isOver18(address toCheck) external view returns (bool) {
    return personalData[toCheck].over18;
  }

  function isOver21(address toCheck) external view returns (bool) {
    return personalData[toCheck].over21;
  }

  function getCountryCode(address toCheck) external view returns (uint) {
    return personalData[toCheck].countryCode;
  }

  function setSigner(address newSigner) external onlyOwner {
    require(newSigner != address(0), "Signer cannot be zero address");
    signer = newSigner;
  }

  function setFeeToken(address newFeeToken) external onlyOwner {
    require(newFeeToken != address(0), "Fee Token cannot be zero address");
    address oldFeeToken = address(feeToken);
    feeToken = IERC20(newFeeToken);
    emit FeeTokenChanged(oldFeeToken, newFeeToken);
  }

  function setFeeAmount(uint newFeeAmount) external onlyOwner {
    uint oldFeeAmount = feeAmount;
    feeAmount = newFeeAmount;
    emit FeeAmountChanged(oldFeeAmount, newFeeAmount);
  }

  function _transferOwnership(address newOwner) internal {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }

  function transferOwnership(address newOwner) external onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function transferFeeToken(address recipient, uint amount) external onlyOwner {
    bool sent = feeToken.transfer(recipient, amount);
    require(sent, "Fee transfer failed");
  }

  modifier onlyOwner() {
    require(owner() == msg.sender, "Ownable: caller is not the owner");
    _;
  }

  // From https://solidity-by-example.org/signature/
  function splitSignature(bytes memory sig) internal pure
    returns (bytes32 r, bytes32 s, uint8 v)
  {
    require(sig.length == 65, "invalid signature length");
    assembly {
        // first 32 bytes, after the length prefix
        r := mload(add(sig, 32))
        // second 32 bytes
        s := mload(add(sig, 64))
        // final byte (first byte of the next 32 bytes)
        v := byte(0, mload(add(sig, 96)))
    }
  }

}

interface IERC20 {
  function totalSupply() external view returns (uint);
  function balanceOf(address account) external view returns (uint);
  function transfer(address recipient, uint amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint);
  function approve(address spender, uint amount) external returns (bool);
  function transferFrom(
    address sender,
    address recipient,
    uint amount
  ) external returns (bool);

  event Transfer(address indexed from, address indexed to, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_feeToken","type":"address"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"countryCode","type":"uint256"}],"name":"CountryOfOrigin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousFeeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFeeAmount","type":"uint256"}],"name":"FeeAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"FeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousFeeToken","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeToken","type":"address"}],"name":"FeeTokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IsOver18","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IsOver21","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"VerificationUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressExpiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressIdHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feePaidFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"getCountryCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isOver18","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isOver21","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"payFeeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"over18","type":"bool"},{"internalType":"bytes","name":"over18Signature","type":"bytes"},{"internalType":"bool","name":"over21","type":"bool"},{"internalType":"bytes","name":"over21Signature","type":"bytes"},{"internalType":"uint256","name":"countryCode","type":"uint256"},{"internalType":"bytes","name":"countrySignature","type":"bytes"}],"name":"publishPersonalData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"countryAndDocNumberHash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"publishVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redactPersonalData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeVerificationOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeeAmount","type":"uint256"}],"name":"setFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeToken","type":"address"}],"name":"setFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unsetPaidFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200184b3803806200184b8339810160408190526200003491620001a4565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601f60248201527f5369676e6572206d757374206e6f74206265207a65726f20616464726573730060448201526064015b60405180910390fd5b6001600160a01b038216620000f35760405162461bcd60e51b815260206004820152602260248201527f46656520746f6b656e206d757374206e6f74206265207a65726f206164647265604482015261737360f01b606482015260840162000087565b620000fe3362000137565b600180546001600160a01b039485166001600160a01b0319918216179091556002805493909416921691909117909155600355620001e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019f57600080fd5b919050565b600080600060608486031215620001ba57600080fd5b620001c58462000187565b9250620001d56020850162000187565b9150604084015190509250925092565b61165680620001f56000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80636b392680116100c3578063c33dc9161161007c578063c33dc91614610341578063ca709a2514610349578063d79729301461035a578063f2fde38b1461036d578063fdb3200f14610380578063fe0c346c146103a957600080fd5b80636b392680146102a15780636c19e783146102b457806381ba6ce2146102c75780638691bdf5146102f35780638da5cb5b14610314578063bf5c98221461033957600080fd5b806318b8064f1161011557806318b8064f1461021c578063296102521461022f5780632e7d24d114610237578063447597cc1461024a5780634a529aad1461025d5780635b19acd91461028e57600080fd5b80621b428a146101515780630567763d146101665780630ac07226146101a557806315cce224146101e05780631616129d146101f3575b600080fd5b61016461015f36600461135e565b6103d5565b005b6101926101743660046113cd565b6001600160a01b031660009081526004602052604090206001015490565b6040519081526020015b60405180910390f35b6101d06101b33660046113cd565b6001600160a01b0316600090815260046020526040902054421090565b604051901515815260200161019c565b6101646101ee3660046113cd565b6105f1565b6101926102013660046113cd565b6001600160a01b031660009081526007602052604090205490565b61016461022a3660046113cd565b6106d2565b6101646107e5565b6101646102453660046113cd565b6107f0565b6101646102583660046113ef565b610891565b6101d061026b3660046113cd565b6001600160a01b0316600090815260056020526040902054610100900460ff1690565b61016461029c3660046113cd565b61098c565b6101646102af366004611419565b6109df565b6101646102c23660046113cd565b610a5d565b6101926102d53660046113cd565b6001600160a01b031660009081526005602052604090206001015490565b610164336000908152600560205260408120805461ffff1916815560010155565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161019c565b600354610192565b610164610b0e565b6002546001600160a01b0316610321565b610164610368366004611440565b610b6a565b61016461037b3660046113cd565b61113e565b61019261038e3660046113cd565b6001600160a01b031660009081526004602052604090205490565b6101d06103b73660046113cd565b6001600160a01b031660009081526005602052604090205460ff1690565b3360008181526007602090815260408083208390558051918201939093529182018690526060820185905290608001604051602081830303815290604052805190602001209050600080600061046086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610479919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156104e4573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b0380841691161490506105295760405162461bcd60e51b81526004016105209061153e565b60405180910390fd5b6000898152600660205260409020546001600160a01b03161561056757600089815260066020526040902054610567906001600160a01b0316611259565b600089815260066020908152604080832080546001600160a01b03191633908117909155815180830183528e81528084018e8152828652600485529483902090518155935160019490940193909355518c81527ffe7944a9ab5ccc41963809a0d6bd51d8ba2d8ee3109c8f9876e41d01414b2733910160405180910390a250505050505050505050565b336106046000546001600160a01b031690565b6001600160a01b03161461062a5760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166106805760405162461bcd60e51b815260206004820181905260248201527f46656520546f6b656e2063616e6e6f74206265207a65726f20616464726573736044820152606401610520565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1080b8de45190ac9d8745f3724225c9b50b849890e73595c4403edd52b94937090600090a35050565b6040516001600160a01b038216907fd6eb8f1fd49548df938b7af028bb8422b4f4c5e08343a426a0dbd647d08af5d790600090a26001600160a01b0381811660009081526007602052604080822043905560025460035491516323b872dd60e01b81523360048201523060248201526044810192909252919291909116906323b872dd906064016020604051808303816000875af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c919061159e565b9050806107e15760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610520565b5050565b6107ee336106d2565b565b336108036000546001600160a01b031690565b6001600160a01b0316146108295760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166000908152600460205260409020546108855760405162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd081d995c9a599a595960621b6044820152606401610520565b61088e81611259565b50565b336108a46000546001600160a01b031690565b6001600160a01b0316146108ca5760405162461bcd60e51b815260040161052090611569565b60025460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610942919061159e565b9050806109875760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610520565b505050565b3361099f6000546001600160a01b031690565b6001600160a01b0316146109c55760405162461bcd60e51b815260040161052090611569565b6001600160a01b0316600090815260076020526040812055565b336109f26000546001600160a01b031690565b6001600160a01b031614610a185760405162461bcd60e51b815260040161052090611569565b600380549082905560408051828152602081018490527f628999ddb8cc6bb99cec0350ca6e43277be4a15b13e849d3e532cada20effa82910160405180910390a15050565b33610a706000546001600160a01b031690565b6001600160a01b031614610a965760405162461bcd60e51b815260040161052090611569565b6001600160a01b038116610aec5760405162461bcd60e51b815260206004820152601d60248201527f5369676e65722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610520565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260046020526040902054610b615760405162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd081d995c9a599a595960621b6044820152606401610520565b6107ee33611259565b336000908152600460205260409020544210610bc15760405162461bcd60e51b81526020600482015260166024820152754163636f756e74206d7573742062652061637469766560501b6044820152606401610520565b6041879003610dbf576000338a610bf957604051806040016040528060098152602001680dcdee89eeccae462760bb1b815250610c19565b604051806040016040528060068152602001650deeccae462760d31b8152505b604051602001610c2a9291906115bb565b6040516020818303038152906040528051906020012090506000806000610c868c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610c9f919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d0a573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b038084169116149050610d465760405162461bcd60e51b81526004016105209061153e565b8e60056000336001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a81548160ff0219169083151502179055508e15610db85760405133907f2aa4cbf8be8bf94e25edcb601f989fa2efb2fd98aa89b5df364b00a6b7de31d790600090a25b5050505050505b6041849003610fa25760003387610df757604051806040016040528060098152602001686e6f744f766572323160b81b815250610e17565b604051806040016040528060068152602001656f766572323160d01b8152505b604051602001610e289291906115bb565b6040516020818303038152906040528051906020012090506000806000610e8489898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610e9d919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610f08573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b038084169116149050610f445760405162461bcd60e51b81526004016105209061153e565b33600090815260056020526040902080548d1580156101000261ff001990921691909117909155610f9b5760405133907f3e6e8b4440c2877b4ddd16c21023f8701e5ffdec53a22c19fee7778ac47fb82390600090a25b5050505050505b60418190036111335760408051336020820152908101849052600090606001604051602081830303815290604052805190602001209050600080600061101d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001611036919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156110a1573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b0380841691161490506110dd5760405162461bcd60e51b81526004016105209061153e565b33600081815260056020526040908190206001018b9055517f237210580d7aea49bb2ba2a10d934288f4d26c3bc785d9ff382e764c4108555290611124908c815260200190565b60405180910390a25050505050505b505050505050505050565b336111516000546001600160a01b031690565b6001600160a01b0316146111775760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610520565b61088e816112c5565b6000806000835160411461123b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610520565b50505060208101516040820151606090920151909260009190911a90565b6001600160a01b0381166000818152600460209081526040808320838155600190810184905560058352818420805461ffff1916815501839055519182527ffe7944a9ab5ccc41963809a0d6bd51d8ba2d8ee3109c8f9876e41d01414b2733910160405180910390a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261132757600080fd5b50813567ffffffffffffffff81111561133f57600080fd5b60208301915083602082850101111561135757600080fd5b9250929050565b6000806000806060858703121561137457600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561139957600080fd5b6113a587828801611315565b95989497509550505050565b80356001600160a01b03811681146113c857600080fd5b919050565b6000602082840312156113df57600080fd5b6113e8826113b1565b9392505050565b6000806040838503121561140257600080fd5b61140b836113b1565b946020939093013593505050565b60006020828403121561142b57600080fd5b5035919050565b801515811461088e57600080fd5b600080600080600080600080600060c08a8c03121561145e57600080fd5b893561146981611432565b985060208a013567ffffffffffffffff8082111561148657600080fd5b6114928d838e01611315565b909a50985060408c013591506114a782611432565b90965060608b013590808211156114bd57600080fd5b6114c98d838e01611315565b909750955060808c0135945060a08c01359150808211156114e957600080fd5b506114f68c828d01611315565b915080935050809150509295985092959850929598565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b602080825260119082015270496e76616c6964205369676e617475726560781b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156115b057600080fd5b81516113e881611432565b60018060a01b038316815260006020604081840152835180604085015260005b818110156115f7578581018301518582016060015282016115db565b81811115611609576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220dd29d05c004982bbfef8de24287c489ef6da3bbfa4f1407bf734324a4ce07b9164736f6c634300080d0033000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000000000000000000000000000000000000002dc6c0

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c3160700000000000000000000000000000000000000000000000000000000002dc6c0

-----Decoded View---------------
Arg [0] : _signer (address): 0xcd21a4eaf4f3d11905e1c09577735694641f39db
Arg [1] : _feeToken (address): 0x7f5c764cbc14f9669b88837ca1490cca17c31607
Arg [2] : _feeAmount (uint256): 3000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db
Arg [1] : 0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607
Arg [2] : 00000000000000000000000000000000000000000000000000000000002dc6c0


Deployed ByteCode Sourcemap

60:8785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2286:1233;;;;;;:::i;:::-;;:::i;:::-;;4500:132;;;;;;:::i;:::-;-1:-1:-1;;;;;4585:17:0;4562:7;4585:17;;;:8;:17;;;;;:41;;;;4500:132;;;;1431:25:1;;;1419:2;1404:18;4500:132:0;;;;;;;;4234:133;;;;;;:::i;:::-;-1:-1:-1;;;;;4315:17:0;4295:4;4315:17;;;:8;:17;;;;;:28;4346:15;-1:-1:-1;4315:46:0;4234:133;;;;1632:14:1;;1625:22;1607:41;;1595:2;1580:18;4234:133:0;1467:187:1;7197:280:0;;;;;;:::i;:::-;;:::i;2175:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;2255:19:0;2235:4;2255:19;;;:10;:19;;;;;;;2175:105;1752:247;;;;;;:::i;:::-;;:::i;2005:61::-;;;:::i;3689:179::-;;;;;;:::i;:::-;;:::i;8044:181::-;;;;;;:::i;:::-;;:::i;6784:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6862:21:0;6842:4;6862:21;;;:12;:21;;;;;:28;;;;;;;6784:112;2072:97;;;;;;:::i;:::-;;:::i;7483:189::-;;;;;;:::i;:::-;;:::i;7031:160::-;;;;;;:::i;:::-;;:::i;6902:123::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6986:21:0;6966:4;6986:21;;;:12;:21;;;;;:33;;;;6902:123;6577:83;;6643:10;6630:24;;;;:12;:24;;;;;6623:31;;-1:-1:-1;;6623:31:0;;;;;;6577:83;1673:73;1711:7;1734:6;-1:-1:-1;;;;;1734:6:0;1673:73;;;-1:-1:-1;;;;;2449:32:1;;;2431:51;;2419:2;2404:18;1673:73:0;2285:203:1;1585:82:0;1652:9;;1585:82;;3525:158;;;:::i;1487:92::-;1564:8;;-1:-1:-1;;;;;1564:8:0;1487:92;;4638:1933;;;;;;:::i;:::-;;:::i;7853:185::-;;;;;;:::i;:::-;;:::i;4373:121::-;;;;;;:::i;:::-;-1:-1:-1;;;;;4460:17:0;4440:4;4460:17;;;:8;:17;;;;;:28;;4373:121;6666:112;;;;;;:::i;:::-;-1:-1:-1;;;;;6744:21:0;6724:4;6744:21;;;:12;:21;;;;;:28;;;;6666:112;2286:1233;2563:10;2552:22;;;;:10;:22;;;;;;;;2545:29;;;2651:59;;;;;4162:51:1;;;;4229:18;;;4222:34;;;4272:18;;;4265:34;;;2552:22:0;4135:18:1;;2651:59:0;;;;;;;;;;;;2641:70;;;;;;2626:85;;2719:9;2730;2741:7;2752:25;2767:9;;2752:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2752:14:0;;-1:-1:-1;;;2752:25:0:i;:::-;2718:59;;;;;;2784:21;2879:4;2826:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2826:58:0;;;;;;;;;2808:77;;2826:58;2808:77;;;;2894:15;2912:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;2808:77:0;;-1:-1:-1;2894:15:0;2912:33;;4894:19:1;;2912:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2912:33:0;;-1:-1:-1;;2912:33:0;;2971:6;;2912:33;;-1:-1:-1;;;;;;2960:17:0;;;2971:6;;2960:17;;-1:-1:-1;2952:47:0;;;;-1:-1:-1;;;2952:47:0;;;;;;;:::i;:::-;;;;;;;;;3203:3;3151:40;;;:15;:40;;;;;;-1:-1:-1;;;;;3151:40:0;:56;3148:139;;3238:40;;;;:15;:40;;;;;;3218:61;;-1:-1:-1;;;;;3238:40:0;3218:19;:61::i;:::-;3322:40;;;;:15;:40;;;;;;;;:53;;-1:-1:-1;;;;;;3322:53:0;3365:10;3322:53;;;;;;3405;;;;;;;;;;;;;;;;3382:20;;;:8;:20;;;;;;:76;;;;;;-1:-1:-1;3382:76:0;;;;;;;;3470:43;1431:25:1;;;3470:43:0;;1404:18:1;3470:43:0;;;;;;;2423:1096;;;;;;2286:1233;;;;:::o;7197:280::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7273:25:0;::::1;7265:70;;;::::0;-1:-1:-1;;;7265:70:0;;6007:2:1;7265:70:0::1;::::0;::::1;5989:21:1::0;;;6026:18;;;6019:30;6085:34;6065:18;;;6058:62;6137:18;;7265:70:0::1;5805:356:1::0;7265:70:0::1;7372:8;::::0;;-1:-1:-1;;;;;7388:30:0;;::::1;-1:-1:-1::0;;;;;;7388:30:0;::::1;::::0;::::1;::::0;;;7430:41:::1;::::0;7372:8;::::1;::::0;7388:30;7372:8;;7430:41:::1;::::0;7342:19:::1;::::0;7430:41:::1;7258:219;7197:280:::0;:::o;1752:247::-;1807:16;;-1:-1:-1;;;;;1807:16:0;;;;;;;;-1:-1:-1;;;;;1830:19:0;;;;;;;:10;:19;;;;;;1852:12;1830:34;;1887:8;;1936:9;;1887:59;;-1:-1:-1;;;1887:59:0;;1909:10;1887:59;;;6406:34:1;1929:4:0;6456:18:1;;;6449:43;6508:18;;;6501:34;;;;1830:19:0;;1887:8;;;;;:21;;6341:18:1;;1887:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1871:75;;1961:8;1953:40;;;;-1:-1:-1;;;1953:40:0;;6998:2:1;1953:40:0;;;6980:21:1;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:49;7115:18;;1953:40:0;6796:343:1;1953:40:0;1795:204;1752:247;:::o;2005:61::-;2039:21;2049:10;2039:9;:21::i;:::-;2005:61::o;3689:179::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3770:17:0;::::1;3801:1;3770:17:::0;;;:8:::1;:17;::::0;;;;:28;3762:65:::1;;;::::0;-1:-1:-1;;;3762:65:0;;7346:2:1;3762:65:0::1;::::0;::::1;7328:21:1::0;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:50;7464:18;;3762:65:0::1;7144:344:1::0;3762:65:0::1;3834:28;3854:7;3834:19;:28::i;:::-;3689:179:::0;:::o;8044:181::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;8140:8:::1;::::0;:36:::1;::::0;-1:-1:-1;;;8140:36:0;;-1:-1:-1;;;;;7685:32:1;;;8140:36:0::1;::::0;::::1;7667:51:1::0;7734:18;;;7727:34;;;8128:9:0::1;::::0;8140:8:::1;::::0;:17:::1;::::0;7640:18:1;;8140:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8128:48;;8191:4;8183:36;;;::::0;-1:-1:-1;;;8183:36:0;;6998:2:1;8183:36:0::1;::::0;::::1;6980:21:1::0;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:49;7115:18;;8183:36:0::1;6796:343:1::0;8183:36:0::1;8121:104;8044:181:::0;;:::o;2072:97::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2144:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;2137:26;2072:97::o;7483:189::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;7570:9:::1;::::0;;7586:24;;;;7622:44:::1;::::0;;7946:25:1;;;8002:2;7987:18;;7980:34;;;7622:44:0::1;::::0;7919:18:1;7622:44:0::1;;;;;;;7543:129;7483:189:::0;:::o;7031:160::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7103:23:0;::::1;7095:65;;;::::0;-1:-1:-1;;;7095:65:0;;8227:2:1;7095:65:0::1;::::0;::::1;8209:21:1::0;8266:2;8246:18;;;8239:30;8305:31;8285:18;;;8278:59;8354:18;;7095:65:0::1;8025:353:1::0;7095:65:0::1;7167:6;:18:::0;;-1:-1:-1;;;;;;7167:18:0::1;-1:-1:-1::0;;;;;7167:18:0;;;::::1;::::0;;;::::1;::::0;;7031:160::o;3525:158::-;3588:10;3613:1;3579:20;;;:8;:20;;;;;:31;3571:68;;;;-1:-1:-1;;;3571:68:0;;7346:2:1;3571:68:0;;;7328:21:1;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:50;7464:18;;3571:68:0;7144:344:1;3571:68:0;3646:31;3666:10;3646:19;:31::i;4638:1933::-;4881:10;4295:4;4315:17;;;:8;:17;;;;;:28;4346:15;-1:-1:-1;4859:60:0;;;;-1:-1:-1;;;4859:60:0;;8585:2:1;4859:60:0;;;8567:21:1;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:52;8705:18;;4859:60:0;8383:346:1;4859:60:0;4955:2;4929:28;;;4926:549;;4968:12;5004:10;5016:6;:31;;;;;;;;;;;;;;;-1:-1:-1;;;5016:31:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5016:31:0;;;;4993:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4983:66;;;;;;4968:81;;5059:9;5070;5081:7;5092:31;5107:15;;5092:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5092:14:0;;-1:-1:-1;;;5092:31:0:i;:::-;5058:65;;;;;;5132:21;5229:4;5176:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5176:58:0;;;;;;;;;5156:79;;5176:58;5156:79;;;;5246:15;5264:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;5156:79:0;;-1:-1:-1;5246:15:0;5264:33;;4894:19:1;;5264:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5264:33:0;;-1:-1:-1;;5264:33:0;;5325:6;;5264:33;;-1:-1:-1;;;;;;5314:17:0;;;5325:6;;5314:17;;-1:-1:-1;5306:47:0;;;;-1:-1:-1;;;5306:47:0;;;;;;;:::i;:::-;5396:6;5362:12;:24;5375:10;-1:-1:-1;;;;;5362:24:0;-1:-1:-1;;;;;5362:24:0;;;;;;;;;;;;:31;;;:40;;;;;;;;;;;;;;;;;;5414:6;5411:57;;;5438:20;;5447:10;;5438:20;;;;;5411:57;4959:516;;;;;;4926:549;5510:2;5484:28;;;5481:549;;5523:12;5559:10;5571:6;:31;;;;;;;;;;;;;;;-1:-1:-1;;;5571:31:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5571:31:0;;;;5548:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5538:66;;;;;;5523:81;;5614:9;5625;5636:7;5647:31;5662:15;;5647:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5647:14:0;;-1:-1:-1;;;5647:31:0:i;:::-;5613:65;;;;;;5687:21;5784:4;5731:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5731:58:0;;;;;;;;;5711:79;;5731:58;5711:79;;;;5801:15;5819:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;5711:79:0;;-1:-1:-1;5801:15:0;5819:33;;4894:19:1;;5819:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5819:33:0;;-1:-1:-1;;5819:33:0;;5880:6;;5819:33;;-1:-1:-1;;;;;;5869:17:0;;;5880:6;;5869:17;;-1:-1:-1;5861:47:0;;;;-1:-1:-1;;;5861:47:0;;;;;;;:::i;:::-;5930:10;5917:24;;;;:12;:24;;;;;:40;;;;;;;;-1:-1:-1;;5917:40:0;;;;;;;;;;5966:57;;5993:20;;6002:10;;5993:20;;;;;5966:57;5514:516;;;;;;5481:549;6066:2;6039:29;;;6036:530;;6104:35;;;6115:10;6104:35;;;7667:51:1;7734:18;;;7727:34;;;6079:12:0;;7640:18:1;;6104:35:0;;;;;;;;;;;;6094:46;;;;;;6079:61;;6150:9;6161;6172:7;6183:32;6198:16;;6183:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6183:14:0;;-1:-1:-1;;;6183:32:0:i;:::-;6149:66;;;;;;6224:21;6321:4;6268:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6268:58:0;;;;;;;;;6248:79;;6268:58;6248:79;;;;6338:15;6356:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;6248:79:0;;-1:-1:-1;6338:15:0;6356:33;;4894:19:1;;6356:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6356:33:0;;-1:-1:-1;;6356:33:0;;6417:6;;6356:33;;-1:-1:-1;;;;;;6406:17:0;;;6417:6;;6406:17;;-1:-1:-1;6398:47:0;;;;-1:-1:-1;;;6398:47:0;;;;;;;:::i;:::-;6467:10;6454:24;;;;:12;:24;;;;;;;:36;;:50;;;6518:40;;;;;6493:11;1431:25:1;;1419:2;1404:18;;1285:177;6518:40:0;;;;;;;;6070:496;;;;;;6036:530;4638:1933;;;;;;;;;:::o;7853:185::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7932:22:0;::::1;7924:73;;;::::0;-1:-1:-1;;;7924:73:0;;9635:2:1;7924:73:0::1;::::0;::::1;9617:21:1::0;9674:2;9654:18;;;9647:30;9713:34;9693:18;;;9686:62;-1:-1:-1;;;9764:18:1;;;9757:36;9810:19;;7924:73:0::1;9433:402:1::0;7924:73:0::1;8004:28;8023:8;8004:18;:28::i;8399:441::-:0;8469:9;8480;8491:7;8518:3;:10;8532:2;8518:16;8510:53;;;;-1:-1:-1;;;8510:53:0;;10042:2:1;8510:53:0;;;10024:21:1;10081:2;10061:18;;;10054:30;10120:26;10100:18;;;10093:54;10164:18;;8510:53:0;9840:348:1;8510:53:0;-1:-1:-1;;;8662:2:0;8653:12;;8647:19;8724:2;8715:12;;8709:19;8823:2;8814:12;;;8808:19;8647;;8805:1;8800:28;;;;;8399:441::o;3874:354::-;-1:-1:-1;;;;;4062:17:0;;;;;;:8;:17;;;;;;;;4055:24;;;;;;;;;;4158:12;:21;;;;;4151:28;;-1:-1:-1;;4151:28:0;;;;;;;4191:31;1431:25:1;;;4191:31:0;;1404:18:1;4191:31:0;;;;;;;3874:354;:::o;7678:169::-;7740:16;7759:6;;-1:-1:-1;;;;;7772:17:0;;;-1:-1:-1;;;;;;7772:17:0;;;;;;7801:40;;7759:6;;;;;;;7801:40;;7740:16;7801:40;7733:114;7678:169;:::o;14:347:1:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:1;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:545::-;454:6;462;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;583:9;570:23;560:33;;640:2;629:9;625:18;612:32;602:42;;695:2;684:9;680:18;667:32;722:18;714:6;711:30;708:50;;;754:1;751;744:12;708:50;793:58;843:7;834:6;823:9;819:22;793:58;:::i;:::-;366:545;;;;-1:-1:-1;870:8:1;-1:-1:-1;;;;366:545:1:o;916:173::-;984:20;;-1:-1:-1;;;;;1033:31:1;;1023:42;;1013:70;;1079:1;1076;1069:12;1013:70;916:173;;;:::o;1094:186::-;1153:6;1206:2;1194:9;1185:7;1181:23;1177:32;1174:52;;;1222:1;1219;1212:12;1174:52;1245:29;1264:9;1245:29;:::i;:::-;1235:39;1094:186;-1:-1:-1;;;1094:186:1:o;1841:254::-;1909:6;1917;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:29;2028:9;2009:29;:::i;:::-;1999:39;2085:2;2070:18;;;;2057:32;;-1:-1:-1;;;1841:254:1:o;2100:180::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;-1:-1:-1;2251:23:1;;2100:180;-1:-1:-1;2100:180:1:o;2493:118::-;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2616:1339;2747:6;2755;2763;2771;2779;2787;2795;2803;2811;2864:3;2852:9;2843:7;2839:23;2835:33;2832:53;;;2881:1;2878;2871:12;2832:53;2920:9;2907:23;2939:28;2961:5;2939:28;:::i;:::-;2986:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3065:18;3095:14;;;3092:34;;;3122:1;3119;3112:12;3092:34;3161:58;3211:7;3202:6;3191:9;3187:22;3161:58;:::i;:::-;3238:8;;-1:-1:-1;3135:84:1;-1:-1:-1;3325:2:1;3310:18;;3297:32;;-1:-1:-1;3338:30:1;3297:32;3338:30;:::i;:::-;3387:7;;-1:-1:-1;3447:2:1;3432:18;;3419:32;;3463:16;;;3460:36;;;3492:1;3489;3482:12;3460:36;3531:60;3583:7;3572:8;3561:9;3557:24;3531:60;:::i;:::-;3610:8;;-1:-1:-1;3505:86:1;-1:-1:-1;3692:3:1;3677:19;;3664:33;;-1:-1:-1;3750:3:1;3735:19;;3722:33;;-1:-1:-1;3767:16:1;;;3764:36;;;3796:1;3793;3786:12;3764:36;;3835:60;3887:7;3876:8;3865:9;3861:24;3835:60;:::i;:::-;3809:86;;3914:8;3904:18;;;3941:8;3931:18;;;2616:1339;;;;;;;;;;;:::o;4310:380::-;4552:66;4540:79;;4644:2;4635:12;;4628:28;;;;4681:2;4672:12;;4310:380::o;5098:341::-;5300:2;5282:21;;;5339:2;5319:18;;;5312:30;-1:-1:-1;;;5373:2:1;5358:18;;5351:47;5430:2;5415:18;;5098:341::o;5444:356::-;5646:2;5628:21;;;5665:18;;;5658:30;5724:34;5719:2;5704:18;;5697:62;5791:2;5776:18;;5444:356::o;6546:245::-;6613:6;6666:2;6654:9;6645:7;6641:23;6637:32;6634:52;;;6682:1;6679;6672:12;6634:52;6714:9;6708:16;6733:28;6755:5;6733:28;:::i;8734:694::-;8940:1;8936;8931:3;8927:11;8923:19;8915:6;8911:32;8900:9;8893:51;8874:4;8963:2;9001;8996;8985:9;8981:18;8974:30;9033:6;9027:13;9076:6;9071:2;9060:9;9056:18;9049:34;9101:1;9111:140;9125:6;9122:1;9119:13;9111:140;;;9220:14;;;9216:23;;9210:30;9186:17;;;9205:2;9182:26;9175:66;9140:10;;9111:140;;;9269:6;9266:1;9263:13;9260:91;;;9339:1;9334:2;9325:6;9314:9;9310:22;9306:31;9299:42;9260:91;-1:-1:-1;9412:2:1;9391:15;-1:-1:-1;;9387:29:1;9372:45;;;;9419:2;9368:54;;8734:694;-1:-1:-1;;;;8734:694:1:o

Swarm Source

ipfs://dd29d05c004982bbfef8de24287c489ef6da3bbfa4f1407bf734324a4ce07b91
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.