constants.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. GanacheAssetContractAddress = common.HexToAddress("0xe78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab")
  19. GanacheBridgeContractAddress = common.HexToAddress("0x5b1869D9A4C187F2EAa108f3062412ecf0526b24")
  20. // ERC20 example tokens.
  21. GanacheExampleERC20Token = common.HexToAddress("0xCfEB869F69431e42cdB54A4F4f105C19C080A601")
  22. GanacheExampleERC20WrappedSOL = common.HexToAddress("0xf5b1d8fab1054b9cf7db274126972f97f9d42a11")
  23. GanacheExampleERC20WrappedTerra = common.HexToAddress("0x62b47a23cd900da982bdbe75aeb891d3ed18cc36")
  24. )
  25. const (
  26. // Ganache's hardcoded HD Wallet derivation path
  27. ganacheWalletMnemonic = "myth like bonus scare over problem client lizard pioneer submit female collect"
  28. ganacheDerivationPath = "m/44'/60'/0'/0/%d"
  29. )
  30. const (
  31. // id.json account filled by faucet.
  32. SolanaCLIAccount = "6sbzC1eH4FTujJXWj51eQe25cYvr4xfXbJ1vAj7j2k5J"
  33. // Hardcoded contract addresses.
  34. SolanaBridgeContract = "Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"
  35. SolanaTokenContract = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
  36. // Native SPL token
  37. SolanaExampleToken = "6qRhs8oAuZYLd4zzaNnQHqdRyknrQQWDWQhALEN8UA7M"
  38. SolanaExampleTokenOwningAccount = "3C3m4tjTy4nSMkkYdqCDSiCWEgpDa6whvprvABdFGBiW"
  39. // Wrapped ERC20 token
  40. SolanaExampleWrappedERCToken = "85kW19uNvETzH43p3AfpyqPaQS5rWouq4x9rGiKUvihf"
  41. SolanaExampleWrappedERCTokenOwningAccount = "7EFk3VrWeb29SWJPQs5cUyqcY3fQd33S9gELkGybRzeu"
  42. // Wrapped CW20 token
  43. SolanaExampleWrappedCWToken = "9ESkHLgJH4zqbG7fvhpC9u2ZeHMoLJznCHtaRLviEVRh"
  44. SolanaExampleWrappedCWTokenOwningAccount = "EERzaqe8Agm8p1ZkGQFq9zKpP7MDW29FX1pC1vEw9Yfv"
  45. // Lamports per SOL.
  46. SolanaDefaultPrecision = 1e9
  47. // ERC20 default precision.
  48. ERC20DefaultPrecision = 1e18
  49. // CW20 default precision.
  50. TerraDefaultPrecision = 1e8
  51. // Terra LCD url
  52. TerraLCDURL = "http://localhost:1317"
  53. // Terra test chain ID
  54. TerraChainID = "localterra"
  55. // Terra main test address to send/receive tokens
  56. TerraMainTestAddress = "terra1x46rqay4d3cssq8gxxvqz8xt6nwlz4td20k38v"
  57. TerraMainTestAddressHex = "00000000000000000000000035743074956c710800e83198011ccbd4ddf1556d"
  58. // Terra token address
  59. TerraTokenAddress = "terra18vd8fpwxzck93qlwghaj6arh4p7c5n896xzem5"
  60. // Terra bridge contract address
  61. TerraBridgeAddress = "terra174kgn5rtw4kf6f938wm7kwh70h2v4vcfd26jlc"
  62. // Terra devnet fee payer mnemonic
  63. 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"
  64. )
  65. func DeriveAccount(accountIndex uint) accounts.Account {
  66. path := hdwallet.MustParseDerivationPath(fmt.Sprintf(ganacheDerivationPath, accountIndex))
  67. account, err := Wallet().Derive(path, false)
  68. if err != nil {
  69. panic(err)
  70. }
  71. return account
  72. }
  73. func Wallet() *hdwallet.Wallet {
  74. wallet, err := hdwallet.NewFromMnemonic(ganacheWalletMnemonic)
  75. if err != nil {
  76. panic(err)
  77. }
  78. return wallet
  79. }
  80. // Base58ToEthAddress converts a Solana base58 address to a 32-byte vaa.Address.
  81. // Panics if the input data is invalid - intended for use on constants.
  82. func MustBase58ToEthAddress(address string) (res vaa.Address) {
  83. b, err := base58.Decode(address)
  84. if err != nil {
  85. panic(err)
  86. }
  87. if n := copy(res[:], b); n != 32 {
  88. panic("invalid length")
  89. }
  90. return
  91. }