diff --git a/src/poseidon_gencontract.js b/src/poseidon_gencontract.js index ddf141c..fa18028 100644 --- a/src/poseidon_gencontract.js +++ b/src/poseidon_gencontract.js @@ -4,6 +4,7 @@ const Contract = require("./evmasm"); const { unstringifyBigInts } = require("ffjavascript").utils; +const Web3Utils = require("web3-utils"); const { C:K, M } = unstringifyBigInts(require("./poseidon_constants.json")); @@ -99,7 +100,7 @@ function createCode(nInputs) { C.push(0); C.calldataload(); C.div(); - C.push("0xc4420fb4"); // poseidon(uint256[]) + C.push(Web3Utils.keccak256(`poseidon(uint256[${nInputs}])`).slice(0, 10)); // poseidon(uint256[]) C.eq(); C.jmpi("start"); C.invalid(); @@ -112,11 +113,10 @@ function createCode(nInputs) { // Load t values from the call data. // The function has a single array param param - // [Selector (4)] [Pointer (32)][Length (32)] [data1 (32)] .... - // We ignore the pointer and the length and just load t values to the state - // (Stack positions 0-{t-1}) If the array is shorter, we just set zeros. + // [Selector (4)] [item1 (32)] [item2 (32)] .... + // Stack positions 0-nInputs. for (let i=0; i { - const C = new web3.eth.Contract(poseidonGenContract.abi); + const C6 = new web3.eth.Contract(poseidonGenContract.generateABI(5)); + const C3 = new web3.eth.Contract(poseidonGenContract.generateABI(2)); - poseidon6 = await C.deploy({ + poseidon6 = await C6.deploy({ data: poseidonGenContract.createCode(5) }).send({ gas: 5000000, from: accounts[0] }); - poseidon3 = await C.deploy({ + poseidon3 = await C3.deploy({ data: poseidonGenContract.createCode(2) }).send({ gas: 5000000, @@ -37,7 +38,7 @@ describe("Poseidon Smart contract test", function () { }); }); - it("Shold calculate the poseidon correctly t=6", async () => { + it("Should calculate the poseidon correctly t=6", async () => { const res = await poseidon6.methods.poseidon([1,2, 0, 0, 0]).call(); @@ -48,7 +49,7 @@ describe("Poseidon Smart contract test", function () { assert.equal(res.toString(), res2.toString()); }); - it("Shold calculate the poseidon correctly t=3", async () => { + it("Should calculate the poseidon correctly t=3", async () => { const res = await poseidon3.methods.poseidon([1,2]).call();