Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contracts/lib/VerifierLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -749,7 +749,7 @@ library VerifierLib {
address sender
) public checkMultiRequestExistence(self, multiRequest.multiRequestId, false) {
uint256 expectedMultiRequestId = uint256(
keccak256(abi.encodePacked(multiRequest.requestIds, multiRequest.groupIds, sender))
keccak256(abi.encode(multiRequest.requestIds, multiRequest.groupIds, sender))
);
if (expectedMultiRequestId != multiRequest.multiRequestId) {
revert MultiRequestIdNotValid(expectedMultiRequestId, multiRequest.multiRequestId);
Expand Down
2 changes: 1 addition & 1 deletion contracts/verifiers/UniversalVerifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ contract UniversalVerifier is
/**
* @dev Version of contract
*/
string public constant VERSION = "3.0.0";
string public constant VERSION = "3.1.0";

/**
* @dev Event emitted upon submitting a request
Expand Down
2 changes: 1 addition & 1 deletion helpers/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ export const contractsInfo = Object.freeze({
},
UNIVERSAL_VERIFIER: {
name: "UniversalVerifier",
version: "3.0.0",
version: "3.1.0",
unifiedAddress: "0x2B0D3f664A5EbbfBD76E6cbc2cA9A504a68d2F4F",
create2Calldata: ethers.hexlify(ethers.toUtf8Bytes("iden3.create2.UniversalVerifier.v2")),
verificationOpts: {
Expand Down
3 changes: 2 additions & 1 deletion test/integration-tests/integration-verifier.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import {
packLinkedMultiQueryValidatorParams,
packV3ValidatorParams,
} from "../utils/validator-pack-utils";
import { calculateGroupId, calculateMultiRequestId, CircuitId } from "@0xpolygonid/js-sdk";
import { calculateGroupId, CircuitId } from "@0xpolygonid/js-sdk";
import { calculateMultiRequestId } from "../utils/id-calculation-utils";
import { calculateQueryHashV3 } from "../utils/query-hash-utils";
import { chainIdInfoMap, contractsInfo, TEN_YEARS } from "../../helpers/constants";
import CredentialAtomicQueryV3ValidatorModule from "../../ignition/modules/deployEverythingBasicStrategy/credentialAtomicQueryV3Validator";
Expand Down
5 changes: 4 additions & 1 deletion test/utils/id-calculation-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ export function calculateMultiRequestId(
): bigint {
return BigInt(
ethers.keccak256(
ethers.solidityPacked(["uint256[]", "uint256[]", "address"], [requestIds, groupIds, sender]),
ethers.AbiCoder.defaultAbiCoder().encode(
["uint256[]", "uint256[]", "address"],
[requestIds, groupIds, sender],
),
),
);
}
3 changes: 2 additions & 1 deletion test/verifier/universal-verifier.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { expect } from "chai";
import { packValidatorParams } from "../utils/validator-pack-utils";
import { AbiCoder, Block } from "ethers";
import { byteEncoder, calculateMultiRequestId, CircuitId } from "@0xpolygonid/js-sdk";
import { byteEncoder, CircuitId } from "@0xpolygonid/js-sdk";
import { calculateMultiRequestId } from "../utils/id-calculation-utils";
import { chainIdInfoMap, contractsInfo } from "../../helpers/constants";
import { beforeEach } from "mocha";
import { network } from "hardhat";
Expand Down
27 changes: 26 additions & 1 deletion test/verifier/verifier.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import { network } from "hardhat";
import { getChainId } from "../../helpers/helperUtils";
import StateModule from "../../ignition/modules/deployEverythingBasicStrategy/state";
import { Groth16VerifierStubModule } from "../../ignition/modules/deployEverythingBasicStrategy/testHelpers";
import { calculateGroupId, calculateMultiRequestId, calculateRequestId } from "@0xpolygonid/js-sdk";
import { calculateGroupId, calculateRequestId } from "@0xpolygonid/js-sdk";
import { calculateMultiRequestId } from "../utils/id-calculation-utils";

const { ethers, ignition } = await network.connect();

Expand Down Expand Up @@ -592,6 +593,30 @@ describe("Verifier tests", function () {
.withArgs(multiRequest.multiRequestId, 1);
});

it("setMultiRequest: should reject legacy abi.encodePacked multi request id", async function () {
const legacyMultiRequestId = BigInt(
ethers.keccak256(
ethers.solidityPacked(
["uint256[]", "uint256[]", "address"],
[multiRequest.requestIds, multiRequest.groupIds, signerAddress],
),
),
);
expect(legacyMultiRequestId).to.not.equal(multiRequest.multiRequestId);
await expect(
verifier.setMultiRequest({ ...multiRequest, multiRequestId: legacyMultiRequestId }),
)
.to.be.revertedWithCustomError(verifierLib, "MultiRequestIdNotValid")
.withArgs(multiRequest.multiRequestId, legacyMultiRequestId);
});

it("calculateMultiRequestId: different requestIds/groupIds splits give different ids", async function () {
// With abi.encodePacked both splits packed to the same bytes and collided.
expect(calculateMultiRequestId([1n, 2n], [3n], signerAddress)).to.not.equal(
calculateMultiRequestId([1n], [2n, 3n], signerAddress),
);
});

it("setMultiRequest: requestIds and groupIds should exist", async function () {
const multiRequest2 = {
multiRequestId: calculateMultiRequestId([2n], [], signerAddress),
Expand Down
Loading