123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- const { ethers } = require('hardhat');
- const { expect } = require('chai');
- const { loadFixture } = require('@nomicfoundation/hardhat-network-helpers');
- async function fixture() {
- const [sender, other] = await ethers.getSigners();
- const mock = await ethers.deployContract('$Nonces');
- return { sender, other, mock };
- }
- describe('Nonces', function () {
- beforeEach(async function () {
- Object.assign(this, await loadFixture(fixture));
- });
- it('gets a nonce', async function () {
- expect(await this.mock.nonces(this.sender)).to.equal(0n);
- });
- describe('_useNonce', function () {
- it('increments a nonce', async function () {
- expect(await this.mock.nonces(this.sender)).to.equal(0n);
- await expect(await this.mock.$_useNonce(this.sender))
- .to.emit(this.mock, 'return$_useNonce')
- .withArgs(0n);
- expect(await this.mock.nonces(this.sender)).to.equal(1n);
- });
- it("increments only sender's nonce", async function () {
- expect(await this.mock.nonces(this.sender)).to.equal(0n);
- expect(await this.mock.nonces(this.other)).to.equal(0n);
- await this.mock.$_useNonce(this.sender);
- expect(await this.mock.nonces(this.sender)).to.equal(1n);
- expect(await this.mock.nonces(this.other)).to.equal(0n);
- });
- });
- describe('_useCheckedNonce', function () {
- it('increments a nonce', async function () {
- const currentNonce = await this.mock.nonces(this.sender);
- expect(currentNonce).to.equal(0n);
- await this.mock.$_useCheckedNonce(this.sender, currentNonce);
- expect(await this.mock.nonces(this.sender)).to.equal(1n);
- });
- it("increments only sender's nonce", async function () {
- const currentNonce = await this.mock.nonces(this.sender);
- expect(currentNonce).to.equal(0n);
- expect(await this.mock.nonces(this.other)).to.equal(0n);
- await this.mock.$_useCheckedNonce(this.sender, currentNonce);
- expect(await this.mock.nonces(this.sender)).to.equal(1n);
- expect(await this.mock.nonces(this.other)).to.equal(0n);
- });
- it('reverts when nonce is not the expected', async function () {
- const currentNonce = await this.mock.nonces(this.sender);
- await expect(this.mock.$_useCheckedNonce(this.sender, currentNonce + 1n))
- .to.be.revertedWithCustomError(this.mock, 'InvalidAccountNonce')
- .withArgs(this.sender, currentNonce);
- });
- });
- });
|