crosschain.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const { promisify } = require('util');
  2. const BridgeAMBMock = artifacts.require('BridgeAMBMock');
  3. const BridgeArbitrumL1Mock = artifacts.require('BridgeArbitrumL1Mock');
  4. const BridgeArbitrumL2Mock = artifacts.require('BridgeArbitrumL2Mock');
  5. const BridgeOptimismMock = artifacts.require('BridgeOptimismMock');
  6. const BridgePolygonChildMock = artifacts.require('BridgePolygonChildMock');
  7. class BridgeHelper {
  8. static async deploy (type) {
  9. return new BridgeHelper(await deployBridge(type));
  10. }
  11. constructor (bridge) {
  12. this.bridge = bridge;
  13. this.address = bridge.address;
  14. }
  15. call (from, target, selector = undefined, args = []) {
  16. return this.bridge.relayAs(
  17. target.address || target,
  18. selector
  19. ? target.contract.methods[selector](...args).encodeABI()
  20. : '0x',
  21. from,
  22. );
  23. }
  24. }
  25. async function deployBridge (type = 'Arbitrum-L2') {
  26. switch (type) {
  27. case 'AMB':
  28. return BridgeAMBMock.new();
  29. case 'Arbitrum-L1':
  30. return BridgeArbitrumL1Mock.new();
  31. case 'Arbitrum-L2': {
  32. const instance = await BridgeArbitrumL2Mock.new();
  33. const code = await web3.eth.getCode(instance.address);
  34. await promisify(web3.currentProvider.send.bind(web3.currentProvider))({
  35. jsonrpc: '2.0',
  36. method: 'hardhat_setCode',
  37. params: [ '0x0000000000000000000000000000000000000064', code ],
  38. id: new Date().getTime(),
  39. });
  40. return BridgeArbitrumL2Mock.at('0x0000000000000000000000000000000000000064');
  41. }
  42. case 'Optimism':
  43. return BridgeOptimismMock.new();
  44. case 'Polygon-Child':
  45. return BridgePolygonChildMock.new();
  46. default:
  47. throw new Error(`CrossChain: ${type} is not supported`);
  48. }
  49. }
  50. module.exports = {
  51. BridgeHelper,
  52. };