Skip to content

Commit 14ae62e

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

File tree

2 files changed

+37
-33
lines changed

2 files changed

+37
-33
lines changed

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

Lines changed: 18 additions & 24 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 Some(market_maker) = str::from_utf8(ack.market_maker.as_ref())
977+
.ok()
978+
.and_then(|x| deps.api.addr_validate(x).ok())
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(
@@ -1013,14 +1011,10 @@ fn acknowledge_fungible_asset_order_v2(
10131011
minter,
10141012
vec![],
10151013
)?);
1016-
} 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)?;
1014+
} else if let Some(market_maker) = str::from_utf8(ack.market_maker.as_ref())
1015+
.ok()
1016+
.and_then(|x| deps.api.addr_validate(x).ok())
1017+
{
10241018
messages.push(make_wasm_msg(
10251019
LocalTokenMsg::Unescrow {
10261020
denom: base_denom,

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)