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
ethContract *string
bscRPC *string
bscContract *string
terraWS *string
terraLCD *string
terraChainID *string
@ -93,6 +96,9 @@ func init() {
ethRPC = BridgeCmd.Flags().String("ethRPC", "", "Ethereum RPC URL")
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")
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")
@ -231,6 +237,7 @@ func runBridge(cmd *cobra.Command, args []string) {
// Deterministic ganache ETH devnet address.
*ethContract = devnet.GanacheBridgeContractAddress.Hex()
*bscContract = devnet.GanacheBridgeContractAddress.Hex()
// Use the hostname as nodeName. For production, we don't want to do this to
// prevent accidentally leaking sensitive hostnames.
@ -261,6 +268,12 @@ func runBridge(cmd *cobra.Command, args []string) {
if *ethContract == "" {
logger.Fatal("Please specify --ethContract")
}
if *bscRPC == "" {
logger.Fatal("Please specify --bscRPC")
}
if *bscContract == "" {
logger.Fatal("Please specify --bscContract")
}
if *nodeName == "" {
logger.Fatal("Please specify --nodeName")
}
@ -289,6 +302,7 @@ func runBridge(cmd *cobra.Command, args []string) {
}
ethContractAddr := eth_common.HexToAddress(*ethContract)
bscContractAddr := eth_common.HexToAddress(*bscContract)
solBridgeAddress, err := solana_types.PublicKeyFromBase58(*solanaBridgeAddress)
if err != nil {
logger.Fatal("invalid Solana bridge address", zap.Error(err))
@ -378,6 +392,11 @@ func runBridge(cmd *cobra.Command, args []string) {
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
logger.Info("Starting Terra watcher")
if err := supervisor.Run(ctx, "terrawatch",

View File

@ -69,6 +69,8 @@ func (c ChainID) String() string {
return "ethereum"
case ChainIDTerra:
return "terra"
case ChainIDBSC:
return "bsc"
default:
return fmt.Sprintf("unknown chain ID: %d", c)
}
@ -81,6 +83,8 @@ const (
ChainIDEthereum = 2
// ChainIDTerra is the ChainID of Terra
ChainIDTerra = 3
// ChainIDBSC is the ChainID of Binance Smart Chain
ChainIDBSC = 4
minVAALength = 1 + 4 + 52 + 4 + 1 + 1
SupportedVAAVersion = 0x01

View File

@ -63,6 +63,8 @@ spec:
- bridge
- --ethRPC
- ws://eth-devnet:8545
- --bscRPC
- ws://eth-devnet:8545
- --terraWS
- ws://terra-terrad:26657/websocket
- --terraLCD