@@ -23,6 +23,15 @@ const {
23
23
deployChainBridgeSatelliteChainGatewayContracts,
24
24
} = require ( '../../helpers/deploy' ) ;
25
25
26
+ const {
27
+ XC_REBASE_RESOURCE_ID ,
28
+ XC_TRANSFER_RESOURCE_ID ,
29
+ CB_FUNCTION_SIG_baseChainReportRebase,
30
+ CB_FUNCTION_SIG_satelliteChainReportRebase,
31
+ CB_FUNCTION_SIG_baseChainTransfer,
32
+ CB_FUNCTION_SIG_satelliteChainTransfer,
33
+ } = require ( '../../sdk/chain_bridge' ) ;
34
+
26
35
task (
27
36
'deploy:chain_bridge_use_deployed' ,
28
37
'Generates deployment files for a deployed instance of Bridge' ,
@@ -307,3 +316,173 @@ cbDeployTask(
307
316
xcAmpleController . address ,
308
317
] ) ;
309
318
} ) ;
319
+
320
+ txTask (
321
+ 'deploy:chain_bridge:add_handlers' ,
322
+ 'Prepares bridge transactions to update bridge contracts' ,
323
+ )
324
+ . addParam (
325
+ 'satelliteChainNetworks' ,
326
+ 'List of satellite chain hardhat networks' ,
327
+ [ ] ,
328
+ types . json ,
329
+ )
330
+ . setAction ( async ( args , hre ) => {
331
+ const deployer = await loadSignerSync ( args , hre . ethers . provider ) ;
332
+ const deployerAddress = await deployer . getAddress ( ) ;
333
+
334
+ const network = hre . network . name ;
335
+ const provider = hre . ethers . provider ;
336
+ const txParams = { gasPrice : args . gasPrice , gasLimit : args . gasLimit } ;
337
+ if ( txParams . gasPrice == 0 ) {
338
+ txParams . gasPrice = await provider . getGasPrice ( ) ;
339
+ }
340
+
341
+ const bridge = await getDeployedContractInstance (
342
+ network ,
343
+ 'chainBridge/bridge' ,
344
+ provider ,
345
+ ) ;
346
+ const genericHandler = await getDeployedContractInstance (
347
+ network ,
348
+ 'chainBridge/genericHandler' ,
349
+ provider ,
350
+ ) ;
351
+ const rebaseGateway = await getDeployedContractInstance (
352
+ network ,
353
+ 'chainBridge/rebaseGateway' ,
354
+ provider ,
355
+ ) ;
356
+ const transferGateway = await getDeployedContractInstance (
357
+ network ,
358
+ 'chainBridge/rebaseGateway' ,
359
+ provider ,
360
+ ) ;
361
+
362
+ // Base chain
363
+ const adminRole = await bridge . DEFAULT_ADMIN_ROLE ( ) ;
364
+ const isAdmin = await bridge . hasRole ( adminRole , deployerAddress ) ;
365
+ const reportRebaseFnSig = CB_FUNCTION_SIG_baseChainReportRebase (
366
+ rebaseGateway ,
367
+ ) ;
368
+ const transferFnSig = CB_FUNCTION_SIG_baseChainTransfer ( transferGateway ) ;
369
+
370
+ if ( isAdmin ) {
371
+ await (
372
+ await bridge
373
+ . connect ( deployer )
374
+ . adminSetGenericResource (
375
+ genericHandler . address ,
376
+ XC_REBASE_RESOURCE_ID ,
377
+ rebaseGateway . address ,
378
+ ...reportRebaseFnSig ,
379
+ txParams ,
380
+ )
381
+ ) . wait ( ) ;
382
+
383
+ await (
384
+ await bridge
385
+ . connect ( deployer )
386
+ . adminSetGenericResource (
387
+ genericHandler . address ,
388
+ XC_TRANSFER_RESOURCE_ID ,
389
+ transferGateway . address ,
390
+ ...transferFnSig ,
391
+ txParams ,
392
+ )
393
+ ) . wait ( ) ;
394
+ } else {
395
+ console . log ( 'Execute the following on-chain' , network ) ;
396
+ console . log ( 'adminSetGenericResource' , [
397
+ genericHandler . address ,
398
+ XC_REBASE_RESOURCE_ID ,
399
+ rebaseGateway . address ,
400
+ ...reportRebaseFnSig ,
401
+ ] ) ;
402
+ console . log ( 'adminSetGenericResource' , [
403
+ genericHandler . address ,
404
+ XC_TRANSFER_RESOURCE_ID ,
405
+ transferGateway . address ,
406
+ ...transferFnSig ,
407
+ ] ) ;
408
+ }
409
+
410
+ // sat chains
411
+ for ( let n in args . satelliteChainNetworks ) {
412
+ const network = args . satelliteChainNetworks [ n ] ;
413
+ const provider = await getEthersProvider ( network ) ;
414
+
415
+ const txParams = { gasPrice : args . gasPrice , gasLimit : args . gasLimit } ;
416
+ if ( txParams . gasPrice == 0 ) {
417
+ txParams . gasPrice = await provider . getGasPrice ( ) ;
418
+ }
419
+
420
+ const bridge = await getDeployedContractInstance (
421
+ network ,
422
+ 'chainBridge/bridge' ,
423
+ provider ,
424
+ ) ;
425
+ const genericHandler = await getDeployedContractInstance (
426
+ network ,
427
+ 'chainBridge/genericHandler' ,
428
+ provider ,
429
+ ) ;
430
+ const rebaseGateway = await getDeployedContractInstance (
431
+ network ,
432
+ 'chainBridge/rebaseGateway' ,
433
+ provider ,
434
+ ) ;
435
+ const transferGateway = await getDeployedContractInstance (
436
+ network ,
437
+ 'chainBridge/rebaseGateway' ,
438
+ provider ,
439
+ ) ;
440
+ const adminRole = await bridge . DEFAULT_ADMIN_ROLE ( ) ;
441
+ const isAdmin = await bridge . hasRole ( adminRole , deployerAddress ) ;
442
+ const reportRebaseFnSig = CB_FUNCTION_SIG_satelliteChainReportRebase (
443
+ rebaseGateway ,
444
+ ) ;
445
+ const transferFnSig = CB_FUNCTION_SIG_satelliteChainTransfer (
446
+ transferGateway ,
447
+ ) ;
448
+
449
+ if ( isAdmin ) {
450
+ await (
451
+ await bridge
452
+ . connect ( deployer )
453
+ . adminSetGenericResource (
454
+ genericHandler . address ,
455
+ XC_REBASE_RESOURCE_ID ,
456
+ rebaseGateway . address ,
457
+ ...reportRebaseFnSig ,
458
+ txParams ,
459
+ )
460
+ ) . wait ( ) ;
461
+ await (
462
+ await bridge
463
+ . connect ( deployer )
464
+ . adminSetGenericResource (
465
+ genericHandler . address ,
466
+ XC_TRANSFER_RESOURCE_ID ,
467
+ transferGateway . address ,
468
+ ...transferFnSig ,
469
+ txParams ,
470
+ )
471
+ ) . wait ( ) ;
472
+ } else {
473
+ console . log ( 'Execute the following on-chain' , network ) ;
474
+ console . log ( 'adminSetGenericResource' , [
475
+ genericHandler . address ,
476
+ XC_REBASE_RESOURCE_ID ,
477
+ rebaseGateway . address ,
478
+ ...reportRebaseFnSig ,
479
+ ] ) ;
480
+ console . log ( 'adminSetGenericResource' , [
481
+ genericHandler . address ,
482
+ XC_TRANSFER_RESOURCE_ID ,
483
+ transferGateway . address ,
484
+ ...transferFnSig ,
485
+ ] ) ;
486
+ }
487
+ }
488
+ } ) ;
0 commit comments