parent
bdd1d1f94f
commit
101d132eb2
@ -0,0 +1,97 @@ |
||||
import { ethers } from 'hardhat'; |
||||
import { Validator } from '@abacus-network/utils'; |
||||
import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; |
||||
|
||||
import { |
||||
Inbox, |
||||
Inbox__factory, |
||||
InboxMultisigValidatorManager, |
||||
InboxMultisigValidatorManager__factory, |
||||
} from '../../types'; |
||||
import { getCheckpointSignatures } from './utils'; |
||||
import { expect } from 'chai'; |
||||
|
||||
const OUTBOX_DOMAIN = 1234; |
||||
const INBOX_DOMAIN = 4321; |
||||
const QUORUM_THRESHOLD = 2; |
||||
|
||||
describe.only('InboxMultisigValidatorManager', () => { |
||||
let validatorManager: InboxMultisigValidatorManager, |
||||
inbox: Inbox, |
||||
signer: SignerWithAddress, |
||||
validator0: Validator, |
||||
validator1: Validator; |
||||
|
||||
before(async () => { |
||||
const signers = await ethers.getSigners(); |
||||
[signer] = signers; |
||||
const [ |
||||
, |
||||
validatorSigner0, |
||||
validatorSigner1, |
||||
] = signers; |
||||
validator0 = await Validator.fromSigner(validatorSigner0, OUTBOX_DOMAIN); |
||||
validator1 = await Validator.fromSigner(validatorSigner1, OUTBOX_DOMAIN); |
||||
}); |
||||
|
||||
beforeEach(async () => { |
||||
const validatorManagerFactory = new InboxMultisigValidatorManager__factory( |
||||
signer, |
||||
); |
||||
validatorManager = await validatorManagerFactory.deploy( |
||||
OUTBOX_DOMAIN, |
||||
[validator0.address, validator1.address], |
||||
QUORUM_THRESHOLD, |
||||
); |
||||
|
||||
const inboxFactory = new Inbox__factory(signer); |
||||
inbox = await inboxFactory.deploy(INBOX_DOMAIN); |
||||
await inbox.initialize( |
||||
OUTBOX_DOMAIN, |
||||
validatorManager.address, |
||||
ethers.constants.HashZero, |
||||
0, |
||||
); |
||||
}); |
||||
|
||||
describe('#checkpoint', () => { |
||||
const root = ethers.utils.formatBytes32String('test root'); |
||||
const index = 1; |
||||
|
||||
it('submits a checkpoint to the Inbox if there is a quorum', async () => { |
||||
const signatures = await getCheckpointSignatures( |
||||
root, |
||||
index, |
||||
[validator0, validator1], // 2/2 signers, making a quorum
|
||||
); |
||||
|
||||
await validatorManager.checkpoint( |
||||
inbox.address, |
||||
root, |
||||
index, |
||||
signatures, |
||||
); |
||||
|
||||
expect( |
||||
await inbox.checkpoints(root) |
||||
).to.equal(index); |
||||
}); |
||||
|
||||
it('reverts if there is not a quorum', async () => { |
||||
const signatures = await getCheckpointSignatures( |
||||
root, |
||||
index, |
||||
[validator0], // 1/2 signer is not a quorum
|
||||
); |
||||
|
||||
await expect( |
||||
validatorManager.checkpoint( |
||||
inbox.address, |
||||
root, |
||||
index, |
||||
signatures, |
||||
) |
||||
).to.be.revertedWith('!quorum'); |
||||
}); |
||||
}); |
||||
}); |
Loading…
Reference in new issue