aere-contracts/test/delegation-registry.test.js
Aere Network a13a649b77
Some checks are pending
contracts-ci / Install (lockfile) → compile → full test suite (push) Waiting to run
contracts-ci / PQC known-answer tests (NIST vectors) (push) Waiting to run
contracts-ci / Coverage (scoped, with artifacts) (push) Waiting to run
Initial public release
Aere Network public source. Everything here can be checked against the live
chain (chain id 2800, https://rpc.aere.network).

Scope note, stated up front rather than buried: consensus on chain 2800 is
classical secp256k1 ECDSA QBFT. The post-quantum work in this repository is at
the signature, precompile, account and transport layers. Nothing here makes the
consensus post-quantum, and no document in it should be read as claiming so.
2026-07-20 01:02:37 +03:00

70 lines
2.6 KiB
JavaScript

// AereDelegationRegistry tests.
const { expect } = require("chai");
const { ethers } = require("hardhat");
describe("AereDelegationRegistry", function () {
async function deploy() {
const [deployer, alice, bob, indexer] = await ethers.getSigners();
const R = await ethers.getContractFactory("AereDelegationRegistry");
const r = await R.deploy();
await r.waitForDeployment();
return { deployer, alice, bob, indexer, r };
}
it("permissionless register + reverts on double-register", async function () {
const { alice, r } = await deploy();
await expect(r.connect(alice).register()).to.emit(r, "Registered");
expect(await r.isRegistered(alice.address)).to.equal(true);
expect(await r.registeredCount()).to.equal(1n);
await expect(r.connect(alice).register())
.to.be.revertedWithCustomError(r, "AlreadyRegistered");
});
it("unregister removes from list + adjusts indices", async function () {
const { alice, bob, r } = await deploy();
await r.connect(alice).register();
await r.connect(bob).register();
expect(await r.registeredCount()).to.equal(2n);
await r.connect(alice).unregister();
expect(await r.isRegistered(alice.address)).to.equal(false);
expect(await r.registeredCount()).to.equal(1n);
// Bob still in.
expect(await r.isRegistered(bob.address)).to.equal(true);
});
it("notifyNonce updates lastSeen + only if higher", async function () {
const { alice, indexer, r } = await deploy();
await r.connect(alice).register();
await expect(r.connect(indexer).notifyNonce(alice.address, 5))
.to.emit(r, "NonceSeen");
const e1 = await r.entries(alice.address);
expect(e1.lastSeenNonce).to.equal(5n);
// Lower nonce: no update, no event.
await r.connect(indexer).notifyNonce(alice.address, 3);
const e2 = await r.entries(alice.address);
expect(e2.lastSeenNonce).to.equal(5n);
});
it("notifyNonce on unregistered reverts", async function () {
const { alice, indexer, r } = await deploy();
await expect(r.connect(indexer).notifyNonce(alice.address, 1))
.to.be.revertedWithCustomError(r, "NotRegistered");
});
it("page returns slice of registered list", async function () {
const env = await deploy();
const { r } = env;
const signers = await ethers.getSigners();
// Register 5 accounts.
for (let i = 0; i < 5; i++) {
await r.connect(signers[i]).register();
}
const first = await r.page(0, 3);
expect(first.length).to.equal(3);
expect(first[0]).to.equal(signers[0].address);
const last = await r.page(3, 10);
expect(last.length).to.equal(2);
});
});