@shapeshiftoss/unchained-client 9.7.0 → 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 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
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 : '';
@@ -1,12 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.TransactionParser = void 0;
4
27
  const caip_1 = require("@shapeshiftoss/caip");
5
28
  const parser_1 = require("../../parser");
29
+ const zrx = __importStar(require("../../parser/zrx"));
6
30
  class TransactionParser extends parser_1.BaseTransactionParser {
7
31
  constructor(args) {
8
32
  super(args);
9
33
  this.assetId = caip_1.avalancheAssetId;
34
+ this.registerParser(new zrx.Parser());
10
35
  }
11
36
  }
12
37
  exports.TransactionParser = TransactionParser;
@@ -1,6 +1,5 @@
1
1
  export declare const SHAPE_SHIFT_ROUTER_CONTRACT = "0x6a1e73f12018D8e5f966ce794aa2921941feB17E";
2
2
  export declare const UNI_V2_ROUTER_CONTRACT = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";
3
- export declare const ZRX_PROXY_CONTRACT = "0xDef1C0ded9bec7F1a1670819833240f027b25EfF";
4
3
  export declare const THOR_ROUTER_CONTRACT_MAINNET = "0xC145990E84155416144C532E31f89B840Ca8c2cE";
5
4
  export declare const THOR_ROUTER_CONTRACT_ROPSTEN = "0xefA28233838f46a80AaaC8c309077a9ba70D123A";
6
5
  export declare const FOXY_STAKING_CONTRACT = "0xee77aa3Fd23BbeBaf94386dD44b548e9a785ea4b";
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.COWSWAP_CONTRACT_MAINNET = exports.UNI_V2_FOX_STAKING_REWARDS_V3 = exports.WETH_CONTRACT_ROPSTEN = exports.WETH_CONTRACT_MAINNET = exports.FOXY_STAKING_CONTRACT = exports.THOR_ROUTER_CONTRACT_ROPSTEN = exports.THOR_ROUTER_CONTRACT_MAINNET = exports.ZRX_PROXY_CONTRACT = exports.UNI_V2_ROUTER_CONTRACT = exports.SHAPE_SHIFT_ROUTER_CONTRACT = void 0;
3
+ exports.COWSWAP_CONTRACT_MAINNET = exports.UNI_V2_FOX_STAKING_REWARDS_V3 = exports.WETH_CONTRACT_ROPSTEN = exports.WETH_CONTRACT_MAINNET = exports.FOXY_STAKING_CONTRACT = exports.THOR_ROUTER_CONTRACT_ROPSTEN = exports.THOR_ROUTER_CONTRACT_MAINNET = exports.UNI_V2_ROUTER_CONTRACT = exports.SHAPE_SHIFT_ROUTER_CONTRACT = void 0;
4
4
  exports.SHAPE_SHIFT_ROUTER_CONTRACT = '0x6a1e73f12018D8e5f966ce794aa2921941feB17E';
5
5
  exports.UNI_V2_ROUTER_CONTRACT = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D';
6
- exports.ZRX_PROXY_CONTRACT = '0xDef1C0ded9bec7F1a1670819833240f027b25EfF';
7
6
  exports.THOR_ROUTER_CONTRACT_MAINNET = '0xC145990E84155416144C532E31f89B840Ca8c2cE';
8
7
  exports.THOR_ROUTER_CONTRACT_ROPSTEN = '0xefA28233838f46a80AaaC8c309077a9ba70D123A';
9
8
  exports.FOXY_STAKING_CONTRACT = '0xee77aa3Fd23BbeBaf94386dD44b548e9a785ea4b';
@@ -26,13 +26,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.TransactionParser = void 0;
27
27
  const caip_1 = require("@shapeshiftoss/caip");
28
28
  const parser_1 = require("../../parser");
29
+ const zrx = __importStar(require("../../parser/zrx"));
29
30
  const cowswap = __importStar(require("./cowswap"));
30
31
  const foxy = __importStar(require("./foxy"));
31
32
  const thor = __importStar(require("./thor"));
32
33
  const uniV2 = __importStar(require("./uniV2"));
33
34
  const weth = __importStar(require("./weth"));
34
35
  const yearn = __importStar(require("./yearn"));
