@@ -23,6 +23,15 @@ const {
2323 deployChainBridgeSatelliteChainGatewayContracts,
2424} = require ( '../../helpers/deploy' ) ;
2525
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+
2635task (
2736 'deploy:chain_bridge_use_deployed' ,
2837 'Generates deployment files for a deployed instance of Bridge' ,
@@ -307,3 +316,173 @@ cbDeployTask(
307316 xcAmpleController . address ,
308317 ] ) ;
309318 } ) ;
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