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:
Leo 2021-07-28 15:32:49 +02:00 committed by Leopold Schabel
parent 1686b35587
commit cf9ea6bfde
3 changed files with 25 additions and 0 deletions

View File

@ -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",

View File

@ -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

View File

@ -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