Skip to content

Commit cdadd57

Browse files
committed
chore: data marshaling
1 parent 2aca657 commit cdadd57

File tree

1 file changed

+37
-38
lines changed
  • spec/app/ics-101-interchain-liquidity

1 file changed

+37
-38
lines changed

spec/app/ics-101-interchain-liquidity/README.md

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -586,53 +586,47 @@ function OnRecvPacket(packet: Packet): Uint8Array | undefined {
586586
const data: IBCSwapPacketData = packet.data;
587587
switch (data.type) {
588588
case "MAKE_POOL":
589-
const makePoolMsg: MsgMakePoolRequest = protobuf.decode(MsgMakePoolRequest, data.Data);
589+
const makePoolMsg: MsgMakePoolRequest = unmarshalJSON(data.Data);
590590
abortTransactionUnless(data.stateChange.poolId !== "");
591591
abortTransactionUnless(store.has(data.stateChange.poolId)); // existed already.
592592
const poolId = store.OnMakePoolReceived(makePoolMsg, data.stateChange.poolId, data.stateChange.sourceChainId);
593593
const makePoolRes = protobuf.encode({ poolId });
594594
return makePoolRes;
595595

596596
case "TAKE_POOL":
597-
const takePoolMsg: MsgTakePoolRequest = protobuf.decode(MsgTakePoolRequest, data.Data);
597+
const takePoolMsg: MsgTakePoolRequest = unmarshalJSON(data.Data);
598598
const takePoolRes = store.OnTakePoolReceived(takePoolMsg);
599599
const takePoolResEncoded = protobuf.encode({ poolId: takePoolRes });
600600
return takePoolResEncoded;
601601

602602
case "SINGLE_DEPOSIT":
603-
const singleDepositMsg: MsgSingleAssetDepositRequest = protobuf.decode(MsgSingleAssetDepositRequest, data.Data);
603+
const singleDepositMsg: MsgSingleAssetDepositRequest = unmarshalJSON(data.Data);
604604
abortTransactionUnless(data.stateChange.poolId === "");
605605
const singleDepositRes = store.OnSingleAssetDepositReceived(singleDepositMsg, data.stateChange);
606606
const singleDepositResEncoded = protobuf.encode(singleDepositRes);
607607
return singleDepositResEncoded;
608608

609609
case "MAKE_MULTI_DEPOSIT":
610-
const makeMultiDepositMsg: MsgMakeMultiAssetDepositRequest = protobuf.decode(
611-
MsgMakeMultiAssetDepositRequest,
612-
data.Data
613-
);
610+
const makeMultiDepositMsg: MsgMakeMultiAssetDepositRequest = unmarshalJSON(data.Data);
614611
const makeMultiDepositRes = k.OnMakeMultiAssetDepositReceived(makeMultiDepositMsg, data.stateChange);
615612
const makeMultiDepositResEncoded = protobuf.encode(makeMultiDepositRes);
616613
return makeMultiDepositResEncoded;
617614

618615
case "TAKE_MULTI_DEPOSIT":
619-
const takeMultiDepositMsg: MsgTakeMultiAssetDepositRequest = protobuf.decode(
620-
MsgTakeMultiAssetDepositRequest,
621-
data.Data
622-
);
616+
const takeMultiDepositMsg: MsgTakeMultiAssetDepositRequest = unmarshalJSON(data.Data);
623617
const takeMultiDepositRes = k.OnTakeMultiAssetDepositReceived(takeMultiDepositMsg, data.stateChange);
624618
const takeMultiDepositResEncoded = protobuf.encode(takeMultiDepositRes);
625619
return takeMultiDepositResEncoded;
626620

627621
case "MULTI_WITHDRAW":
628-
const multiWithdrawMsg: MsgMultiAssetWithdrawRequest = protobuf.decode(MsgMultiAssetWithdrawRequest, data.Data);
622+
const multiWithdrawMsg: MsgMultiAssetWithdrawRequest = unmarshalJSON(data.Data);
629623
const multiWithdrawRes = k.OnMultiAssetWithdrawReceived(multiWithdrawMsg, data.stateChange);
630624
const multiWithdrawResEncoded = protobuf.encode(multiWithdrawRes);
631625
return multiWithdrawResEncoded;
632626

633627
case "LEFT_SWAP":
634628
case "RIGHT_SWAP":
635-
const swapMsg: MsgSwapRequest = protobuf.decode(MsgSwapRequest, data.Data);
629+
const swapMsg: MsgSwapRequest = unmarshalJSON(data.Data);
636630
const swapRes = k.OnSwapReceived(swapMsg, data.stateChange);
637631
const swapResEncoded = protobuf.encode(swapRes);
638632
return swapResEncoded;
@@ -656,26 +650,26 @@ function OnAcknowledgementPacket(packet: Packet, data: IBCSwapPacketData, ack: A
656650
default:
657651
switch (data.type) {
658652
case "MAKE_POOL":
659-
const msgMakePool: MsgMakePoolRequest = protobuf.decode(data.Data);
653+
const msgMakePool: MsgMakePoolRequest = unmarshalJSON(data.Data);
660654
const errMakePool = store.OnMakePoolAcknowledged(msgMakePool, data.StateChange.PoolId);
661655
abortTransactionUnless(errMakePool === undefined);
662656
break;
663657

664658
case "TAKE_POOL":
665-
const msgTakePool: MsgTakePoolRequest = protobuf.decode(data.Data);
659+
const msgTakePool: MsgTakePoolRequest = unmarshalJSON(data.Data);
666660
const errTakePool = store.OnTakePoolAcknowledged(msgTakePool);
667661
abortTransactionUnless(errTakePool === undefined);
668662
break;
669663

670664
case "SINGLE_DEPOSIT":
671-
const msgSingleDeposit: MsgSingleAssetDepositRequest = protobuf.decode(data.Data);
665+
const msgSingleDeposit: MsgSingleAssetDepositRequest = punmarshalJSON(data.Data);
672666
const resSingleDeposit: MsgSingleAssetDepositResponse = protobuf.decode(ack.GetResult());
673667
const errSingleDeposit = store.OnSingleAssetDepositAcknowledged(msgSingleDeposit, resSingleDeposit);
674668
abortTransactionUnless(errSingleDeposit === undefined);
675669
break;
676670

677671
case "MAKE_MULTI_DEPOSIT":
678-
const msgMakeMultiDeposit: MsgMakeMultiAssetDepositRequest = protobuf.decode(data.Data);
672+
const msgMakeMultiDeposit: MsgMakeMultiAssetDepositRequest = unmarshalJSON(data.Data);
679673
const resMakeMultiDeposit: MsgMultiAssetDepositResponse = protobuf.decode(ack.GetResult());
680674
const errMakeMultiDeposit = store.OnMakeMultiAssetDepositAcknowledged(
681675
msgMakeMultiDeposit,
@@ -685,22 +679,22 @@ function OnAcknowledgementPacket(packet: Packet, data: IBCSwapPacketData, ack: A
685679
break;
686680

687681
case "TAKE_MULTI_DEPOSIT":
688-
const msgTakeMultiDeposit: MsgTakeMultiAssetDepositRequest = protobuf.decode(data.Data);
682+
const msgTakeMultiDeposit: MsgTakeMultiAssetDepositRequest = unmarshalJSON(data.Data);
689683
const resTakeMultiDeposit: MsgTakePoolResponse = protobuf.decode(ack.GetResult());
690684
const errTakeMultiDeposit = store.OnTakeMultiAssetDepositAcknowledged(msgTakeMultiDeposit, data.StateChange);
691685
abortTransactionUnless(errTakeMultiDeposit === undefined);
692686
break;
693687

694688
case "MULTI_WITHDRAW":
695-
const msgMultiWithdraw: MsgMultiAssetWithdrawRequest = protobuf.decode(data.Data);
689+
const msgMultiWithdraw: MsgMultiAssetWithdrawRequest = unmarshalJSON(data.Data);
696690
const resMultiWithdraw: MsgMultiAssetWithdrawResponse = protobuf.decode(ack.GetResult());
697691
const errMultiWithdraw = store.OnMultiAssetWithdrawAcknowledged(msgMultiWithdraw, resMultiWithdraw);
698692
abortTransactionUnless(errMultiWithdraw === undefined);
699693
break;
700694

701695
case "LEFT_SWAP":
702696
case "RIGHT_SWAP":
703-
const msgSwap: MsgSwapRequest = protobuf.decode(data.Data);
697+
const msgSwap: MsgSwapRequest = unmarshalJSON(data.Data);
704698
const resSwap: MsgSwapResponse = protobuf.decode(ack.GetResult());
705699
const errSwap = store.OnSwapAcknowledged(msgSwap, resSwap);
706700
abortTransactionUnless(errSwap === undefined);
@@ -729,45 +723,39 @@ function refundPacketToken(packet: Packet, data: IBCSwapPacketData): Error | und
729723

730724
switch (data.type) {
731725
case "MAKE_POOL":
732-
const makePoolMsg: MsgMakePoolRequest = protobuf.decode(MsgMakePoolRequest, data.Data);
726+
const makePoolMsg: MsgMakePoolRequest = unmarshalJSON(data.Data);
733727
// Refund initial liquidity
734728
sender = makePoolMsg.creator;
735729
token = makePoolMsg.liquidity[0].balance;
736730
break;
737731

738732
case "SINGLE_DEPOSIT":
739-
const singleDepositMsg: MsgSingleAssetDepositRequest = protobuf.decode(MsgSingleAssetDepositRequest, data.Data);
733+
const singleDepositMsg: MsgSingleAssetDepositRequest = unmarshalJSON(data.Data);
740734
token = singleDepositMsg.token;
741735
sender = singleDepositMsg.sender;
742736
break;
743737

744738
case "MAKE_MULTI_DEPOSIT":
745-
const makeMultiDepositMsg: MsgMakeMultiAssetDepositRequest = protobuf.decode(
746-
MsgMakeMultiAssetDepositRequest,
747-
data.Data
748-
);
739+
const makeMultiDepositMsg: MsgMakeMultiAssetDepositRequest = unmarshalJSON(data.Data);
749740
token = makeMultiDepositMsg.deposits[0].balance;
750741
sender = makeMultiDepositMsg.deposits[0].sender;
751742
break;
752743

753744
case "TAKE_MULTI_DEPOSIT":
754-
const takeMultiDepositMsg: MsgTakeMultiAssetDepositRequest = protobuf.decode(
755-
MsgTakeMultiAssetDepositRequest,
756-
data.Data
757-
);
745+
const takeMultiDepositMsg: MsgTakeMultiAssetDepositRequest = unmarshalJSON(data.Data);
758746
const { order, found } = store.getMultiDepositOrder(takeMultiDepositMsg.poolId, takeMultiDepositMsg.orderId);
759747
abortTransactionUnless(found);
760748
token = order.Deposits[1];
761749
sender = msg.Sender;
762750
break;
763751
case "MULTI_WITHDRAW":
764-
const multiWithdrawMsg: MsgMultiAssetWithdrawRequest = protobuf.decode(MsgMultiAssetWithdrawRequest, data.Data);
752+
const multiWithdrawMsg: MsgMultiAssetWithdrawRequest = unmarshalJSON(data.Data);
765753
token = multiWithdrawMsg.poolToken;
766754
sender = multiWithdrawMsg.receiver;
767755
break;
768756

769757
case "RIGHT_SWAP":
770-
const swapMsg: MsgSwapRequest = protobuf.decode(MsgSwapRequest, data.Data);
758+
const swapMsg: MsgSwapRequest = unmarshalJSON(data.Data);
771759
token = swapMsg.tokenIn;
772760
sender = swapMsg.sender;
773761
break;
@@ -921,6 +909,17 @@ interface MsgSwapResponse {
921909
These are methods that output a state change on the source chain, which will be subsequently synced to the destination chain.
922910

923911
```ts
912+
// Custom helper to support compatability with cosmwasm: Same function MarshalJSON/unmarshalJSON in Golang
913+
function marshalJSON(data:any): Uint8Array {
914+
const jsonData = JSON.stringify(any);
915+
return protobuf.encode(json);
916+
}
917+
918+
function unmarshalJSON<T>(data:any): T {
919+
const jsonData = protobuf.decode(data);
920+
return json.parse(jsonData) as T
921+
}
922+
924923
function makePool(msg: MsgMakePoolRequest): MsgMakePoolResponse {
925924

926925
const { counterPartyChainId, connected } = store.GetCounterPartyChainID(msg.sourcePort, msg.sourceChannel);
@@ -949,7 +948,7 @@ These are methods that output a state change on the source chain, which will be
949948

950949
const packet: IBCSwapPacketData = {
951950
type: "MAKE_POOL",
952-
data: protobuf.encode(msg),
951+
data: marshalJSON(msg),
953952
stateChange: {
954953
poolId: poolId,
955954
sourceChainId: store.ChainID(),
@@ -1045,7 +1044,7 @@ These are methods that output a state change on the source chain, which will be
10451044

10461045
const packet: IBCSwapPacketData = {
10471046
type: "MAKE_MULTI_DEPOSIT",
1048-
data: protobuf.encode(msg),
1047+
data: marshalJSON(msg),
10491048
stateChange: { poolTokens: poolTokens },
10501049
};
10511050

@@ -1087,7 +1086,7 @@ These are methods that output a state change on the source chain, which will be
10871086

10881087
const packet: IBCSwapPacketData = {
10891088
type: "TAKE_MULTI_DEPOSIT",
1090-
data: protobuf.encode(msg),
1089+
data: marshalJSON(msg),
10911090
stateChange: { poolTokens },
10921091
};
10931092

@@ -1125,7 +1124,7 @@ function singleAssetDeposit(msg: MsgSingleAssetDepositRequest): MsgSingleAssetDe
11251124

11261125
const packet: IBCSwapPacketData = {
11271126
type: "SINGLE_DEPOSIT",
1128-
data: protobuf.encode(msg);,
1127+
data: marshalJSON(msg);,
11291128
stateChange: { poolTokens: [poolToken] },
11301129
};
11311130

@@ -1156,7 +1155,7 @@ function multiAssetWithdraw(msg: MsgMultiAssetWithdrawRequest): MsgMultiAssetWit
11561155

11571156
const packet: IBCSwapPacketData = {
11581157
type: "MULTI_WITHDRAW",
1159-
data: protobuf.encode(msg),
1158+
data: marshalJSON(msg),
11601159
stateChange: {
11611160
out: outs,
11621161
poolTokens: [msg.poolToken],
@@ -1206,7 +1205,7 @@ function swap(msg: MsgSwapRequest): MsgSwapResponse {
12061205

12071206
const packet: IBCSwapPacketData = {
12081207
type: msgType,
1209-
data: protobuf.encode(msg),
1208+
data: marshalJSON(msg),
12101209
stateChange: { out: [tokenOut] },
12111210
};
12121211

0 commit comments

Comments
 (0)