UNPKG

7.43 kBJavaScriptView Raw
1"use strict";
2var __read = (this && this.__read) || function (o, n) {
3 var m = typeof Symbol === "function" && o[Symbol.iterator];
4 if (!m) return o;
5 var i = m.call(o), r, ar = [], e;
6 try {
7 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8 }
9 catch (error) { e = { error: error }; }
10 finally {
11 try {
12 if (r && !r.done && (m = i["return"])) m.call(i);
13 }
14 finally { if (e) throw e.error; }
15 }
16 return ar;
17};
18var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
19 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
20 if (ar || !(i in from)) {
21 if (!ar) ar = Array.prototype.slice.call(from, 0, i);
22 ar[i] = from[i];
23 }
24 }
25 return to.concat(ar || Array.prototype.slice.call(from));
26};
27exports.__esModule = true;
28exports.mergeResolutions = exports.nftSelectors = exports.tokenSelectors = exports.ERC1155_CLEAR_SIGNED_SELECTORS = exports.ERC721_CLEAR_SIGNED_SELECTORS = exports.ERC20_CLEAR_SIGNED_SELECTORS = exports.intAsHexBytes = exports.decodeTxInfo = exports.maybeHexBuffer = exports.hexBuffer = exports.splitPath = void 0;
29var rlp_1 = require("@ethersproject/rlp");
30var bignumber_js_1 = require("bignumber.js");
31function splitPath(path) {
32 var result = [];
33 var components = path.split("/");
34 components.forEach(function (element) {
35 var number = parseInt(element, 10);
36 if (isNaN(number)) {
37 return; // FIXME shouldn't it throws instead?
38 }
39 if (element.length > 1 && element[element.length - 1] === "'") {
40 number += 0x80000000;
41 }
42 result.push(number);
43 });
44 return result;
45}
46exports.splitPath = splitPath;
47function hexBuffer(str) {
48 return Buffer.from(str.startsWith("0x") ? str.slice(2) : str, "hex");
49}
50exports.hexBuffer = hexBuffer;
51function maybeHexBuffer(str) {
52 if (!str)
53 return null;
54 return hexBuffer(str);
55}
56exports.maybeHexBuffer = maybeHexBuffer;
57var decodeTxInfo = function (rawTx) {
58 var VALID_TYPES = [1, 2];
59 var txType = VALID_TYPES.includes(rawTx[0]) ? rawTx[0] : null;
60 var rlpData = txType === null ? rawTx : rawTx.slice(1);
61 var rlpTx = (0, rlp_1.decode)(rlpData).map(function (hex) { return Buffer.from(hex.slice(2), "hex"); });
62 var chainIdTruncated = 0;
63 var rlpDecoded = (0, rlp_1.decode)(rlpData);
64 var decodedTx;
65 if (txType === 2) {
66 // EIP1559
67 decodedTx = {
68 data: rlpDecoded[7],
69 to: rlpDecoded[5],
70 chainId: rlpTx[0]
71 };
72 }
73 else if (txType === 1) {
74 // EIP2930
75 decodedTx = {
76 data: rlpDecoded[6],
77 to: rlpDecoded[4],
78 chainId: rlpTx[0]
79 };
80 }
81 else {
82 // Legacy tx
83 decodedTx = {
84 data: rlpDecoded[5],
85 to: rlpDecoded[3],
86 // Default to 1 for non EIP 155 txs
87 chainId: rlpTx.length > 6 ? rlpTx[6] : Buffer.from("0x01", "hex")
88 };
89 }
90 var chainIdSrc = decodedTx.chainId;
91 var chainId = new bignumber_js_1.BigNumber(0);
92 if (chainIdSrc) {
93 // Using BigNumber because chainID could be any uint256.
94 chainId = new bignumber_js_1.BigNumber(chainIdSrc.toString("hex"), 16);
95 var chainIdTruncatedBuf = Buffer.alloc(4);
96 if (chainIdSrc.length > 4) {
97 chainIdSrc.copy(chainIdTruncatedBuf);
98 }
99 else {
100 chainIdSrc.copy(chainIdTruncatedBuf, 4 - chainIdSrc.length);
101 }
102 chainIdTruncated = chainIdTruncatedBuf.readUInt32BE(0);
103 }
104 var vrsOffset = 0;
105 if (txType === null && rlpTx.length > 6) {
106 var rlpVrs = Buffer.from((0, rlp_1.encode)(rlpTx.slice(-3)).slice(2), "hex");
107 vrsOffset = rawTx.length - (rlpVrs.length - 1);
108 // First byte > 0xf7 means the length of the list length doesn't fit in a single byte.
109 if (rlpVrs[0] > 0xf7) {
110 // Increment vrsOffset to account for that extra byte.
111 vrsOffset++;
112 // Compute size of the list length.
113 var sizeOfListLen = rlpVrs[0] - 0xf7;
114 // Increase rlpOffset by the size of the list length.
115 vrsOffset += sizeOfListLen - 1;
116 }
117 }
118 return {
119 decodedTx: decodedTx,
120 txType: txType,
121 chainId: chainId,
122 chainIdTruncated: chainIdTruncated,
123 vrsOffset: vrsOffset
124 };
125};
126exports.decodeTxInfo = decodeTxInfo;
127/**
128 * @ignore for the README
129 *
130 * Helper to convert an integer as a hexadecimal string with the right amount of digits
131 * to respect the number of bytes given as parameter
132 *
133 * @param int Integer
134 * @param bytes Number of bytes it should be represented as (1 byte = 2 caraters)
135 * @returns The given integer as an hexa string padded with the right number of 0
136 */
137var intAsHexBytes = function (int, bytes) {
138 return int.toString(16).padStart(2 * bytes, "0");
139};
140exports.intAsHexBytes = intAsHexBytes;
141/**
142 * @ignore for the README
143 *
144 * List of selectors (hexadecimal representation of the used method's signature) related to
145 * ERC20 (Tokens), ERC721/ERC1155 (NFT).
146 * You can verify and/or get more info about them on http://4byte.directory
147 */
148var ERC20_CLEAR_SIGNED_SELECTORS;
149(function (ERC20_CLEAR_SIGNED_SELECTORS) {
150 ERC20_CLEAR_SIGNED_SELECTORS["APPROVE"] = "0x095ea7b3";
151 ERC20_CLEAR_SIGNED_SELECTORS["TRANSFER"] = "0xa9059cbb";
152})(ERC20_CLEAR_SIGNED_SELECTORS = exports.ERC20_CLEAR_SIGNED_SELECTORS || (exports.ERC20_CLEAR_SIGNED_SELECTORS = {}));
153var ERC721_CLEAR_SIGNED_SELECTORS;
154(function (ERC721_CLEAR_SIGNED_SELECTORS) {
155 ERC721_CLEAR_SIGNED_SELECTORS["APPROVE"] = "0x095ea7b3";
156 ERC721_CLEAR_SIGNED_SELECTORS["SET_APPROVAL_FOR_ALL"] = "0xa22cb465";
157 ERC721_CLEAR_SIGNED_SELECTORS["TRANSFER_FROM"] = "0x23b872dd";
158 ERC721_CLEAR_SIGNED_SELECTORS["SAFE_TRANSFER_FROM"] = "0x42842e0e";
159 ERC721_CLEAR_SIGNED_SELECTORS["SAFE_TRANSFER_FROM_WITH_DATA"] = "0xb88d4fde";
160})(ERC721_CLEAR_SIGNED_SELECTORS = exports.ERC721_CLEAR_SIGNED_SELECTORS || (exports.ERC721_CLEAR_SIGNED_SELECTORS = {}));
161var ERC1155_CLEAR_SIGNED_SELECTORS;
162(function (ERC1155_CLEAR_SIGNED_SELECTORS) {
163 ERC1155_CLEAR_SIGNED_SELECTORS["SET_APPROVAL_FOR_ALL"] = "0xa22cb465";
164 ERC1155_CLEAR_SIGNED_SELECTORS["SAFE_TRANSFER_FROM"] = "0xf242432a";
165 ERC1155_CLEAR_SIGNED_SELECTORS["SAFE_BATCH_TRANSFER_FROM"] = "0x2eb2c2d6";
166})(ERC1155_CLEAR_SIGNED_SELECTORS = exports.ERC1155_CLEAR_SIGNED_SELECTORS || (exports.ERC1155_CLEAR_SIGNED_SELECTORS = {}));
167exports.tokenSelectors = Object.values(ERC20_CLEAR_SIGNED_SELECTORS);
168exports.nftSelectors = __spreadArray(__spreadArray([], __read(Object.values(ERC721_CLEAR_SIGNED_SELECTORS)), false), __read(Object.values(ERC1155_CLEAR_SIGNED_SELECTORS)), false);
169var mergeResolutions = function (oldResolution, newResolution) {
170 var _a, _b;
171 var resolutions = {
172 nfts: [],
173 erc20Tokens: [],
174 externalPlugin: [],
175 plugin: []
176 };
177 for (var key in oldResolution) {
178 (_a = resolutions[key]).push.apply(_a, __spreadArray([], __read(oldResolution[key]), false));
179 }
180 for (var key in newResolution) {
181 (_b = resolutions[key]).push.apply(_b, __spreadArray([], __read(newResolution[key]), false));
182 }
183 return resolutions;
184};
185exports.mergeResolutions = mergeResolutions;
186//# sourceMappingURL=utils.js.map
\No newline at end of file