wormhole/sdk/mainnet_consts.go

158 lines
6.6 KiB
Go
Raw Normal View History

package sdk
import (
"encoding/hex"
"fmt"
"github.com/wormhole-foundation/wormhole/sdk/vaa"
)
// PublicRPCEndpoints is a list of known public RPC endpoints for mainnet, operated by
// Wormhole guardian nodes.
//
// This list is duplicated a couple times across the codebase - make to to update all copies!
var PublicRPCEndpoints = []string{
"https://wormhole-v2-mainnet-api.certus.one",
"https://wormhole.inotel.ro",
"https://wormhole-v2-mainnet-api.mcf.rocks",
"https://wormhole-v2-mainnet-api.chainlayer.network",
"https://wormhole-v2-mainnet-api.staking.fund",
"https://wormhole-v2-mainnet.01node.com",
}
type (
EmitterType uint8
)
const (
EmitterTypeUnset EmitterType = 0
EmitterCoreBridge EmitterType = 1
EmitterTokenBridge EmitterType = 2
EmitterNFTBridge EmitterType = 3
)
func (et EmitterType) String() string {
switch et {
case EmitterTypeUnset:
return "unset"
case EmitterCoreBridge:
return "Core"
case EmitterTokenBridge:
return "TokenBridge"
case EmitterNFTBridge:
return "NFTBridge"
default:
return fmt.Sprintf("unknown emitter type: %d", et)
}
}
type EmitterInfo struct {
ChainID vaa.ChainID
Emitter string
BridgeType EmitterType
}
// KnownEmitters is a list of well-known mainnet emitters we want to take into account
// when iterating over all emitters - like for finding and repairing missing messages.
//
// Wormhole is not permissioned - anyone can use it. Adding contracts to this list is
// entirely optional and at the core team's discretion.
var KnownEmitters = buildKnownEmitters(knownTokenbridgeEmitters, knownNFTBridgeEmitters)
func buildKnownEmitters(tokenEmitters, nftEmitters map[vaa.ChainID]string) []EmitterInfo {
out := make([]EmitterInfo, 0, len(knownTokenbridgeEmitters)+len(knownNFTBridgeEmitters))
for id, emitter := range tokenEmitters {
out = append(out, EmitterInfo{
ChainID: id,
Emitter: emitter,
BridgeType: EmitterTokenBridge,
})
}
for id, emitter := range nftEmitters {
out = append(out, EmitterInfo{
ChainID: id,
Emitter: emitter,
BridgeType: EmitterNFTBridge,
})
}
return out
}
func buildEmitterMap(hexmap map[vaa.ChainID]string) map[vaa.ChainID][]byte {
out := make(map[vaa.ChainID][]byte)
for id, emitter := range hexmap {
e, err := hex.DecodeString(emitter)
if err != nil {
panic(fmt.Sprintf("Failed to decode emitter address %v: %v", emitter, err))
}
out[id] = e
}
return out
}
// KnownTokenbridgeEmitters is a list of well-known mainnet emitters for the tokenbridge.
var KnownTokenbridgeEmitters = buildEmitterMap(knownTokenbridgeEmitters)
var knownTokenbridgeEmitters = map[vaa.ChainID]string{
vaa.ChainIDSolana: "ec7372995d5cc8732397fb0ad35c0121e0eaa90d26f828a534cab54391b3a4f5",
vaa.ChainIDEthereum: "0000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585",
vaa.ChainIDTerra: "0000000000000000000000007cf7b764e38a0a5e967972c1df77d432510564e2",
vaa.ChainIDTerra2: "a463ad028fb79679cfc8ce1efba35ac0e77b35080a1abe9bebe83461f176b0a3",
vaa.ChainIDBSC: "000000000000000000000000b6f6d86a8f9879a9c87f643768d9efc38c1da6e7",
vaa.ChainIDPolygon: "0000000000000000000000005a58505a96d1dbf8df91cb21b54419fc36e93fde",
vaa.ChainIDAvalanche: "0000000000000000000000000e082f06ff657d94310cb8ce8b0d9a04541d8052",
vaa.ChainIDOasis: "0000000000000000000000005848c791e09901b40a9ef749f2a6735b418d7564",
vaa.ChainIDAlgorand: "67e93fa6c8ac5c819990aa7340c0c16b508abb1178be9b30d024b8ac25193d45",
vaa.ChainIDAptos: "0000000000000000000000000000000000000000000000000000000000000001",
vaa.ChainIDAurora: "00000000000000000000000051b5123a7b0F9b2bA265f9c4C8de7D78D52f510F",
vaa.ChainIDFantom: "0000000000000000000000007C9Fc5741288cDFdD83CeB07f3ea7e22618D79D2",
vaa.ChainIDKarura: "000000000000000000000000ae9d7fe007b3327AA64A32824Aaac52C42a6E624",
vaa.ChainIDAcala: "000000000000000000000000ae9d7fe007b3327AA64A32824Aaac52C42a6E624",
vaa.ChainIDKlaytn: "0000000000000000000000005b08ac39EAED75c0439FC750d9FE7E1F9dD0193F",
vaa.ChainIDCelo: "000000000000000000000000796Dff6D74F3E27060B71255Fe517BFb23C93eed",
vaa.ChainIDNear: "148410499d3fcda4dcfd68a1ebfcdddda16ab28326448d4aae4d2f0465cdfcb7",
vaa.ChainIDMoonbeam: "000000000000000000000000B1731c586ca89a23809861c6103F0b96B3F57D92",
vaa.ChainIDArbitrum: "0000000000000000000000000b2402144Bb366A632D14B83F244D2e0e21bD39c",
vaa.ChainIDOptimism: "0000000000000000000000001D68124e65faFC907325e3EDbF8c4d84499DAa8b",
vaa.ChainIDXpla: "8f9cf727175353b17a5f574270e370776123d90fd74956ae4277962b4fdee24c",
vaa.ChainIDInjective: "00000000000000000000000045dbea4617971d93188eda21530bc6503d153313",
}
// KnownNFTBridgeEmitters is a list of well-known mainnet emitters for the NFT bridge.
var KnownNFTBridgeEmitters = buildEmitterMap(knownNFTBridgeEmitters)
var knownNFTBridgeEmitters = map[vaa.ChainID]string{
vaa.ChainIDSolana: "0def15a24423e1edd1a5ab16f557b9060303ddbab8c803d2ee48f4b78a1cfd6b",
vaa.ChainIDEthereum: "0000000000000000000000006ffd7ede62328b3af38fcd61461bbfc52f5651fe",
vaa.ChainIDBSC: "0000000000000000000000005a58505a96d1dbf8df91cb21b54419fc36e93fde",
vaa.ChainIDPolygon: "00000000000000000000000090bbd86a6fe93d3bc3ed6335935447e75fab7fcf",
vaa.ChainIDAvalanche: "000000000000000000000000f7b6737ca9c4e08ae573f75a97b73d7a813f5de5",
vaa.ChainIDOasis: "00000000000000000000000004952d522ff217f40b5ef3cbf659eca7b952a6c1",
vaa.ChainIDAurora: "0000000000000000000000006dcC0484472523ed9Cdc017F711Bcbf909789284",
vaa.ChainIDFantom: "000000000000000000000000A9c7119aBDa80d4a4E0C06C8F4d8cF5893234535",
vaa.ChainIDKarura: "000000000000000000000000b91e3638F82A1fACb28690b37e3aAE45d2c33808",
vaa.ChainIDAcala: "000000000000000000000000b91e3638F82A1fACb28690b37e3aAE45d2c33808",
vaa.ChainIDKlaytn: "0000000000000000000000003c3c561757BAa0b78c5C025CdEAa4ee24C1dFfEf",
vaa.ChainIDCelo: "000000000000000000000000A6A377d75ca5c9052c9a77ED1e865Cc25Bd97bf3",
vaa.ChainIDMoonbeam: "000000000000000000000000453cfBe096C0f8D763E8C5F24B441097d577bdE2",
vaa.ChainIDArbitrum: "0000000000000000000000003dD14D553cFD986EAC8e3bddF629d82073e188c8",
vaa.ChainIDOptimism: "000000000000000000000000fE8cD454b4A1CA468B57D79c0cc77Ef5B6f64585",
vaa.ChainIDAptos: "0000000000000000000000000000000000000000000000000000000000000005",
}
Chain governor (#1277) * Rebase * Reload from db on start up Change-Id: I1deac9db28ad1157ea7e0c84af41c35b38497f4e * Console commands Change-Id: Ic242038312b7c837443a2df8823f100b3cdffd77 * Query prices from CoinGecko Change-Id: I9a8c282ba374d32ef7045d11979a27ede3c52827 * Move chain config to separate file Change-Id: I6a790eca765bce1f2caf48134e225df5c4daff15 * More code cleanup Change-Id: Id12affa78cdc2d394d6dab0c53bb7ad06df8007e * Few minor tweaks Change-Id: I6cb511599d669e0b3d716d9f314ac0f26935ee92 * Create separate tests for different packages Change-Id: Idb4da6817c9daad2a7420abc11bdaa702ae056dc * Fix lint errors Change-Id: I137c9e7e4574aee9c9fec22e91e19eee0e86a349 * Simplify chainlock message tests * Add more governor db test coverage * Next batch of review rework Change-Id: Ife54852fca6c6990d1ffb3d60a8dd7f49d526f0a * Still more rework Change-Id: I43a8aa7fa4e1a7cea4d7fde68c963123c1ca8d53 * More rework Change-Id: I9382412af4ffeda74967a834a6b0195a9d28b720 * Fix lint errors Change-Id: Idaafce9b0314192557b7207911375d000bac5ae2 * Add rest and prometheus support Change-Id: Ib870ed7eb305ef1ebbf6a7cedabc665c37c19171 * Add separate configs for testnet and devnet Change-Id: I76b11d8940a8dc9935b3f276a008ed20ef60b850 * Update mainnet tokens to fix decimals Change-Id: Iab018827766bc7748038b7be2f51342afb79b87c * Let small enqueued VAAs go out when big ones can't Change-Id: I7d3ef88d4579702d0c6ff4eaf5a8524799610ff6 * Tweak testnet config parameters Change-Id: Id2c54151a7183ab3fb4af8060929198f6021ba4e * Rework / enhancements from testnet testing Change-Id: I1387b1d22667fa6ffe0bb1832dbc0b31196505d3 * Use known emitter maps Change-Id: If330ee9d30ac3c2d1c6dca674f7777dc759de230 * Fix typo and out of date comments Change-Id: I54a19792104ccc6ca023020303a710ef3ba18f74 Co-authored-by: claudijd <jclaudius@jumptrading.com>
2022-07-19 11:08:06 -07:00
func GetEmitterAddressForChain(chainID vaa.ChainID, emitterType EmitterType) (vaa.Address, error) {
for _, emitter := range KnownEmitters {
if emitter.ChainID == chainID && emitter.BridgeType == emitterType {
emitterAddr, err := vaa.StringToAddress(emitter.Emitter)
if err != nil {
return vaa.Address{}, err
}
return emitterAddr, nil
}
}
return vaa.Address{}, fmt.Errorf("lookup failed")
}