Skip to content

Commit 8c5c674

Browse files
committed
added ibc3 feature & switched relayer fee receiver to ibc relayer
1 parent 48a908e commit 8c5c674

File tree

4 files changed

+40
-23
lines changed

4 files changed

+40
-23
lines changed

contracts/cw-ics20-latest/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ cw2 = "1.0.1"
2424
cw20 = "1.0.1"
2525
cw20-ics20-msg = { path = "../../packages/cw20-ics20-msg" }
2626
oraiswap = "1.0.1"
27-
cosmwasm-std = { version = "1.1.0", features = ["stargate"] }
27+
cosmwasm-std = { version = "1.1.0", features = ["stargate", "ibc3"] }
2828
cw-storage-plus = "1.0.1"
2929
cw-controllers = "1.0.1"
3030
schemars = "0.8.1"

contracts/cw-ics20-latest/src/contract.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,7 @@ mod test {
13871387
#[test]
13881388
fn proper_checks_on_execute_native_transfer_back_to_remote() {
13891389
// arrange
1390+
let relayer = Addr::unchecked("relayer");
13901391
let remote_channel = "channel-5";
13911392
let remote_address = "cosmos1603j3e4juddh7cuhfquxspl0p0nsun046us7n0";
13921393
let custom_addr = "custom-addr";
@@ -1467,7 +1468,7 @@ mod test {
14671468
mock_receive_packet(remote_channel, local_channel, amount, denom, custom_addr);
14681469

14691470
// receive some tokens. Assume that the function works perfectly because the test case is elsewhere
1470-
let ibc_msg = IbcPacketReceiveMsg::new(recv_packet.clone());
1471+
let ibc_msg = IbcPacketReceiveMsg::new(recv_packet.clone(), relayer);
14711472
ibc_packet_receive(deps.as_mut(), mock_env(), ibc_msg).unwrap();
14721473
// need to trigger increase channel balance because it is executed through submsg
14731474
execute(
@@ -1590,6 +1591,7 @@ mod test {
15901591
#[test]
15911592
fn proper_checks_on_execute_cw20_transfer_back_to_remote() {
15921593
// arrange
1594+
let relayer = Addr::unchecked("relayer");
15931595
let remote_channel = "channel-5";
15941596
let remote_address = "cosmos1603j3e4juddh7cuhfquxspl0p0nsun046us7n0";
15951597
let custom_addr = "custom-addr";
@@ -1665,7 +1667,7 @@ mod test {
16651667
mock_receive_packet(remote_channel, local_channel, amount, denom, custom_addr);
16661668

16671669
// receive some tokens. Assume that the function works perfectly because the test case is elsewhere
1668-
let ibc_msg = IbcPacketReceiveMsg::new(recv_packet.clone());
1670+
let ibc_msg = IbcPacketReceiveMsg::new(recv_packet.clone(), relayer);
16691671
ibc_packet_receive(deps.as_mut(), mock_env(), ibc_msg).unwrap();
16701672
// need to trigger increase channel balance because it is executed through submsg
16711673
execute(

contracts/cw-ics20-latest/src/ibc.rs

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ use std::ops::Mul;
33
use cosmwasm_schema::cw_serde;
44
use cosmwasm_std::{
55
attr, coin, entry_point, from_binary, to_binary, Addr, Api, Binary, CosmosMsg, Decimal, Deps,
6-
DepsMut, Env, IbcBasicResponse, IbcChannel, IbcChannelCloseMsg, IbcChannelConnectMsg,
7-
IbcChannelOpenMsg, IbcEndpoint, IbcMsg, IbcOrder, IbcPacket, IbcPacketAckMsg,
8-
IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse, IbcTimeout, Order,
9-
QuerierWrapper, Reply, Response, StdError, StdResult, Storage, SubMsg, SubMsgResult, Timestamp,
10-
Uint128,
6+
DepsMut, Env, Ibc3ChannelOpenResponse, IbcBasicResponse, IbcChannel, IbcChannelCloseMsg,
7+
IbcChannelConnectMsg, IbcChannelOpenMsg, IbcEndpoint, IbcMsg, IbcOrder, IbcPacket,
8+
IbcPacketAckMsg, IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse, IbcTimeout,
9+
Order, QuerierWrapper, Reply, Response, StdError, StdResult, Storage, SubMsg, SubMsgResult,
10+
Timestamp, Uint128,
1111
};
1212
use cw20_ics20_msg::helper::{
1313
denom_to_asset_info, get_prefix_decode_bech32, parse_asset_info_denom,
@@ -202,9 +202,9 @@ pub fn ibc_channel_open(
202202
_deps: DepsMut,
203203
_env: Env,
204204
msg: IbcChannelOpenMsg,
205-
) -> Result<(), ContractError> {
205+
) -> Result<Option<Ibc3ChannelOpenResponse>, ContractError> {
206206
enforce_order_and_version(msg.channel(), msg.counterparty_version())?;
207-
Ok(())
207+
Ok(None)
208208
}
209209

210210
#[entry_point]
@@ -271,7 +271,15 @@ pub fn ibc_packet_receive(
271271
) -> Result<IbcReceiveResponse, Never> {
272272
let packet = msg.packet;
273273

274-
do_ibc_packet_receive(deps.storage, deps.api, &deps.querier, env, &packet).or_else(|err| {
274+
do_ibc_packet_receive(
275+
deps.storage,
276+
deps.api,
277+
&deps.querier,
278+
env,
279+
&packet,
280+
&msg.relayer.into_string(),
281+
)
282+
.or_else(|err| {
275283
// reset relayer & token fees to prevent re-entrancy when failing
276284
TOKEN_FEE_ACCUMULATOR.clear(deps.storage);
277285
RELAYER_FEE_ACCUMULATOR.clear(deps.storage);
@@ -353,6 +361,7 @@ fn do_ibc_packet_receive(
353361
querier: &QuerierWrapper,
354362
env: Env,
355363
packet: &IbcPacket,
364+
relayer: &str,
356365
) -> Result<IbcReceiveResponse, ContractError> {
357366
let msg: Ics20Packet = from_binary(&packet.data)?;
358367
// let channel = packet.dest.channel_id.clone();
@@ -364,7 +373,7 @@ fn do_ibc_packet_receive(
364373
// if denom is native, we handle it the native way
365374
if denom.1 {
366375
return handle_ibc_packet_receive_native_remote_chain(
367-
storage, api, &querier, env, &denom.0, &packet, &msg,
376+
storage, api, &querier, env, &denom.0, &packet, &msg, relayer,
368377
);
369378
}
370379

@@ -379,6 +388,7 @@ fn handle_ibc_packet_receive_native_remote_chain(
379388
denom: &str,
380389
packet: &IbcPacket,
381390
msg: &Ics20Packet,
391+
relayer: &str,
382392
) -> Result<IbcReceiveResponse, ContractError> {
383393
let config = CONFIG.load(storage)?;
384394

@@ -430,7 +440,7 @@ fn handle_ibc_packet_receive_native_remote_chain(
430440
)?;
431441
cosmos_msgs.append(&mut collect_fee_msgs(
432442
storage,
433-
config.relayer_fee_receiver.to_string(),
443+
relayer.to_string(),
434444
RELAYER_FEE_ACCUMULATOR,
435445
)?);
436446
// increase channel balance submsg. We increase it first before doing other tasks
@@ -448,14 +458,17 @@ fn handle_ibc_packet_receive_native_remote_chain(
448458
.set_ack(ack_success())
449459
.add_messages(cosmos_msgs)
450460
.add_submessages(submsgs)
451-
.add_attribute("action", "receive_native")
452-
.add_attribute("sender", msg.sender.clone())
453-
.add_attribute("receiver", msg.receiver.clone())
454-
.add_attribute("denom", denom)
455-
.add_attribute("amount", msg.amount.to_string())
456-
.add_attribute("success", "true")
457-
.add_attribute("token_fee", token_fee)
458-
.add_attribute("relayer_fee", relayer_fee);
461+
.add_attributes(vec![
462+
("action", "receive_native"),
463+
("sender", &msg.sender),
464+
("receiver", &msg.receiver),
465+
("denom", denom),
466+
("amount", &msg.amount.to_string()),
467+
("success", "true"),
468+
("token_fee", &token_fee.to_string()),
469+
("relayer_fee", &relayer_fee.to_string()),
470+
("relayer", relayer),
471+
]);
459472
if !ibc_error_msg.is_empty() {
460473
res = res.add_attribute("ibc_error_msg", ibc_error_msg);
461474
}

contracts/cw-ics20-latest/src/ibc_tests.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ mod test {
200200

201201
#[test]
202202
fn send_native_from_remote_mapping_not_found() {
203+
let relayer = Addr::unchecked("relayer");
203204
let send_channel = "channel-9";
204205
let cw20_addr = "token-addr";
205206
let custom_addr = "custom-addr";
@@ -220,7 +221,7 @@ mod test {
220221
);
221222

222223
// we can receive this denom, channel balance should increase
223-
let msg = IbcPacketReceiveMsg::new(recv_packet.clone());
224+
let msg = IbcPacketReceiveMsg::new(recv_packet.clone(), relayer);
224225
let res = ibc_packet_receive(deps.as_mut(), mock_env(), msg).unwrap();
225226
// assert_eq!(res, StdError)
226227
assert_eq!(
@@ -235,6 +236,7 @@ mod test {
235236

236237
#[test]
237238
fn send_from_remote_to_local_receive_happy_path() {
239+
let relayer = Addr::unchecked("relayer");
238240
let send_channel = "channel-9";
239241
let cw20_addr = "token-addr";
240242
let custom_addr = "custom-addr";
@@ -285,7 +287,7 @@ mod test {
285287
);
286288

287289
// we can receive this denom, channel balance should increase
288-
let msg = IbcPacketReceiveMsg::new(recv_packet.clone());
290+
let msg = IbcPacketReceiveMsg::new(recv_packet.clone(), relayer);
289291
let res = ibc_packet_receive(deps.as_mut(), mock_env(), msg).unwrap();
290292
println!("res: {:?}", res);
291293
// TODO: fix test cases. Possibly because we are adding two add_submessages?

0 commit comments

Comments
 (0)