@shapeshiftoss/unchained-client 5.2.0 → 6.0.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 (137) hide show
  1. package/README.md +32 -4
  2. package/dist/bitcoin/index.d.ts +3 -2
  3. package/dist/bitcoin/index.d.ts.map +1 -1
  4. package/dist/bitcoin/index.js +5 -14
  5. package/dist/bitcoin/index.js.map +1 -1
  6. package/dist/bitcoin/parser/index.d.ts +13 -0
  7. package/dist/bitcoin/parser/index.d.ts.map +1 -0
  8. package/dist/bitcoin/parser/index.js +74 -0
  9. package/dist/bitcoin/parser/index.js.map +1 -0
  10. package/dist/bitcoin/parser/utils.d.ts +4 -0
  11. package/dist/bitcoin/parser/utils.d.ts.map +1 -0
  12. package/dist/bitcoin/parser/utils.js +16 -0
  13. package/dist/bitcoin/parser/utils.js.map +1 -0
  14. package/dist/bitcoin/types.d.ts +2 -0
  15. package/dist/bitcoin/types.d.ts.map +1 -0
  16. package/dist/bitcoin/types.js +3 -0
  17. package/dist/bitcoin/types.js.map +1 -0
  18. package/dist/cosmos/index.d.ts +2 -1
  19. package/dist/cosmos/index.d.ts.map +1 -1
  20. package/dist/cosmos/index.js +4 -13
  21. package/dist/cosmos/index.js.map +1 -1
  22. package/dist/cosmos/parser/index.d.ts +13 -0
  23. package/dist/cosmos/parser/index.d.ts.map +1 -0
  24. package/dist/cosmos/parser/index.js +67 -0
  25. package/dist/cosmos/parser/index.js.map +1 -0
  26. package/dist/ethereum/index.d.ts +3 -2
  27. package/dist/ethereum/index.d.ts.map +1 -1
  28. package/dist/ethereum/index.js +5 -14
  29. package/dist/ethereum/index.js.map +1 -1
  30. package/dist/ethereum/parser/abi/erc20.d.ts +4 -0
  31. package/dist/ethereum/parser/abi/erc20.d.ts.map +1 -0
  32. package/dist/ethereum/parser/abi/erc20.js +292 -0
  33. package/dist/ethereum/parser/abi/erc20.js.map +1 -0
  34. package/dist/ethereum/parser/abi/multiSig.d.ts +4 -0
  35. package/dist/ethereum/parser/abi/multiSig.d.ts.map +1 -0
  36. package/dist/ethereum/parser/abi/multiSig.js +369 -0
  37. package/dist/ethereum/parser/abi/multiSig.js.map +1 -0
  38. package/dist/ethereum/parser/abi/shapeShiftRouter.d.ts +4 -0
  39. package/dist/ethereum/parser/abi/shapeShiftRouter.d.ts.map +1 -0
  40. package/dist/ethereum/parser/abi/shapeShiftRouter.js +495 -0
  41. package/dist/ethereum/parser/abi/shapeShiftRouter.js.map +1 -0
  42. package/dist/ethereum/parser/abi/thor.d.ts +4 -0
  43. package/dist/ethereum/parser/abi/thor.d.ts.map +1 -0
  44. package/dist/ethereum/parser/abi/thor.js +155 -0
  45. package/dist/ethereum/parser/abi/thor.js.map +1 -0
  46. package/dist/ethereum/parser/abi/uniV2.d.ts +4 -0
  47. package/dist/ethereum/parser/abi/uniV2.d.ts.map +1 -0
  48. package/dist/ethereum/parser/abi/uniV2.js +344 -0
  49. package/dist/ethereum/parser/abi/uniV2.js.map +1 -0
  50. package/dist/ethereum/parser/abi/yearnVault.d.ts +4 -0
  51. package/dist/ethereum/parser/abi/yearnVault.d.ts.map +1 -0
  52. package/dist/ethereum/parser/abi/yearnVault.js +648 -0
  53. package/dist/ethereum/parser/abi/yearnVault.js.map +1 -0
  54. package/dist/ethereum/parser/constants.d.ts +6 -0
  55. package/dist/ethereum/parser/constants.d.ts.map +1 -0
  56. package/dist/ethereum/parser/constants.js +9 -0
  57. package/dist/ethereum/parser/constants.js.map +1 -0
  58. package/dist/ethereum/parser/index.d.ts +21 -0
  59. package/dist/ethereum/parser/index.d.ts.map +1 -0
  60. package/dist/ethereum/parser/index.js +185 -0
  61. package/dist/ethereum/parser/index.js.map +1 -0
  62. package/dist/ethereum/parser/thor.d.ts +18 -0
  63. package/dist/ethereum/parser/thor.d.ts.map +1 -0
  64. package/dist/ethereum/parser/thor.js +81 -0
  65. package/dist/ethereum/parser/thor.js.map +1 -0
  66. package/dist/ethereum/parser/uniV2.d.ts +21 -0
  67. package/dist/ethereum/parser/uniV2.d.ts.map +1 -0
  68. package/dist/ethereum/parser/uniV2.js +130 -0
  69. package/dist/ethereum/parser/uniV2.js.map +1 -0
  70. package/dist/ethereum/parser/utils.d.ts +9 -0
  71. package/dist/ethereum/parser/utils.d.ts.map +1 -0
  72. package/dist/ethereum/parser/utils.js +47 -0
  73. package/dist/ethereum/parser/utils.js.map +1 -0
  74. package/dist/ethereum/parser/yearn.d.ts +24 -0
  75. package/dist/ethereum/parser/yearn.d.ts.map +1 -0
  76. package/dist/ethereum/parser/yearn.js +84 -0
  77. package/dist/ethereum/parser/yearn.js.map +1 -0
  78. package/dist/ethereum/parser/zrx.d.ts +7 -0
  79. package/dist/ethereum/parser/zrx.d.ts.map +1 -0
  80. package/dist/ethereum/parser/zrx.js +39 -0
  81. package/dist/ethereum/parser/zrx.js.map +1 -0
  82. package/dist/ethereum/types.d.ts +31 -0
  83. package/dist/ethereum/types.d.ts.map +1 -0
  84. package/dist/ethereum/types.js +3 -0
  85. package/dist/ethereum/types.js.map +1 -0
  86. package/dist/generated/bitcoin/api.d.ts +8 -8
  87. package/dist/generated/bitcoin/api.js +1 -1
  88. package/dist/generated/bitcoin/base.d.ts +1 -1
  89. package/dist/generated/bitcoin/base.js +1 -1
  90. package/dist/generated/bitcoin/common.d.ts +2 -2
  91. package/dist/generated/bitcoin/common.d.ts.map +1 -1
  92. package/dist/generated/bitcoin/common.js +1 -1
  93. package/dist/generated/bitcoin/configuration.d.ts +1 -1
  94. package/dist/generated/bitcoin/configuration.js +1 -1
  95. package/dist/generated/bitcoin/index.d.ts +1 -1
  96. package/dist/generated/bitcoin/index.js +1 -1
  97. package/dist/generated/cosmos/api.d.ts +43 -67
  98. package/dist/generated/cosmos/api.d.ts.map +1 -1
  99. package/dist/generated/cosmos/api.js +14 -14
  100. package/dist/generated/cosmos/api.js.map +1 -1
  101. package/dist/generated/cosmos/common.d.ts +1 -1
  102. package/dist/generated/cosmos/common.d.ts.map +1 -1
  103. package/dist/generated/ethereum/api.d.ts +7 -7
  104. package/dist/generated/ethereum/api.js +1 -1
  105. package/dist/generated/ethereum/base.d.ts +1 -1
  106. package/dist/generated/ethereum/base.js +1 -1
  107. package/dist/generated/ethereum/common.d.ts +2 -2
  108. package/dist/generated/ethereum/common.d.ts.map +1 -1
  109. package/dist/generated/ethereum/common.js +1 -1
  110. package/dist/generated/ethereum/configuration.d.ts +1 -1
  111. package/dist/generated/ethereum/configuration.js +1 -1
  112. package/dist/generated/ethereum/index.d.ts +1 -1
  113. package/dist/generated/ethereum/index.js +1 -1
  114. package/dist/index.d.ts +2 -0
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +6 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/tsconfig.tsbuildinfo +3150 -261
  119. package/dist/types.d.ts +74 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +26 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/utils.d.ts +4 -0
  124. package/dist/utils.d.ts.map +1 -0
  125. package/dist/utils.js +43 -0
  126. package/dist/utils.js.map +1 -0
  127. package/dist/{bitcoin/websocket.d.ts → websocket.d.ts} +8 -7
  128. package/dist/websocket.d.ts.map +1 -0
  129. package/dist/{ethereum/websocket.js → websocket.js} +9 -8
  130. package/dist/websocket.js.map +1 -0
  131. package/package.json +10 -6
  132. package/dist/bitcoin/websocket.d.ts.map +0 -1
  133. package/dist/bitcoin/websocket.js +0 -177
  134. package/dist/bitcoin/websocket.js.map +0 -1
  135. package/dist/ethereum/websocket.d.ts +0 -61
  136. package/dist/ethereum/websocket.d.ts.map +0 -1
  137. package/dist/ethereum/websocket.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ 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;
