Test behavior of SignatureChecker against the identity precompile (0x4) (#5501)
This commit is contained in:
12
test/helpers/precompiles.js
Normal file
12
test/helpers/precompiles.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
module.exports = {
|
||||||
|
ecRecover: '0x0000000000000000000000000000000000000001',
|
||||||
|
SHA2_256: '0x0000000000000000000000000000000000000002',
|
||||||
|
RIPEMD_160: '0x0000000000000000000000000000000000000003',
|
||||||
|
identity: '0x0000000000000000000000000000000000000004',
|
||||||
|
modexp: '0x0000000000000000000000000000000000000005',
|
||||||
|
ecAdd: '0x0000000000000000000000000000000000000006',
|
||||||
|
ecMul: '0x0000000000000000000000000000000000000007',
|
||||||
|
ecPairing: '0x0000000000000000000000000000000000000008',
|
||||||
|
blake2f: '0x0000000000000000000000000000000000000009',
|
||||||
|
pointEvaluation: '0x000000000000000000000000000000000000000a',
|
||||||
|
};
|
||||||
@ -2,6 +2,8 @@ const { ethers } = require('hardhat');
|
|||||||
const { expect } = require('chai');
|
const { expect } = require('chai');
|
||||||
const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers');
|
const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers');
|
||||||
|
|
||||||
|
const precompile = require('../../helpers/precompiles');
|
||||||
|
|
||||||
const TEST_MESSAGE = ethers.id('OpenZeppelin');
|
const TEST_MESSAGE = ethers.id('OpenZeppelin');
|
||||||
const TEST_MESSAGE_HASH = ethers.hashMessage(TEST_MESSAGE);
|
const TEST_MESSAGE_HASH = ethers.hashMessage(TEST_MESSAGE);
|
||||||
|
|
||||||
@ -25,15 +27,18 @@ describe('SignatureChecker (ERC1271)', function () {
|
|||||||
|
|
||||||
describe('EOA account', function () {
|
describe('EOA account', function () {
|
||||||
it('with matching signer and signature', async function () {
|
it('with matching signer and signature', async function () {
|
||||||
expect(await this.mock.$isValidSignatureNow(this.signer, TEST_MESSAGE_HASH, this.signature)).to.be.true;
|
await expect(this.mock.$isValidSignatureNow(this.signer, TEST_MESSAGE_HASH, this.signature)).to.eventually.be
|
||||||
|
.true;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with invalid signer', async function () {
|
it('with invalid signer', async function () {
|
||||||
expect(await this.mock.$isValidSignatureNow(this.other, TEST_MESSAGE_HASH, this.signature)).to.be.false;
|
await expect(this.mock.$isValidSignatureNow(this.other, TEST_MESSAGE_HASH, this.signature)).to.eventually.be
|
||||||
|
.false;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with invalid signature', async function () {
|
it('with invalid signature', async function () {
|
||||||
expect(await this.mock.$isValidSignatureNow(this.signer, WRONG_MESSAGE_HASH, this.signature)).to.be.false;
|
await expect(this.mock.$isValidSignatureNow(this.signer, WRONG_MESSAGE_HASH, this.signature)).to.eventually.be
|
||||||
|
.false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -41,19 +46,28 @@ describe('SignatureChecker (ERC1271)', function () {
|
|||||||
for (const fn of ['isValidERC1271SignatureNow', 'isValidSignatureNow']) {
|
for (const fn of ['isValidERC1271SignatureNow', 'isValidSignatureNow']) {
|
||||||
describe(fn, function () {
|
describe(fn, function () {
|
||||||
it('with matching signer and signature', async function () {
|
it('with matching signer and signature', async function () {
|
||||||
expect(await this.mock.getFunction(`$${fn}`)(this.wallet, TEST_MESSAGE_HASH, this.signature)).to.be.true;
|
await expect(this.mock.getFunction(`$${fn}`)(this.wallet, TEST_MESSAGE_HASH, this.signature)).to.eventually.be
|
||||||
|
.true;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with invalid signer', async function () {
|
it('with invalid signer', async function () {
|
||||||
expect(await this.mock.getFunction(`$${fn}`)(this.mock, TEST_MESSAGE_HASH, this.signature)).to.be.false;
|
await expect(this.mock.getFunction(`$${fn}`)(this.mock, TEST_MESSAGE_HASH, this.signature)).to.eventually.be
|
||||||
|
.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('with identity precompile', async function () {
|
||||||
|
await expect(this.mock.getFunction(`$${fn}`)(precompile.identity, TEST_MESSAGE_HASH, this.signature)).to
|
||||||
|
.eventually.be.false;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with invalid signature', async function () {
|
it('with invalid signature', async function () {
|
||||||
expect(await this.mock.getFunction(`$${fn}`)(this.wallet, WRONG_MESSAGE_HASH, this.signature)).to.be.false;
|
await expect(this.mock.getFunction(`$${fn}`)(this.wallet, WRONG_MESSAGE_HASH, this.signature)).to.eventually
|
||||||
|
.be.false;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with malicious wallet', async function () {
|
it('with malicious wallet', async function () {
|
||||||
expect(await this.mock.getFunction(`$${fn}`)(this.malicious, TEST_MESSAGE_HASH, this.signature)).to.be.false;
|
await expect(this.mock.getFunction(`$${fn}`)(this.malicious, TEST_MESSAGE_HASH, this.signature)).to.eventually
|
||||||
|
.be.false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user