diff --git a/src/poseidon_gencontract.js b/src/poseidon_gencontract.js index fa18028..3f896ab 100644 --- a/src/poseidon_gencontract.js +++ b/src/poseidon_gencontract.js @@ -100,8 +100,13 @@ function createCode(nInputs) { C.push(0); C.calldataload(); C.div(); - C.push(Web3Utils.keccak256(`poseidon(uint256[${nInputs}])`).slice(0, 10)); // poseidon(uint256[]) + C.dup(0); + C.push(Web3Utils.keccak256(`poseidon(uint256[${nInputs}])`).slice(0, 10)); // poseidon(uint256[n]) C.eq(); + C.swap(1); + C.push(Web3Utils.keccak256(`poseidon(bytes32[${nInputs}])`).slice(0, 10)); // poseidon(bytes32[n]) + C.eq(); + C.or(); C.jmpi("start"); C.invalid(); @@ -157,6 +162,27 @@ function createCode(nInputs) { function generateABI(nInputs) { return [ + { + "constant": true, + "inputs": [ + { + "internalType": `bytes32[${nInputs}]`, + "name": "input", + "type": `bytes32[${nInputs}]` + } + ], + "name": "poseidon", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [