msg.rs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. use cosmwasm_std::{Binary, Uint128};
  2. use schemars::JsonSchema;
  3. use serde::{Deserialize, Serialize};
  4. use crate::token_address::{ExternalTokenId, TokenId};
  5. type HumanAddr = String;
  6. /// The instantiation parameters of the token bridge contract. See
  7. /// [`crate::state::ConfigInfo`] for more details on what these fields mean.
  8. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  9. pub struct InstantiateMsg {
  10. pub gov_chain: u16,
  11. pub gov_address: Binary,
  12. pub wormhole_contract: HumanAddr,
  13. pub wrapped_asset_code_id: u64,
  14. pub chain_id: u16,
  15. pub native_denom: String,
  16. pub native_symbol: String,
  17. pub native_decimals: u8,
  18. }
  19. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
  20. #[serde(rename_all = "snake_case")]
  21. pub enum ExecuteMsg {
  22. RegisterAssetHook {
  23. chain: u16,
  24. token_address: ExternalTokenId,
  25. },
  26. DepositTokens {},
  27. WithdrawTokens {
  28. asset: AssetInfo,
  29. },
  30. InitiateTransfer {
  31. asset: Asset,
  32. recipient_chain: u16,
  33. recipient: Binary,
  34. fee: Uint128,
  35. nonce: u32,
  36. },
  37. InitiateTransferWithPayload {
  38. asset: Asset,
  39. recipient_chain: u16,
  40. recipient: Binary,
  41. fee: Uint128,
  42. payload: Binary,
  43. nonce: u32,
  44. },
  45. SubmitVaa {
  46. data: Binary,
  47. },
  48. CreateAssetMeta {
  49. asset_info: AssetInfo,
  50. nonce: u32,
  51. },
  52. CompleteTransferWithPayload {
  53. data: Binary,
  54. relayer: HumanAddr,
  55. },
  56. }
  57. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  58. #[serde(rename_all = "snake_case")]
  59. pub struct MigrateMsg {}
  60. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  61. #[serde(rename_all = "snake_case")]
  62. pub enum QueryMsg {
  63. WrappedRegistry { chain: u16, address: Binary },
  64. TransferInfo { vaa: Binary },
  65. ExternalId { external_id: Binary },
  66. IsVaaRedeemed { vaa: Binary },
  67. ChainRegistration { chain: u16 },
  68. }
  69. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  70. #[serde(rename_all = "snake_case")]
  71. pub struct WrappedRegistryResponse {
  72. pub address: HumanAddr,
  73. }
  74. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  75. #[serde(rename_all = "snake_case")]
  76. pub struct TransferInfoResponse {
  77. pub amount: Uint128,
  78. pub token_address: [u8; 32],
  79. pub token_chain: u16,
  80. pub recipient: [u8; 32],
  81. pub recipient_chain: u16,
  82. pub fee: Uint128,
  83. pub payload: Vec<u8>,
  84. }
  85. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  86. #[serde(rename_all = "snake_case")]
  87. pub struct ExternalIdResponse {
  88. pub token_id: TokenId,
  89. }
  90. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  91. #[serde(rename_all = "snake_case")]
  92. pub struct IsVaaRedeemedResponse {
  93. pub is_redeemed: bool,
  94. }
  95. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  96. #[serde(rename_all = "snake_case")]
  97. pub struct ChainRegistrationResponse {
  98. pub address: Binary,
  99. }
  100. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
  101. #[serde(rename_all = "snake_case")]
  102. pub struct CompleteTransferResponse {
  103. // All addresses are bech32-encoded strings.
  104. // contract address if this minted or unlocked a cw20, otherwise none
  105. pub contract: Option<String>,
  106. // denom if this unlocked a native token, otherwise none
  107. pub denom: Option<String>,
  108. pub recipient: String,
  109. pub amount: Uint128,
  110. pub relayer: String,
  111. pub fee: Uint128,
  112. }
  113. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
  114. pub struct Asset {
  115. pub info: AssetInfo,
  116. pub amount: Uint128,
  117. }
  118. /// AssetInfo contract_addr is usually passed from the cw20 hook
  119. /// so we can trust the contract_addr is properly validated.
  120. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
  121. #[serde(rename_all = "snake_case")]
  122. pub enum AssetInfo {
  123. Token { contract_addr: String },
  124. NativeToken { denom: String },
  125. }