@shapeshiftoss/unchained-client 9.8.1 → 9.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -31,7 +31,7 @@ class TransactionParser {
|
|
|
31
31
|
};
|
|
32
32
|
// For simplicity and to limit scope we assume 1 message per transaction
|
|
33
33
|
// This works ok enough for transactions we generate but way may want to improve in the future
|
|
34
|
-
const { from, to, data, value, origin } = (0, utils_1.valuesFromMsgEvents)(tx.messages[0], tx.events, this.assetId);
|
|
34
|
+
const { from, to, data, value, origin } = (0, utils_1.valuesFromMsgEvents)(tx.messages[0], tx.events, this.assetId, address);
|
|
35
35
|
parsedTx.data = data;
|
|
36
36
|
if (from === address && value.gt(0)) {
|
|
37
37
|
parsedTx.transfers = [
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { AssetId } from '@shapeshiftoss/caip';
|
|
1
2
|
import BigNumber from 'bignumber.js';
|
|
2
3
|
import { Event, Message } from '../../generated/cosmos';
|
|
3
4
|
import { TxMetadata } from '../types';
|
|
4
5
|
export declare const valuesFromMsgEvents: (msg: Message, events: {
|
|
5
6
|
[key: string]: Event[];
|
|
6
|
-
}, assetId: string) => {
|
|
7
|
+
}, assetId: AssetId, address: string) => {
|
|
7
8
|
from: string;
|
|
8
9
|
to: string;
|
|
9
10
|
value: BigNumber;
|
|
@@ -60,29 +60,45 @@ const metaData = (msg, assetId) => {
|
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
|
-
const virtualMessageFromEvents = (msg, events) => {
|
|
64
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
63
|
+
const virtualMessageFromEvents = (msg, events, address) => {
|
|
64
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
65
65
|
// ibc send tx indicated by events
|
|
66
66
|
const ibcSendEventData = (_a = events[0]) === null || _a === void 0 ? void 0 : _a.find((event) => event.type === 'send_packet');
|
|
67
67
|
// ibc receive tx indicated by events
|
|
68
|
-
const
|
|
68
|
+
const ibcReceivedData = Object.values(events).find((event) => event.some((subEvent) => subEvent.type === 'coin_received' &&
|
|
69
|
+
subEvent.attributes[0].key === 'receiver' &&
|
|
70
|
+
subEvent.attributes[0].value.toLowerCase() === address.toLowerCase()));
|
|
71
|
+
const ibcRecvEventData = ibcReceivedData === null || ibcReceivedData === void 0 ? void 0 : ibcReceivedData.find((event) => {
|
|
72
|
+
return event.type === 'recv_packet';
|
|
73
|
+
});
|
|
69
74
|
// get rewards tx indicted by events
|
|
70
|
-
const rewardEventData = (
|
|
75
|
+
const rewardEventData = (_b = events[0]) === null || _b === void 0 ? void 0 : _b.find((event) => event.type === 'withdraw_rewards');
|
|
76
|
+
// Osmo swap tx. This works for now as a general cosmos-sdk parser
|
|
77
|
+
// Eventually may want an osmo parser on its own
|
|
78
|
+
const swapEventData = (_c = events[0]) === null || _c === void 0 ? void 0 : _c.find((event) => event.type === 'token_swapped');
|
|
71
79
|
if (ibcSendEventData) {
|
|
72
80
|
const parsedPacketData = JSON.parse((_e = (_d = ibcSendEventData === null || ibcSendEventData === void 0 ? void 0 : ibcSendEventData.attributes.find((attribute) => attribute.key === 'packet_data')) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : '{}');
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
// We dont support parsing ibc sends unless they are atom or osmo
|
|
82
|
+
if (parsedPacketData.denom === 'uatom' || parsedPacketData.denom === 'uosmo')
|
|
83
|
+
return {
|
|
84
|
+
type: 'ibc_send',
|
|
85
|
+
value: { amount: parsedPacketData.amount, denom: parsedPacketData.denom },
|
|
86
|
+
from: parsedPacketData.sender,
|
|
87
|
+
to: parsedPacketData.receiver,
|
|
88
|
+
origin: parsedPacketData.sender
|
|
89
|
+
};
|
|
90
|
+
return;
|
|
80
91
|
}
|
|
81
92
|
else if (ibcRecvEventData) {
|
|
82
93
|
const parsedPacketData = JSON.parse((_g = (_f = ibcRecvEventData === null || ibcRecvEventData === void 0 ? void 0 : ibcRecvEventData.attributes.find((attribute) => attribute.key === 'packet_data')) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : '{}');
|
|
94
|
+
// Osmosis IBC receives are showing up as osmosis. (Requires further debugging, probably during a swapper re-write)
|
|
95
|
+
// This hack ignores ibc deposits into osmosis
|
|
96
|
+
// Its fine because ibc assets only ephemerally exist on osmosis during a swap
|
|
97
|
+
if (parsedPacketData.receiver.startsWith('osmo'))
|
|
98
|
+
return;
|
|
83
99
|
return {
|
|
84
100
|
type: 'ibc_receive',
|
|
85
|
-
value: { amount: parsedPacketData.amount, denom: parsedPacketData.
|
|
101
|
+
value: { amount: parsedPacketData.amount, denom: parsedPacketData.denom },
|
|
86
102
|
from: parsedPacketData.sender,
|
|
87
103
|
to: parsedPacketData.receiver,
|
|
88
104
|
origin: parsedPacketData.sender
|
|
@@ -99,15 +115,26 @@ const virtualMessageFromEvents = (msg, events) => {
|
|
|
99
115
|
origin: msg.origin
|
|
100
116
|
};
|
|
101
117
|
}
|
|
118
|
+
else if (swapEventData) {
|
|
119
|
+
const sender = (_k = swapEventData.attributes.find((attribute) => attribute.key === 'sender')) === null || _k === void 0 ? void 0 : _k.value;
|
|
120
|
+
const swapAmount = (_l = swapEventData.attributes.find((attribute) => attribute.key === 'tokens_out')) === null || _l === void 0 ? void 0 : _l.value;
|
|
121
|
+
const valueParsed = (_m = swapAmount === null || swapAmount === void 0 ? void 0 : swapAmount.slice(0, (swapAmount === null || swapAmount === void 0 ? void 0 : swapAmount.length) - 'uosmo'.length)) !== null && _m !== void 0 ? _m : '';
|
|
122
|
+
if (swapAmount === null || swapAmount === void 0 ? void 0 : swapAmount.includes('uosmo'))
|
|
123
|
+
return {
|
|
124
|
+
type: 'send',
|
|
125
|
+
value: { amount: valueParsed, denom: 'uosmo' },
|
|
126
|
+
to: sender
|
|
127
|
+
};
|
|
128
|
+
}
|
|
102
129
|
// no virtual message handled, but also no transaction message
|
|
103
130
|
if (!msg) {
|
|
104
131
|
logger.warn(`no transaction message found and unable to create virtual message from events: ${events}`);
|
|
105
132
|
}
|
|
106
133
|
return msg;
|
|
107
134
|
};
|
|
108
|
-
const valuesFromMsgEvents = (msg, events, assetId) => {
|
|
135
|
+
const valuesFromMsgEvents = (msg, events, assetId, address) => {
|
|
109
136
|
var _a, _b, _c, _d;
|
|
110
|
-
const virtualMsg = virtualMessageFromEvents(msg, events);
|
|
137
|
+
const virtualMsg = virtualMessageFromEvents(msg, events, address);
|
|
111
138
|
const data = metaData(virtualMsg, assetId);
|
|
112
139
|
const from = (_a = virtualMsg === null || virtualMsg === void 0 ? void 0 : virtualMsg.from) !== null && _a !== void 0 ? _a : '';
|
|
113
140
|
const to = (_b = virtualMsg === null || virtualMsg === void 0 ? void 0 : virtualMsg.to) !== null && _b !== void 0 ? _b : '';
|