@shapeshiftoss/unchained-client 9.8.1 → 9.9.0

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.
Files changed (38) hide show
  1. package/dist/cosmos/parser/index.js +7 -7
  2. package/dist/cosmos/parser/utils.d.ts +2 -1
  3. package/dist/cosmos/parser/utils.js +48 -21
  4. package/dist/cosmos/types.d.ts +2 -2
  5. package/dist/evm/ethereum/parser/abi/foxyStaking.js +161 -161
  6. package/dist/evm/ethereum/parser/abi/shapeShiftRouter.js +119 -119
  7. package/dist/evm/ethereum/parser/abi/thor.js +28 -28
  8. package/dist/evm/ethereum/parser/abi/uniV2.js +55 -55
  9. package/dist/evm/ethereum/parser/abi/uniV2StakingRewards.js +95 -95
  10. package/dist/evm/ethereum/parser/abi/weth.js +66 -66
  11. package/dist/evm/ethereum/parser/abi/yearnVault.js +95 -95
  12. package/dist/evm/ethereum/parser/cowswap.d.ts +4 -0
  13. package/dist/evm/ethereum/parser/cowswap.js +3 -3
  14. package/dist/evm/ethereum/parser/foxy.d.ts +4 -0
  15. package/dist/evm/ethereum/parser/foxy.js +3 -3
  16. package/dist/evm/ethereum/parser/index.js +1 -1
  17. package/dist/evm/ethereum/parser/thor.d.ts +4 -0
  18. package/dist/evm/ethereum/parser/thor.js +2 -2
  19. package/dist/evm/ethereum/parser/uniV2.d.ts +4 -0
  20. package/dist/evm/ethereum/parser/uniV2.js +12 -12
  21. package/dist/evm/ethereum/parser/weth.d.ts +4 -0
  22. package/dist/evm/ethereum/parser/weth.js +9 -9
  23. package/dist/evm/ethereum/parser/yearn.d.ts +7 -0
  24. package/dist/evm/ethereum/parser/yearn.js +32 -16
  25. package/dist/evm/parser/abi/erc20.js +69 -69
  26. package/dist/evm/parser/erc20.d.ts +6 -0
  27. package/dist/evm/parser/erc20.js +15 -12
  28. package/dist/evm/parser/index.js +4 -4
  29. package/dist/evm/parser/types.d.ts +10 -9
  30. package/dist/evm/parser/types.js +0 -5
  31. package/dist/evm/parser/zrx.d.ts +4 -0
  32. package/dist/evm/parser/zrx.js +3 -3
  33. package/dist/types.d.ts +0 -13
  34. package/dist/types.js +1 -12
  35. package/dist/utils.js +2 -2
  36. package/dist/utxo/parser/index.js +1 -1
  37. package/dist/websocket.js +4 -4
  38. package/package.json +1 -1
@@ -13,7 +13,7 @@ class TransactionParser {
13
13
  (_a = args === null || args === void 0 ? void 0 : args.assetId) !== null && _a !== void 0 ? _a : (0, caip_1.toAssetId)({
14
14
  ...(0, caip_1.fromChainId)(this.chainId),
15
15
  assetNamespace: 'slip44',
16
- assetReference: caip_1.ASSET_REFERENCE.Cosmos
16
+ assetReference: caip_1.ASSET_REFERENCE.Cosmos,
17
17
  });
18
18
  }
19
19
  async parse(tx, address) {
@@ -27,11 +27,11 @@ class TransactionParser {
27
27
  confirmations: tx.confirmations,
28
28
  status: tx.confirmations > 0 ? types_1.TxStatus.Confirmed : types_1.TxStatus.Pending,
29
29
  transfers: [],
30
- txid: tx.txid
30
+ txid: tx.txid,
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 = [
@@ -41,8 +41,8 @@ class TransactionParser {
41
41
  from,
42
42
  to,
43
43
  totalValue: value.toString(10),
44
- components: [{ value: value.toString(10) }]
45
- }
44
+ components: [{ value: value.toString(10) }],
45
+ },
46
46
  ];
47
47
  }
48
48
  if (to === address && value.gt(0)) {
@@ -53,8 +53,8 @@ class TransactionParser {
53
53
  from,
54
54
  to,
55
55
  totalValue: value.toString(10),
56
- components: [{ value: value.toString(10) }]
57
- }
56
+ components: [{ value: value.toString(10) }],
57
+ },
58
58
  ];
