Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 77 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 8400256 | 2396 days ago | IN | 0 ETH | 0.00055983 | ||||
| Withdraw | 8301310 | 2412 days ago | IN | 0 ETH | 0.00030279 | ||||
| Withdraw | 8301310 | 2412 days ago | IN | 0 ETH | 0.00030144 | ||||
| Withdraw | 8301310 | 2412 days ago | IN | 0 ETH | 0.00462763 | ||||
| Withdraw | 8286118 | 2414 days ago | IN | 0 ETH | 0.00012938 | ||||
| Withdraw | 8286118 | 2414 days ago | IN | 0 ETH | 0.00191459 | ||||
| Transfer | 8268892 | 2417 days ago | IN | 1 ETH | 0.00715732 | ||||
| Commit | 8268862 | 2417 days ago | IN | 0 ETH | 0.00040225 | ||||
| Transfer | 8268757 | 2417 days ago | IN | 1 ETH | 0.00777096 | ||||
| Commit | 8268718 | 2417 days ago | IN | 0 ETH | 0.00033521 | ||||
| Withdraw | 8223440 | 2424 days ago | IN | 0 ETH | 0.00021628 | ||||
| Withdraw | 8223440 | 2424 days ago | IN | 0 ETH | 0.00318045 | ||||
| Withdraw | 8223439 | 2424 days ago | IN | 0 ETH | 0.00021564 | ||||
| Withdraw | 8223439 | 2424 days ago | IN | 0 ETH | 0.00317981 | ||||
| Withdraw | 8223437 | 2424 days ago | IN | 0 ETH | 0.00330513 | ||||
| Withdraw | 8223436 | 2424 days ago | IN | 0 ETH | 0.00021628 | ||||
| Withdraw | 8223436 | 2424 days ago | IN | 0 ETH | 0.00330545 | ||||
| Transfer | 8207507 | 2426 days ago | IN | 1 ETH | 0.001426 | ||||
| Commit | 8207497 | 2426 days ago | IN | 0 ETH | 0.00020093 | ||||
| Transfer | 8207462 | 2426 days ago | IN | 1 ETH | 0.0021881 | ||||
| Commit | 8207451 | 2426 days ago | IN | 0 ETH | 0.00020112 | ||||
| Transfer | 8207349 | 2426 days ago | IN | 1 ETH | 0.0021431 | ||||
| Commit | 8207341 | 2426 days ago | IN | 0 ETH | 0.00020112 | ||||
| Transfer | 8207323 | 2426 days ago | IN | 1 ETH | 0.00223719 | ||||
| Transfer | 8207305 | 2426 days ago | IN | 0 ETH | 0.00006375 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 8301310 | 2412 days ago | 0.00445106 ETH | ||||
| - | 8301310 | 2412 days ago | 0.99554893 ETH | ||||
| - | 8286118 | 2414 days ago | 0.00190759 ETH | ||||
| - | 8286118 | 2414 days ago | 0.9980924 ETH | ||||
| - | 8223440 | 2424 days ago | 0.00317933 ETH | ||||
| - | 8223440 | 2424 days ago | 0.99682066 ETH | ||||
| - | 8223439 | 2424 days ago | 0.00317933 ETH | ||||
| - | 8223439 | 2424 days ago | 0.99682066 ETH | ||||
| - | 8223437 | 2424 days ago | 0.00317933 ETH | ||||
| - | 8223437 | 2424 days ago | 0.99682067 ETH | ||||
| - | 8223436 | 2424 days ago | 0.00317933 ETH | ||||
| - | 8223436 | 2424 days ago | 0.99682066 ETH | ||||
| - | 8130434 | 2438 days ago | 0.01271732 ETH | ||||
| - | 8130434 | 2438 days ago | 0.98728267 ETH | ||||
| - | 8120926 | 2440 days ago | 0.00317933 ETH | ||||
| - | 8120926 | 2440 days ago | 0.99682066 ETH | ||||
| - | 8050830 | 2451 days ago | 0.00254346 ETH | ||||
| - | 8050830 | 2451 days ago | 0.99745653 ETH | ||||
| - | 8046589 | 2451 days ago | 0.01271732 ETH | ||||
| - | 8046589 | 2451 days ago | 0.98728267 ETH | ||||
| - | 7997589 | 2459 days ago | 0.00254346 ETH | ||||
| - | 7997589 | 2459 days ago | 0.99745653 ETH | ||||
| - | 7997585 | 2459 days ago | 0.00254346 ETH | ||||
| - | 7997585 | 2459 days ago | 0.99745653 ETH | ||||
| - | 7994727 | 2459 days ago | 0.01271732 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Mixer
Compiler Version
v0.5.0+commit.1d4f565a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-06-17
*/
pragma solidity ^0.5.0;
library Pairing {
struct G1Point {
uint X;
uint Y;
}
// Encoding of field elements is: X[0] * z + X[1]
struct G2Point {
uint[2] X;
uint[2] Y;
}
/// @return the generator of G1
function P1()
internal pure returns (G1Point memory)
{
return G1Point(1, 2);
}
/// @return the generator of G2
function P2() internal pure returns (G2Point memory) {
return G2Point(
[11559732032986387107991004021392285783925812861821192530917403151452391805634,
10857046999023057135944570762232829481370756359578518086990519993285655852781],
[4082367875863433681332203403145435568316851327593401208105741076214120093531,
8495653923123431417604973247489272438418190587263600148770280649306958101930]
);
}
/// @return the negation of p, i.e. p.add(p.negate()) should be zero.
function negate(G1Point memory p) internal pure returns (G1Point memory) {
// The prime q in the base field F_q for G1
uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
if (p.X == 0 && p.Y == 0)
return G1Point(0, 0);
return G1Point(p.X, q - (p.Y % q));
}
/// @return the sum of two points of G1
function pointAdd(G1Point memory p1, G1Point memory p2)
internal view returns (G1Point memory r)
{
uint[4] memory input;
input[0] = p1.X;
input[1] = p1.Y;
input[2] = p2.X;
input[3] = p2.Y;
bool success;
assembly {
success := staticcall(sub(gas, 2000), 6, input, 0xc0, r, 0x60)
}
require(success);
}
/// @return the product of a point on G1 and a scalar, i.e.
/// p == p.mul(1) and p.add(p) == p.mul(2) for all points p.
function pointMul(G1Point memory p, uint s)
internal view returns (G1Point memory r)
{
uint[3] memory input;
input[0] = p.X;
input[1] = p.Y;
input[2] = s;
bool success;
assembly {
success := staticcall(sub(gas, 2000), 7, input, 0x80, r, 0x60)
}
require (success);
}
/// @return the result of computing the pairing check
/// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1
/// For example pairing([P1(), P1().negate()], [P2(), P2()]) should
/// return true.
function pairing(G1Point[] memory p1, G2Point[] memory p2)
internal view returns (bool)
{
require(p1.length == p2.length);
uint elements = p1.length;
uint inputSize = elements * 6;
uint[] memory input = new uint[](inputSize);
for (uint i = 0; i < elements; i++)
{
input[i * 6 + 0] = p1[i].X;
input[i * 6 + 1] = p1[i].Y;
input[i * 6 + 2] = p2[i].X[0];
input[i * 6 + 3] = p2[i].X[1];
input[i * 6 + 4] = p2[i].Y[0];
input[i * 6 + 5] = p2[i].Y[1];
}
uint[1] memory out;
bool success;
assembly {
success := staticcall(sub(gas, 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
}
require(success);
return out[0] != 0;
}
/// Convenience method for a pairing check for two pairs.
function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2)
internal view returns (bool)
{
G1Point[] memory p1 = new G1Point[](2);
G2Point[] memory p2 = new G2Point[](2);
p1[0] = a1;
p1[1] = b1;
p2[0] = a2;
p2[1] = b2;
return pairing(p1, p2);
}
/// Convenience method for a pairing check for three pairs.
function pairingProd3(
G1Point memory a1, G2Point memory a2,
G1Point memory b1, G2Point memory b2,
G1Point memory c1, G2Point memory c2
)
internal view returns (bool)
{
G1Point[] memory p1 = new G1Point[](3);
G2Point[] memory p2 = new G2Point[](3);
p1[0] = a1;
p1[1] = b1;
p1[2] = c1;
p2[0] = a2;
p2[1] = b2;
p2[2] = c2;
return pairing(p1, p2);
}
/// Convenience method for a pairing check for four pairs.
function pairingProd4(
G1Point memory a1, G2Point memory a2,
G1Point memory b1, G2Point memory b2,
G1Point memory c1, G2Point memory c2,
G1Point memory d1, G2Point memory d2
)
internal view returns (bool)
{
G1Point[] memory p1 = new G1Point[](4);
G2Point[] memory p2 = new G2Point[](4);
p1[0] = a1;
p1[1] = b1;
p1[2] = c1;
p1[3] = d1;
p2[0] = a2;
p2[1] = b2;
p2[2] = c2;
p2[3] = d2;
return pairing(p1, p2);
}
}
library Verifier
{
using Pairing for Pairing.G1Point;
using Pairing for Pairing.G2Point;
function scalarField ()
internal pure returns (uint256)
{
return 21888242871839275222246405745257275088548364400416034343698204186575808495617;
}
struct VerifyingKey
{
Pairing.G1Point alpha;
Pairing.G2Point beta;
Pairing.G2Point gamma;
Pairing.G2Point delta;
Pairing.G1Point[] gammaABC;
}
struct Proof
{
Pairing.G1Point A;
Pairing.G2Point B;
Pairing.G1Point C;
}
struct ProofWithInput
{
Proof proof;
uint256[] input;
}
function negateY( uint256 Y )
internal
pure
returns (uint256)
{
uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
return q - (Y % q);
}
/*
* This implements the Solidity equivalent of the following Python code:
from py_ecc.bn128 import *
data = # ... arguments to function [in_vk, vk_gammaABC, in_proof, proof_inputs]
vk = [int(_, 16) for _ in data[0]]
ic = [FQ(int(_, 16)) for _ in data[1]]
proof = [int(_, 16) for _ in data[2]]
inputs = [int(_, 16) for _ in data[3]]
it = iter(ic)
ic = [(_, next(it)) for _ in it]
vk_alpha = [FQ(_) for _ in vk[:2]]
vk_beta = (FQ2(vk[2:4][::-1]), FQ2(vk[4:6][::-1]))
vk_gamma = (FQ2(vk[6:8][::-1]), FQ2(vk[8:10][::-1]))
vk_delta = (FQ2(vk[10:12][::-1]), FQ2(vk[12:14][::-1]))
assert is_on_curve(vk_alpha, b)
assert is_on_curve(vk_beta, b2)
assert is_on_curve(vk_gamma, b2)
assert is_on_curve(vk_delta, b2)
proof_A = [FQ(_) for _ in proof[:2]]
proof_B = (FQ2(proof[2:4][::-1]), FQ2(proof[4:-2][::-1]))
proof_C = [FQ(_) for _ in proof[-2:]]
assert is_on_curve(proof_A, b)
assert is_on_curve(proof_B, b2)
assert is_on_curve(proof_C, b)
vk_x = ic[0]
for i, s in enumerate(inputs):
vk_x = add(vk_x, multiply(ic[i + 1], s))
check_1 = pairing(proof_B, proof_A)
check_2 = pairing(vk_beta, neg(vk_alpha))
check_3 = pairing(vk_gamma, neg(vk_x))
check_4 = pairing(vk_delta, neg(proof_C))
ok = check_1 * check_2 * check_3 * check_4
assert ok == FQ12.one()
*/
function verify (uint256[14] memory in_vk, uint256[] memory vk_gammaABC, uint256[8] memory in_proof, uint256[] memory proof_inputs)
internal
view
returns (bool)
{
require( ((vk_gammaABC.length / 2) - 1) == proof_inputs.length );
// Compute the linear combination vk_x
uint256[3] memory mul_input;
uint256[4] memory add_input;
bool success;
uint m = 2;
// First two fields are used as the sum
add_input[0] = vk_gammaABC[0];
add_input[1] = vk_gammaABC[1];
// Performs a sum of gammaABC[0] + sum[ gammaABC[i+1]^proof_inputs[i] ]
for (uint i = 0; i < proof_inputs.length; i++) {
mul_input[0] = vk_gammaABC[m++];
mul_input[1] = vk_gammaABC[m++];
mul_input[2] = proof_inputs[i];
assembly {
// ECMUL, output to last 2 elements of `add_input`
success := staticcall(sub(gas, 2000), 7, mul_input, 0x80, add(add_input, 0x40), 0x60)
}
require(success);
assembly {
// ECADD
success := staticcall(sub(gas, 2000), 6, add_input, 0xc0, add_input, 0x60)
}
require(success);
}
uint[24] memory input = [
// (proof.A, proof.B)
in_proof[0], in_proof[1], // proof.A (G1)
in_proof[2], in_proof[3], in_proof[4], in_proof[5], // proof.B (G2)
// (-vk.alpha, vk.beta)
in_vk[0], negateY(in_vk[1]), // -vk.alpha (G1)
in_vk[2], in_vk[3], in_vk[4], in_vk[5], // vk.beta (G2)
// (-vk_x, vk.gamma)
add_input[0], negateY(add_input[1]), // -vk_x (G1)
in_vk[6], in_vk[7], in_vk[8], in_vk[9], // vk.gamma (G2)
// (-proof.C, vk.delta)
in_proof[6], negateY(in_proof[7]), // -proof.C (G1)
in_vk[10], in_vk[11], in_vk[12], in_vk[13] // vk.delta (G2)
];
uint[1] memory out;
assembly {
success := staticcall(sub(gas, 2000), 8, input, 768, out, 0x20)
}
require(success);
return out[0] != 0;
}
function verify(VerifyingKey memory vk, ProofWithInput memory pwi)
internal
view
returns (bool)
{
return verify(vk, pwi.proof, pwi.input);
}
function verify(VerifyingKey memory vk, Proof memory proof, uint256[] memory input)
internal
view
returns (bool)
{
require(input.length + 1 == vk.gammaABC.length);
// Compute the linear combination vk_x
Pairing.G1Point memory vk_x = vk.gammaABC[0];
for (uint i = 0; i < input.length; i++)
vk_x = Pairing.pointAdd(vk_x, Pairing.pointMul(vk.gammaABC[i + 1], input[i]));
// Verify proof
return Pairing.pairingProd4(
proof.A, proof.B,
vk_x.negate(), vk.gamma,
proof.C.negate(), vk.delta,
vk.alpha.negate(), vk.beta);
}
}
library MiMC
{
function getScalarField ()
internal pure returns (uint256)
{
return 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001;
}
/**
* MiMC-p/p with exponent of 7
*
* Recommended at least 46 rounds, for a polynomial degree of 2^126
*/
function MiMCpe7( uint256 in_x, uint256 in_k, uint256 in_seed, uint256 round_count )
internal pure returns(uint256 out_x)
{
assembly {
if lt(round_count, 1) { revert(0, 0) }
// Initialise round constants, k will be hashed
let c := mload(0x40)
mstore(0x40, add(c, 32))
mstore(c, in_seed)
let localQ := 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001
let t
let a
// Further n-2 subsequent rounds include a round constant
for { let i := round_count } gt(i, 0) { i := sub(i, 1) } {
// c = H(c)
mstore(c, keccak256(c, 32))
// x = pow(x + c_i, 7, p) + k
t := addmod(addmod(in_x, mload(c), localQ), in_k, localQ) // t = x + c_i + k
a := mulmod(t, t, localQ) // t^2
in_x := mulmod(mulmod(a, mulmod(a, a, localQ), localQ), t, localQ) // t^7
}
// Result adds key again as blinding factor
out_x := addmod(in_x, in_k, localQ)
}
}
function MiMCpe7_mp( uint256[] memory in_x, uint256 in_k, uint256 in_seed, uint256 round_count )
internal pure returns (uint256)
{
uint256 r = in_k;
uint256 localQ = 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001;
for( uint256 i = 0; i < in_x.length; i++ )
{
r = (r + in_x[i] + MiMCpe7(in_x[i], r, in_seed, round_count)) % localQ;
}
// uint256 x0 = in_x[0];
// uint256 x1 = in_x[1];
// uint256 m0 = MiMCpe7(x0, r, in_seed, round_count);
// assembly {
// r := addmod(addmod(r, x0, localQ), m0, localQ)
// }
// uint256 m1 = MiMCpe7(x1, r, in_seed, round_count);
// assembly {
// r := addmod(addmod(r, x1, localQ), m1, localQ)
// }
return r;
}
function Hash( uint256[] memory in_msgs, uint256 in_key )
internal pure returns (uint256)
{
return MiMCpe7_mp(in_msgs, in_key, uint256(keccak256("mimc")), 91);
}
function Hash( uint256[] memory in_msgs )
internal pure returns (uint256)
{
return Hash(in_msgs, 0);
}
}
library MerkleTree
{
// ceil(log2(1<<15))
uint constant internal TREE_DEPTH = 15;
// 1<<15 leaves
uint constant internal MAX_LEAF_COUNT = 32768;
struct Data
{
uint cur;
uint256[32768][16] nodes; // first column = leaves, second column = leaves' parents, etc
}
function treeDepth() internal pure returns (uint256) {
return TREE_DEPTH;
}
function fillLevelIVs (uint256[15] memory IVs)
internal
pure
{
IVs[0] = 149674538925118052205057075966660054952481571156186698930522557832224430770;
IVs[1] = 9670701465464311903249220692483401938888498641874948577387207195814981706974;
IVs[2] = 18318710344500308168304415114839554107298291987930233567781901093928276468271;
IVs[3] = 6597209388525824933845812104623007130464197923269180086306970975123437805179;
IVs[4] = 21720956803147356712695575768577036859892220417043839172295094119877855004262;
IVs[5] = 10330261616520855230513677034606076056972336573153777401182178891807369896722;
IVs[6] = 17466547730316258748333298168566143799241073466140136663575045164199607937939;
IVs[7] = 18881017304615283094648494495339883533502299318365959655029893746755475886610;
IVs[8] = 21580915712563378725413940003372103925756594604076607277692074507345076595494;
IVs[9] = 12316305934357579015754723412431647910012873427291630993042374701002287130550;
IVs[10] = 18905410889238873726515380969411495891004493295170115920825550288019118582494;
IVs[11] = 12819107342879320352602391015489840916114959026915005817918724958237245903353;
IVs[12] = 8245796392944118634696709403074300923517437202166861682117022548371601758802;
IVs[13] = 16953062784314687781686527153155644849196472783922227794465158787843281909585;
IVs[14] = 19346880451250915556764413197424554385509847473349107460608536657852472800734;
}
function hashImpl (uint256 left, uint256 right, uint256 IV)
internal
pure
returns (uint256)
{
uint256[] memory x = new uint256[](2);
x[0] = left;
x[1] = right;
return MiMC.Hash(x, IV);
}
function insert(Data storage self, uint256 leaf)
internal
returns (uint256 new_root, uint256 offset)
{
require(leaf != 0);
uint256[15] memory IVs;
fillLevelIVs(IVs);
offset = self.cur;
require(offset != MAX_LEAF_COUNT - 1);
self.nodes[0][offset] = leaf;
new_root = updateTree(self, IVs);
self.cur = offset + 1;
}
/**
* Returns calculated merkle root
*/
function verifyPath(uint256 leaf, uint256[15] memory in_path, bool[15] memory address_bits)
internal
pure
returns (uint256 merkleRoot)
{
uint256[15] memory IVs;
fillLevelIVs(IVs);
merkleRoot = leaf;
for (uint depth = 0; depth < TREE_DEPTH; depth++) {
if (address_bits[depth]) {
merkleRoot = hashImpl(in_path[depth], merkleRoot, IVs[depth]);
} else {
merkleRoot = hashImpl(merkleRoot, in_path[depth], IVs[depth]);
}
}
}
function verifyPath(Data storage self, uint256 leaf, uint256[15] memory in_path, bool[15] memory address_bits)
internal
view
returns (bool)
{
return verifyPath(leaf, in_path, address_bits) == getRoot(self);
}
function getLeaf(Data storage self, uint depth, uint offset)
internal
view
returns (uint256)
{
return getUniqueLeaf(depth, offset, self.nodes[depth][offset]);
}
function getMerkleProof(Data storage self, uint index)
internal
view
returns (uint256[15] memory proof_path)
{
for (uint depth = 0; depth < TREE_DEPTH; depth++)
{
if (index % 2 == 0) {
proof_path[depth] = getLeaf(self, depth, index + 1);
} else {
proof_path[depth] = getLeaf(self, depth, index - 1);
}
index = uint(index / 2);
}
}
function getUniqueLeaf(uint256 depth, uint256 offset, uint256 leaf)
internal pure returns (uint256)
{
if (leaf == 0x0)
{
leaf = uint256(
sha256(
abi.encodePacked(
uint16(depth),
uint240(offset)))) % MiMC.getScalarField();
}
return leaf;
}
function updateTree(Data storage self, uint256[15] memory IVs)
internal returns(uint256 root)
{
uint currentIndex = self.cur;
uint256 leaf1;
uint256 leaf2;
for (uint depth = 0; depth < TREE_DEPTH; depth++)
{
if (currentIndex%2 == 0)
{
leaf1 = self.nodes[depth][currentIndex];
leaf2 = getUniqueLeaf(depth, currentIndex + 1, self.nodes[depth][currentIndex + 1]);
} else
{
leaf1 = getUniqueLeaf(depth, currentIndex - 1, self.nodes[depth][currentIndex - 1]);
leaf2 = self.nodes[depth][currentIndex];
}
uint nextIndex = uint(currentIndex/2);
self.nodes[depth+1][nextIndex] = hashImpl(leaf1, leaf2, IVs[depth]);
currentIndex = nextIndex;
}
return self.nodes[TREE_DEPTH][0];
}
function getRoot (Data storage self)
internal
view
returns (uint256)
{
return self.nodes[TREE_DEPTH][0];
}
function getNextLeafIndex (Data storage self)
internal
view
returns (uint256)
{
return self.cur;
}
}
contract Mixer
{
using MerkleTree for MerkleTree.Data;
uint constant public AMOUNT = 1 ether;
uint256[14] vk;
uint256[] gammaABC;
mapping (uint256 => bool) public nullifiers;
mapping (address => uint256[]) public pendingDeposits;
MerkleTree.Data internal tree;
event CommitmentAdded(address indexed _fundingWallet, uint256 _leaf);
event LeafAdded(uint256 _leaf, uint256 _leafIndex);
event DepositWithdrawn(uint256 _nullifier);
constructor(uint256[14] memory in_vk, uint256[] memory in_gammaABC)
public
{
vk = in_vk;
gammaABC = in_gammaABC;
}
function getRoot()
public
view
returns (uint256)
{
return tree.getRoot();
}
/**
* Save a commitment (leaf) that needs to be funded later on
*/
function commit(uint256 leaf, address fundingWallet)
public
payable
{
require(leaf > 0, "null leaf");
pendingDeposits[fundingWallet].push(leaf);
emit CommitmentAdded(fundingWallet, leaf);
if (msg.value > 0) fundCommitment();
}
function fundCommitment() private {
require(msg.value == AMOUNT, "wrong value");
uint256[] storage leaves = pendingDeposits[msg.sender];
require(leaves.length > 0, "commitment must be sent first");
uint256 leaf = leaves[leaves.length - 1];
leaves.length--;
(, uint256 leafIndex) = tree.insert(leaf);
emit LeafAdded(leaf, leafIndex);
}
/*
* Used by the funding wallet to fund a previously saved commitment
*/
function () external payable {
fundCommitment();
}
// should not be used in production otherwise nullifier_secret would be shared with node!
function makeLeafHash(uint256 nullifier_secret, address wallet_address)
external
pure
returns (uint256)
{
// return MiMC.Hash([nullifier_secret, uint256(wallet_address)], 0);
bytes32 digest = sha256(abi.encodePacked(nullifier_secret, uint256(wallet_address)));
uint256 mask = uint256(-1) >> 4; // clear the first 4 bits to make sure we stay within the prime field
return uint256(digest) & mask;
}
// should not be used in production otherwise nullifier_secret would be shared with node!
function makeNullifierHash(uint256 nullifier_secret)
external
pure
returns (uint256)
{
uint256[] memory vals = new uint256[](2);
vals[0] = nullifier_secret;
vals[1] = nullifier_secret;
return MiMC.Hash(vals, 0);
}
function getMerklePath(uint256 leafIndex)
external
view
returns (uint256[15] memory out_path)
{
out_path = tree.getMerkleProof(leafIndex);
}
function isSpent(uint256 nullifier)
public
view
returns (bool)
{
return nullifiers[nullifier];
}
function verifyProof(uint256 in_root, address in_wallet_address, uint256 in_nullifier, uint256[8] memory proof)
public
view
returns (bool)
{
uint256[] memory snark_input = new uint256[](3);
snark_input[0] = in_root;
snark_input[1] = uint256(in_wallet_address);
snark_input[2] = in_nullifier;
return Verifier.verify(vk, gammaABC, proof, snark_input);
}
function withdraw(
address payable in_withdraw_address,
uint256 in_nullifier,
uint256[8] memory proof
)
public
{
uint startGas = gasleft();
require(!nullifiers[in_nullifier], "Nullifier used");
require(verifyProof(getRoot(), in_withdraw_address, in_nullifier, proof), "Proof verification failed");
nullifiers[in_nullifier] = true;
emit DepositWithdrawn(in_nullifier);
uint gasUsed = startGas - gasleft() + 57700;
uint relayerRefund = gasUsed * tx.gasprice;
if(relayerRefund > AMOUNT/20) relayerRefund = AMOUNT/20;
in_withdraw_address.transfer(AMOUNT - relayerRefund); // leaf withdrawal
msg.sender.transfer(relayerRefund); // relayer refund
}
function treeDepth() external pure returns (uint256) {
return MerkleTree.treeDepth();
}
function getNextLeafIndex() external view returns (uint256) {
return tree.getNextLeafIndex();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"nullifier_secret","type":"uint256"},{"name":"wallet_address","type":"address"}],"name":"makeLeafHash","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"leaf","type":"uint256"},{"name":"fundingWallet","type":"address"}],"name":"commit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"treeDepth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"in_withdraw_address","type":"address"},{"name":"in_nullifier","type":"uint256"},{"name":"proof","type":"uint256[8]"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNextLeafIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nullifier","type":"uint256"}],"name":"isSpent","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRoot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"leafIndex","type":"uint256"}],"name":"getMerklePath","outputs":[{"name":"out_path","type":"uint256[15]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"in_root","type":"uint256"},{"name":"in_wallet_address","type":"address"},{"name":"in_nullifier","type":"uint256"},{"name":"proof","type":"uint256[8]"}],"name":"verifyProof","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"pendingDeposits","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"nullifier_secret","type":"uint256"}],"name":"makeNullifierHash","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"nullifiers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"in_vk","type":"uint256[14]"},{"name":"in_gammaABC","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_fundingWallet","type":"address"},{"indexed":false,"name":"_leaf","type":"uint256"}],"name":"CommitmentAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_leaf","type":"uint256"},{"indexed":false,"name":"_leafIndex","type":"uint256"}],"name":"LeafAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_nullifier","type":"uint256"}],"name":"DepositWithdrawn","type":"event"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200175d3803806200175d83398101806040526101e08110156200003857600080fd5b810190809190826101c00180516401000000008111156200005857600080fd5b820160208101848111156200006c57600080fd5b81518560208202830111640100000000821117156200008a57600080fd5b50909350620000a3925060009150849050600e620000c2565b508051620000b990600e90602084019062000105565b50505062000162565b82600e8101928215620000f3579160200282015b82811115620000f3578251825591602001919060010190620000d6565b506200010192915062000142565b5090565b828054828255906000526020600020908101928215620000f35791602002820182811115620000f3578251825591602001919060010190620000d6565b6200015f91905b8082111562000101576000815560010162000149565b90565b6115eb80620001726000396000f3fe6080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166303c5c65e81146100ce5780630d64b0711461011957806316a56c411461014557806322a6fef11461015a57806350e9b925146101cd5780635a129efe146101e25780635ca1e165146102205780636e4d65171461023557806374b9886e146102985780638f9ae0b914610311578063c938f0181461034a578063d178917614610374578063d21e82ab14610389575b6100cc6103b3565b005b3480156100da57600080fd5b50610107600480360360408110156100f157600080fd5b5080359060200135600160a060020a0316610503565b60408051918252519081900360200190f35b6100cc6004803603604081101561012f57600080fd5b5080359060200135600160a060020a03166105e8565b34801561015157600080fd5b506101076106b6565b34801561016657600080fd5b506100cc600480360361014081101561017e57600080fd5b604080516101008181018352600160a060020a03853516946020810135948101939092610140840192909184019060089083908390808284376000920191909152509194506106c69350505050565b3480156101d957600080fd5b50610107610888565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b5035610894565b604080519115158252519081900360200190f35b34801561022c57600080fd5b506101076108a9565b34801561024157600080fd5b5061025f6004803603602081101561025857600080fd5b50356108b5565b60405180826101e080838360005b8381101561028557818101518382015260200161026d565b5050505090500191505060405180910390f35b3480156102a457600080fd5b5061020c60048036036101608110156102bc57600080fd5b604080516101008181018352843594600160a060020a03602082013516949381013593810192909161016083019190606084019060089083908390808284376000920191909152509194506108d49350505050565b34801561031d57600080fd5b506101076004803603604081101561033457600080fd5b50600160a060020a0381351690602001356109e8565b34801561035657600080fd5b506101076004803603602081101561036d57600080fd5b5035610a18565b34801561038057600080fd5b50610107610a85565b34801561039557600080fd5b5061020c600480360360208110156103ac57600080fd5b5035610a91565b34670de0b6b3a764000014610412576040805160e560020a62461bcd02815260206004820152600b60248201527f77726f6e672076616c7565000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152601060205260408120805490911061047a576040805160e560020a62461bcd02815260206004820152601d60248201527f636f6d6d69746d656e74206d7573742062652073656e74206669727374000000604482015290519081900360640190fd5b80546000908290600019810190811061048f57fe5b60009182526020909120015482549091506104ae8360001983016114db565b5060006104c260118363ffffffff610aa616565b604080518581526020810183905281519294507f039fe56c88c7423b368b110113d8483a6b9ee8fc3d8155d1ea6266f8ed3ef19593508290030190a1505050565b60008060028484600160a060020a031660405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105685780518252601f199092019160209182019101610549565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156105a7573d6000803e3d6000fd5b5050506040513d60208110156105bc57600080fd5b50517f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b60008211610640576040805160e560020a62461bcd02815260206004820152600960248201527f6e756c6c206c6561660000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152601060209081526040808320805460018101825590845292829020909201859055815185815291517f765b674bff93b21bfb5ffcffac5d739861ed3aea348696049536c96d10e7b37e9281900390910190a260003411156106b2576106b26103b3565b5050565b60006106c0610b05565b90505b90565b60005a6000848152600f602052604090205490915060ff1615610733576040805160e560020a62461bcd02815260206004820152600e60248201527f4e756c6c69666965722075736564000000000000000000000000000000000000604482015290519081900360640190fd5b61074661073e6108a9565b8585856108d4565b151561079c576040805160e560020a62461bcd02815260206004820152601960248201527f50726f6f6620766572696669636174696f6e206661696c656400000000000000604482015290519081900360640190fd5b6000838152600f6020908152604091829020805460ff19166001179055815185815291517f0788d719d36264cd922e6e2bb8f52f65b13571d1ea3ddaf8d27b1acfdd18c3d09281900390910190a160005a820361e1640190503a810266b1a2bc2ec50000811115610811575066b1a2bc2ec500005b604051600160a060020a03871690670de0b6b3a764000083900380156108fc02916000818181858888f19350505050158015610851573d6000803e3d6000fd5b50604051339082156108fc029083906000818181858888f1935050505015801561087f573d6000803e3d6000fd5b50505050505050565b60006106c06011610b0a565b6000908152600f602052604090205460ff1690565b60006106c06011610b0e565b6108bd611504565b6108ce60118363ffffffff610b1716565b92915050565b60408051600380825260808201909252600091606091906020820183803883390190505090508581600081518110151561090a57fe5b602090810290910101528051600160a060020a038616908290600190811061092e57fe5b60209081029091010152805184908290600290811061094957fe5b6020908102919091010152604080516101c08101918290526109de91600090600e9082845b81548152602001906001019080831161096e575050505050600e8054806020026020016040519081016040528092919081815260200182805480156109d257602002820191906000526020600020905b8154815260200190600101908083116109be575b50505050508584610b8e565b9695505050505050565b601060205281600052604060002081815481101515610a0357fe5b90600052602060002001600091509150505481565b604080516002808252606080830184526000939092919060208301908038833901905050905082816000815181101515610a4e57fe5b602090810290910101528051839082906001908110610a6957fe5b60209081029091010152610a7e816000610e07565b9392505050565b670de0b6b3a764000081565b600f6020526000908152604090205460ff1681565b600080821515610ab557600080fd5b610abd611504565b610ac681610e4b565b84549150617fff821415610ad957600080fd5b8360018601836180008110610aea57fe5b0155610af6858261108b565b60018301909555509293915050565b600f90565b5490565b62078001015490565b610b1f611504565b60005b600f811015610b8757600283061515610b5957610b438482856001016111c1565b8282600f8110610b4f57fe5b6020020152610b79565b610b678482600186036111c1565b8282600f8110610b7357fe5b60200201525b600283049250600101610b22565b5092915050565b60008151600160028651811515610ba157fe5b040314610bad57600080fd5b610bb5611524565b610bbd611543565b8551600090600290889083908110610bd157fe5b60209081029190910101518352875188906001908110610bed57fe5b60209081029091010151836001602002015260005b8651811015610caf57885160018301928a918110610c1c57fe5b60209081029190910101518552885160018301928a918110610c3a57fe5b6020908102909101015185600160200201528651879082908110610c5a57fe5b60209081029091010151856002602002015260606040850160808760076107d05a03fa9250821515610c8b57600080fd5b60608460c08660066107d05a03fa9250821515610ca757600080fd5b600101610c02565b50610cb8611562565b6040805161030081018252895181526020808b01519082015289820151918101919091526060808a0151908201526080808a01519082015260a0808a0151908201528a5160c082015260e08101610d168c60015b60200201516111f2565b81526040808d015160208301526060808e0151918301919091526080808e01519183019190915260a0808e01519183019190915286519082015260c001610d5e866001610d0c565b815260c0808d0151602083015260e08d015160408301526101008d015160608301526101208d015160808301528a81015160a083015201610da08a6007610d0c565b81526101408c015160208201526101608c015160408201526101808c015160608201526101a08c01516080909101529050610dd9611582565b6020816103008460086107d05a03fa9350831515610df657600080fd5b5115159a9950505050505050505050565b604080517f6d696d630000000000000000000000000000000000000000000000000000000081529051908190036004019020600090610a7e9084908490605b61121c565b7e54b679342dc72db7dada5f1e059c89cdd0e248dfd48b93fbd819469fdddab281527f15616c4d9255be862e74568bec02555a2ec44aca0c35b6654b492d764dbaa4de60208201527f288005cad3274b9dbabda48cabd68247fd9dbfeaaf44befae372d3aa29a2222f60408201527f0e95e36069b5a4ec39d0d317ae9b3659cb7259fa6977fd4d81fae34d91885e7b60608201527f3005a039bb02066ec8f3bbce1259cfbc68c84bc5adbf353a3338c6ef1495c66660808201527f16d6b88b43188dae6501f224a9fa48d14fc1c67ce846dabfb24a94a6f23aa31260a08201527f269db736b9c3dcb23f263ed57476a620dd607eb4f08c82bc5a40baf11c2e2b9360c08201527f29be46ef2cd66613f7bece37644ec4e5cd57ae30c3c1028312fa3a1d5000521260e08201527f2fb65d8cfc2d7b52e0dd83a719f7ee81cedd92f748bdfebeddcda7ec18e2ab266101008201527f1b3ac839413221cfb6955b7822ef98fa4dfb42b0221044ace6c6272a3956a7b66101208201527f29cc155784315664174105985ee453015a0a8c5d2dd4593a8300463b52fb6ade6101408201527f1c575b8e067a3b91febbe1dda3737835804245e9858c47ae26fff4189a4111f96101608201527f123af492faf15272031d5e6625172effdfdcf365098567bdcba69d4be38a1a526101808201527f257b17ef869450bf306b6cea7449d42b6838fea192f60eefbf5927765d5bf7516101a08201527f2ac5f23fa9f80eb16660ed46597a663beae42cb4e0fe52f1b6eec9439e90b5de6101c090910152565b81546000908180805b600f8110156111af57600284061515611108576001870181601081106110b657fe5b618000020184618000811015156110c957fe5b01549250611101816001808701908a0182601081106110e457fe5b618000020187600101618000811015156110fa57fe5b01546112aa565b915061115f565b61113681600019860160018a01826010811061112057fe5b618000020160018803618000811015156110fa57fe5b925060018701816010811061114757fe5b6180000201846180008110151561115a57fe5b015491505b6002840461117e84848985600f811061117457fe5b60200201516113c0565b6001808a019084016010811061119057fe5b618000020182618000811015156111a357fe5b01559350600101611094565b50505062078001909301549392505050565b60006111ea83836001870182601081106111d757fe5b618000020185618000811015156110fa57fe5b949350505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790819006900390565b6000837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001825b875181101561129e578161126f898381518110151561125d57fe5b9060200190602002015185898961142e565b898381518110151561127d57fe5b9060200190602002015185010181151561129357fe5b069250600101611242565b50909695505050505050565b6000811515610b87576112bb6114b7565b604080517e0100000000000000000000000000000000000000000000000000000000000061ffff881602602080830191909152620100007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8816026022830152825180830382018152918301928390528151600293918291908401908083835b602083106113585780518252601f199092019160209182019101611339565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611397573d6000803e3d6000fd5b5050506040513d60208110156113ac57600080fd5b50518115156113b757fe5b06949350505050565b6040805160028082526060808301845260009390929190602083019080388339019050509050848160008151811015156113f657fe5b60209081029091010152805184908290600190811061141157fe5b602090810290910101526114258184610e07565b95945050505050565b6000600182101561143e57600080fd5b604051602081016040528381527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600080855b60008111156114a55760208520855283898587518d0808925083838409915083838586858609850909995060001901611471565b5082888a089998505050505050505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190565b8154818355818111156114ff576000838152602090206114ff9181019083016115a1565b505050565b6101e060405190810160405280600f906020820280388339509192915050565b6060604051908101604052806003906020820280388339509192915050565b6080604051908101604052806004906020820280388339509192915050565b610300604051908101604052806018906020820280388339509192915050565b6020604051908101604052806001906020820280388339509192915050565b6106c391905b808211156115bb57600081556001016115a7565b509056fea165627a7a723058204f2a38374263fce14b7ad46814cad390067baeff247c4532a66f2d95b0f5c9f10029159f09e91e1ef10716da832c2d1244a6472e5da5a16ad386894dbe2bf5e66fec24fe496b77d02691c6e9592295c8aca481ba65b4f3061e767c254fe48e0951f82927d9177c5f20b43a72cf824b712bb3ee9f43c1f9815d31ec280e6cc95b3bca1dab0af360ff7414d757502c970fb70953057101d88828dc64e98b0998dcc660259411351840195377656f5392809d61b2e5318c636009ea530a2598bab898880b20a00eadfd12032c1af8ea43ea6593f2dfd2a509fdd3bc8a983eda2fec83022aa8e49aa482324da11609f2fa212d616a80ce2c8af22e87cb4fb9b0d331a7e004e3850e0ecaeec849ebc3f5499d6cd171299699df65b8bbc4bdd2045186d150239dfeed57a34365a80027c6ba1eb42743e450da6b4bc31d7e879beed4c949ed0f00ea653b521ae74f70d846040edb377d291685031fa205c51aedc8e193f3501924cd68d520558ba67cf9b86b2d4a5b21e6c892eaa59998a15d00b52c78984f02db76679bb73ed126873b7a7e739cd73aeb8970748d78f26a5b516c23e5b75121ab18375d80412a2ff151c8be043b3af5f4fd159fae0d23bf0c07ed3e0e9abf2793ccd39e182a4ceee75740532176ccd7c364325d53f3c14122da61f8aabb8300000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000082c749d9058c25a81e28ce047d579fc9e004d6415e40c0f5207fcb9de38f95caa2b62e5faefb05eb9564cd1c2ddf7306941ba819b5716fc5d05665797d45b5ad4023631e41379aaf53c3df142b6630c2f9fdc01dc9bd8546bc887f3bc20cbc57f112bbdb56a948879015e519acc228435bf1bbc4da3c0ac7510daa75ea0ee402d1f62aa8d372dfd8e9e885c4cea65b01a5ca32c64c8ae4f4494c75dc35dc3780d0415d651a0b5ed8d1ed04e98c4c79635ed9ea843ce9e125a48ddb52542bb51281a022ccc8171193602067a83d0724e6a155a75a7767be2015199894c3fa4a62c0f76799f652b8c82725f6cb989d6e04eb01b2ca175770fbaa233744e7c8e8e66
Deployed Bytecode
0x6080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166303c5c65e81146100ce5780630d64b0711461011957806316a56c411461014557806322a6fef11461015a57806350e9b925146101cd5780635a129efe146101e25780635ca1e165146102205780636e4d65171461023557806374b9886e146102985780638f9ae0b914610311578063c938f0181461034a578063d178917614610374578063d21e82ab14610389575b6100cc6103b3565b005b3480156100da57600080fd5b50610107600480360360408110156100f157600080fd5b5080359060200135600160a060020a0316610503565b60408051918252519081900360200190f35b6100cc6004803603604081101561012f57600080fd5b5080359060200135600160a060020a03166105e8565b34801561015157600080fd5b506101076106b6565b34801561016657600080fd5b506100cc600480360361014081101561017e57600080fd5b604080516101008181018352600160a060020a03853516946020810135948101939092610140840192909184019060089083908390808284376000920191909152509194506106c69350505050565b3480156101d957600080fd5b50610107610888565b3480156101ee57600080fd5b5061020c6004803603602081101561020557600080fd5b5035610894565b604080519115158252519081900360200190f35b34801561022c57600080fd5b506101076108a9565b34801561024157600080fd5b5061025f6004803603602081101561025857600080fd5b50356108b5565b60405180826101e080838360005b8381101561028557818101518382015260200161026d565b5050505090500191505060405180910390f35b3480156102a457600080fd5b5061020c60048036036101608110156102bc57600080fd5b604080516101008181018352843594600160a060020a03602082013516949381013593810192909161016083019190606084019060089083908390808284376000920191909152509194506108d49350505050565b34801561031d57600080fd5b506101076004803603604081101561033457600080fd5b50600160a060020a0381351690602001356109e8565b34801561035657600080fd5b506101076004803603602081101561036d57600080fd5b5035610a18565b34801561038057600080fd5b50610107610a85565b34801561039557600080fd5b5061020c600480360360208110156103ac57600080fd5b5035610a91565b34670de0b6b3a764000014610412576040805160e560020a62461bcd02815260206004820152600b60248201527f77726f6e672076616c7565000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000908152601060205260408120805490911061047a576040805160e560020a62461bcd02815260206004820152601d60248201527f636f6d6d69746d656e74206d7573742062652073656e74206669727374000000604482015290519081900360640190fd5b80546000908290600019810190811061048f57fe5b60009182526020909120015482549091506104ae8360001983016114db565b5060006104c260118363ffffffff610aa616565b604080518581526020810183905281519294507f039fe56c88c7423b368b110113d8483a6b9ee8fc3d8155d1ea6266f8ed3ef19593508290030190a1505050565b60008060028484600160a060020a031660405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106105685780518252601f199092019160209182019101610549565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156105a7573d6000803e3d6000fd5b5050506040513d60208110156105bc57600080fd5b50517f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b60008211610640576040805160e560020a62461bcd02815260206004820152600960248201527f6e756c6c206c6561660000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152601060209081526040808320805460018101825590845292829020909201859055815185815291517f765b674bff93b21bfb5ffcffac5d739861ed3aea348696049536c96d10e7b37e9281900390910190a260003411156106b2576106b26103b3565b5050565b60006106c0610b05565b90505b90565b60005a6000848152600f602052604090205490915060ff1615610733576040805160e560020a62461bcd02815260206004820152600e60248201527f4e756c6c69666965722075736564000000000000000000000000000000000000604482015290519081900360640190fd5b61074661073e6108a9565b8585856108d4565b151561079c576040805160e560020a62461bcd02815260206004820152601960248201527f50726f6f6620766572696669636174696f6e206661696c656400000000000000604482015290519081900360640190fd5b6000838152600f6020908152604091829020805460ff19166001179055815185815291517f0788d719d36264cd922e6e2bb8f52f65b13571d1ea3ddaf8d27b1acfdd18c3d09281900390910190a160005a820361e1640190503a810266b1a2bc2ec50000811115610811575066b1a2bc2ec500005b604051600160a060020a03871690670de0b6b3a764000083900380156108fc02916000818181858888f19350505050158015610851573d6000803e3d6000fd5b50604051339082156108fc029083906000818181858888f1935050505015801561087f573d6000803e3d6000fd5b50505050505050565b60006106c06011610b0a565b6000908152600f602052604090205460ff1690565b60006106c06011610b0e565b6108bd611504565b6108ce60118363ffffffff610b1716565b92915050565b60408051600380825260808201909252600091606091906020820183803883390190505090508581600081518110151561090a57fe5b602090810290910101528051600160a060020a038616908290600190811061092e57fe5b60209081029091010152805184908290600290811061094957fe5b6020908102919091010152604080516101c08101918290526109de91600090600e9082845b81548152602001906001019080831161096e575050505050600e8054806020026020016040519081016040528092919081815260200182805480156109d257602002820191906000526020600020905b8154815260200190600101908083116109be575b50505050508584610b8e565b9695505050505050565b601060205281600052604060002081815481101515610a0357fe5b90600052602060002001600091509150505481565b604080516002808252606080830184526000939092919060208301908038833901905050905082816000815181101515610a4e57fe5b602090810290910101528051839082906001908110610a6957fe5b60209081029091010152610a7e816000610e07565b9392505050565b670de0b6b3a764000081565b600f6020526000908152604090205460ff1681565b600080821515610ab557600080fd5b610abd611504565b610ac681610e4b565b84549150617fff821415610ad957600080fd5b8360018601836180008110610aea57fe5b0155610af6858261108b565b60018301909555509293915050565b600f90565b5490565b62078001015490565b610b1f611504565b60005b600f811015610b8757600283061515610b5957610b438482856001016111c1565b8282600f8110610b4f57fe5b6020020152610b79565b610b678482600186036111c1565b8282600f8110610b7357fe5b60200201525b600283049250600101610b22565b5092915050565b60008151600160028651811515610ba157fe5b040314610bad57600080fd5b610bb5611524565b610bbd611543565b8551600090600290889083908110610bd157fe5b60209081029190910101518352875188906001908110610bed57fe5b60209081029091010151836001602002015260005b8651811015610caf57885160018301928a918110610c1c57fe5b60209081029190910101518552885160018301928a918110610c3a57fe5b6020908102909101015185600160200201528651879082908110610c5a57fe5b60209081029091010151856002602002015260606040850160808760076107d05a03fa9250821515610c8b57600080fd5b60608460c08660066107d05a03fa9250821515610ca757600080fd5b600101610c02565b50610cb8611562565b6040805161030081018252895181526020808b01519082015289820151918101919091526060808a0151908201526080808a01519082015260a0808a0151908201528a5160c082015260e08101610d168c60015b60200201516111f2565b81526040808d015160208301526060808e0151918301919091526080808e01519183019190915260a0808e01519183019190915286519082015260c001610d5e866001610d0c565b815260c0808d0151602083015260e08d015160408301526101008d015160608301526101208d015160808301528a81015160a083015201610da08a6007610d0c565b81526101408c015160208201526101608c015160408201526101808c015160608201526101a08c01516080909101529050610dd9611582565b6020816103008460086107d05a03fa9350831515610df657600080fd5b5115159a9950505050505050505050565b604080517f6d696d630000000000000000000000000000000000000000000000000000000081529051908190036004019020600090610a7e9084908490605b61121c565b7e54b679342dc72db7dada5f1e059c89cdd0e248dfd48b93fbd819469fdddab281527f15616c4d9255be862e74568bec02555a2ec44aca0c35b6654b492d764dbaa4de60208201527f288005cad3274b9dbabda48cabd68247fd9dbfeaaf44befae372d3aa29a2222f60408201527f0e95e36069b5a4ec39d0d317ae9b3659cb7259fa6977fd4d81fae34d91885e7b60608201527f3005a039bb02066ec8f3bbce1259cfbc68c84bc5adbf353a3338c6ef1495c66660808201527f16d6b88b43188dae6501f224a9fa48d14fc1c67ce846dabfb24a94a6f23aa31260a08201527f269db736b9c3dcb23f263ed57476a620dd607eb4f08c82bc5a40baf11c2e2b9360c08201527f29be46ef2cd66613f7bece37644ec4e5cd57ae30c3c1028312fa3a1d5000521260e08201527f2fb65d8cfc2d7b52e0dd83a719f7ee81cedd92f748bdfebeddcda7ec18e2ab266101008201527f1b3ac839413221cfb6955b7822ef98fa4dfb42b0221044ace6c6272a3956a7b66101208201527f29cc155784315664174105985ee453015a0a8c5d2dd4593a8300463b52fb6ade6101408201527f1c575b8e067a3b91febbe1dda3737835804245e9858c47ae26fff4189a4111f96101608201527f123af492faf15272031d5e6625172effdfdcf365098567bdcba69d4be38a1a526101808201527f257b17ef869450bf306b6cea7449d42b6838fea192f60eefbf5927765d5bf7516101a08201527f2ac5f23fa9f80eb16660ed46597a663beae42cb4e0fe52f1b6eec9439e90b5de6101c090910152565b81546000908180805b600f8110156111af57600284061515611108576001870181601081106110b657fe5b618000020184618000811015156110c957fe5b01549250611101816001808701908a0182601081106110e457fe5b618000020187600101618000811015156110fa57fe5b01546112aa565b915061115f565b61113681600019860160018a01826010811061112057fe5b618000020160018803618000811015156110fa57fe5b925060018701816010811061114757fe5b6180000201846180008110151561115a57fe5b015491505b6002840461117e84848985600f811061117457fe5b60200201516113c0565b6001808a019084016010811061119057fe5b618000020182618000811015156111a357fe5b01559350600101611094565b50505062078001909301549392505050565b60006111ea83836001870182601081106111d757fe5b618000020185618000811015156110fa57fe5b949350505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4790819006900390565b6000837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001825b875181101561129e578161126f898381518110151561125d57fe5b9060200190602002015185898961142e565b898381518110151561127d57fe5b9060200190602002015185010181151561129357fe5b069250600101611242565b50909695505050505050565b6000811515610b87576112bb6114b7565b604080517e0100000000000000000000000000000000000000000000000000000000000061ffff881602602080830191909152620100007dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8816026022830152825180830382018152918301928390528151600293918291908401908083835b602083106113585780518252601f199092019160209182019101611339565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611397573d6000803e3d6000fd5b5050506040513d60208110156113ac57600080fd5b50518115156113b757fe5b06949350505050565b6040805160028082526060808301845260009390929190602083019080388339019050509050848160008151811015156113f657fe5b60209081029091010152805184908290600190811061141157fe5b602090810290910101526114258184610e07565b95945050505050565b6000600182101561143e57600080fd5b604051602081016040528381527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600080855b60008111156114a55760208520855283898587518d0808925083838409915083838586858609850909995060001901611471565b5082888a089998505050505050505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000190565b8154818355818111156114ff576000838152602090206114ff9181019083016115a1565b505050565b6101e060405190810160405280600f906020820280388339509192915050565b6060604051908101604052806003906020820280388339509192915050565b6080604051908101604052806004906020820280388339509192915050565b610300604051908101604052806018906020820280388339509192915050565b6020604051908101604052806001906020820280388339509192915050565b6106c391905b808211156115bb57600081556001016115a7565b509056fea165627a7a723058204f2a38374263fce14b7ad46814cad390067baeff247c4532a66f2d95b0f5c9f10029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
159f09e91e1ef10716da832c2d1244a6472e5da5a16ad386894dbe2bf5e66fec24fe496b77d02691c6e9592295c8aca481ba65b4f3061e767c254fe48e0951f82927d9177c5f20b43a72cf824b712bb3ee9f43c1f9815d31ec280e6cc95b3bca1dab0af360ff7414d757502c970fb70953057101d88828dc64e98b0998dcc660259411351840195377656f5392809d61b2e5318c636009ea530a2598bab898880b20a00eadfd12032c1af8ea43ea6593f2dfd2a509fdd3bc8a983eda2fec83022aa8e49aa482324da11609f2fa212d616a80ce2c8af22e87cb4fb9b0d331a7e004e3850e0ecaeec849ebc3f5499d6cd171299699df65b8bbc4bdd2045186d150239dfeed57a34365a80027c6ba1eb42743e450da6b4bc31d7e879beed4c949ed0f00ea653b521ae74f70d846040edb377d291685031fa205c51aedc8e193f3501924cd68d520558ba67cf9b86b2d4a5b21e6c892eaa59998a15d00b52c78984f02db76679bb73ed126873b7a7e739cd73aeb8970748d78f26a5b516c23e5b75121ab18375d80412a2ff151c8be043b3af5f4fd159fae0d23bf0c07ed3e0e9abf2793ccd39e182a4ceee75740532176ccd7c364325d53f3c14122da61f8aabb8300000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000082c749d9058c25a81e28ce047d579fc9e004d6415e40c0f5207fcb9de38f95caa2b62e5faefb05eb9564cd1c2ddf7306941ba819b5716fc5d05665797d45b5ad4023631e41379aaf53c3df142b6630c2f9fdc01dc9bd8546bc887f3bc20cbc57f112bbdb56a948879015e519acc228435bf1bbc4da3c0ac7510daa75ea0ee402d1f62aa8d372dfd8e9e885c4cea65b01a5ca32c64c8ae4f4494c75dc35dc3780d0415d651a0b5ed8d1ed04e98c4c79635ed9ea843ce9e125a48ddb52542bb51281a022ccc8171193602067a83d0724e6a155a75a7767be2015199894c3fa4a62c0f76799f652b8c82725f6cb989d6e04eb01b2ca175770fbaa233744e7c8e8e66
-----Decoded View---------------
Arg [0] : in_vk (uint256[14]): 9779566904105149176222081707057587976877058110298075309227008078975588528108,16732548428266699621670505691703954760949781790382216681520073257735865061880,18615232139574163262432978771997369174279565976173196337249075195079936392138,13419279035937404457774522130382971716238540254905519602867430346476496930400,16997187524286989819500266794706150023420062782897337922571191486861542987912,5033085115666711967676699713501686542502401552716797579326528088019118621442,19295547714703587434736856017336758218967383474782541337859610467588929333216,2211243989298989053393329993856424867963784724058427675290038339771136659792,16110104131893306839545480989604421512282684983348428876079210033659299580397,6786310466595959483958234494168229224109867784303690079469546386854325252944,11372845393194046622635497561488641057905672294738968804618615291245854496847,1292382403695214933109732466274980910525243101902159288088291573056697382737,15228621985881088190291325436492099660993471834725694821284490070760425953983,17901341274722586772097474915029604334818545076907245896896849803615884983171
Arg [1] : in_gammaABC (uint256[]): 20107807062934213936452898468731755910402832105493004484581538845724549668010,19624190766571010315982727046408852642629832405927111527083359819608780135124,1000379773154383151911734725442617403907848115591574013688642789790364452223,7766602170735095187965050009248767931658321733358137008223157674872323063853,14196026422472069586557649336427622727420682022007457756982464600723836598285,1847834357092112322598198517534026541343878108202463914113112699389026717992,11763976947594673391355221723036726623327804630459579272045838283069689472556,6994020090986783334330010883380435688721523071171184179621863974480229863014
-----Encoded View---------------
24 Constructor Arguments found :
Arg [0] : 159f09e91e1ef10716da832c2d1244a6472e5da5a16ad386894dbe2bf5e66fec
Arg [1] : 24fe496b77d02691c6e9592295c8aca481ba65b4f3061e767c254fe48e0951f8
Arg [2] : 2927d9177c5f20b43a72cf824b712bb3ee9f43c1f9815d31ec280e6cc95b3bca
Arg [3] : 1dab0af360ff7414d757502c970fb70953057101d88828dc64e98b0998dcc660
Arg [4] : 259411351840195377656f5392809d61b2e5318c636009ea530a2598bab89888
Arg [5] : 0b20a00eadfd12032c1af8ea43ea6593f2dfd2a509fdd3bc8a983eda2fec8302
Arg [6] : 2aa8e49aa482324da11609f2fa212d616a80ce2c8af22e87cb4fb9b0d331a7e0
Arg [7] : 04e3850e0ecaeec849ebc3f5499d6cd171299699df65b8bbc4bdd2045186d150
Arg [8] : 239dfeed57a34365a80027c6ba1eb42743e450da6b4bc31d7e879beed4c949ed
Arg [9] : 0f00ea653b521ae74f70d846040edb377d291685031fa205c51aedc8e193f350
Arg [10] : 1924cd68d520558ba67cf9b86b2d4a5b21e6c892eaa59998a15d00b52c78984f
Arg [11] : 02db76679bb73ed126873b7a7e739cd73aeb8970748d78f26a5b516c23e5b751
Arg [12] : 21ab18375d80412a2ff151c8be043b3af5f4fd159fae0d23bf0c07ed3e0e9abf
Arg [13] : 2793ccd39e182a4ceee75740532176ccd7c364325d53f3c14122da61f8aabb83
Arg [14] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [16] : 2c749d9058c25a81e28ce047d579fc9e004d6415e40c0f5207fcb9de38f95caa
Arg [17] : 2b62e5faefb05eb9564cd1c2ddf7306941ba819b5716fc5d05665797d45b5ad4
Arg [18] : 023631e41379aaf53c3df142b6630c2f9fdc01dc9bd8546bc887f3bc20cbc57f
Arg [19] : 112bbdb56a948879015e519acc228435bf1bbc4da3c0ac7510daa75ea0ee402d
Arg [20] : 1f62aa8d372dfd8e9e885c4cea65b01a5ca32c64c8ae4f4494c75dc35dc3780d
Arg [21] : 0415d651a0b5ed8d1ed04e98c4c79635ed9ea843ce9e125a48ddb52542bb5128
Arg [22] : 1a022ccc8171193602067a83d0724e6a155a75a7767be2015199894c3fa4a62c
Arg [23] : 0f76799f652b8c82725f6cb989d6e04eb01b2ca175770fbaa233744e7c8e8e66
Deployed Bytecode Sourcemap
19548:4497:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21249:16;:14;:16::i;:::-;19548:4497;21376:469;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21376:469:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21376:469:0;;;;;;-1:-1:-1;;;;;21376:469:0;;;;;;;;;;;;;;;;;;;20413:290;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20413:290:0;;;;;;-1:-1:-1;;;;;20413:290:0;;;23824:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23824:101:0;;;;23029:787;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23029:787:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;23029:787:0;;;;;;;;;-1:-1:-1;;;;;23029:787:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;23029:787:0;;-1:-1:-1;23029:787:0;;-1:-1:-1;;;;23029:787:0;23933:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23933:109:0;;;;22436:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22436:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22436:142:0;;;;;;;;;;;;;;;;;;;;;20202:121;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20202:121:0;;;;22242:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22242:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22242:186:0;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22242:186:0;;;;;;;;;;;;;;;;22586:435;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22586:435:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;22586:435:0;;;;;;;;;;;;-1:-1:-1;;;;;22586:435:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;22586:435:0;;-1:-1:-1;22586:435:0;;-1:-1:-1;;;;22586:435:0;19760:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19760:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19760:53:0;;;;;;;;;21948:286;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21948:286:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21948:286:0;;;19616:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19616:37:0;;;;19710:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19710:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19710:43:0;;;20711:402;20764:9;19646:7;20764:19;20756:43;;;;;-1:-1:-1;;;;;20756:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20853:10;20810:24;20837:27;;;:15;:27;;;;;20883:13;;20837:27;;-1:-1:-1;20875:59:0;;;;;-1:-1:-1;;;;;20875:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20967:13;;20945:12;;20960:6;;-1:-1:-1;;20967:17:0;;;20960:25;;;;;;;;;;;;;;;;20996:15;;20960:25;;-1:-1:-1;20996:15:0;:6;-1:-1:-1;;20996:15:0;;;:::i;:::-;-1:-1:-1;21025:17:0;21046;:4;21058;21046:17;:11;:17;:::i;:::-;21079:26;;;;;;;;;;;;;;21022:41;;-1:-1:-1;21079:26:0;;-1:-1:-1;21079:26:0;;;;;;20711:402;;;:::o;21376:469::-;21498:7;21601:14;21618:67;21642:16;21668:14;-1:-1:-1;;;;;21660:23:0;21625:59;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21625:59:0;;;21618:67;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;21618:67:0;;;;;;;-1:-1:-1;263:2;;-1:-1;;21618:67:0;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21618:67:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21618:67:0;25:41:-1;21815:22:0;;21376:469;-1:-1:-1;;;;21376:469:0:o;20413:290::-;20530:1;20523:8;;20515:30;;;;;-1:-1:-1;;;;;20515:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20556:30:0;;;;;;:15;:30;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;20556:41:0;;;;;;;;;;;;;20613:36;;;;;;;;;;;;;;;;;20676:1;20664:9;:13;20660:35;;;20679:16;:14;:16::i;:::-;20413:290;;:::o;23824:101::-;23868:7;23895:22;:20;:22::i;:::-;23888:29;;23824:101;;:::o;23029:787::-;23197:13;23213:9;23242:24;;;;:10;:24;;;;;;23197:25;;-1:-1:-1;23242:24:0;;23241:25;23233:52;;;;;-1:-1:-1;;;;;23233:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23304:64;23316:9;:7;:9::i;:::-;23327:19;23348:12;23362:5;23304:11;:64::i;:::-;23296:102;;;;;;;-1:-1:-1;;;;;23296:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23411:24;;;;:10;:24;;;;;;;;;:31;;-1:-1:-1;;23411:31:0;23438:4;23411:31;;;23458:30;;;;;;;;;;;;;;;;;23501:12;23527:9;23516:20;;23539:5;23516:28;;-1:-1:-1;23586:11:0;23576:21;;23627:9;23611:25;;23608:55;;;-1:-1:-1;23654:9:0;23608:55;23674:52;;-1:-1:-1;;;;;23674:28:0;;;19646:7;23703:22;;;23674:52;;;;;;;;;23703:22;23674:28;:52;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;23756:34:0;;:10;;:34;;;;;23776:13;;23756:34;;;;23776:13;23756:10;:34;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23756:34:0;23029:787;;;;;;:::o;23933:109::-;23984:7;24011:23;:4;:21;:23::i;22436:142::-;22520:4;22549:21;;;:10;:21;;;;;;;;;22436:142::o;20202:121::-;20269:7;20301:14;:4;:12;:14::i;22242:186::-;22334:27;;:::i;:::-;22390:30;:4;22410:9;22390:30;:19;:30;:::i;:::-;22379:41;22242:186;-1:-1:-1;;22242:186:0:o;22586:435::-;22799:16;;;22813:1;22799:16;;;;;;;;;22746:4;;22768:28;;22799:16;;;;22768:28;;105:10:-1;22799:16:0;88:34:-1;136:17;;-1:-1;22799:16:0;22768:47;;22843:7;22826:11;22838:1;22826:14;;;;;;;;;;;;;;;;;;:24;22861:14;;-1:-1:-1;;;;;22878:26:0;;;22861:11;;22873:1;;22861:14;;;;;;;;;;;;;;:43;22915:14;;22932:12;;22915:11;;22927:1;;22915:14;;;;;;;;;;;;;;;:29;22964:49;;;;;;;;;;;;-1:-1:-1;;22964:49:0;;-1:-1:-1;22964:49:0;;;;;;;;;;;;;;;;;;;;;;22984:8;22964:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22994:5;23001:11;22964:15;:49::i;:::-;22957:56;22586:435;-1:-1:-1;;;;;;22586:435:0:o;19760:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21948:286::-;22100:16;;;22114:1;22100:16;;;22076:21;22100:16;;;;;22051:7;;22076:21;;22100:16;22114:1;22100:16;;;;;105:10:-1;22100:16:0;88:34:-1;136:17;;-1:-1;22100:16:0;22076:40;;22137:16;22127:4;22132:1;22127:7;;;;;;;;;;;;;;;;;;:26;22164:7;;22174:16;;22164:4;;22169:1;;22164:7;;;;;;;;;;;;;;:26;22208:18;22218:4;22224:1;22208:9;:18::i;:::-;22201:25;21948:286;-1:-1:-1;;;21948:286:0:o;19616:37::-;19646:7;19616:37;:::o;19710:43::-;;;;;;;;;;;;;;;:::o;15828:426::-;15913:16;;15971:9;;;15963:18;;;;;;15996:22;;:::i;:::-;16029:17;16042:3;16029:12;:17::i;:::-;16068:8;;;-1:-1:-1;16107:18:0;16097:28;;;16089:37;;;;;;16163:4;16139:10;;;16153:6;16139:13;:21;;;;;;;:28;16191:21;16202:4;16208:3;16191:10;:21::i;:::-;16245:1;16236:10;;16225:21;;;-1:-1:-1;16180:32:0;;15828:426;-1:-1:-1;;15828:426:0:o;13901:89::-;13661:2;13901:89;:::o;19395:144::-;19523:8;;19395:144::o;19235:152::-;19354:22;;:25;;19235:152::o;17390:480::-;17495:29;;:::i;:::-;17547:10;17542:321;13661:2;17563:5;:18;17542:321;;;17628:1;17620:5;:9;:14;17616:198;;;17675:31;17683:4;17689:5;17696;17704:1;17696:9;17675:7;:31::i;:::-;17655:10;17666:5;17655:17;;;;;;;;;;:51;17616:198;;;17767:31;17775:4;17781:5;17796:1;17788:5;:9;17767:7;:31::i;:::-;17747:10;17758:5;17747:17;;;;;;;;;;:51;17616:198;17849:1;17841:5;:9;;-1:-1:-1;17583:7:0;;17542:321;;;;17390:480;;;;:::o;7538:2386::-;7722:4;7787:12;:19;7781:1;7776;7755:11;:18;:22;;;;;;;;7754:28;7753:53;7744:64;;;;;;7877:27;;:::i;:::-;7915;;:::i;:::-;8063:14;;7953:12;;7985:1;;8063:11;;7953:12;;8063:14;;;;;;;;;;;;;;;;8048:29;;8103:14;;;;8115:1;;8103:14;;;;;;;;;;;;;;;8088:9;8098:1;8088:12;;;:29;8216:6;8211:641;8232:12;:19;8228:1;:23;8211:641;;;8288:16;;8300:3;;;;8288:11;;:16;;;;;;;;;;;;;;;;8273:31;;8334:16;;8346:3;;;;8334:16;;;;;;;;;;;;;;;;;8319:9;8329:1;8319:12;;;:31;8380:15;;:12;;8393:1;;8380:15;;;;;;;;;;;;;;;8365:9;8375:1;8365:12;;;:30;8588:4;8581;8566:20;;8560:4;8549:9;8546:1;8539:4;8534:3;8530:14;8519:74;8508:85;;8630:7;8622:16;;;;;;;;8790:4;8779:9;8773:4;8762:9;8759:1;8752:4;8747:3;8743:14;8732:63;8721:74;;8832:7;8824:16;;;;;;;;8253:3;;8211:641;;;;8872:21;;:::i;:::-;:849;;;;;;;;8946:11;;8872:849;;8946:11;8959;;;;8872:849;;;;9029:11;;;;8872:849;;;;;;;;9042:11;;;;8872:849;;;;;9055:11;;;;8872:849;;;;;9068:11;;;;8872:849;;;;9151:8;;8872:849;;;;;;;9161:17;9151:5;8968:1;9169:8;;;;;9161:7;:17::i;:::-;8872:849;;9234:8;;;;;8872:849;;;;9244:8;;;;;8872:849;;;;;;;9254:8;;;;;8872:849;;;;;;;9264:8;;;;;8872:849;;;;;;;9353:12;;8872:849;;;;;;9367:21;9353:9;9385:1;9375:12;;9367:21;8872:849;;9436:8;;;;;8872:849;;;;9446:8;;;;8872:849;;;;9456:8;;;;8872:849;;;;9466:8;;;;8872:849;;;;9558:11;;;;-1:-1:-1;8872:849:0;;;;9571:20;9558:8;9452:1;9579:11;;9571:20;8872:849;;9641:9;;;;8872:849;;;;9652:9;;;;8872:849;;;;9663:9;;;;8872:849;;;;9674:9;;;;8872:849;;;;;;-1:-1:-1;9734:18:0;;:::i;:::-;9845:4;9840:3;9835;9828:5;9825:1;9818:4;9813:3;9809:14;9798:52;9787:63;;9879:7;9871:16;;;;;;;;9905:6;:11;;;;-1:-1:-1;;;;;;;;;;7538:2386:0:o;13238:189::-;13396:17;;;;;;;;;;;;;;;;13328:7;;13360:59;;13371:7;;13380:6;;13416:2;13360:10;:59::i;14000:1547::-;14104:75;14095:84;;14199:76;14095:6;14190;;:85;14295:77;14286:6;;;:86;14392:76;14383:6;;;:85;14488:77;14479:6;;;:86;14585:77;14576:6;;;:86;14682:77;14673:6;;;:86;14779:77;14770:6;;;:86;14876:77;14867:6;;;:86;14973:77;14964:6;;;:86;15071:77;15061:7;;;:87;15169:77;15159:7;;;:87;15267:76;15257:7;;;:86;15364:77;15354:7;;;:87;15462:77;15452:7;;;;:87;14000:1547::o;18286:939::-;18425:8;;18375:12;;;;;18494:679;13661:2;18515:5;:18;18494:679;;;18587:1;18574:12;:14;:19;18570:413;;;18635:10;;;18646:5;18635:17;;;;;;;;;;18653:12;18635:31;;;;;;;;;;;;-1:-1:-1;18695:75:0;18709:5;18731:1;18716:16;;;;18734:10;;18709:5;18734:17;;;;;;;;;;18752:12;18767:1;18752:16;18734:35;;;;;;;;;;;18695:13;:75::i;:::-;18687:83;;18570:413;;;18832:75;18846:5;-1:-1:-1;;18853:16:0;;18868:1;18871:10;;18846:5;18871:17;;;;;;;;;;18904:1;18889:12;:16;18871:35;;;;;;;;18832:75;18824:83;-1:-1:-1;18936:10:0;;;18947:5;18936:17;;;;;;;;;;18954:12;18936:31;;;;;;;;;;;18928:39;;18570:413;19034:1;19021:14;;19086:34;19095:5;19102;19109:3;19113:5;19109:10;;;;;;;;;;;19086:8;:34::i;:::-;19053:10;;;;;19064:7;;19053:19;;;;;;;;;;19073:9;19053:30;;;;;;;;;;:67;19152:9;-1:-1:-1;18535:7:0;;18494:679;;;-1:-1:-1;;;19192:22:0;;;;:25;;;-1:-1:-1;;;18286:939:0:o;17174:206::-;17285:7;17317:55;17331:5;17338:6;17346:10;;;17331:5;17346:17;;;;;;;;;;17364:6;17346:25;;;;;;;;17317:55;17310:62;17174:206;-1:-1:-1;;;;17174:206:0:o;5734:230::-;5850:77;5950:5;;;;5945:11;;;5734:230::o;12372:858::-;12501:7;12538:4;12570:66;12501:7;12649:149;12673:4;:11;12669:1;:15;12649:149;;;12780:6;12735:41;12743:4;12748:1;12743:7;;;;;;;;;;;;;;;;;;12752:1;12755:7;12764:11;12735:7;:41::i;:::-;12725:4;12730:1;12725:7;;;;;;;;;;;;;;;;;;12721:1;:11;:55;12720:66;;;;;;;;;-1:-1:-1;12686:3:0;;12649:149;;;-1:-1:-1;13221:1:0;;12372:858;-1:-1:-1;;;;;;12372:858:0:o;17880:396::-;17980:7;18009:11;;18005:240;;;18212:21;:19;:21::i;:::-;18108:99;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;18108:99:0;;;;;;;18079:129;;;;18108:99;;;18079:129;;;;;18108:99;18079:129;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;18079:129:0;;;;;;;-1:-1:-1;263:2;;-1:-1;;18079:129:0;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18079:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18079:129:0;18053:180;;;;;;;;;18264:4;-1:-1:-1;;;;17880:396:0:o;15557:261::-;15713:16;;;15727:1;15713:16;;;15692:18;15713:16;;;;;15667:7;;15692:18;;15713:16;15727:1;15713:16;;;;;105:10:-1;15713:16:0;88:34:-1;136:17;;-1:-1;15713:16:0;15692:37;;15747:4;15740:1;15742;15740:4;;;;;;;;;;;;;;;;;;:11;15762:4;;15769:5;;15762:1;;15764;;15762:4;;;;;;;;;;;;;;:12;15794:16;15804:1;15807:2;15794:9;:16::i;:::-;15787:23;15557:261;-1:-1:-1;;;;;15557:261:0:o;11141:1216::-;11257:13;11331:1;11318:11;11315:18;11312:2;;;11346:1;11343;11336:12;11312:2;11442:4;11436:11;11481:2;11478:1;11474:10;11468:4;11461:24;11509:7;11506:1;11499:18;11547:66;;;11753:11;11738:493;11773:1;11770;11767:8;11738:493;;;11866:2;11863:1;11853:16;11850:1;11843:27;11987:6;11981:4;11972:6;11968:1;11962:8;11956:4;11949:30;11942:52;11937:57;;12062:6;12059:1;12056;12049:20;12044:25;;12198:6;12195:1;12186:6;12177;12174:1;12171;12164:20;12161:1;12154:39;12147:58;12139:66;-1:-1:-1;;;11783:9:0;11738:493;;;11742:24;12332:6;12326:4;12320;12313:26;12304:35;11297:1053;-1:-1:-1;;;;;;;;;11297:1053:0:o;10836:165::-;10927:66;10836:165;:::o;19548:4497::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;19548:4497:0;;;-1:-1:-1;;19548:4497:0:o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;19548:4497:0;;;-1:-1:-1;;19548:4497:0:o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;19548:4497:0;;;-1:-1:-1;;19548:4497:0:o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;19548:4497:0;;;-1:-1:-1;;19548:4497:0:o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;19548:4497:0;;;-1:-1:-1;;19548:4497:0:o;:::-;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://4f2a38374263fce14b7ad46814cad390067baeff247c4532a66f2d95b0f5c9f1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.