You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.8 KiB
JavaScript

1 year ago
const { BridgeHelper } = require('../helpers/crosschain');
const { expectRevertCustomError } = require('../helpers/customError');
function randomAddress() {
return web3.utils.toChecksumAddress(web3.utils.randomHex(20));
}
const CrossChainEnabledAMBMock = artifacts.require('CrossChainEnabledAMBMock');
const CrossChainEnabledArbitrumL1Mock = artifacts.require('CrossChainEnabledArbitrumL1Mock');
const CrossChainEnabledArbitrumL2Mock = artifacts.require('CrossChainEnabledArbitrumL2Mock');
const CrossChainEnabledOptimismMock = artifacts.require('CrossChainEnabledOptimismMock');
const CrossChainEnabledPolygonChildMock = artifacts.require('CrossChainEnabledPolygonChildMock');
function shouldBehaveLikeReceiver(sender = randomAddress()) {
it('should reject same-chain calls', async function () {
await expectRevertCustomError(this.receiver.crossChainRestricted(), 'NotCrossChainCall()');
await expectRevertCustomError(this.receiver.crossChainOwnerRestricted(), 'NotCrossChainCall()');
});
it('should restrict to cross-chain call from a invalid sender', async function () {
await expectRevertCustomError(
this.bridge.call(sender, this.receiver, 'crossChainOwnerRestricted()'),
`InvalidCrossChainSender("${sender}", "${await this.receiver.owner()}")`,
);
});
it('should grant access to cross-chain call from the owner', async function () {
await this.bridge.call(await this.receiver.owner(), this.receiver, 'crossChainOwnerRestricted()');
});
}
contract('CrossChainEnabled', function () {
describe('AMB', function () {
beforeEach(async function () {
this.bridge = await BridgeHelper.deploy('AMB');
this.receiver = await CrossChainEnabledAMBMock.new(this.bridge.address);
});
shouldBehaveLikeReceiver();
});
describe('Arbitrum-L1', function () {
beforeEach(async function () {
this.bridge = await BridgeHelper.deploy('Arbitrum-L1');
this.receiver = await CrossChainEnabledArbitrumL1Mock.new(this.bridge.address);
});
shouldBehaveLikeReceiver();
});
describe('Arbitrum-L2', function () {
beforeEach(async function () {
this.bridge = await BridgeHelper.deploy('Arbitrum-L2');
this.receiver = await CrossChainEnabledArbitrumL2Mock.new();
});
shouldBehaveLikeReceiver();
});
describe('Optimism', function () {
beforeEach(async function () {
this.bridge = await BridgeHelper.deploy('Optimism');
this.receiver = await CrossChainEnabledOptimismMock.new(this.bridge.address);
});
shouldBehaveLikeReceiver();
});
describe('Polygon-Child', function () {
beforeEach(async function () {
this.bridge = await BridgeHelper.deploy('Polygon-Child');
this.receiver = await CrossChainEnabledPolygonChildMock.new(this.bridge.address);
});
shouldBehaveLikeReceiver();
});
});