59
59
  }
60
60
  // We use origin for fees because some txs have a different from and origin addresses
@@ -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;
@@ -8,7 +8,7 @@ const logger_1 = require("@shapeshiftoss/logger");
8
8
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
9
  const logger = new logger_1.Logger({
10
10
  namespace: ['client', 'cosmos', 'utils'],
11
- level: process.env.LOG_LEVEL
11
+ level: process.env.LOG_LEVEL,
12
12
  });
13
13
  const metaData = (msg, assetId) => {
14
14
  var _a, _b, _c, _d;
@@ -22,7 +22,7 @@ const metaData = (msg, assetId) => {
22
22
  method: msg.type,
23
23
  delegator: msg.from,
24
24
  destinationValidator: msg.to,
25
- value: (_a = msg === null || msg === void 0 ? void 0 : msg.value) === null || _a === void 0 ? void 0 : _a.amount
25
+ value: (_a = msg === null || msg === void 0 ? void 0 : msg.value) === null || _a === void 0 ? void 0 : _a.amount,
26
26
  };
27
27
  case 'begin_redelegate':
28
28
  return {
@@ -32,7 +32,7 @@ const metaData = (msg, assetId) => {
32
32
  delegator: msg.origin,
33
33
  destinationValidator: msg.to,
34
34
  value: (_b = msg === null || msg === void 0 ? void 0 : msg.value) === null || _b === void 0 ? void 0 : _b.amount,
35
- assetId
35
+ assetId,
36
36
  };
37
37
  case 'withdraw_delegator_reward':
38
38
  return {
@@ -40,7 +40,7 @@ const metaData = (msg, assetId) => {
40
40
  method: msg.type,
41
41
  destinationValidator: msg.to,
42
42
  value: (_c = msg === null || msg === void 0 ? void 0 : msg.value) === null || _c === void 0 ? void 0 : _c.amount,
43
- assetId
43
+ assetId,
44
44
  };
45
45
  case 'ibc_send':
46
46
  case 'ibc_receive':
@@ -50,7 +50,7 @@ const metaData = (msg, assetId) => {
50
50
  ibcDestination: msg.to,
51
51
  ibcSource: msg.from,
52
52
  assetId,
53
- value: (_d = msg === null || msg === void 0 ? void 0 : msg.value) === null || _d === void 0 ? void 0 : _d.amount
53
+ value: (_d = msg === null || msg === void 0 ? void 0 : msg.value) === null || _d === void 0 ? void 0 : _d.amount,
54
54
  };
55
55
  // known message types with no applicable metadata
56
56
  case 'send':
@@ -60,32 +60,48 @@ 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 ibcRecvEventData = (_b = events[1]) === null || _b === void 0 ? void 0 : _b.find((event) => event.type === 'recv_packet');
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 = (_c = events[0]) === null || _c === void 0 ? void 0 : _c.find((event) => event.type === 'withdraw_rewards');
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
- return {
74
- type: 'ibc_send',
75
- value: { amount: parsedPacketData.amount, denom: parsedPacketData.amount },
76
- from: parsedPacketData.sender,
77
- to: parsedPacketData.receiver,
78
- origin: parsedPacketData.sender
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.amount },
101
+ value: { amount: parsedPacketData.amount, denom: parsedPacketData.denom },
86
102
  from: parsedPacketData.sender,
87
103
  to: parsedPacketData.receiver,
88
- origin: parsedPacketData.sender
104
+ origin: parsedPacketData.sender,
89
105
  };
90
106
  }
91
107
  else if (rewardEventData) {
@@ -96,18 +112,29 @@ const virtualMessageFromEvents = (msg, events) => {
96
112
  value: { amount: valueParsed !== null && valueParsed !== void 0 ? valueParsed : '', denom: 'uatom' },
97
113
  from: msg.from,
98
114
  to: msg.to,
99
- origin: msg.origin
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 : '';
@@ -1,5 +1,5 @@
1
- import { StandardTx, StandardTxMetadata } from '../types';
2
- export interface TxMetadata extends StandardTxMetadata {
1
+ import { BaseTxMetadata, StandardTx } from '../types';
2
+ export interface TxMetadata extends BaseTxMetadata {
3
3
  parser: 'cosmos';
4
4
  delegator?: string;
5
5
  sourceValidator?: string;