Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 18 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19944627 | 9 days ago | 0 S | ||||
19944627 | 9 days ago | 0 S | ||||
19944627 | 9 days ago | 0 S | ||||
19944627 | 9 days ago | 0 S | ||||
19944627 | 9 days ago | 0 S | ||||
19944627 | 9 days ago | 0 S | ||||
19830414 | 9 days ago | 0 S | ||||
19830414 | 9 days ago | 0 S | ||||
19830414 | 9 days ago | 0 S | ||||
19830414 | 9 days ago | 0 S | ||||
19830414 | 9 days ago | 0 S | ||||
19830414 | 9 days ago | 0 S | ||||
19830405 | 9 days ago | 0 S | ||||
19830405 | 9 days ago | 0 S | ||||
19830405 | 9 days ago | 0 S | ||||
19830405 | 9 days ago | 0 S | ||||
19830405 | 9 days ago | 0 S | ||||
19830405 | 9 days ago | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Groth16Verifier
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 /* Copyright 2021 0KIMS association. This file is generated with [snarkJS](https://github.com/iden3/snarkjs). snarkJS is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. snarkJS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with snarkJS. If not, see <https://www.gnu.org/licenses/>. */ pragma solidity >=0.7.0 <0.9.0; contract Groth16Verifier { // Scalar field size uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Base field size uint256 constant q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; // Verification Key data uint256 constant alphax = 20278960117665255930956931411914802199452455688510700007484218628454862703005; uint256 constant alphay = 8575060622555928158413089900712854124305790299421637476836288628227374398559; uint256 constant betax1 = 956819689188258924840405488187214537234007915841859736605976400561156834045; uint256 constant betax2 = 5512694780117179792541447468811059908764282961541839662297025436316361578058; uint256 constant betay1 = 7451947854894997673237118264915926654038391823038721277373517692033286619639; uint256 constant betay2 = 14660133829310254548336650107134298423380694787525243690666864507426417901962; uint256 constant gammax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; uint256 constant deltax1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; uint256 constant deltax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; uint256 constant deltay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; uint256 constant deltay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; uint256 constant IC0x = 19258452758649829779975657373453162671154184301111133293653767809341482835757; uint256 constant IC0y = 4933218903410158759364186623905116793037673881032724437095763931565582672074; uint256 constant IC1x = 17676977807998058538308211829830040138535709159246171248502042077831087527722; uint256 constant IC1y = 17925669318859573106185011788367748739601726704675007969709720194010653316699; uint256 constant IC2x = 9864679370304184105224638875321773795293877039887754851737616915063048887705; uint256 constant IC2y = 14771081496834736738866719094863898761420160347198374121693062754092316029463; // Memory data uint16 constant pVk = 0; uint16 constant pPairing = 128; uint16 constant pLastMem = 896; function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[2] calldata _pubSignals) public view returns (bool) { assembly { function checkField(v) { if iszero(lt(v, r)) { mstore(0, 0) return(0, 0x20) } } // G1 function to multiply a G1 value(x,y) to value in an address function g1_mulAccC(pR, x, y, s) { let success let mIn := mload(0x40) mstore(mIn, x) mstore(add(mIn, 32), y) mstore(add(mIn, 64), s) success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) if iszero(success) { mstore(0, 0) return(0, 0x20) } mstore(add(mIn, 64), mload(pR)) mstore(add(mIn, 96), mload(add(pR, 32))) success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) if iszero(success) { mstore(0, 0) return(0, 0x20) } } function checkPairing(pA, pB, pC, pubSignals, pMem) -> isOk { let _pPairing := add(pMem, pPairing) let _pVk := add(pMem, pVk) mstore(_pVk, IC0x) mstore(add(_pVk, 32), IC0y) // Compute the linear combination vk_x g1_mulAccC(_pVk, IC1x, IC1y, calldataload(add(pubSignals, 0))) g1_mulAccC(_pVk, IC2x, IC2y, calldataload(add(pubSignals, 32))) // -A mstore(_pPairing, calldataload(pA)) mstore(add(_pPairing, 32), mod(sub(q, calldataload(add(pA, 32))), q)) // B mstore(add(_pPairing, 64), calldataload(pB)) mstore(add(_pPairing, 96), calldataload(add(pB, 32))) mstore(add(_pPairing, 128), calldataload(add(pB, 64))) mstore(add(_pPairing, 160), calldataload(add(pB, 96))) // alpha1 mstore(add(_pPairing, 192), alphax) mstore(add(_pPairing, 224), alphay) // beta2 mstore(add(_pPairing, 256), betax1) mstore(add(_pPairing, 288), betax2) mstore(add(_pPairing, 320), betay1) mstore(add(_pPairing, 352), betay2) // vk_x mstore(add(_pPairing, 384), mload(add(pMem, pVk))) mstore(add(_pPairing, 416), mload(add(pMem, add(pVk, 32)))) // gamma2 mstore(add(_pPairing, 448), gammax1) mstore(add(_pPairing, 480), gammax2) mstore(add(_pPairing, 512), gammay1) mstore(add(_pPairing, 544), gammay2) // C mstore(add(_pPairing, 576), calldataload(pC)) mstore(add(_pPairing, 608), calldataload(add(pC, 32))) // delta2 mstore(add(_pPairing, 640), deltax1) mstore(add(_pPairing, 672), deltax2) mstore(add(_pPairing, 704), deltay1) mstore(add(_pPairing, 736), deltay2) let success := staticcall(sub(gas(), 2000), 8, _pPairing, 768, _pPairing, 0x20) isOk := and(success, mload(_pPairing)) } let pMem := mload(0x40) mstore(0x40, add(pMem, pLastMem)) // Validate that all evaluations ∈ F checkField(calldataload(add(_pubSignals, 0))) checkField(calldataload(add(_pubSignals, 32))) // Validate all evaluations let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem) mstore(0, isValid) return(0, 0x20) } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"uint256[2]","name":"_pA","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"_pB","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"_pC","type":"uint256[2]"},{"internalType":"uint256[2]","name":"_pubSignals","type":"uint256[2]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052348015600f57600080fd5b506105b58061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f5c9d69e14610030575b600080fd5b61004361003e36600461051f565b610057565b604051901515815260200160405180910390f35b60006104ca565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2a93e5e240462e2664ed0fbea318b3d1224c82adcd7b053acd1ac8db72839f2d85527f0ae81a5afdfe78972926bc6473032acb5b3560a887da1092279f070ed87f60ca60208601526000608086018661019a87357f27a191bced51a8e9e48296cd55cd80e360c1d4b02fee4bf83bb243dc70eed65b7f2714d09c1c235b64462f84aaad8b992c5f3d4f7d33415b8a7ae8896ba2fc172a84610092565b6101ea60208801357f20a822c7675552d218035d4f061ac409c0fb05e4d509db128c8adf277606f2177f15cf35edf2ec287739773c111b4e3765d4c566a23497abcd209724a0f461dd9984610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2cd57c13fad9fe5b458038809ddbe61632dd83fd3e34ed9d8bbf8aa9d952499d60c08201527f12f54ff4097a1d67f03602fb5c8daa18cb508cd29013bfcb4a52c9686ddd3c5f60e08201527f021d8a6ec329f86f966c04fa17ec3a17f9b24b62a6c0e072a09850afe492c2fd6101008201527f0c30131dda4c91b5950c4000a48921300769214e35f14d312117a4ebfce4564a6101208201527f1079a72c2e065d48ed8c26287be24cda958fcfa436ca78e70eacbb0cbbed41f76101408201527f20695779b21edbb5c12fafacc098d32ef0c68f34c80780011968ef9669bb818a610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526104e2600084013561005e565b6104ef602084013561005e565b6104fc818486888a6100fd565b90508060005260206000f35b806040810183101561051957600080fd5b92915050565b600080600080610140858703121561053657600080fd5b6105408686610508565b935060c085018681111561055357600080fd5b6040860193506105638782610508565b925050610574866101008701610508565b90509295919450925056fea26469706673582212203f6b1db344e43692d04b7ca2738bdaf966030543d86e3f75c1e164228eba271064736f6c634300081c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063f5c9d69e14610030575b600080fd5b61004361003e36600461051f565b610057565b604051901515815260200160405180910390f35b60006104ca565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001811061008f576000805260206000f35b50565b600060405183815284602082015285604082015260408160608360076107d05a03fa9150816100c5576000805260206000f35b825160408201526020830151606082015260408360808360066107d05a03fa915050806100f6576000805260206000f35b5050505050565b7f2a93e5e240462e2664ed0fbea318b3d1224c82adcd7b053acd1ac8db72839f2d85527f0ae81a5afdfe78972926bc6473032acb5b3560a887da1092279f070ed87f60ca60208601526000608086018661019a87357f27a191bced51a8e9e48296cd55cd80e360c1d4b02fee4bf83bb243dc70eed65b7f2714d09c1c235b64462f84aaad8b992c5f3d4f7d33415b8a7ae8896ba2fc172a84610092565b6101ea60208801357f20a822c7675552d218035d4f061ac409c0fb05e4d509db128c8adf277606f2177f15cf35edf2ec287739773c111b4e3765d4c566a23497abcd209724a0f461dd9984610092565b50823581527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760208401357f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4703066020820152833560408201526020840135606082015260408401356080820152606084013560a08201527f2cd57c13fad9fe5b458038809ddbe61632dd83fd3e34ed9d8bbf8aa9d952499d60c08201527f12f54ff4097a1d67f03602fb5c8daa18cb508cd29013bfcb4a52c9686ddd3c5f60e08201527f021d8a6ec329f86f966c04fa17ec3a17f9b24b62a6c0e072a09850afe492c2fd6101008201527f0c30131dda4c91b5950c4000a48921300769214e35f14d312117a4ebfce4564a6101208201527f1079a72c2e065d48ed8c26287be24cda958fcfa436ca78e70eacbb0cbbed41f76101408201527f20695779b21edbb5c12fafacc098d32ef0c68f34c80780011968ef9669bb818a610160820152600087015161018082015260206000018701516101a08201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101c08201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101e08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102008201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610220820152843561024082015260208501356102608201527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26102808201527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6102a08201527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6102c08201527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6102e08201526020816103008360086107d05a03fa9051169695505050505050565b60405161038081016040526104e2600084013561005e565b6104ef602084013561005e565b6104fc818486888a6100fd565b90508060005260206000f35b806040810183101561051957600080fd5b92915050565b600080600080610140858703121561053657600080fd5b6105408686610508565b935060c085018681111561055357600080fd5b6040860193506105638782610508565b925050610574866101008701610508565b90509295919450925056fea26469706673582212203f6b1db344e43692d04b7ca2738bdaf966030543d86e3f75c1e164228eba271064736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.