Deploy Sepolia based L2s (#3606)

* Deploy Sepolia based L2s

* Code review rework
This commit is contained in:
bruce-riley 2023-12-20 08:56:14 -06:00 committed by GitHub
parent 126d330b07
commit 818038ef80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 528 additions and 246 deletions

View File

@ -107,6 +107,14 @@ spec:
- ws://eth-devnet:8545
- --mantleRPC
- ws://eth-devnet:8545
- --sepoliaRPC
- ws://eth-devnet:8545
- --arbitrumSepoliaRPC
- ws://eth-devnet:8545
- --baseSepoliaRPC
- ws://eth-devnet:8545
- --optimismSepoliaRPC
- ws://eth-devnet:8545
# - --wormchainURL
# - wormchain:9090
# - --accountantKeyPath

View File

@ -0,0 +1,17 @@
# Arbitrum on Sepolia testnet
# Rename to .env to use with truffle migrations
# Wormhole Core Migrations
INIT_SIGNERS=["0x13947Bd48b18E53fdAeEe77F3473391aC727C638"]
INIT_CHAIN_ID=10003
INIT_GOV_CHAIN_ID=0x1
INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
INIT_EVM_CHAIN_ID=421614
# Bridge Migrations
BRIDGE_INIT_CHAIN_ID=10003
BRIDGE_INIT_GOV_CHAIN_ID=0x1
BRIDGE_INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
# WETH is listed here: https://docs.arbitrum.io/for-devs/useful-addresses#token-bridge-smart-contracts
BRIDGE_INIT_WETH=0x980B62Da83eFf3D4576C647993b0c1D7faf17c73
BRIDGE_INIT_FINALITY=1

View File

@ -0,0 +1,17 @@
# Base on Sepolia testnet env
# Rename to .env to use with truffle migrations
# Wormhole Core Migrations
INIT_SIGNERS=["0x13947Bd48b18E53fdAeEe77F3473391aC727C638"]
INIT_CHAIN_ID=10004
INIT_GOV_CHAIN_ID=0x1
INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
INIT_EVM_CHAIN_ID=84532
# Bridge Migrations
BRIDGE_INIT_CHAIN_ID=10004
BRIDGE_INIT_GOV_CHAIN_ID=0x1
BRIDGE_INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
# WETH is listed here: https://docs.base.org/base-contracts/
BRIDGE_INIT_WETH=0x4200000000000000000000000000000000000006
BRIDGE_INIT_FINALITY=1

View File

@ -0,0 +1,17 @@
# Optimism on Sepolia testnet
# Rename to .env to use with truffle migrations
# Wormhole Core Migrations
INIT_SIGNERS=["0x13947Bd48b18E53fdAeEe77F3473391aC727C638"]
INIT_CHAIN_ID=10005
INIT_GOV_CHAIN_ID=0x1
INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
INIT_EVM_CHAIN_ID=11155420
# Bridge Migrations
BRIDGE_INIT_CHAIN_ID=10005
BRIDGE_INIT_GOV_CHAIN_ID=0x1
BRIDGE_INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
# WETH is listed here: https://help.optimism.io/hc/en-us/articles/4417948883611-What-is-ETH-WETH-How-do-they-interact-
BRIDGE_INIT_WETH=0x4200000000000000000000000000000000000006
BRIDGE_INIT_FINALITY=1

View File

@ -311,6 +311,16 @@ module.exports = {
},
network_id: 421613,
},
arbitrum_sepolia_testnet: {
provider: () => {
return new HDWalletProvider(
process.env.MNEMONIC,
"https://arbitrum-sepolia.publicnode.com"
//"https://sepolia-rollup.arbitrum.io/rpc" // This didn't work.
);
},
network_id: 421614,
},
optimism: {
provider: () => {
return new HDWalletProvider(
@ -330,6 +340,16 @@ module.exports = {
},
network_id: 420,
},
optimism_sepolia_testnet: {
provider: () => {
return new HDWalletProvider(
process.env.MNEMONIC,
"https://rpc.ankr.com/optimism_sepolia"
// "https://sepolia.optimism.io/" <== This didn't work for testnet
);
},
network_id: 11155420,
},
gnosis: {
provider: () => {
return new HDWalletProvider(
@ -366,6 +386,15 @@ module.exports = {
},
network_id: 84531,
},
base_sepolia_testnet: {
provider: () => {
return new HDWalletProvider(
process.env.MNEMONIC,
"https://sepolia.base.org"
);
},
network_id: 84532,
},
scroll_testnet: {
provider: () => {
return new HDWalletProvider(

View File

@ -118,6 +118,9 @@ func runListNodes(cmd *cobra.Command, args []string) {
{"Mantle", vaa.ChainIDMantle},
{"Wormchain", vaa.ChainIDWormchain},
{"Sepolia", vaa.ChainIDSepolia},
{"ArbitrumSepolia", vaa.ChainIDArbitrumSepolia},
{"BaseSepolia", vaa.ChainIDBaseSepolia},
{"OptimismSepolia", vaa.ChainIDOptimismSepolia},
}
if len(only) > 0 {

View File

@ -181,6 +181,15 @@ var (
sepoliaRPC *string
sepoliaContract *string
arbitrumSepoliaRPC *string
arbitrumSepoliaContract *string
baseSepoliaRPC *string
baseSepoliaContract *string
optimismSepoliaRPC *string
optimismSepoliaContract *string
logLevel *string
publicRpcLogDetailStr *string
publicRpcLogToTelemetry *bool
@ -352,6 +361,15 @@ func init() {
baseRPC = NodeCmd.Flags().String("baseRPC", "", "Base RPC URL")
baseContract = NodeCmd.Flags().String("baseContract", "", "Base contract address")
arbitrumSepoliaRPC = NodeCmd.Flags().String("arbitrumSepoliaRPC", "", "Arbitrum on Sepolia RPC URL")
arbitrumSepoliaContract = NodeCmd.Flags().String("arbitrumSepoliaContract", "", "Arbitrum on Sepolia contract address")
baseSepoliaRPC = NodeCmd.Flags().String("baseSepoliaRPC", "", "Base on Sepolia RPC URL")
baseSepoliaContract = NodeCmd.Flags().String("baseSepoliaContract", "", "Base on Sepolia contract address")
optimismSepoliaRPC = NodeCmd.Flags().String("optimismSepoliaRPC", "", "Optimism on Sepolia RPC URL")
optimismSepoliaContract = NodeCmd.Flags().String("optimismSepoliaContract", "", "Optimism on Sepolia contract address")
logLevel = NodeCmd.Flags().String("logLevel", "info", "Logging level (debug, info, warn, error, dpanic, panic, fatal)")
publicRpcLogDetailStr = NodeCmd.Flags().String("publicRpcLogDetail", "full", "The detail with which public RPC requests shall be logged (none=no logging, minimal=only log gRPC methods, full=log gRPC method, payload (up to 200 bytes) and user agent (up to 200 bytes))")
publicRpcLogToTelemetry = NodeCmd.Flags().Bool("logPublicRpcToTelemetry", true, "whether or not to include publicRpc request logs in telemetry")
@ -505,6 +523,9 @@ func runNode(cmd *cobra.Command, args []string) {
*sepoliaContract = unsafeDevModeEvmContractAddress(*sepoliaContract)
*scrollContract = unsafeDevModeEvmContractAddress(*scrollContract)
*mantleContract = unsafeDevModeEvmContractAddress(*mantleContract)
*arbitrumSepoliaContract = unsafeDevModeEvmContractAddress(*arbitrumSepoliaContract)
*baseSepoliaContract = unsafeDevModeEvmContractAddress(*baseSepoliaContract)
*optimismSepoliaContract = unsafeDevModeEvmContractAddress(*optimismSepoliaContract)
}
// Verify flags
@ -665,31 +686,38 @@ func runNode(cmd *cobra.Command, args []string) {
logger.Fatal("If --gatewayWS is not specified, then --gatewayLCD and --gatewayContract must not be specified")
}
if *testnetMode {
if *neonRPC == "" {
logger.Fatal("Please specify --neonRPC")
// These chains are only allowed in devnet and testnet.
if *testnetMode || *unsafeDevMode {
if (*neonRPC == "") != (*neonContract == "") {
logger.Fatal("Both --neonRPC and --neonContract must be set together or both unset")
}
if *neonContract == "" {
logger.Fatal("Please specify --neonContract")
if (*sepoliaRPC == "") != (*sepoliaContract == "") {
logger.Fatal("Both --sepoliaRPC and --sepoliaContract must be set together or both unset")
}
if *sepoliaRPC == "" {
logger.Fatal("Please specify --sepoliaRPC")
if (*arbitrumSepoliaRPC == "") != (*arbitrumSepoliaContract == "") {
logger.Fatal("Both --arbitrumSepoliaRPC and --arbitrumSepoliaContract must be set together or both unset")
}
if *sepoliaContract == "" {
logger.Fatal("Please specify --sepoliaContract")
if (*baseSepoliaRPC == "") != (*baseSepoliaContract == "") {
logger.Fatal("Both --baseSepoliaRPC and --baseSepoliaContract must be set together or both unset")
}
if (*optimismSepoliaRPC == "") != (*optimismSepoliaContract == "") {
logger.Fatal("Both --optimismSepoliaRPC and --optimismSepoliaContract must be set together or both unset")
}
} else {
if *neonRPC != "" && !*unsafeDevMode {
logger.Fatal("Please do not specify --neonRPC")
if *neonRPC != "" || *neonContract != "" {
logger.Fatal("Please do not specify --neonRPC or --neonContract")
}
if *neonContract != "" && !*unsafeDevMode {
logger.Fatal("Please do not specify --neonContract")
if *sepoliaRPC != "" || *sepoliaContract != "" {
logger.Fatal("Please do not specify --sepoliaRPC or --sepoliaContract")
}
if *sepoliaRPC != "" && !*unsafeDevMode {
logger.Fatal("Please do not specify --sepoliaRPC")
if *arbitrumSepoliaRPC != "" || *arbitrumSepoliaContract != "" {
logger.Fatal("Please do not specify --arbitrumSepoliaRPC or --arbitrumSepoliaContract")
}
if *sepoliaContract != "" && !*unsafeDevMode {
logger.Fatal("Please do not specify --sepoliaContract")
if *baseSepoliaRPC != "" || *baseSepoliaContract != "" {
logger.Fatal("Please do not specify --baseSepoliaRPC or --baseSepoliaContract")
}
if *optimismSepoliaRPC != "" || *optimismSepoliaContract != "" {
logger.Fatal("Please do not specify --optimismSepoliaRPC or --optimismSepoliaContract")
}
}
@ -893,6 +921,9 @@ func runNode(cmd *cobra.Command, args []string) {
rpcMap["pythnetWS"] = *pythnetWS
if env == common.TestNet {
rpcMap["sepoliaRPC"] = *sepoliaRPC
rpcMap["arbitrumSepoliaRPC"] = *arbitrumSepoliaRPC
rpcMap["baseSepoliaRPC"] = *baseSepoliaRPC
rpcMap["optimismSepoliaRPC"] = *optimismSepoliaRPC
}
rpcMap["scrollRPC"] = *scrollRPC
rpcMap["solanaRPC"] = *solanaRPC
@ -1428,22 +1459,22 @@ func runNode(cmd *cobra.Command, args []string) {
watcherConfigs = append(watcherConfigs, wc)
}
if *testnetMode {
if shouldStart(neonRPC) {
if !shouldStart(solanaRPC) {
log.Fatalf("If neon is enabled then solana must also be enabled.")
}
wc := &evm.WatcherConfig{
NetworkID: "neon",
ChainID: vaa.ChainIDNeon,
Rpc: *neonRPC,
Contract: *neonContract,
L1FinalizerRequired: "solana-finalized",
}
watcherConfigs = append(watcherConfigs, wc)
if *testnetMode && shouldStart(neonRPC) {
if !shouldStart(solanaRPC) {
log.Fatalf("If neon is enabled then solana must also be enabled.")
}
wc := &evm.WatcherConfig{
NetworkID: "neon",
ChainID: vaa.ChainIDNeon,
Rpc: *neonRPC,
Contract: *neonContract,
L1FinalizerRequired: "solana-finalized",
}
watcherConfigs = append(watcherConfigs, wc)
}
if *testnetMode || *unsafeDevMode {
if shouldStart(sepoliaRPC) {
wc := &evm.WatcherConfig{
NetworkID: "sepolia",
@ -1454,6 +1485,39 @@ func runNode(cmd *cobra.Command, args []string) {
watcherConfigs = append(watcherConfigs, wc)
}
if shouldStart(arbitrumSepoliaRPC) {
wc := &evm.WatcherConfig{
NetworkID: "arbitrum_sepolia",
ChainID: vaa.ChainIDArbitrumSepolia,
Rpc: *arbitrumSepoliaRPC,
Contract: *arbitrumSepoliaContract,
}
watcherConfigs = append(watcherConfigs, wc)
}
if shouldStart(baseSepoliaRPC) {
wc := &evm.WatcherConfig{
NetworkID: "base_sepolia",
ChainID: vaa.ChainIDBaseSepolia,
Rpc: *baseSepoliaRPC,
Contract: *baseSepoliaContract,
}
watcherConfigs = append(watcherConfigs, wc)
}
if shouldStart(optimismSepoliaRPC) {
wc := &evm.WatcherConfig{
NetworkID: "optimism_sepolia",
ChainID: vaa.ChainIDOptimismSepolia,
Rpc: *optimismSepoliaRPC,
Contract: *optimismSepoliaContract,
}
watcherConfigs = append(watcherConfigs, wc)
}
}
var ibcWatcherConfig *node.IbcWatcherConfig = nil

View File

@ -365,7 +365,7 @@ func GuardianOptionWatchers(watcherConfigs []watchers.WatcherConfig, ibcWatcherC
return fmt.Errorf("NetworkID already configured: %s", string(wc.GetNetworkID()))
}
watcherName := string(wc.GetNetworkID()) + "watch"
watcherName := string(wc.GetNetworkID()) + "_watch"
logger.Debug("Setting up watcher: " + watcherName)
if wc.GetNetworkID() != "solana-confirmed" { // TODO this should not be a special case, see comment in common/readiness.go

View File

@ -57,15 +57,18 @@ const (
ChainID_CHAIN_ID_BASE ChainID = 30
ChainID_CHAIN_ID_SEI ChainID = 32
// CHAIN_ID_ROOTSTOCK = 33;
ChainID_CHAIN_ID_SCROLL ChainID = 34
ChainID_CHAIN_ID_MANTLE ChainID = 35
ChainID_CHAIN_ID_WORMCHAIN ChainID = 3104
ChainID_CHAIN_ID_COSMOSHUB ChainID = 4000
ChainID_CHAIN_ID_EVMOS ChainID = 4001
ChainID_CHAIN_ID_KUJIRA ChainID = 4002
ChainID_CHAIN_ID_NEUTRON ChainID = 4003
ChainID_CHAIN_ID_CELESTIA ChainID = 4004
ChainID_CHAIN_ID_SEPOLIA ChainID = 10002
ChainID_CHAIN_ID_SCROLL ChainID = 34
ChainID_CHAIN_ID_MANTLE ChainID = 35
ChainID_CHAIN_ID_WORMCHAIN ChainID = 3104
ChainID_CHAIN_ID_COSMOSHUB ChainID = 4000
ChainID_CHAIN_ID_EVMOS ChainID = 4001
ChainID_CHAIN_ID_KUJIRA ChainID = 4002
ChainID_CHAIN_ID_NEUTRON ChainID = 4003
ChainID_CHAIN_ID_CELESTIA ChainID = 4004
ChainID_CHAIN_ID_SEPOLIA ChainID = 10002
ChainID_CHAIN_ID_ARBITRUM_SEPOLIA ChainID = 10003
ChainID_CHAIN_ID_BASE_SEPOLIA ChainID = 10004
ChainID_CHAIN_ID_OPTIMISM_SEPOLIA ChainID = 10005
)
// Enum value maps for ChainID.
@ -111,48 +114,54 @@ var (
4003: "CHAIN_ID_NEUTRON",
4004: "CHAIN_ID_CELESTIA",
10002: "CHAIN_ID_SEPOLIA",
10003: "CHAIN_ID_ARBITRUM_SEPOLIA",
10004: "CHAIN_ID_BASE_SEPOLIA",
10005: "CHAIN_ID_OPTIMISM_SEPOLIA",
}
ChainID_value = map[string]int32{
"CHAIN_ID_UNSPECIFIED": 0,
"CHAIN_ID_SOLANA": 1,
"CHAIN_ID_ETHEREUM": 2,
"CHAIN_ID_TERRA": 3,
"CHAIN_ID_BSC": 4,
"CHAIN_ID_POLYGON": 5,
"CHAIN_ID_AVALANCHE": 6,
"CHAIN_ID_OASIS": 7,
"CHAIN_ID_ALGORAND": 8,
"CHAIN_ID_AURORA": 9,
"CHAIN_ID_FANTOM": 10,
"CHAIN_ID_KARURA": 11,
"CHAIN_ID_ACALA": 12,
"CHAIN_ID_KLAYTN": 13,
"CHAIN_ID_CELO": 14,
"CHAIN_ID_NEAR": 15,
"CHAIN_ID_MOONBEAM": 16,
"CHAIN_ID_NEON": 17,
"CHAIN_ID_TERRA2": 18,
"CHAIN_ID_INJECTIVE": 19,
"CHAIN_ID_OSMOSIS": 20,
"CHAIN_ID_SUI": 21,
"CHAIN_ID_APTOS": 22,
"CHAIN_ID_ARBITRUM": 23,
"CHAIN_ID_OPTIMISM": 24,
"CHAIN_ID_GNOSIS": 25,
"CHAIN_ID_PYTHNET": 26,
"CHAIN_ID_XPLA": 28,
"CHAIN_ID_BTC": 29,
"CHAIN_ID_BASE": 30,
"CHAIN_ID_SEI": 32,
"CHAIN_ID_SCROLL": 34,
"CHAIN_ID_MANTLE": 35,
"CHAIN_ID_WORMCHAIN": 3104,
"CHAIN_ID_COSMOSHUB": 4000,
"CHAIN_ID_EVMOS": 4001,
"CHAIN_ID_KUJIRA": 4002,
"CHAIN_ID_NEUTRON": 4003,
"CHAIN_ID_CELESTIA": 4004,
"CHAIN_ID_SEPOLIA": 10002,
"CHAIN_ID_UNSPECIFIED": 0,
"CHAIN_ID_SOLANA": 1,
"CHAIN_ID_ETHEREUM": 2,
"CHAIN_ID_TERRA": 3,
"CHAIN_ID_BSC": 4,
"CHAIN_ID_POLYGON": 5,
"CHAIN_ID_AVALANCHE": 6,
"CHAIN_ID_OASIS": 7,
"CHAIN_ID_ALGORAND": 8,
"CHAIN_ID_AURORA": 9,
"CHAIN_ID_FANTOM": 10,
"CHAIN_ID_KARURA": 11,
"CHAIN_ID_ACALA": 12,
"CHAIN_ID_KLAYTN": 13,
"CHAIN_ID_CELO": 14,
"CHAIN_ID_NEAR": 15,
"CHAIN_ID_MOONBEAM": 16,
"CHAIN_ID_NEON": 17,
"CHAIN_ID_TERRA2": 18,
"CHAIN_ID_INJECTIVE": 19,
"CHAIN_ID_OSMOSIS": 20,
"CHAIN_ID_SUI": 21,
"CHAIN_ID_APTOS": 22,
"CHAIN_ID_ARBITRUM": 23,
"CHAIN_ID_OPTIMISM": 24,
"CHAIN_ID_GNOSIS": 25,
"CHAIN_ID_PYTHNET": 26,
"CHAIN_ID_XPLA": 28,
"CHAIN_ID_BTC": 29,
"CHAIN_ID_BASE": 30,
"CHAIN_ID_SEI": 32,
"CHAIN_ID_SCROLL": 34,
"CHAIN_ID_MANTLE": 35,
"CHAIN_ID_WORMCHAIN": 3104,
"CHAIN_ID_COSMOSHUB": 4000,
"CHAIN_ID_EVMOS": 4001,
"CHAIN_ID_KUJIRA": 4002,
"CHAIN_ID_NEUTRON": 4003,
"CHAIN_ID_CELESTIA": 4004,
"CHAIN_ID_SEPOLIA": 10002,
"CHAIN_ID_ARBITRUM_SEPOLIA": 10003,
"CHAIN_ID_BASE_SEPOLIA": 10004,
"CHAIN_ID_OPTIMISM_SEPOLIA": 10005,
}
)
@ -1521,8 +1530,8 @@ var file_publicrpc_v1_publicrpc_proto_rawDesc = []byte{
0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69,
0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2a, 0xdf,
0x06, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2a, 0xbb,
0x07, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x53, 0x4f, 0x4c, 0x41, 0x4e, 0x41, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41,
@ -1576,100 +1585,106 @@ var file_publicrpc_v1_publicrpc_proto_rawDesc = []byte{
0x1f, 0x12, 0x16, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x45,
0x4c, 0x45, 0x53, 0x54, 0x49, 0x41, 0x10, 0xa4, 0x1f, 0x12, 0x15, 0x0a, 0x10, 0x43, 0x48, 0x41,
0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x45, 0x50, 0x4f, 0x4c, 0x49, 0x41, 0x10, 0x92, 0x4e,
0x32, 0x86, 0x0b, 0x0a, 0x10, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x50, 0x43, 0x53, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74,
0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62,
0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73,
0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76,
0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65,
0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65,
0x61, 0x74, 0x73, 0x12, 0xbb, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65,
0x64, 0x56, 0x41, 0x41, 0x12, 0x21, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63,
0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x5e, 0x12, 0x5c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f,
0x76, 0x61, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e,
0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74,
0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42,
0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47,
0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51,
0x12, 0x4f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74,
0x63, 0x68, 0x5f, 0x76, 0x61, 0x61, 0x2f, 0x7b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64,
0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f,
0x7b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x7d,
0x2f, 0x7b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
0x7d, 0x12, 0x91, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74,
0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x70, 0x75,
0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75,
0x72, 0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x12, 0x1e, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x42,
0x49, 0x54, 0x52, 0x55, 0x4d, 0x5f, 0x53, 0x45, 0x50, 0x4f, 0x4c, 0x49, 0x41, 0x10, 0x93, 0x4e,
0x12, 0x1a, 0x0a, 0x15, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x41, 0x53,
0x45, 0x5f, 0x53, 0x45, 0x50, 0x4f, 0x4c, 0x49, 0x41, 0x10, 0x94, 0x4e, 0x12, 0x1e, 0x0a, 0x19,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4d, 0x49, 0x53,
0x4d, 0x5f, 0x53, 0x45, 0x50, 0x4f, 0x4c, 0x49, 0x41, 0x10, 0x95, 0x4e, 0x32, 0x86, 0x0b, 0x0a,
0x10, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x7c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72,
0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72,
0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61,
0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12,
0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12,
0xbb, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41,
0x12, 0x21, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e,
0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5e, 0x12,
0x5c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x2f,
0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74,
0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0xbd, 0x01,
0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68,
0x56, 0x41, 0x41, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63,
0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75,
0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x76,
0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x76,
0x61, 0x61, 0x2f, 0x7b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69,
0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x62, 0x61, 0x74,
0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x61,
0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0x91, 0x01,
0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61, 0x72,
0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76,
0x31, 0x2f, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x65, 0x74, 0x2f, 0x63, 0x75,
0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0xcc, 0x01, 0x0a, 0x23, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e,
0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f,
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x2e,
0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76,
0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c,
0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47,
0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f,
0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f,
0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x5f, 0x63,
0x68, 0x61, 0x69, 0x6e, 0x12, 0x9a, 0x01, 0x0a, 0x17, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73,
0x12, 0x2c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e,
0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65,
0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65,
0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x2f, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61,
0x73, 0x12, 0xe4, 0x01, 0x0a, 0x15, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73,
0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x2a, 0x2e, 0x70, 0x75,
0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49,
0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x76,
0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x69, 0x73, 0x5f, 0x76, 0x61,
0x61, 0x5f, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63,
0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69,
0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
0x73, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x73,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x14, 0x47, 0x6f, 0x76,
0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73,
0x74, 0x12, 0x29, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31,
0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65,
0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70,
0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61,
0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x75,
0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x65, 0x74, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x74, 0x12, 0xcc, 0x01, 0x0a, 0x23, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65,
0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e,
0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74,
0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42,
0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65,
0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e,
0x12, 0x9a, 0x01, 0x0a, 0x17, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x12, 0x2c, 0x2e, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65,
0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19,
0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x74,
0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x75, 0x73, 0x6f, 0x6e,
0x65, 0x2f, 0x77, 0x6f, 0x72, 0x6d, 0x68, 0x6f, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f,
0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63,
0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56,
0x41, 0x41, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x75, 0x62,
0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e,
0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f,
0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x73, 0x12, 0xe4, 0x01,
0x0a, 0x15, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45,
0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49,
0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x61, 0x5f, 0x65, 0x6e,
0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e,
0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71, 0x75, 0x65,
0x6e, 0x63, 0x65, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x14, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e,
0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76,
0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73,
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69,
0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76,
0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
0x5f, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x75, 0x73, 0x6f, 0x6e, 0x65, 0x2f, 0x77, 0x6f,
0x72, 0x6d, 0x68, 0x6f, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2f,
0x76, 0x31, 0x3b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x76, 0x31, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -128,25 +128,28 @@ func handleQueryRequestsImpl(
// CCQ is currently only supported on EVM.
supportedChains := map[vaa.ChainID]struct{}{
vaa.ChainIDEthereum: {},
vaa.ChainIDBSC: {},
vaa.ChainIDPolygon: {},
vaa.ChainIDAvalanche: {},
vaa.ChainIDOasis: {},
vaa.ChainIDAurora: {},
vaa.ChainIDFantom: {},
vaa.ChainIDKarura: {},
vaa.ChainIDAcala: {},
vaa.ChainIDKlaytn: {},
vaa.ChainIDCelo: {},
vaa.ChainIDMoonbeam: {},
vaa.ChainIDNeon: {},
vaa.ChainIDArbitrum: {},
vaa.ChainIDOptimism: {},
vaa.ChainIDBase: {},
vaa.ChainIDScroll: {},
vaa.ChainIDMantle: {},
vaa.ChainIDSepolia: {},
vaa.ChainIDEthereum: {},
vaa.ChainIDBSC: {},
vaa.ChainIDPolygon: {},
vaa.ChainIDAvalanche: {},
vaa.ChainIDOasis: {},
vaa.ChainIDAurora: {},
vaa.ChainIDFantom: {},
vaa.ChainIDKarura: {},
vaa.ChainIDAcala: {},
vaa.ChainIDKlaytn: {},
vaa.ChainIDCelo: {},
vaa.ChainIDMoonbeam: {},
vaa.ChainIDNeon: {},
vaa.ChainIDArbitrum: {},
vaa.ChainIDOptimism: {},
vaa.ChainIDBase: {},
vaa.ChainIDScroll: {},
vaa.ChainIDMantle: {},
vaa.ChainIDSepolia: {},
vaa.ChainIDArbitrumSepolia: {},
vaa.ChainIDBaseSepolia: {},
vaa.ChainIDOptimismSepolia: {},
}
// But we don't want to allow CCQ if the chain is not enabled.

View File

@ -764,7 +764,10 @@ func (w *Watcher) getFinality(ctx context.Context) (bool, bool, error) {
w.chainID == vaa.ChainIDKarura ||
w.chainID == vaa.ChainIDMoonbeam ||
w.chainID == vaa.ChainIDOptimism ||
w.chainID == vaa.ChainIDSepolia {
w.chainID == vaa.ChainIDSepolia ||
w.chainID == vaa.ChainIDArbitrumSepolia ||
w.chainID == vaa.ChainIDBaseSepolia ||
w.chainID == vaa.ChainIDOptimismSepolia {
finalized = true
safe = true
} else if w.chainID == vaa.ChainIDScroll {

View File

@ -49,6 +49,9 @@ enum ChainID {
CHAIN_ID_NEUTRON = 4003;
CHAIN_ID_CELESTIA = 4004;
CHAIN_ID_SEPOLIA = 10002;
CHAIN_ID_ARBITRUM_SEPOLIA = 10003;
CHAIN_ID_BASE_SEPOLIA = 10004;
CHAIN_ID_OPTIMISM_SEPOLIA = 10005;
}
// MessageID is a VAA's globally unique identifier (see data availability design document).

View File

@ -1,5 +1,15 @@
# Changelog
## 0.10.7
### Added
Arbitrum on Sepolia support
Base on Sepolia support
Optimism on Sepolia support
## 0.10.6
### Added

View File

@ -1,6 +1,6 @@
{
"name": "@certusone/wormhole-sdk",
"version": "0.10.6",
"version": "0.10.7",
"description": "SDK for interacting with Wormhole",
"homepage": "https://wormhole.com",
"main": "./lib/cjs/index.js",

View File

@ -40,6 +40,9 @@ export const CHAINS = {
neutron: 4003,
celestia: 4004,
sepolia: 10002,
arbitrum_sepolia: 10003,
base_sepolia: 10004,
optimism_sepolia: 10005,
} as const;
export type ChainName = keyof typeof CHAINS;
@ -71,6 +74,9 @@ export const EVMChainNames = [
"scroll",
"mantle",
"sepolia",
"arbitrum_sepolia",
"base_sepolia",
"optimism_sepolia",
] as const;
export type EVMChainName = typeof EVMChainNames[number];
@ -302,6 +308,24 @@ const MAINNET = {
token_bridge: undefined,
nft_bridge: undefined,
},
arbitrum_sepolia: {
// This is testnet only.
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
base_sepolia: {
// This is testnet only.
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
optimism_sepolia: {
// This is testnet only.
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
cosmoshub: {
core: undefined,
token_bridge: undefined,
@ -517,6 +541,21 @@ const TESTNET = {
token_bridge: "0xDB5492265f6038831E89f495670FF909aDe94bd9",
nft_bridge: "0x6a0B52ac198e4870e5F3797d5B403838a5bbFD99",
},
arbitrum_sepolia: {
core: "0x6b9C8671cdDC8dEab9c719bB87cBd3e782bA6a35",
token_bridge: "0xC7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
nft_bridge: "0x23908A62110e21C04F3A4e011d24F901F911744A",
},
base_sepolia: {
core: "0x79A1027a6A159502049F10906D333EC57E95F083",
token_bridge: "0x86F55A04690fd7815A3D802bD587e83eA888B239",
nft_bridge: "0x268557122Ffd64c85750d630b716471118F323c8",
},
optimism_sepolia: {
core: "0x31377888146f3253211EFEf5c676D41ECe7D58Fe",
token_bridge: "0x99737Ec4B815d816c49A385943baf0380e75c0Ac",
nft_bridge: "0x27812285fbe85BA1DF242929B906B31EE3dd1b9f",
},
cosmoshub: {
core: undefined,
token_bridge: undefined,
@ -731,6 +770,21 @@ const DEVNET = {
token_bridge: undefined,
nft_bridge: undefined,
},
arbitrum_sepolia: {
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
base_sepolia: {
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
optimism_sepolia: {
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
cosmoshub: {
core: undefined,
token_bridge: undefined,
@ -838,6 +892,9 @@ export const CHAIN_ID_KUJIRA = CHAINS["kujira"];
export const CHAIN_ID_NEUTRON = CHAINS["neutron"];
export const CHAIN_ID_CELESTIA = CHAINS["celestia"];
export const CHAIN_ID_SEPOLIA = CHAINS["sepolia"];
export const CHAIN_ID_ARBITRUM_SEPOLIA = CHAINS["arbitrum_sepolia"];
export const CHAIN_ID_BASE_SEPOLIA = CHAINS["base_sepolia"];
export const CHAIN_ID_OPTIMISM_SEPOLIA = CHAINS["optimism_sepolia"];
// This inverts the [[CHAINS]] object so that we can look up a chain by id
export type ChainIdToName = {

View File

@ -8,59 +8,65 @@ var KnownTestnetEmitters = buildKnownEmitters(knownTestnetTokenbridgeEmitters, k
// KnownTestnetTokenbridgeEmitters is a map of known tokenbridge emitters on the various L1 testnets.
var KnownTestnetTokenbridgeEmitters = buildEmitterMap(knownTestnetTokenbridgeEmitters)
var knownTestnetTokenbridgeEmitters = map[vaa.ChainID]string{
vaa.ChainIDSolana: "3b26409f8aaded3f5ddca184695aa6a0fa829b0c85caf84856324896d214ca98",
vaa.ChainIDEthereum: "000000000000000000000000f890982f9310df57d00f659cf4fd87e65aded8d7",
vaa.ChainIDTerra: "0000000000000000000000000c32d68d8f22613f6b9511872dad35a59bfdf7f0",
vaa.ChainIDTerra2: "c3d4c6c2bcba163de1defb7e8f505cdb40619eee4fa618678955e8790ae1448d",
vaa.ChainIDBSC: "0000000000000000000000009dcf9d205c9de35334d646bee44b2d2859712a09",
vaa.ChainIDPolygon: "000000000000000000000000377D55a7928c046E18eEbb61977e714d2a76472a",
vaa.ChainIDAvalanche: "00000000000000000000000061e44e506ca5659e6c0bba9b678586fa2d729756",
vaa.ChainIDOasis: "00000000000000000000000088d8004a9bdbfd9d28090a02010c19897a29605c",
vaa.ChainIDAlgorand: "6241ffdc032b693bfb8544858f0403dec86f2e1720af9f34f8d65fe574b6238c",
vaa.ChainIDAptos: "0000000000000000000000000000000000000000000000000000000000000001",
vaa.ChainIDAurora: "000000000000000000000000d05ed3ad637b890d68a854d607eeaf11af456fba",
vaa.ChainIDFantom: "000000000000000000000000599cea2204b4faecd584ab1f2b6aca137a0afbe8",
vaa.ChainIDKarura: "000000000000000000000000d11de1f930ea1f7dd0290fe3a2e35b9c91aefb37",
vaa.ChainIDAcala: "000000000000000000000000eba00cbe08992edd08ed7793e07ad6063c807004",
vaa.ChainIDKlaytn: "000000000000000000000000c7a13be098720840dea132d860fdfa030884b09a",
vaa.ChainIDCelo: "00000000000000000000000005ca6037ec51f8b712ed2e6fa72219feae74e153",
vaa.ChainIDNear: "c2c0b6ecbbe9ecf91b2b7999f0264018ba68126c2e83bf413f59f712f3a1df55",
vaa.ChainIDMantle: "000000000000000000000000C7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
vaa.ChainIDMoonbeam: "000000000000000000000000bc976d4b9d57e57c3ca52e1fd136c45ff7955a96",
vaa.ChainIDArbitrum: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDOptimism: "000000000000000000000000C7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
vaa.ChainIDNeon: "000000000000000000000000c7a204bdbfe983fcd8d8e61d02b475d4073ff97e",
vaa.ChainIDXpla: "b66da121bd3621c8d2604c08c82965640fe682d606af26a302ee09094f5e62cf",
vaa.ChainIDInjective: "00000000000000000000000003f3e7b2e363f51cf6e57ef85f43a2b91dbce501",
vaa.ChainIDSui: "40440411a170b4842ae7dee4f4a7b7a58bc0a98566e998850a7bb87bf5dc05b9",
vaa.ChainIDBase: "000000000000000000000000A31aa3FDb7aF7Db93d18DDA4e19F811342EDF780",
vaa.ChainIDSei: "9328673cb5de3fd99974cefbbd90fea033f4c59a572abfd7e1a4eebcc5d18157",
vaa.ChainIDScroll: "00000000000000000000000022427d90B7dA3fA4642F7025A854c7254E4e45BF",
vaa.ChainIDSepolia: "000000000000000000000000DB5492265f6038831E89f495670FF909aDe94bd9",
vaa.ChainIDWormchain: "ef5251ea1e99ae48732800ccc7b83b57881232a73eb796b63b1d86ed2ea44e27",
vaa.ChainIDSolana: "3b26409f8aaded3f5ddca184695aa6a0fa829b0c85caf84856324896d214ca98",
vaa.ChainIDEthereum: "000000000000000000000000f890982f9310df57d00f659cf4fd87e65aded8d7",
vaa.ChainIDTerra: "0000000000000000000000000c32d68d8f22613f6b9511872dad35a59bfdf7f0",
vaa.ChainIDTerra2: "c3d4c6c2bcba163de1defb7e8f505cdb40619eee4fa618678955e8790ae1448d",
vaa.ChainIDBSC: "0000000000000000000000009dcf9d205c9de35334d646bee44b2d2859712a09",
vaa.ChainIDPolygon: "000000000000000000000000377D55a7928c046E18eEbb61977e714d2a76472a",
vaa.ChainIDAvalanche: "00000000000000000000000061e44e506ca5659e6c0bba9b678586fa2d729756",
vaa.ChainIDOasis: "00000000000000000000000088d8004a9bdbfd9d28090a02010c19897a29605c",
vaa.ChainIDAlgorand: "6241ffdc032b693bfb8544858f0403dec86f2e1720af9f34f8d65fe574b6238c",
vaa.ChainIDAptos: "0000000000000000000000000000000000000000000000000000000000000001",
vaa.ChainIDAurora: "000000000000000000000000d05ed3ad637b890d68a854d607eeaf11af456fba",
vaa.ChainIDFantom: "000000000000000000000000599cea2204b4faecd584ab1f2b6aca137a0afbe8",
vaa.ChainIDKarura: "000000000000000000000000d11de1f930ea1f7dd0290fe3a2e35b9c91aefb37",
vaa.ChainIDAcala: "000000000000000000000000eba00cbe08992edd08ed7793e07ad6063c807004",
vaa.ChainIDKlaytn: "000000000000000000000000c7a13be098720840dea132d860fdfa030884b09a",
vaa.ChainIDCelo: "00000000000000000000000005ca6037ec51f8b712ed2e6fa72219feae74e153",
vaa.ChainIDNear: "c2c0b6ecbbe9ecf91b2b7999f0264018ba68126c2e83bf413f59f712f3a1df55",
vaa.ChainIDMantle: "000000000000000000000000C7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
vaa.ChainIDMoonbeam: "000000000000000000000000bc976d4b9d57e57c3ca52e1fd136c45ff7955a96",
vaa.ChainIDArbitrum: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDOptimism: "000000000000000000000000C7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
vaa.ChainIDNeon: "000000000000000000000000c7a204bdbfe983fcd8d8e61d02b475d4073ff97e",
vaa.ChainIDXpla: "b66da121bd3621c8d2604c08c82965640fe682d606af26a302ee09094f5e62cf",
vaa.ChainIDInjective: "00000000000000000000000003f3e7b2e363f51cf6e57ef85f43a2b91dbce501",
vaa.ChainIDSui: "40440411a170b4842ae7dee4f4a7b7a58bc0a98566e998850a7bb87bf5dc05b9",
vaa.ChainIDBase: "000000000000000000000000A31aa3FDb7aF7Db93d18DDA4e19F811342EDF780",
vaa.ChainIDSei: "9328673cb5de3fd99974cefbbd90fea033f4c59a572abfd7e1a4eebcc5d18157",
vaa.ChainIDScroll: "00000000000000000000000022427d90B7dA3fA4642F7025A854c7254E4e45BF",
vaa.ChainIDSepolia: "000000000000000000000000DB5492265f6038831E89f495670FF909aDe94bd9",
vaa.ChainIDArbitrumSepolia: "000000000000000000000000C7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
vaa.ChainIDBaseSepolia: "00000000000000000000000086F55A04690fd7815A3D802bD587e83eA888B239",
vaa.ChainIDOptimismSepolia: "00000000000000000000000099737Ec4B815d816c49A385943baf0380e75c0Ac",
vaa.ChainIDWormchain: "ef5251ea1e99ae48732800ccc7b83b57881232a73eb796b63b1d86ed2ea44e27",
}
// KnownTestnetNFTBridgeEmitters is a map of known NFT emitters on the various L1 testnets.
var KnownTestnetNFTBridgeEmitters = buildEmitterMap(knownTestnetNFTBridgeEmitters)
var knownTestnetNFTBridgeEmitters = map[vaa.ChainID]string{
vaa.ChainIDSolana: "752a49814e40b96b097207e4b53fdd330544e1e661653fbad4bc159cc28a839e",
vaa.ChainIDEthereum: "000000000000000000000000d8e4c2dbdd2e2bd8f1336ea691dbff6952b1a6eb",
vaa.ChainIDBSC: "000000000000000000000000cd16e5613ef35599dc82b24cb45b5a93d779f1ee",
vaa.ChainIDPolygon: "00000000000000000000000051a02d0dcb5e52f5b92bdaa38fa013c91c7309a9",
vaa.ChainIDAvalanche: "000000000000000000000000d601baf2eee3c028344471684f6b27e789d9075d",
vaa.ChainIDOasis: "000000000000000000000000c5c25b41ab0b797571620f5204afa116a44c0eba",
vaa.ChainIDAurora: "0000000000000000000000008f399607e9ba2405d87f5f3e1b78d950b44b2e24",
vaa.ChainIDFantom: "00000000000000000000000063ed9318628d26bdcb15df58b53bb27231d1b227",
vaa.ChainIDKarura: "0000000000000000000000000a693c2d594292b6eb89cb50efe4b0b63dd2760d",
vaa.ChainIDAcala: "00000000000000000000000096f1335e0acab3cfd9899b30b2374e25a2148a6e",
vaa.ChainIDKlaytn: "00000000000000000000000094c994fc51c13101062958b567e743f1a04432de",
vaa.ChainIDCelo: "000000000000000000000000acd8190f647a31e56a656748bc30f69259f245db",
vaa.ChainIDMantle: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDMoonbeam: "00000000000000000000000098a0f4b96972b32fcb3bd03caeb66a44a6ab9edb",
vaa.ChainIDArbitrum: "000000000000000000000000Ee3dB83916Ccdc3593b734F7F2d16D630F39F1D0",
vaa.ChainIDOptimism: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDNeon: "00000000000000000000000023908a62110e21c04f3a4e011d24f901f911744a",
vaa.ChainIDBase: "000000000000000000000000F681d1cc5F25a3694E348e7975d7564Aa581db59",
vaa.ChainIDScroll: "00000000000000000000000047B9a1406BEe29a3001BFEB7e45aE45fFFB40c18",
vaa.ChainIDSepolia: "0000000000000000000000006a0B52ac198e4870e5F3797d5B403838a5bbFD99",
vaa.ChainIDSolana: "752a49814e40b96b097207e4b53fdd330544e1e661653fbad4bc159cc28a839e",
vaa.ChainIDEthereum: "000000000000000000000000d8e4c2dbdd2e2bd8f1336ea691dbff6952b1a6eb",
vaa.ChainIDBSC: "000000000000000000000000cd16e5613ef35599dc82b24cb45b5a93d779f1ee",
vaa.ChainIDPolygon: "00000000000000000000000051a02d0dcb5e52f5b92bdaa38fa013c91c7309a9",
vaa.ChainIDAvalanche: "000000000000000000000000d601baf2eee3c028344471684f6b27e789d9075d",
vaa.ChainIDOasis: "000000000000000000000000c5c25b41ab0b797571620f5204afa116a44c0eba",
vaa.ChainIDAurora: "0000000000000000000000008f399607e9ba2405d87f5f3e1b78d950b44b2e24",
vaa.ChainIDFantom: "00000000000000000000000063ed9318628d26bdcb15df58b53bb27231d1b227",
vaa.ChainIDKarura: "0000000000000000000000000a693c2d594292b6eb89cb50efe4b0b63dd2760d",
vaa.ChainIDAcala: "00000000000000000000000096f1335e0acab3cfd9899b30b2374e25a2148a6e",
vaa.ChainIDKlaytn: "00000000000000000000000094c994fc51c13101062958b567e743f1a04432de",
vaa.ChainIDCelo: "000000000000000000000000acd8190f647a31e56a656748bc30f69259f245db",
vaa.ChainIDMantle: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDMoonbeam: "00000000000000000000000098a0f4b96972b32fcb3bd03caeb66a44a6ab9edb",
vaa.ChainIDArbitrum: "000000000000000000000000Ee3dB83916Ccdc3593b734F7F2d16D630F39F1D0",
vaa.ChainIDOptimism: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDNeon: "00000000000000000000000023908a62110e21c04f3a4e011d24f901f911744a",
vaa.ChainIDBase: "000000000000000000000000F681d1cc5F25a3694E348e7975d7564Aa581db59",
vaa.ChainIDScroll: "00000000000000000000000047B9a1406BEe29a3001BFEB7e45aE45fFFB40c18",
vaa.ChainIDSepolia: "0000000000000000000000006a0B52ac198e4870e5F3797d5B403838a5bbFD99",
vaa.ChainIDArbitrumSepolia: "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
vaa.ChainIDBaseSepolia: "000000000000000000000000268557122Ffd64c85750d630b716471118F323c8",
vaa.ChainIDOptimismSepolia: "00000000000000000000000027812285fbe85BA1DF242929B906B31EE3dd1b9f",
}

View File

@ -230,6 +230,12 @@ func (c ChainID) String() string {
return "celestia"
case ChainIDSepolia:
return "sepolia"
case ChainIDArbitrumSepolia:
return "arbitrum_sepolia"
case ChainIDBaseSepolia:
return "base_sepolia"
case ChainIDOptimismSepolia:
return "optimism_sepolia"
default:
return fmt.Sprintf("unknown chain ID: %d", c)
}
@ -315,6 +321,12 @@ func ChainIDFromString(s string) (ChainID, error) {
return ChainIDCelestia, nil
case "sepolia":
return ChainIDSepolia, nil
case "arbitrum_sepolia":
return ChainIDArbitrumSepolia, nil
case "base_sepolia":
return ChainIDBaseSepolia, nil
case "optimism_sepolia":
return ChainIDOptimismSepolia, nil
default:
return ChainIDUnset, fmt.Errorf("unknown chain ID: %s", s)
}
@ -360,6 +372,9 @@ func GetAllNetworkIDs() []ChainID {
ChainIDNeutron,
ChainIDCelestia,
ChainIDSepolia,
ChainIDArbitrumSepolia,
ChainIDBaseSepolia,
ChainIDOptimismSepolia,
}
}
@ -441,6 +456,12 @@ const (
ChainIDCelestia ChainID = 4004
// ChainIDSepolia is the ChainID of Sepolia
ChainIDSepolia ChainID = 10002
// ChainIDArbitrumSepolia is the ChainID of Arbitrum on Sepolia
ChainIDArbitrumSepolia ChainID = 10003
// ChainIDBaseSepolia is the ChainID of Base on Sepolia
ChainIDBaseSepolia ChainID = 10004
// ChainIDOptimismSepolia is the ChainID of Optimism on Sepolia
ChainIDOptimismSepolia ChainID = 10005
// Minimum VAA size is derrived from the following assumptions:
// HEADER

View File

@ -65,6 +65,9 @@ func TestChainIDFromString(t *testing.T) {
{input: "neutron", output: ChainIDNeutron},
{input: "celestia", output: ChainIDCelestia},
{input: "sepolia", output: ChainIDSepolia},
{input: "arbitrum_sepolia", output: ChainIDArbitrumSepolia},
{input: "base_sepolia", output: ChainIDBaseSepolia},
{input: "optimism_sepolia", output: ChainIDOptimismSepolia},
{input: "Solana", output: ChainIDSolana},
{input: "Ethereum", output: ChainIDEthereum},
@ -102,6 +105,9 @@ func TestChainIDFromString(t *testing.T) {
{input: "Neutron", output: ChainIDNeutron},
{input: "Celestia", output: ChainIDCelestia},
{input: "Sepolia", output: ChainIDSepolia},
{input: "Arbitrum_Sepolia", output: ChainIDArbitrumSepolia},
{input: "Base_Sepolia", output: ChainIDBaseSepolia},
{input: "Optimism_Sepolia", output: ChainIDOptimismSepolia},
}
// Negative Test Cases
@ -279,6 +285,9 @@ func TestChainId_String(t *testing.T) {
{input: 4003, output: "neutron"},
{input: 4004, output: "celestia"},
{input: 10002, output: "sepolia"},
{input: 10003, output: "arbitrum_sepolia"},
{input: 10004, output: "base_sepolia"},
{input: 10005, output: "optimism_sepolia"},
{input: 10000, output: "unknown chain ID: 10000"},
}