Skip to content

Commit 1d1821a

Browse files
chore(zkgm): allow empty/invalid mm address on ack
1 parent 9cae3c9 commit 1d1821a

File tree

2 files changed

+47
-41
lines changed

2 files changed

+47
-41
lines changed

cosmwasm/ibc-union/app/ucs03-zkgm/src/contract.rs

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -972,23 +972,21 @@ fn acknowledge_fungible_asset_order_v2(
972972
let minter = TOKEN_MINTER.load(deps.storage)?;
973973

974974
if order.kind == TOKEN_ORDER_KIND_UNESCROW {
975-
let market_maker = deps
976-
.api
977-
.addr_validate(
978-
str::from_utf8(ack.market_maker.as_ref())
979-
.map_err(|_| ContractError::InvalidReceiver)?,
980-
)
981-
.map_err(|_| ContractError::UnableToValidateMarketMaker)?;
982975
// Mint tokens to market maker (EVM: IZkgmERC20(address(baseToken)).mint(marketMaker, order.baseAmount))
983-
messages.push(make_wasm_msg(
984-
WrappedTokenMsg::MintTokens {
985-
denom: base_denom,
986-
amount: base_amount.into(),
987-
mint_to_address: market_maker,
988-
},
989-
minter,
990-
vec![],
991-
)?);
976+
if let Ok(market_maker) = deps.api.addr_validate(
977+
str::from_utf8(ack.market_maker.as_ref())
978+
.map_err(|_| ContractError::InvalidReceiver)?,
979+
) {
980+
messages.push(make_wasm_msg(
981+
WrappedTokenMsg::MintTokens {
982+
denom: base_denom,
983+
amount: base_amount.into(),
984+
mint_to_address: market_maker,
985+
},
986+
minter,
987+
vec![],
988+
)?);
989+
}
992990
} else {
993991
// Decrease channel balance and transfer (EVM: _decreaseOutstandingV2 + safeTransfer)
994992
decrease_channel_balance_v2(
@@ -1014,22 +1012,20 @@ fn acknowledge_fungible_asset_order_v2(
10141012
vec![],
10151013
)?);
10161014
} else {
1017-
let market_maker = deps
1018-
.api
1019-
.addr_validate(
1020-
str::from_utf8(ack.market_maker.as_ref())
1021-
.map_err(|_| ContractError::InvalidReceiver)?,
1022-
)
1023-
.map_err(|_| ContractError::UnableToValidateMarketMaker)?;
1024-
messages.push(make_wasm_msg(
1025-
LocalTokenMsg::Unescrow {
1026-
denom: base_denom,
1027-
recipient: market_maker.into_string(),
1028-
amount: base_amount.into(),
1029-
},
1030-
minter,
1031-
vec![],
1032-
)?);
1015+
if let Ok(market_maker) = deps.api.addr_validate(
1016+
str::from_utf8(ack.market_maker.as_ref())
1017+
.map_err(|_| ContractError::InvalidReceiver)?,
1018+
) {
1019+
messages.push(make_wasm_msg(
1020+
LocalTokenMsg::Unescrow {
1021+
denom: base_denom,
1022+
recipient: market_maker.into_string(),
1023+
amount: base_amount.into(),
1024+
},
1025+
minter,
1026+
vec![],
1027+
)?);
1028+
}
10331029
}
10341030
}
10351031
}

evm/contracts/apps/ucs/03-zkgm/TokenOrder.sol

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -615,13 +615,15 @@ contract UCS03ZkgmTokenOrderImpl is Versioned, TokenBucket, UCS03ZkgmStore {
615615
} else if (assetOrderAck.fillType == ZkgmLib.FILL_TYPE_MARKETMAKER)
616616
{
617617
// A market maker filled, we pay with the sent asset.
618-
address marketMaker =
619-
address(bytes20(assetOrderAck.marketMaker));
620618
address baseToken = address(bytes20(order.baseToken));
621619
if (order.kind == ZkgmLib.TOKEN_ORDER_KIND_UNESCROW) {
622-
IZkgmERC20(address(baseToken)).mint(
623-
marketMaker, order.baseAmount
624-
);
620+
if (assetOrderAck.marketMaker.length == 20) {
621+
address marketMaker =
622+
address(bytes20(assetOrderAck.marketMaker));
623+
IZkgmERC20(address(baseToken)).mint(
624+
marketMaker, order.baseAmount
625+
);
626+
}
625627
} else {
626628
_decreaseOutstandingV2(
627629
ibcPacket.sourceChannelId,
@@ -631,14 +633,22 @@ contract UCS03ZkgmTokenOrderImpl is Versioned, TokenBucket, UCS03ZkgmStore {
631633
order.baseAmount
632634
);
633635
// Check if the counterparty minted and wants us to burn to net.
634-
if (marketMaker == address(0)) {
636+
if (
637+
assetOrderAck.marketMaker.eq(
638+
abi.encodePacked(address(0))
639+
)
640+
) {
635641
IZkgmERC20(baseToken).burn(
636642
address(this), order.baseAmount
637643
);
638644
} else {
639-
IERC20(baseToken).safeTransfer(
640-
marketMaker, order.baseAmount
641-
);
645+
if (assetOrderAck.marketMaker.length == 20) {
646+
address marketMaker =
647+
address(bytes20(assetOrderAck.marketMaker));
648+
IERC20(baseToken).safeTransfer(
649+
marketMaker, order.baseAmount
650+
);
651+
}
642652
}
643653
}
644654
} else {

0 commit comments

Comments
 (0)