node: add Binance Smart Chain support
BSC is identical to Eth, so we can just re-use our Eth devnet. Fixes certusone/wormhole#185 Change-Id: Ib96a71b5e5873d7cbd8f26dbb655049c6a64cef9
This commit is contained in:
parent
1686b35587
commit
cf9ea6bfde
|
@ -57,6 +57,9 @@ var (
|
||||||
ethRPC *string
|
ethRPC *string
|
||||||
ethContract *string
|
ethContract *string
|
||||||
|
|
||||||
|
bscRPC *string
|
||||||
|
bscContract *string
|
||||||
|
|
||||||
terraWS *string
|
terraWS *string
|
||||||
terraLCD *string
|
terraLCD *string
|
||||||
terraChainID *string
|
terraChainID *string
|
||||||
|
@ -93,6 +96,9 @@ func init() {
|
||||||
ethRPC = BridgeCmd.Flags().String("ethRPC", "", "Ethereum RPC URL")
|
ethRPC = BridgeCmd.Flags().String("ethRPC", "", "Ethereum RPC URL")
|
||||||
ethContract = BridgeCmd.Flags().String("ethContract", "", "Ethereum bridge contract address")
|
ethContract = BridgeCmd.Flags().String("ethContract", "", "Ethereum bridge contract address")
|
||||||
|
|
||||||
|
bscRPC = BridgeCmd.Flags().String("bscRPC", "", "Binance Smart Chain RPC URL")
|
||||||
|
bscContract = BridgeCmd.Flags().String("bscContract", "", "Binance Smart Chain bridge contract address")
|
||||||
|
|
||||||
terraWS = BridgeCmd.Flags().String("terraWS", "", "Path to terrad root for websocket connection")
|
terraWS = BridgeCmd.Flags().String("terraWS", "", "Path to terrad root for websocket connection")
|
||||||
terraLCD = BridgeCmd.Flags().String("terraLCD", "", "Path to LCD service root for http calls")
|
terraLCD = BridgeCmd.Flags().String("terraLCD", "", "Path to LCD service root for http calls")
|
||||||
terraChainID = BridgeCmd.Flags().String("terraChainID", "", "Terra chain ID, used in LCD client initialization")
|
terraChainID = BridgeCmd.Flags().String("terraChainID", "", "Terra chain ID, used in LCD client initialization")
|
||||||
|
@ -231,6 +237,7 @@ func runBridge(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
// Deterministic ganache ETH devnet address.
|
// Deterministic ganache ETH devnet address.
|
||||||
*ethContract = devnet.GanacheBridgeContractAddress.Hex()
|
*ethContract = devnet.GanacheBridgeContractAddress.Hex()
|
||||||
|
*bscContract = devnet.GanacheBridgeContractAddress.Hex()
|
||||||
|
|
||||||
// Use the hostname as nodeName. For production, we don't want to do this to
|
// Use the hostname as nodeName. For production, we don't want to do this to
|
||||||
// prevent accidentally leaking sensitive hostnames.
|
// prevent accidentally leaking sensitive hostnames.
|
||||||
|
@ -261,6 +268,12 @@ func runBridge(cmd *cobra.Command, args []string) {
|
||||||
if *ethContract == "" {
|
if *ethContract == "" {
|
||||||
logger.Fatal("Please specify --ethContract")
|
logger.Fatal("Please specify --ethContract")
|
||||||
}
|
}
|
||||||
|
if *bscRPC == "" {
|
||||||
|
logger.Fatal("Please specify --bscRPC")
|
||||||
|
}
|
||||||
|
if *bscContract == "" {
|
||||||
|
logger.Fatal("Please specify --bscContract")
|
||||||
|
}
|
||||||
if *nodeName == "" {
|
if *nodeName == "" {
|
||||||
logger.Fatal("Please specify --nodeName")
|
logger.Fatal("Please specify --nodeName")
|
||||||
}
|
}
|
||||||
|
@ -289,6 +302,7 @@ func runBridge(cmd *cobra.Command, args []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ethContractAddr := eth_common.HexToAddress(*ethContract)
|
ethContractAddr := eth_common.HexToAddress(*ethContract)
|
||||||
|
bscContractAddr := eth_common.HexToAddress(*bscContract)
|
||||||
solBridgeAddress, err := solana_types.PublicKeyFromBase58(*solanaBridgeAddress)
|
solBridgeAddress, err := solana_types.PublicKeyFromBase58(*solanaBridgeAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatal("invalid Solana bridge address", zap.Error(err))
|
logger.Fatal("invalid Solana bridge address", zap.Error(err))
|
||||||
|
@ -378,6 +392,11 @@ func runBridge(cmd *cobra.Command, args []string) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := supervisor.Run(ctx, "bscwatch",
|
||||||
|
ethereum.NewEthBridgeWatcher(*bscRPC, bscContractAddr, "bsc", vaa.ChainIDBSC, lockC, nil).Run); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Start Terra watcher only if configured
|
// Start Terra watcher only if configured
|
||||||
logger.Info("Starting Terra watcher")
|
logger.Info("Starting Terra watcher")
|
||||||
if err := supervisor.Run(ctx, "terrawatch",
|
if err := supervisor.Run(ctx, "terrawatch",
|
||||||
|
|
|
@ -69,6 +69,8 @@ func (c ChainID) String() string {
|
||||||
return "ethereum"
|
return "ethereum"
|
||||||
case ChainIDTerra:
|
case ChainIDTerra:
|
||||||
return "terra"
|
return "terra"
|
||||||
|
case ChainIDBSC:
|
||||||
|
return "bsc"
|
||||||
default:
|
default:
|
||||||
return fmt.Sprintf("unknown chain ID: %d", c)
|
return fmt.Sprintf("unknown chain ID: %d", c)
|
||||||
}
|
}
|
||||||
|
@ -81,6 +83,8 @@ const (
|
||||||
ChainIDEthereum = 2
|
ChainIDEthereum = 2
|
||||||
// ChainIDTerra is the ChainID of Terra
|
// ChainIDTerra is the ChainID of Terra
|
||||||
ChainIDTerra = 3
|
ChainIDTerra = 3
|
||||||
|
// ChainIDBSC is the ChainID of Binance Smart Chain
|
||||||
|
ChainIDBSC = 4
|
||||||
|
|
||||||
minVAALength = 1 + 4 + 52 + 4 + 1 + 1
|
minVAALength = 1 + 4 + 52 + 4 + 1 + 1
|
||||||
SupportedVAAVersion = 0x01
|
SupportedVAAVersion = 0x01
|
||||||
|
|
|
@ -63,6 +63,8 @@ spec:
|
||||||
- bridge
|
- bridge
|
||||||
- --ethRPC
|
- --ethRPC
|
||||||
- ws://eth-devnet:8545
|
- ws://eth-devnet:8545
|
||||||
|
- --bscRPC
|
||||||
|
- ws://eth-devnet:8545
|
||||||
- --terraWS
|
- --terraWS
|
||||||
- ws://terra-terrad:26657/websocket
|
- ws://terra-terrad:26657/websocket
|
||||||
- --terraLCD
|
- --terraLCD
|
||||||
|
|
Loading…
Reference in New Issue