constants.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // package devnet contains constants and helper functions for the local deterministic devnet.
  2. // See "Devnet addresses" in DEVELOP.md. Created by setup scripts/migrations.
  3. package devnet
  4. import (
  5. "fmt"
  6. "github.com/ethereum/go-ethereum/accounts"
  7. "github.com/ethereum/go-ethereum/common"
  8. "github.com/mr-tron/base58"
  9. hdwallet "github.com/miguelmota/go-ethereum-hdwallet"
  10. "github.com/certusone/wormhole/bridge/pkg/vaa"
  11. )
  12. var (
  13. // Ganache RPC URL
  14. GanacheRPCURL = "ws://localhost:8545"
  15. // Address of the first account, which is used as the default client account.
  16. GanacheClientDefaultAccountAddress = common.HexToAddress("0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1")
  17. // Contracts (deployed by "truffle migrate" on a deterministic devnet)
  18. GanacheBridgeContractAddress = common.HexToAddress("0xC89Ce4735882C9F0f0FE26686c53074E09B0D550")
  19. // ERC20 example tokens.
  20. GanacheExampleERC20Token = common.HexToAddress("0xCfEB869F69431e42cdB54A4F4f105C19C080A601")
  21. GanacheExampleERC20WrappedSOL = common.HexToAddress("0xf5b1d8fab1054b9cf7db274126972f97f9d42a11")
  22. GanacheExampleERC20WrappedTerra = common.HexToAddress("0x62b47a23cd900da982bdbe75aeb891d3ed18cc36")
  23. )
  24. const (
  25. // Ganache's hardcoded HD Wallet derivation path
  26. ganacheWalletMnemonic = "myth like bonus scare over problem client lizard pioneer submit female collect"
  27. ganacheDerivationPath = "m/44'/60'/0'/0/%d"
  28. )
  29. const (
  30. // id.json account filled by faucet.
  31. SolanaCLIAccount = "6sbzC1eH4FTujJXWj51eQe25cYvr4xfXbJ1vAj7j2k5J"
  32. // Hardcoded contract addresses.
  33. SolanaBridgeContract = "Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"
  34. SolanaTokenContract = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
  35. // Native SPL token
  36. SolanaExampleToken = "6qRhs8oAuZYLd4zzaNnQHqdRyknrQQWDWQhALEN8UA7M"
  37. SolanaExampleTokenOwningAccount = "3C3m4tjTy4nSMkkYdqCDSiCWEgpDa6whvprvABdFGBiW"
  38. // Wrapped ERC20 token
  39. SolanaExampleWrappedERCToken = "85kW19uNvETzH43p3AfpyqPaQS5rWouq4x9rGiKUvihf"
  40. SolanaExampleWrappedERCTokenOwningAccount = "7EFk3VrWeb29SWJPQs5cUyqcY3fQd33S9gELkGybRzeu"
  41. // Wrapped CW20 token
  42. SolanaExampleWrappedCWToken = "9ESkHLgJH4zqbG7fvhpC9u2ZeHMoLJznCHtaRLviEVRh"
  43. SolanaExampleWrappedCWTokenOwningAccount = "EERzaqe8Agm8p1ZkGQFq9zKpP7MDW29FX1pC1vEw9Yfv"
  44. // Lamports per SOL.
  45. SolanaDefaultPrecision = 1e9
  46. // ERC20 default precision.
  47. ERC20DefaultPrecision = 1e18
  48. // CW20 default precision.
  49. TerraDefaultPrecision = 1e8
  50. // Terra LCD url
  51. TerraLCDURL = "http://localhost:1317"
  52. // Terra test chain ID
  53. TerraChainID = "localterra"
  54. // Terra main test address to send/receive tokens
  55. TerraMainTestAddress = "terra1x46rqay4d3cssq8gxxvqz8xt6nwlz4td20k38v"
  56. TerraMainTestAddressHex = "00000000000000000000000035743074956c710800e83198011ccbd4ddf1556d"
  57. // Terra token address
  58. TerraTokenAddress = "terra18vd8fpwxzck93qlwghaj6arh4p7c5n896xzem5"
  59. // Terra bridge contract address
  60. TerraBridgeAddress = "terra18eezxhys9jwku67cm4w84xhnzt4xjj77w2qt62"
  61. // Terra devnet fee payer mnemonic
  62. TerraFeePayerKey = "notice oak worry limit wrap speak medal online prefer cluster roof addict wrist behave treat actual wasp year salad speed social layer crew genius"
  63. )
  64. func DeriveAccount(accountIndex uint) accounts.Account {
  65. path := hdwallet.MustParseDerivationPath(fmt.Sprintf(ganacheDerivationPath, accountIndex))
  66. account, err := Wallet().Derive(path, false)
  67. if err != nil {
  68. panic(err)
  69. }
  70. return account
  71. }
  72. func Wallet() *hdwallet.Wallet {
  73. wallet, err := hdwallet.NewFromMnemonic(ganacheWalletMnemonic)
  74. if err != nil {
  75. panic(err)
  76. }
  77. return wallet
  78. }
  79. // Base58ToEthAddress converts a Solana base58 address to a 32-byte vaa.Address.
  80. // Panics if the input data is invalid - intended for use on constants.
  81. func MustBase58ToEthAddress(address string) (res vaa.Address) {
  82. b, err := base58.Decode(address)
  83. if err != nil {
  84. panic(err)
  85. }
  86. if n := copy(res[:], b); n != 32 {
  87. panic("invalid length")
  88. }
  89. return
  90. }