Skip to content
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
add legacy checknsignatures tests
  • Loading branch information
mmv08 committed Jul 18, 2023
commit d1272203972c5ba3ac2f93c50f13f935e0d87dde
64 changes: 34 additions & 30 deletions test/core/Safe.Signatures.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ describe("Safe", async () => {
});
});

describe.only("checkNSignatures (legacy)", async () => {
describe("checkNSignatures (legacy)", async () => {
it("should use msg.sender executing the check", async () => {
// We attach the safe to user2 but the only owner of the safe is user1
// If it fails to preserve the msg.sender, it will fail because user2 is not an owner
Expand Down Expand Up @@ -617,31 +617,38 @@ describe("Safe", async () => {
});

it("should revert if not the required amount of signature data is provided", async () => {
await setupTests();
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address]);
const { compatFallbackHandler } = await setupTests();
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address], 3, compatFallbackHandler.address);
const safeWithCompatFbHandlerIface = compatFallbackHandler.attach(safe.address);
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());
await expect(safe.checkNSignatures(txHash, "0x", "0x", 1)).to.be.revertedWith("GS020");
await expect(safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", "0x", 1)).to.be.revertedWith("GS020");
});

it("should not be able to use different signature type of same owner", async () => {
await setupTests();
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address]);
const { compatFallbackHandler } = await setupTests();
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address], 3, compatFallbackHandler.address);
const safeWithCompatFbHandlerIface = compatFallbackHandler.attach(safe.address);
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());
const signatures = buildSignatureBytes([
await safeApproveHash(user1, safe, tx),
await safeSignTypedData(user1, safe, tx),
await safeSignTypedData(user3, safe, tx),
]);
await expect(safe.checkNSignatures(txHash, "0x", signatures, 3)).to.be.revertedWith("GS026");
await expect(safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", signatures, 3)).to.be.revertedWith("GS026");
});

it("should be able to mix all signature types", async () => {
await setupTests();
const compatFallbackHandler = await getCompatFallbackHandler();
const signerSafe = await getSafeWithOwners([user5.address], 1, compatFallbackHandler.address);
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address, user4.address, signerSafe.address]);
const safe = await getSafeWithOwners(
[user1.address, user2.address, user3.address, user4.address, signerSafe.address],
5,
compatFallbackHandler.address,
);
const safeWithCompatFbHandlerIface = compatFallbackHandler.attach(safe.address);
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());

Expand All @@ -657,30 +664,40 @@ describe("Safe", async () => {
signerSafeSig,
]);

await safe.checkNSignatures(txHash, "0x", signatures, 5);
await safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", signatures, 5);
});

it("should be able to require no signatures", async () => {
const { safe, safeWithCompatFbHandlerIface } = await setupTests();
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());

await safe.safeWithCompatFbHandlerIface(txHash, "0x", "0x", 0);
await safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", "0x", 0);
});

it("should be able to require less signatures than the threshold", async () => {
await setupTests();
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address, user4.address]);
const { compatFallbackHandler } = await setupTests();
const safe = await getSafeWithOwners(
[user1.address, user2.address, user3.address, user4.address],
4,
compatFallbackHandler.address,
);
const safeWithCompatFbHandlerIface = compatFallbackHandler.attach(safe.address);
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());
const signatures = buildSignatureBytes([await safeSignTypedData(user3, safe, tx)]);

await safe.checkNSignatures(txHash, "0x", signatures, 1);
await safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", signatures, 1);
});

it("should be able to require more signatures than the threshold", async () => {
await setupTests();
const safe = await getSafeWithOwners([user1.address, user2.address, user3.address, user4.address], 2);
const { compatFallbackHandler } = await setupTests();
const safe = await getSafeWithOwners(
[user1.address, user2.address, user3.address, user4.address],
2,
compatFallbackHandler.address,
);
const safeWithCompatFbHandlerIface = compatFallbackHandler.attach(safe.address);
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());
const signatures = buildSignatureBytes([
Expand All @@ -690,22 +707,9 @@ describe("Safe", async () => {
]);

// Should fail as only 3 signatures are provided
await expect(safe.checkNSignatures(txHash, "0x", signatures, 4)).to.be.revertedWith("GS020");

await safe.checkNSignatures(txHash, "0x", signatures, 3);
});

it("Should accept an arbitrary msg.sender", async () => {
await setupTests();

const safe = await getSafeWithOwners([user1.address]);
const tx = buildSafeTransaction({ to: safe.address, nonce: await safe.nonce() });
const txHash = calculateSafeTransactionHash(safe, tx, await chainId());

const signatures = buildSignatureBytes([await safeApproveHash(user1, safe, tx, true)]);
const safeConnectUser2 = safe.connect(user2);
await expect(safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", signatures, 4)).to.be.revertedWith("GS020");

await safeConnectUser2.checkNSignatures(txHash, "0x", signatures, 1);
await safeWithCompatFbHandlerIface.checkNSignatures(txHash, "0x", signatures, 3);
});
});
});