4
+ exports.SHAPE_SHIFT_ROUTER_CONTRACT = '0x6a1e73f12018D8e5f966ce794aa2921941feB17E';
5
+ exports.UNI_V2_ROUTER_CONTRACT = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D';
6
+ exports.ZRX_PROXY_CONTRACT = '0xDef1C0ded9bec7F1a1670819833240f027b25EfF';
7
+ exports.THOR_ROUTER_CONTRACT_MAINNET = '0xC145990E84155416144C532E31f89B840Ca8c2cE';
8
+ exports.THOR_ROUTER_CONTRACT_ROPSTEN = '0xefA28233838f46a80AaaC8c309077a9ba70D123A';
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/ethereum/parser/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,4CAA4C,CAAA;AAC1E,QAAA,sBAAsB,GAAG,4CAA4C,CAAA;AACrE,QAAA,kBAAkB,GAAG,4CAA4C,CAAA;AACjE,QAAA,4BAA4B,GAAG,4CAA4C,CAAA;AAC3E,QAAA,4BAA4B,GAAG,4CAA4C,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { Tx as BlockbookTx } from '@shapeshiftoss/blockbook';
2
+ import { Tx as ParsedTx } from '../../types';
3
+ import { InternalTx, Network } from '../types';
4
+ export interface TransactionParserArgs {
5
+ network?: Network;
6
+ rpcUrl: string;
7
+ }
8
+ export declare class TransactionParser {
9
+ network: Network;
10
+ private readonly thor;
11
+ private readonly uniV2;
12
+ private readonly zrx;
13
+ private readonly yearn;
14
+ private readonly parsers;
15
+ constructor(args: TransactionParserArgs);
16
+ getInternalAddress(inputData: string): string | undefined;
17
+ parse(tx: BlockbookTx, address: string, internalTxs?: Array<InternalTx>): Promise<ParsedTx>;
18
+ private static getStatus;
19
+ private getParsedTxWithTransfers;
20
+ }
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ethereum/parser/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,EAA8C,EAAE,IAAI,QAAQ,EAAc,MAAM,aAAa,CAAA;AAEpG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAO9C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,iBAAiB;IAC5B,OAAO,EAAE,OAAO,CAAA;IAEhB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;gBAE/C,IAAI,EAAE,qBAAqB;IAcvC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWnD,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyBjG,OAAO,CAAC,MAAM,CAAC,SAAS;IAUxB,OAAO,CAAC,wBAAwB;CAmHjC"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.TransactionParser = void 0;
32
+ const bignumber_js_1 = require("bignumber.js");
33
+ const ethers_1 = require("ethers");
34
+ const caip_1 = require("@shapeshiftoss/caip");
35
+ const types_1 = require("@shapeshiftoss/types");
36
+ const types_2 = require("../../types");
37
+ const utils_1 = require("../../utils");
38
+ const utils_2 = require("./utils");
39
+ const thor = __importStar(require("./thor"));
40
+ const uniV2 = __importStar(require("./uniV2"));
41
+ const zrx = __importStar(require("./zrx"));
42
+ const yearn = __importStar(require("./yearn"));
43
+ class TransactionParser {
44
+ constructor(args) {
45
+ var _a;
46
+ const provider = new ethers_1.ethers.providers.JsonRpcProvider(args.rpcUrl);
47
+ this.network = (_a = args.network) !== null && _a !== void 0 ? _a : 'mainnet';
48
+ this.thor = new thor.Parser({ network: this.network, rpcUrl: args.rpcUrl });
49
+ this.uniV2 = new uniV2.Parser({ network: this.network, provider });
50
+ this.zrx = new zrx.Parser();
51
+ this.yearn = new yearn.Parser({ provider, network: this.network });
52
+ this.parsers = [this.zrx, this.thor, this.uniV2, this.yearn];
53
+ }
54
+ // return any addresses that can be detected
55
+ getInternalAddress(inputData) {
56
+ switch (utils_2.getSigHash(inputData)) {
57
+ case this.thor.transferOutSigHash:
58
+ return this.thor.getInternalAddress(inputData);
59
+ case utils_2.SENDMULTISIG_SIG_HASH:
60
+ return utils_2.getInternalMultisigAddress(inputData);
61
+ default:
62
+ return;
63
+ }
64
+ }
65
+ parse(tx, address, internalTxs) {
66
+ var _a;
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ // We expect only one Parser to return a result. If multiple do, we take the first and early exit.
69
+ const contractParserResult = yield utils_1.findAsyncSequential(this.parsers, (parser) => __awaiter(this, void 0, void 0, function* () { return yield parser.parse(tx); }));
70
+ const parsedTx = {
71
+ address,
72
+ blockHash: tx.blockHash,
73
+ blockHeight: tx.blockHeight,
74
+ blockTime: tx.blockTime,
75
+ caip2: caip_1.caip2.toCAIP2({ chain: types_1.ChainTypes.Ethereum, network: utils_2.toNetworkType(this.network) }),
76
+ confirmations: tx.confirmations,
77
+ status: TransactionParser.getStatus(tx),
78
+ trade: contractParserResult === null || contractParserResult === void 0 ? void 0 : contractParserResult.trade,
79
+ transfers: (_a = contractParserResult === null || contractParserResult === void 0 ? void 0 : contractParserResult.transfers) !== null && _a !== void 0 ? _a : [],
80
+ txid: tx.txid,
81
+ value: tx.value,
82
+ data: contractParserResult === null || contractParserResult === void 0 ? void 0 : contractParserResult.data,
83
+ };
84
+ return this.getParsedTxWithTransfers(tx, parsedTx, address, internalTxs);
85
+ });
86
+ }
87
+ static getStatus(tx) {
88
+ var _a;
89
+ const status = (_a = tx.ethereumSpecific) === null || _a === void 0 ? void 0 : _a.status;
90
+ if (status === -1 && tx.confirmations <= 0)
91
+ return types_2.Status.Pending;
92
+ if (status === 1 && tx.confirmations > 0)
93
+ return types_2.Status.Confirmed;
94
+ if (status === 0)
95
+ return types_2.Status.Failed;
96
+ return types_2.Status.Unknown;
97
+ }
98
+ getParsedTxWithTransfers(tx, parsedTx, address, internalTxs) {
99
+ var _a, _b, _c, _d, _e, _f;
100
+ const caip19Ethereum = caip_1.caip19.toCAIP19({
101
+ chain: types_1.ChainTypes.Ethereum,
102
+ network: utils_2.toNetworkType(this.network),
103
+ assetNamespace: caip_1.AssetNamespace.Slip44,
104
+ assetReference: caip_1.AssetReference.Ethereum,
105
+ });
106
+ const sendAddress = (_b = (_a = tx.vin[0].addresses) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : '';
107
+ const receiveAddress = (_d = (_c = tx.vout[0].addresses) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : '';
108
+ if (address === sendAddress) {
109
+ // send amount
110
+ const sendValue = new bignumber_js_1.BigNumber(tx.value);
111
+ if (sendValue.gt(0)) {
112
+ parsedTx.transfers = utils_1.aggregateTransfer(parsedTx.transfers, types_2.TransferType.Send, caip19Ethereum, sendAddress, receiveAddress, sendValue.toString(10));
113
+ }
114
+ // network fee
115
+ const fees = new bignumber_js_1.BigNumber((_e = tx.fees) !== null && _e !== void 0 ? _e : 0);
116
+ if (fees.gt(0)) {
117
+ parsedTx.fee = { caip19: caip19Ethereum, value: fees.toString(10) };
118
+ }
119
+ }
120
+ if (address === receiveAddress) {
121
+ // receive amount
122
+ const receiveValue = new bignumber_js_1.BigNumber(tx.value);
123
+ if (receiveValue.gt(0)) {
124
+ parsedTx.transfers = utils_1.aggregateTransfer(parsedTx.transfers, types_2.TransferType.Receive, caip19Ethereum, sendAddress, receiveAddress, receiveValue.toString(10));
125
+ }
126
+ }
127
+ (_f = tx.tokenTransfers) === null || _f === void 0 ? void 0 : _f.forEach((transfer) => {
128
+ // FTX Token (FTT) name and symbol was set backwards on the ERC20 contract
129
+ if (transfer.token == '0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9') {
130
+ transfer.name = transfer.symbol;
131
+ transfer.symbol = transfer.name;
132
+ }
133
+ const token = {
134
+ contract: transfer.token,
135
+ decimals: transfer.decimals,
136
+ name: transfer.name,
137
+ symbol: transfer.symbol,
138
+ };
139
+ const transferArgs = [
140
+ caip_1.caip19.toCAIP19({
141
+ chain: types_1.ChainTypes.Ethereum,
142
+ network: utils_2.toNetworkType(this.network),
143
+ assetNamespace: caip_1.AssetNamespace.ERC20,
144
+ assetReference: transfer.token,
145
+ }),
146
+ transfer.from,
147
+ transfer.to,
148
+ transfer.value,
149
+ token,
150
+ ];
151
+ // token send amount
152
+ if (address === transfer.from) {
153
+ parsedTx.transfers = utils_1.aggregateTransfer(parsedTx.transfers, types_2.TransferType.Send, ...transferArgs);
154
+ }
155
+ // token receive amount
156
+ if (address === transfer.to) {
157
+ parsedTx.transfers = utils_1.aggregateTransfer(parsedTx.transfers, types_2.TransferType.Receive, ...transferArgs);
158
+ }
159
+ });
160
+ internalTxs === null || internalTxs === void 0 ? void 0 : internalTxs.forEach((internalTx) => {
161
+ const transferArgs = [
162
+ caip_1.caip19.toCAIP19({
163
+ chain: types_1.ChainTypes.Ethereum,
164
+ network: utils_2.toNetworkType(this.network),
165
+ assetNamespace: caip_1.AssetNamespace.Slip44,
166
+ assetReference: caip_1.AssetReference.Ethereum,
167
+ }),
168
+ internalTx.from,
169
+ internalTx.to,
170
+ internalTx.value,
171
+ ];
172
+ // internal eth send
173
+ if (address === internalTx.from) {
174
+ parsedTx.transfers = utils_1.aggregateTransfer(parsedTx.transfers, types_2.TransferType.Send, ...transferArgs);
175
+ }
176
+ // internal eth receive
177
+ if (address === internalTx.to) {
178
+ parsedTx.transfers = utils_1.aggregateTransfer(parsedTx.transfers, types_2.TransferType.Receive, ...transferArgs);
179
+ }
180
+ });
181
+ return parsedTx;
182
+ }
183
+ }
184
+ exports.TransactionParser = TransactionParser;
185
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ethereum/parser/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ethers } from 'ethers';
2
+ import { Tx as BlockbookTx } from '@shapeshiftoss/blockbook';
3
+ import { GenericParser, TxSpecific } from '../../types';
4
+ import { Network, ThorTx } from '../types';
5
+ export interface ParserArgs {
6
+ network: Network;
7
+ rpcUrl: string;
8
+ }
9
+ export declare class Parser implements GenericParser<BlockbookTx> {
10
+ abiInterface: ethers.utils.Interface;
11
+ readonly depositSigHash: string;
12
+ readonly transferOutSigHash: string;
13
+ readonly routerContract: string;
14
+ constructor(args: ParserArgs);
15
+ getInternalAddress(inputData: string): string | undefined;
16
+ parse(tx: BlockbookTx): Promise<TxSpecific<ThorTx> | undefined>;
17
+ }
18
+ //# sourceMappingURL=thor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thor.d.ts","sourceRoot":"","sources":["../../../src/ethereum/parser/thor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,EAAE,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAO,aAAa,EAAa,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAO1C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,MAAO,YAAW,aAAa,CAAC,WAAW,CAAC;IACvD,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAA;IAEpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;gBAEnB,IAAI,EAAE,UAAU;IAc5B,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAWnD,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;CAsCtE"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Parser = void 0;
16
+ const ethers_1 = require("ethers");
17
+ const types_1 = require("../../types");
18
+ const thor_1 = __importDefault(require("./abi/thor"));
19
+ const utils_1 = require("./utils");
20
+ const constants_1 = require("./constants");
21
+ const SWAP_TYPES = ['SWAP', '=', 's'];
22
+ class Parser {
23
+ constructor(args) {
24
+ this.abiInterface = new ethers_1.ethers.utils.Interface(thor_1.default);
25
+ this.depositSigHash = this.abiInterface.getSighash('deposit');
26
+ this.transferOutSigHash = this.abiInterface.getSighash('transferOut');
27
+ // TODO: Router contract can change, use /inbound_addresses endpoint to determine current router contract
28
+ this.routerContract = {
29
+ mainnet: constants_1.THOR_ROUTER_CONTRACT_MAINNET,
30
+ ropsten: constants_1.THOR_ROUTER_CONTRACT_ROPSTEN,
31
+ }[args.network];
32
+ }
33
+ // detect address associated with transferOut internal transaction
34
+ getInternalAddress(inputData) {
35
+ if (utils_1.getSigHash(inputData) !== this.transferOutSigHash)
36
+ return;
37
+ const result = this.abiInterface.decodeFunctionData(this.transferOutSigHash, inputData);
38
+ const [type] = result.memo.split(':');
39
+ if (type !== 'OUT' || type !== 'REFUND')
40
+ return;
41
+ return result.to;
42
+ }
43
+ parse(tx) {
44
+ var _a;
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const txData = (_a = tx.ethereumSpecific) === null || _a === void 0 ? void 0 : _a.data;
47
+ if (!utils_1.txInteractsWithContract(tx, this.routerContract))
48
+ return;
49
+ if (!txData)
50
+ return;
51
+ const decoded = this.abiInterface.parseTransaction({ data: txData });
52
+ const result = (() => {
53
+ switch (utils_1.getSigHash(txData)) {
54
+ case this.depositSigHash:
55
+ case this.transferOutSigHash:
56
+ return decoded.args;
57
+ default:
58
+ return undefined;
59
+ }
60
+ })();
61
+ // We didn't recognise the sigHash - exit
62
+ if (!result)
63
+ return;
64
+ const data = {
65
+ method: decoded.name,
66
+ parser: 'thor',
67
+ };
68
+ const [type] = result.memo.split(':');
69
+ if (SWAP_TYPES.includes(type) || type === 'OUT') {
70
+ return { trade: { dexName: types_1.Dex.Thor, type: types_1.TradeType.Trade, memo: result.memo }, data };
71
+ }
72
+ if (type === 'REFUND') {
73
+ return { trade: { dexName: types_1.Dex.Thor, type: types_1.TradeType.Refund, memo: result.memo }, data };
74
+ }
75
+ // We encountered a case we thought we'd support, but don't - exit
76
+ return;
77
+ });
78
+ }
79
+ }
80
+ exports.Parser = Parser;
81
+ //# sourceMappingURL=thor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thor.js","sourceRoot":"","sources":["../../../src/ethereum/parser/thor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Tx as BlockbookTx } from '@shapeshiftoss/blockbook';
2
+ import { ethers } from 'ethers';
3
+ import { GenericParser, TxSpecific } from '../../types';
4
+ import { Network, UniV2Tx } from '../types';
5
+ export interface ParserArgs {
6
+ network: Network;
7
+ provider: ethers.providers.JsonRpcProvider;
8
+ }
9
+ export declare class Parser implements GenericParser<BlockbookTx> {
10
+ abiInterface: ethers.utils.Interface;
11
+ network: Network;
12
+ provider: ethers.providers.JsonRpcProvider;
13
+ readonly addLiquidityEthSigHash: string;
14
+ readonly removeLiquidityEthSigHash: string;
15
+ readonly wethContract: string;
16
+ constructor(args: ParserArgs);
17
+ parse(tx: BlockbookTx): Promise<TxSpecific<UniV2Tx> | undefined>;
18
+ private static pairFor;
19
+ private getTransfers;
20
+ }
21
+ //# sourceMappingURL=uniV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniV2.d.ts","sourceRoot":"","sources":["../../../src/ethereum/parser/uniV2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,aAAa,EAA0B,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAM3C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAA;CAC3C;AAED,qBAAa,MAAO,YAAW,aAAa,CAAC,WAAW,CAAC;IACvD,YAAY,yBAAwC;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAA;IAE1C,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAA;IACvC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;gBAEjB,IAAI,EAAE,UAAU;IAYtB,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAiBtE,OAAO,CAAC,MAAM,CAAC,OAAO;YAQR,YAAY;CAiE3B"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Parser = void 0;
16
+ const caip_1 = require("@shapeshiftoss/caip");
17
+ const types_1 = require("@shapeshiftoss/types");
18
+ const ethers_1 = require("ethers");
19
+ const types_2 = require("../../types");
20
+ const uniV2_1 = __importDefault(require("./abi/uniV2"));
21
+ const erc20_1 = __importDefault(require("./abi/erc20"));
22
+ const utils_1 = require("./utils");
23
+ const constants_1 = require("./constants");
24
+ class Parser {
25
+ constructor(args) {
26
+ this.abiInterface = new ethers_1.ethers.utils.Interface(uniV2_1.default);
27
+ this.network = args.network;
28
+ this.provider = args.provider;
29
+ this.addLiquidityEthSigHash = this.abiInterface.getSighash('addLiquidityETH');
30
+ this.removeLiquidityEthSigHash = this.abiInterface.getSighash('removeLiquidityETH');
31
+ this.wethContract = {
32
+ mainnet: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
33
+ ropsten: '0xc778417E063141139Fce010982780140Aa0cD5Ab',
34
+ }[this.network];
35
+ }
36
+ parse(tx) {
37
+ var _a;
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ if (!((_a = tx.ethereumSpecific) === null || _a === void 0 ? void 0 : _a.data))
40
+ return;
41
+ if (!utils_1.txInteractsWithContract(tx, constants_1.UNI_V2_ROUTER_CONTRACT))
42
+ return;
43
+ if (!(tx.confirmations === 0))
44
+ return;
45
+ const transfers = yield this.getTransfers(tx);
46
+ const decoded = this.abiInterface.parseTransaction({ data: tx.ethereumSpecific.data });
47
+ return {
48
+ transfers,
49
+ data: {
50
+ parser: 'uniV2',
51
+ method: decoded.name,
52
+ },
53
+ };
54
+ });
55
+ }
56
+ static pairFor(tokenA, tokenB) {
57
+ const [token0, token1] = tokenA < tokenB ? [tokenA, tokenB] : [tokenB, tokenA];
58
+ const factoryContract = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f';
59
+ const salt = ethers_1.ethers.utils.solidityKeccak256(['address', 'address'], [token0, token1]);
60
+ const initCodeHash = '0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f'; // https://github.com/Uniswap/v2-periphery/blob/dda62473e2da448bc9cb8f4514dadda4aeede5f4/contracts/libraries/UniswapV2Library.sol#L24
61
+ return ethers_1.ethers.utils.getCreate2Address(factoryContract, salt, initCodeHash);
62
+ }
63
+ getTransfers(tx) {
64
+ var _a, _b, _c;
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const data = (_a = tx.ethereumSpecific) === null || _a === void 0 ? void 0 : _a.data;
67
+ if (!data)
68
+ return;
69
+ const sendAddress = (_c = (_b = tx.vin[0].addresses) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : '';
70
+ switch (utils_1.getSigHash(data)) {
71
+ case this.addLiquidityEthSigHash: {
72
+ const result = this.abiInterface.decodeFunctionData(this.addLiquidityEthSigHash, data);
73
+ const tokenAddress = ethers_1.ethers.utils.getAddress(result.token.toLowerCase());
74
+ const lpTokenAddress = Parser.pairFor(tokenAddress, this.wethContract);
75
+ const contract = new ethers_1.ethers.Contract(tokenAddress, erc20_1.default, this.provider);
76
+ const decimals = yield contract.decimals();
77
+ const name = yield contract.name();
78
+ const symbol = yield contract.symbol();
79
+ const value = result.amountTokenDesired.toString();
80
+ return [
81
+ {
82
+ type: types_2.TransferType.Send,
83
+ from: sendAddress,
84
+ to: lpTokenAddress,
85
+ caip19: caip_1.caip19.toCAIP19({
86
+ chain: types_1.ChainTypes.Ethereum,
87
+ network: utils_1.toNetworkType(this.network),
88
+ assetNamespace: caip_1.AssetNamespace.ERC20,
89
+ assetReference: tokenAddress,
90
+ }),
91
+ totalValue: value,
92
+ components: [{ value }],
93
+ token: { contract: tokenAddress, decimals, name, symbol },
94
+ },
95
+ ];
96
+ }
97
+ case this.removeLiquidityEthSigHash: {
98
+ const result = this.abiInterface.decodeFunctionData(this.removeLiquidityEthSigHash, data);
99
+ const tokenAddress = ethers_1.ethers.utils.getAddress(result.token.toLowerCase());
100
+ const lpTokenAddress = Parser.pairFor(tokenAddress, this.wethContract);
101
+ const contract = new ethers_1.ethers.Contract(lpTokenAddress, erc20_1.default, this.provider);
102
+ const decimals = yield contract.decimals();
103
+ const name = yield contract.name();
104
+ const symbol = yield contract.symbol();
105
+ const value = result.liquidity.toString();
106
+ return [
107
+ {
108
+ type: types_2.TransferType.Send,
109
+ from: sendAddress,
110
+ to: lpTokenAddress,
111
+ caip19: caip_1.caip19.toCAIP19({
112
+ chain: types_1.ChainTypes.Ethereum,
113
+ network: utils_1.toNetworkType(this.network),
114
+ assetNamespace: caip_1.AssetNamespace.ERC20,
115
+ assetReference: lpTokenAddress,
116
+ }),
117
+ totalValue: value,
118
+ components: [{ value }],
119
+ token: { contract: lpTokenAddress, decimals, name, symbol },
120
+ },
121
+ ];
122
+ }
123
+ default:
124
+ return;
125
+ }
126
+ });
127
+ }
128
+ }
129
+ exports.Parser = Parser;
130
+ //# sourceMappingURL=uniV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniV2.js","sourceRoot":"","sources":["../../../src/ethereum/parser/uniV2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Tx as BlockbookTx } from '@shapeshiftoss/blockbook';
2
+ import { NetworkTypes } from '@shapeshiftoss/types';
3
+ import { Network } from '../types';
4
+ export declare const toNetworkType: (network: Network) => NetworkTypes;
5
+ export declare const getSigHash: (inputData: string | undefined) => string | undefined;
6
+ export declare const txInteractsWithContract: (tx: BlockbookTx, contract: string) => boolean;
7
+ export declare const SENDMULTISIG_SIG_HASH: string;
8
+ export declare const getInternalMultisigAddress: (inputData: string) => string | undefined;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/ethereum/parser/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlC,eAAO,MAAM,aAAa,YAAa,OAAO,KAAG,YAShD,CAAA;AAED,eAAO,MAAM,UAAU,cAAe,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAInE,CAAA;AAED,eAAO,MAAM,uBAAuB,OAAQ,WAAW,YAAY,MAAM,YAGxE,CAAA;AAED,eAAO,MAAM,qBAAqB,QAG9B,CAAA;AAGJ,eAAO,MAAM,0BAA0B,cAAe,MAAM,KAAG,MAAM,GAAG,SAKvE,CAAA"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getInternalMultisigAddress = exports.SENDMULTISIG_SIG_HASH = exports.txInteractsWithContract = exports.getSigHash = exports.toNetworkType = void 0;
7
+ const ethers_1 = require("ethers");
8
+ const types_1 = require("@shapeshiftoss/types");
9
+ const multiSig_1 = __importDefault(require("./abi/multiSig"));
10
+ const toNetworkType = (network) => {
11
+ switch (network) {
12
+ case 'mainnet':
13
+ return types_1.NetworkTypes.MAINNET;
14
+ case 'ropsten':
15
+ return types_1.NetworkTypes.ETH_ROPSTEN;
16
+ default:
17
+ throw new Error('unsupported network');
18
+ }
19
+ };
20
+ exports.toNetworkType = toNetworkType;
21
+ const getSigHash = (inputData) => {
22
+ if (!inputData)
23
+ return;
24
+ const length = inputData.startsWith('0x') ? 10 : 8;
25
+ return inputData.slice(0, length);
26
+ };
27
+ exports.getSigHash = getSigHash;
28
+ const txInteractsWithContract = (tx, contract) => {
29
+ var _a, _b;
30
+ const receiveAddress = (_b = (_a = tx.vout[0].addresses) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : '';
31
+ return receiveAddress === contract;
32
+ };
33
+ exports.txInteractsWithContract = txInteractsWithContract;
34
+ exports.SENDMULTISIG_SIG_HASH = (() => {
35
+ const abiInterface = new ethers_1.ethers.utils.Interface(multiSig_1.default);
36
+ return abiInterface.getSighash('sendMultiSig');
37
+ })();
38
+ // detect address associated with sendMultiSig internal transaction
39
+ const getInternalMultisigAddress = (inputData) => {
40
+ const abiInterface = new ethers_1.ethers.utils.Interface(multiSig_1.default);
41
+ if (exports.getSigHash(inputData) !== exports.SENDMULTISIG_SIG_HASH)
42
+ return;
43
+ const result = abiInterface.decodeFunctionData(exports.SENDMULTISIG_SIG_HASH, inputData);
44
+ return result.toAddress;
45
+ };
46
+ exports.getInternalMultisigAddress = getInternalMultisigAddress;
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/ethereum/parser/utils.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA+B;AAE/B,gDAAmD;AAEnD,8DAAyC;AAElC,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAgB,EAAE;IAC9D,QAAQ,OAAO,EAAE;QACf,KAAK,SAAS;YACZ,OAAO,oBAAY,CAAC,OAAO,CAAA;QAC7B,KAAK,SAAS;YACZ,OAAO,oBAAY,CAAC,WAAW,CAAA;QACjC;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;KACzC;AACH,CAAC,CAAA;AATY,QAAA,aAAa,iBASzB;AAEM,MAAM,UAAU,GAAG,CAAC,SAA6B,EAAsB,EAAE;IAC9E,IAAI,CAAC,SAAS;QAAE,OAAM;IACtB,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAClD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACnC,CAAC,CAAA;AAJY,QAAA,UAAU,cAItB;AAEM,MAAM,uBAAuB,GAAG,CAAC,EAAe,EAAE,QAAgB,EAAE,EAAE;;IAC3E,MAAM,cAAc,GAAG,MAAA,MAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,0CAAG,CAAC,CAAC,mCAAI,EAAE,CAAA;IACtD,OAAO,cAAc,KAAK,QAAQ,CAAA;AACpC,CAAC,CAAA;AAHY,QAAA,uBAAuB,2BAGnC;AAEY,QAAA,qBAAqB,GAAG,CAAC,GAAW,EAAE;IACjD,MAAM,YAAY,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAY,CAAC,CAAA;IAC7D,OAAO,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;AAChD,CAAC,CAAC,EAAE,CAAA;AAEJ,mEAAmE;AAC5D,MAAM,0BAA0B,GAAG,CAAC,SAAiB,EAAsB,EAAE;IAClF,MAAM,YAAY,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAY,CAAC,CAAA;IAC7D,IAAI,kBAAU,CAAC,SAAS,CAAC,KAAK,6BAAqB;QAAE,OAAM;IAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,6BAAqB,EAAE,SAAS,CAAC,CAAA;IAChF,OAAO,MAAM,CAAC,SAAS,CAAA;AACzB,CAAC,CAAA;AALY,QAAA,0BAA0B,8BAKtC"}
@@ -0,0 +1,24 @@
1
+ import { ChainId, Yearn } from '@yfi/sdk';
2
+ import { Tx as BlockbookTx } from '@shapeshiftoss/blockbook';
3
+ import { ethers } from 'ethers';
4
+ import { GenericParser, TxSpecific } from '../../types';
5
+ import { Network, YearnTx } from '../types';
6
+ interface ParserArgs {
7
+ network: Network;
8
+ provider: ethers.providers.JsonRpcProvider;
9
+ }
10
+ export declare class Parser implements GenericParser<BlockbookTx> {
11
+ provider: ethers.providers.JsonRpcProvider;
12
+ yearnSdk: Yearn<ChainId> | undefined;
13
+ yearnTokenVaultAddresses: string[] | undefined;
14
+ shapeShiftInterface: ethers.utils.Interface;
15
+ yearnInterface: ethers.utils.Interface;
16
+ approvalSigHash: string;
17
+ depositSigHash: string;
18
+ withdrawSigHash: string;
19
+ constructor(args: ParserArgs);
20
+ parse(tx: BlockbookTx): Promise<TxSpecific<YearnTx> | undefined>;
21
+ getAbiInterface(txSigHash: string | undefined): ethers.utils.Interface | undefined;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=yearn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yearn.d.ts","sourceRoot":"","sources":["../../../src/ethereum/parser/yearn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,EAAE,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAM3C,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAA;CAC3C;AAED,qBAAa,MAAO,YAAW,aAAa,CAAC,WAAW,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAA;IAC1C,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;IAEpC,wBAAwB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC9C,mBAAmB,yBAA+C;IAClE,cAAc,yBAAyC;IAEvD,eAAe,SAA4C;IAE3D,cAAc,SAAe;IAC7B,eAAe,SAAe;gBAElB,IAAI,EAAE,UAAU;IAUtB,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAiCtE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS;CAanF"}