migrate_contract.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package helpers
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/binary"
  6. "encoding/hex"
  7. "strconv"
  8. "testing"
  9. "github.com/strangelove-ventures/interchaintest/v4/chain/cosmos"
  10. "github.com/stretchr/testify/require"
  11. "github.com/wormhole-foundation/wormchain/interchaintest/guardians"
  12. "github.com/wormhole-foundation/wormhole/sdk/vaa"
  13. )
  14. func createWasmMigrationPayload(code_id uint64, contractAddr string, json_msg string) []byte {
  15. expected_hash := vaa.CreateMigrateCosmwasmContractHash(code_id, contractAddr, []byte(json_msg))
  16. var payload bytes.Buffer
  17. payload.Write(vaa.WasmdModule[:])
  18. payload.Write([]byte{byte(vaa.ActionMigrateContract)})
  19. binary.Write(&payload, binary.BigEndian, uint16(vaa.ChainIDWormchain))
  20. // custom payload
  21. payload.Write(expected_hash[:])
  22. return payload.Bytes()
  23. }
  24. func MigrateContract(
  25. t *testing.T,
  26. ctx context.Context,
  27. chain *cosmos.CosmosChain,
  28. keyName string,
  29. contractAddr string,
  30. codeId string,
  31. message string,
  32. guardians *guardians.ValSet,
  33. ) error {
  34. node := chain.GetFullNode()
  35. code_id, err := strconv.ParseUint(codeId, 10, 64)
  36. require.NoError(t, err)
  37. payload := createWasmMigrationPayload(code_id, contractAddr, message)
  38. v := generateVaa(0, guardians, vaa.ChainID(vaa.GovernanceChain), vaa.Address(vaa.GovernanceEmitter), payload)
  39. vBz, err := v.Marshal()
  40. require.NoError(t, err)
  41. vHex := hex.EncodeToString(vBz)
  42. _, err = node.ExecTx(ctx, keyName, "wormhole", "migrate", contractAddr, codeId, message, vHex, "--gas", "auto")
  43. return err
  44. }