UNPKG

@gooddollar/goodprotocol

Version:
187 lines (165 loc) 7.13 kB
import { ethers } from "hardhat"; import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; import { BigNumber } from "ethers"; import { expect } from "chai"; import { GReputation } from "../../types"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/dist/src/signer-with-address"; import { createDAO } from "../helpers"; const BN = ethers.BigNumber; export const NULL_ADDRESS = ethers.constants.AddressZero; type BlockChainState = { stateHash: string; hashType: BigNumber; totalSupply: BigNumber; blockNumber: BigNumber; }; let grep: GReputation, grepWithOwner: GReputation, identity, gd, bounty; let signers: SignerWithAddress[], founder, repOwner, rep1, rep2, rep3, repTarget, delegator, setDAOAddress, avatar; const fuseHash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes("fuse")); describe("GReputation Merkle V2", () => { let merkleRoot: any, proof: any; let avatarGenericCall; before(async () => { let { reputation, setDAOAddress: sda, avatar: av, genericCall } = await loadFixture(createDAO); setDAOAddress = sda; avatar = av; avatarGenericCall = genericCall; grep = (await ethers.getContractAt( "GReputation", reputation )) as GReputation; signers = await ethers.getSigners(); [founder, repOwner, rep1, rep2, rep3, repTarget] = signers.map( _ => _.address ); delegator = ethers.Wallet.createRandom().connect(ethers.provider); grepWithOwner = await grep.connect(ethers.provider.getSigner(repOwner)); }); describe("legacy with positions", async () => { it("should set rootState", async () => { let encodedCall = grep.interface.encodeFunctionData( "setBlockchainStateHash", [ "rootState", "0x20fff2ba627e4337c2bd82aff0cb20cdce809bd9675f149edc32598a85e464e4", 100 ] ); await avatarGenericCall(grep.address, encodedCall); const rootState = await grep.blockchainStates(await grep.ROOT_STATE(), 0); expect(rootState[0]).to.be.equal( "0x20fff2ba627e4337c2bd82aff0cb20cdce809bd9675f149edc32598a85e464e4" ); }); it("should prove leaf with positions", async () => { await grep.proveBalanceOfAtBlockchainLegacy( "rootState", "0x73cbb02cafe29bfda5235ed98edec5406b6512e5", "0x8343be193b694ab0", [ "0x460fc64aad90fbc82a7471281bbc55c1fc8f9ca1e21d08584148066181a74f0f", "0x2a6ee6e717ff88922a7b7c803e4295bf30f8623dfe140945f7a5eb4315458a9a", "0xeadd77f612cf2e56c7a807e98f40a629efb34ba03821a12cac514b094d25a926", "0x2b2bd1954c065e583e7396b070773a89e87ee858485276dafd86456d354f6b12", "0x77b313fea73f4e4c07737540a3c0acedc329961a91e28c59d1730baec8468e4e", "0x516284aa8d3550d2057e334e8a5c28e98bcea77d87210c4c150777275c7c8725", "0x6429086161f7f0e20c01b70392e282a2b23b36a8d008044288f11dfa0d3b9884", "0x2173e73454370bbfd1fc631a4a9d2e0c137b4dbf2de143588d1c6ee252c3b3a4", "0x7f1cee84605832c9be1a547f6591e209c1116206a14b2f99e56696c550622af2", "0xb13201fa214c25b8c72f3076b4ad27ce9a734328671545c9b76f350f63779549" ], [false, true, false, false, false, false, false, false, false, false], 275342 ); expect( await grep.balanceOf("0x73cbb02cafe29bfda5235ed98edec5406b6512e5") ).to.eq("0x8343be193b694ab0"); }); }); describe("v2 sorted pairs", async () => { it("should set sorted rootState", async () => { let { reputation, genericCall } = await loadFixture(createDAO); let avatarGenericCall = genericCall; grep = (await ethers.getContractAt( "GReputation", reputation )) as GReputation; let encodedCall = grep.interface.encodeFunctionData( "setBlockchainStateHash", [ "rootState", "0x7a0be1cac756f662e1c04672fc6d4e6fc348a083d59eccad463c4729197aafc4", //root generated from original airdrop using airdropCalculationSorted 100 ] ); await avatarGenericCall(grep.address, encodedCall); const rootState = await grep.blockchainStates(await grep.ROOT_STATE(), 0); expect(rootState[0]).to.be.equal( "0x7a0be1cac756f662e1c04672fc6d4e6fc348a083d59eccad463c4729197aafc4" ); }); it("should prove short proof without positions", async () => { await grep.proveBalanceOfAtBlockchain( "rootState", "0x73cbb02cafe29bfda5235ed98edec5406b6512e5", "0x8343be193b694ab0", [ "0x16b4477cc04a024bf3505f6a04f7bca76a2ddec2107502b66da5e71b91d76d61", "0x4f7623e2249c2a3916a23be21df536eb9a34eadf9cb10be39b426fe9800c28f2", "0x6814dbe4325de04981883400281fb0913ca4221c66616320588ff4a5d13b87c0", "0x302d117bdfd5fc86fc9e42ed39edbd4306f8c247d171d9cee6aec1aa0936fa6d", "0x64b3c1913ccd4d0c32627e08b55bc9df1640b93a351f1806dd381344d3f8117d", "0xebac0d3e42de13b283926dd841f99ad160764f4bf7df0bd27f9d27e1fc575e28", "0x9f228b6657ab294880377a0084efac1c0cf0769a881ab2580f8e140285264ef8", "0x958adc0fd01418770b5214bc253228f2eaf025685d96e96fadcf228d112ebb5d", "0x3389f783d56926987e6f54bd257eafe4a1c6c17e86eb2c686bd4b7cd3726956e", "0x4ba8453af6dc5f85a5bb758cddff71de67735af8688f19ae436c964d12383434" ] ); expect( await grep.balanceOf("0x73cbb02cafe29bfda5235ed98edec5406b6512e5") ).to.eq("0x8343be193b694ab0"); }); it("should prove long proof without positions", async () => { await grep.proveBalanceOfAtBlockchain( "rootState", "0xe0326d833fa61bf4a37108d00c77a700a8276c0b", "0x07d517539148", [ "0xb213cae084b76277ba2ff96258ced405d9d69904b932e54017879cc2a17039ce", "0xa592de93f8aa839606caaf8e5c6c7c80e7f5aeccfd9e9b01cdb3c6d302b995f2", "0xda4ec40bfbf97695170491a63ecf40d56b4bd9ccb4ff4b6449fbabfb90c1d6d5", "0x5f0020fc15d953bbfbf8ff642a5d516e23e53e69cc602f5180da269825e03cb7", "0xb5fbae38ef9aa4af85d9f9b3d79e2080d0aae03c0bdc1063ec719524937d4617", "0x9652e4f02994100d797cd62f2102fb2010299f9228745c924a895f6a3b4c82a3", "0xc8e7219998db3fc584b0c9c38a23a1bd0d89bfbfb409f970565182733cbaef8b", "0x7cbe12dea3c97e7af5872b9a2b4b9ab17eda9d32758836c56c62be6d7bc37a81", "0xe3313f60cd92e011d28528863b42dee27bb5501a9e2da5328325ac4e85fae3fc", "0x62a7c34c32351d3ec8b97bf636df52db61d2689cfa422498bb4d11c269cdb42d", "0xb611c79fb268c7a4a46833850a18246b301bf5c2f9922b76ec812dbb378b4af1", "0x22c12c49e96fbad43dbd595b50f499599d6f187fce1d7441f723eb7988268bed", "0x32ddaba430296ba4ba670862a96395a5a31017976a49f5c7d35a444078347264", "0x1db8774ee444f0e8424f8c6e3295e3c4b4313d0b7b0c7789a5c63df985119c51", "0x4ba8453af6dc5f85a5bb758cddff71de67735af8688f19ae436c964d12383434" ] ); expect( await grep.balanceOf("0xe0326d833fa61bf4a37108d00c77a700a8276c0b") ).to.eq(8611800781128); }); }); });