diff --git a/contracts/cw20-ics20/src/contract.rs b/contracts/cw20-ics20/src/contract.rs index a2b25f0..06a9bc5 100644 --- a/contracts/cw20-ics20/src/contract.rs +++ b/contracts/cw20-ics20/src/contract.rs @@ -93,7 +93,7 @@ pub fn execute_receive( // wrapper.sender is the contract let api = deps.api; - execute_transfer(deps, env, msg, wrapper.amount, api.addr_validate(&wrapper.sender)?, info.sender.to_string()) + execute_transfer(deps, env, msg, wrapper.amount, wrapper.memo, api.addr_validate(&wrapper.sender)?, info.sender.to_string()) } pub fn execute_transfer( @@ -101,6 +101,7 @@ pub fn execute_transfer( env: Env, msg: TransferMsg, amount: Uint128, + memo: Option, sender: Addr, contract: String ) -> Result { @@ -121,12 +122,15 @@ pub fn execute_transfer( let denom = String::from(uw_allow_info.clone().port + "/" + msg.channel.as_str() + "/" + native_denom.clone().unwrap().as_str()); let code_hash = uw_allow_info.code_hash; // build ics20 packet - let packet = Ics20Packet::new( + let mut packet = Ics20Packet::new( amount, denom, sender.as_ref(), &msg.remote_address, ); + if let Some(m) = memo { + packet.memo = m; + } packet.validate()?; // prepare ibc message @@ -149,7 +153,8 @@ pub fn execute_transfer( .add_attribute("sender", &packet.sender) .add_attribute("receiver", &packet.receiver) .add_attribute("denom", &packet.denom) - .add_attribute("amount", &packet.amount.to_string()); + .add_attribute("amount", &packet.amount.to_string()) + .add_attribute("memo", &packet.memo.to_string()); Ok(res) } diff --git a/contracts/cw20-ics20/src/ibc.rs b/contracts/cw20-ics20/src/ibc.rs index 00225a3..552f576 100644 --- a/contracts/cw20-ics20/src/ibc.rs +++ b/contracts/cw20-ics20/src/ibc.rs @@ -32,6 +32,8 @@ pub struct Ics20Packet { pub receiver: String, /// the sender address pub sender: String, + /// ibc transfer memo + pub memo: String } impl Ics20Packet { @@ -41,6 +43,7 @@ impl Ics20Packet { amount, sender: sender.to_string(), receiver: receiver.to_string(), + memo: "".to_string(), } } @@ -248,6 +251,7 @@ fn do_ibc_packet_receive( .add_attribute("receiver", msg.receiver) .add_attribute("denom", denom) .add_attribute("amount", msg.amount) + .add_attribute("memo", msg.memo) .add_attribute("success", "true"); Ok(res) diff --git a/packages/cw20/src/receiver.rs b/packages/cw20/src/receiver.rs index 2f2d15e..6cf134d 100644 --- a/packages/cw20/src/receiver.rs +++ b/packages/cw20/src/receiver.rs @@ -10,6 +10,7 @@ pub struct Cw20ReceiveMsg { pub sender: String, pub amount: Uint128, pub msg: Binary, + pub memo: Option, } impl Cw20ReceiveMsg {