@hyperlane-xyz/helloworld
Version:
A basic skeleton of an Hyperlane app
70 lines • 3.21 kB
JavaScript
import { expect } from 'chai';
import hre from 'hardhat';
import { HyperlaneIsmFactory, HyperlaneProxyFactoryDeployer, MultiProvider, TestChainName, TestCoreDeployer, } from '@hyperlane-xyz/sdk';
import { HelloWorldDeployer } from '../deploy/deploy.js';
describe('HelloWorld', async () => {
const localChain = TestChainName.test1;
const remoteChain = TestChainName.test2;
let localDomain;
let remoteDomain;
let signer;
let local;
let remote;
let multiProvider;
let coreApp;
let config;
before(async () => {
[] = await hre.ethers.getSigners();
multiProvider = MultiProvider.createTestMultiProvider({ signer });
const ismFactoryDeployer = new HyperlaneProxyFactoryDeployer(multiProvider);
const ismFactory = new HyperlaneIsmFactory(await ismFactoryDeployer.deploy(multiProvider.mapKnownChains(() => ({}))), multiProvider);
coreApp = await new TestCoreDeployer(multiProvider, ismFactory).deployApp();
config = coreApp.getRouterConfig(signer.address);
localDomain = multiProvider.getDomainId(localChain);
remoteDomain = multiProvider.getDomainId(remoteChain);
});
beforeEach(async () => {
const helloWorld = new HelloWorldDeployer(multiProvider);
const contracts = await helloWorld.deploy(config);
local = contracts[localChain].router;
remote = contracts[remoteChain].router;
// The all counts start empty
expect(await local.sent()).to.equal(0);
expect(await local.received()).to.equal(0);
expect(await remote.sent()).to.equal(0);
expect(await remote.received()).to.equal(0);
});
it('sends a message', async () => {
const body = 'Hello';
const payment = await local['quoteDispatch(uint32,bytes)'](remoteDomain, Buffer.from(body));
await expect(local.sendHelloWorld(remoteDomain, body, {
value: payment,
})).to.emit(local, 'SentHelloWorld');
// The sent counts are correct
expect(await local.sent()).to.equal(1);
expect(await local.sentTo(remoteDomain)).to.equal(1);
// The received counts are correct
expect(await local.received()).to.equal(0);
});
it('reverts if there is insufficient payment', async () => {
const body = 'Hello';
await expect(local.sendHelloWorld(remoteDomain, body, {
value: 0,
})).to.be.revertedWith('ProtocolFee: insufficient protocol fee');
});
it('handles a message', async () => {
const body = 'World';
const payment = await local['quoteDispatch(uint32,bytes)'](remoteDomain, Buffer.from(body));
await local.sendHelloWorld(remoteDomain, body, {
value: payment,
});
// Mock processing of the message by Hyperlane
await coreApp.processOutboundMessages(localChain);
// The initial message has been dispatched.
expect(await local.sent()).to.equal(1);
// The initial message has been processed.
expect(await remote.received()).to.equal(1);
expect(await remote.receivedFrom(localDomain)).to.equal(1);
});
});
//# sourceMappingURL=helloworld.test.js.map