cosmwasm: token bridge: add new CompleteTransferResponse struct as data to complete_transfer executions (#2653)

This commit is contained in:
Nikhil Suri 2023-04-20 07:13:49 -07:00 committed by GitHub
parent cf37919416
commit c5df4dbfe6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 5 deletions

View File

@ -31,8 +31,9 @@ use cosmwasm_std::{
use crate::{
msg::{
ChainRegistrationResponse, ExecuteMsg, ExternalIdResponse, InstantiateMsg,
IsVaaRedeemedResponse, MigrateMsg, QueryMsg, TransferInfoResponse, WrappedRegistryResponse,
ChainRegistrationResponse, CompleteTransferResponse, ExecuteMsg, ExternalIdResponse,
InstantiateMsg, IsVaaRedeemedResponse, MigrateMsg, QueryMsg, TransferInfoResponse,
WrappedRegistryResponse,
},
state::{
bridge_contracts, bridge_contracts_read, bridge_deposit, config, config_read,
@ -887,6 +888,16 @@ fn handle_complete_transfer_token(
}))
}
// serialize response data that will be returned to the caller
let response_data = to_binary(&CompleteTransferResponse {
contract: Some(contract_addr.clone()),
denom: None,
recipient: recipient.clone().into_string(),
amount: amount.into(),
relayer: relayer_address.to_string(),
fee: fee.into(),
})?;
Ok(Response::new()
.add_messages(messages)
.add_attribute("action", "complete_transfer_wrapped")
@ -894,7 +905,8 @@ fn handle_complete_transfer_token(
.add_attribute("recipient", recipient)
.add_attribute("amount", amount.to_string())
.add_attribute("relayer", relayer_address)
.add_attribute("fee", fee.to_string()))
.add_attribute("fee", fee.to_string())
.set_data(response_data))
}
ContractId::NativeCW20 { contract_address } => {
// note -- here the amount is the amount the recipient will receive;
@ -933,6 +945,16 @@ fn handle_complete_transfer_token(
}))
}
// serialize response data that will be returned to the caller
let response_data = to_binary(&CompleteTransferResponse {
contract: Some(contract_address.to_string()),
denom: None,
recipient: recipient.clone().into_string(),
amount: amount.into(),
relayer: relayer_address.to_string(),
fee: fee.into(),
})?;
Ok(Response::new()
.add_messages(messages)
.add_attribute("action", "complete_transfer_native")
@ -940,7 +962,8 @@ fn handle_complete_transfer_token(
.add_attribute("contract", contract_address)
.add_attribute("amount", amount.to_string())
.add_attribute("relayer", relayer_address)
.add_attribute("fee", fee.to_string()))
.add_attribute("fee", fee.to_string())
.set_data(response_data))
}
}
}
@ -1023,6 +1046,16 @@ fn handle_complete_transfer_token_native(
}));
}
// serialize response data that will be returned to the caller
let response_data = to_binary(&CompleteTransferResponse {
contract: None,
denom: Some(denom.clone()),
recipient: recipient.clone().into_string(),
amount: amount.into(),
relayer: relayer_address.to_string(),
fee: fee.into(),
})?;
Ok(Response::new()
.add_messages(messages)
.add_attribute("action", "complete_transfer_terra_native")
@ -1030,7 +1063,8 @@ fn handle_complete_transfer_token_native(
.add_attribute("denom", denom)
.add_attribute("amount", amount.to_string())
.add_attribute("relayer", relayer_address)
.add_attribute("fee", fee.to_string()))
.add_attribute("fee", fee.to_string())
.set_data(response_data))
}
#[allow(clippy::too_many_arguments)]

View File

@ -117,3 +117,18 @@ pub struct IsVaaRedeemedResponse {
pub struct ChainRegistrationResponse {
pub address: Binary,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct CompleteTransferResponse {
// All addresses are bech32-encoded strings.
// contract address if this minted or unlocked a cw20, otherwise none
pub contract: Option<String>,
// denom if this unlocked a native token, otherwise none
pub denom: Option<String>,
pub recipient: String,
pub amount: Uint128,
pub relayer: String,
pub fee: Uint128,
}