35
- const zrx = __importStar(require("./zrx"));
36
36
  class TransactionParser extends parser_1.BaseTransactionParser {
37
37
  constructor(args) {
38
38
  super(args);
@@ -19,16 +19,16 @@ class Parser {
19
19
  };
20
20
  // TODO: Router contract can change, use /inbound_addresses endpoint to determine current router contract.
21
21
  // We will also need to know all past router contract addresses if we intend on using receive address as the means for detection
22
- switch (args.chainId) {
23
- case 'eip155:1':
24
- this.routerContract = constants_1.THOR_ROUTER_CONTRACT_MAINNET;
25
- break;
26
- case 'eip155:3':
27
- this.routerContract = constants_1.THOR_ROUTER_CONTRACT_ROPSTEN;
28
- break;
29
- default:
30
- throw new Error('chainId is not supported. (supported chainIds: eip155:1, eip155:3)');
31
- }
22
+ this.routerContract = (() => {
23
+ switch (args.chainId) {
24
+ case 'eip155:1':
25
+ return constants_1.THOR_ROUTER_CONTRACT_MAINNET;
26
+ case 'eip155:3':
27
+ return constants_1.THOR_ROUTER_CONTRACT_ROPSTEN;
28
+ default:
29
+ throw new Error('chainId is not supported. (supported chainIds: eip155:1, eip155:3)');
30
+ }
31
+ })();
32
32
  }
33
33
  async parse(tx) {
34
34
  if (!(0, parser_1.txInteractsWithContract)(tx, this.routerContract))
@@ -26,16 +26,16 @@ class Parser {
26
26
  };
27
27
  this.chainId = args.chainId;
28
28
  this.provider = args.provider;
29
- switch (args.chainId) {
30
- case 'eip155:1':
31
- this.wethContract = constants_1.WETH_CONTRACT_MAINNET;
32
- break;
33
- case 'eip155:3':
34
- this.wethContract = constants_1.WETH_CONTRACT_ROPSTEN;
35
- break;
36
- default:
37
- throw new Error('chainId is not supported. (supported chainIds: eip155:1, eip155:3)');
38
- }
29
+ this.wethContract = (() => {
30
+ switch (args.chainId) {
31
+ case 'eip155:1':
32
+ return constants_1.WETH_CONTRACT_MAINNET;
33
+ case 'eip155:3':
34
+ return constants_1.WETH_CONTRACT_ROPSTEN;
35
+ default:
36
+ throw new Error('chainId is not supported. (supported chainIds: eip155:1, eip155:3)');
37
+ }
38
+ })();
39
39
  }
40
40
  async parseUniV2(tx) {
41
41
  if (!tx.inputData)
@@ -19,16 +19,16 @@ class Parser {
19
19
  };
20
20
  this.chainId = args.chainId;
21
21
  this.provider = args.provider;
22
- switch (args.chainId) {
23
- case 'eip155:1':
24
- this.wethContract = constants_1.WETH_CONTRACT_MAINNET;
25
- break;
26
- case 'eip155:3':
27
- this.wethContract = constants_1.WETH_CONTRACT_ROPSTEN;
28
- break;
29
- default:
30
- throw new Error('chainId is not supported. (supported chainIds: eip155:1, eip155:3)');
31
- }
22
+ this.wethContract = (() => {
23
+ switch (args.chainId) {
24
+ case 'eip155:1':
25
+ return constants_1.WETH_CONTRACT_MAINNET;
26
+ case 'eip155:3':
27
+ return constants_1.WETH_CONTRACT_ROPSTEN;
28
+ default:
29
+ throw new Error('chainId is not supported. (supported chainIds: eip155:1, eip155:3)');
30
+ }
31
+ })();
32
32
  }
33
33
  async parse(tx) {
34
34
  if (!(0, parser_1.txInteractsWithContract)(tx, this.wethContract))
@@ -0,0 +1 @@
1
+ export declare const ZRX_PROXY_CONTRACT = "0xDef1C0ded9bec7F1a1670819833240f027b25EfF";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZRX_PROXY_CONTRACT = void 0;
4
+ exports.ZRX_PROXY_CONTRACT = '0xDef1C0ded9bec7F1a1670819833240f027b25EfF';
@@ -1,5 +1,5 @@
1
- import { Tx } from '../../../generated/ethereum';
2
- import { SubParser, TxSpecific } from '../../parser';
1
+ import { type Tx } from '../parser/types';
2
+ import { type SubParser, type TxSpecific } from '.';
3
3
  export declare class Parser implements SubParser<Tx> {
4
4
  parse(tx: Tx): Promise<TxSpecific | undefined>;
5
5
  }
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Parser = void 0;
4
- const types_1 = require("../../../types");
5
- const parser_1 = require("../../parser");
4
+ const types_1 = require("../../types");
5
+ const _1 = require(".");
6
6
  const constants_1 = require("./constants");
7
7
  class Parser {
8
8
  async parse(tx) {
9
- if (!(0, parser_1.txInteractsWithContract)(tx, constants_1.ZRX_PROXY_CONTRACT))
9
+ if (!(0, _1.txInteractsWithContract)(tx, constants_1.ZRX_PROXY_CONTRACT))
10
10
  return;
11
11
  if (!(tx.tokenTransfers && tx.tokenTransfers.length))
12
12
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/unchained-client",
3
- "version": "9.7.0",
3
+ "version": "9.8.2",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "source": "src/index.ts",