@airgap/ethereum 0.13.21-beta.7 → 0.13.21
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.
- package/package.json +7 -7
- package/v1/clients/crypto/EthereumCryptoClient.d.ts +7 -0
- package/v1/clients/crypto/EthereumCryptoClient.js +147 -0
- package/v1/clients/crypto/EthereumCryptoClient.js.map +1 -0
- package/v1/clients/info/EthereumInfoClient.d.ts +9 -7
- package/v1/clients/info/EthereumInfoClient.js.map +1 -1
- package/v1/clients/info/EtherscanInfoClient.d.ts +2 -1
- package/v1/clients/info/EtherscanInfoClient.js +0 -2
- package/v1/clients/info/EtherscanInfoClient.js.map +1 -1
- package/v1/clients/node/EthereumNodeClient.d.ts +18 -0
- package/v1/clients/node/EthereumNodeClient.js +3 -0
- package/v1/clients/node/EthereumNodeClient.js.map +1 -0
- package/v1/clients/node/HttpEthereumNodeClient.d.ts +66 -0
- package/v1/clients/node/HttpEthereumNodeClient.js +443 -0
- package/v1/clients/node/HttpEthereumNodeClient.js.map +1 -0
- package/v1/data/EthereumAddress.d.ts +7 -0
- package/v1/data/EthereumAddress.js +46 -0
- package/v1/data/EthereumAddress.js.map +1 -0
- package/v1/index.d.ts +19 -6
- package/v1/index.js +16 -1
- package/v1/index.js.map +1 -1
- package/v1/module/ERC20Tokens.d.ts +1 -1
- package/v1/module/EthereumModule.d.ts +4 -4
- package/v1/module/EthereumModule.js.map +1 -1
- package/v1/protocol/EthereumBaseProtocol.d.ts +84 -7
- package/v1/protocol/EthereumBaseProtocol.js +779 -8
- package/v1/protocol/EthereumBaseProtocol.js.map +1 -1
- package/v1/protocol/EthereumChainIds.d.ts +1 -0
- package/v1/protocol/EthereumChainIds.js +340 -0
- package/v1/protocol/EthereumChainIds.js.map +1 -0
- package/v1/protocol/EthereumProtocol.d.ts +6 -7
- package/v1/protocol/EthereumProtocol.js +3 -4
- package/v1/protocol/EthereumProtocol.js.map +1 -1
- package/v1/protocol/erc20/ERC20Protocol.d.ts +32 -0
- package/v1/protocol/erc20/ERC20Protocol.js +397 -0
- package/v1/protocol/erc20/ERC20Protocol.js.map +1 -0
- package/v1/protocol/erc20/ERC20Token.d.ts +15 -10
- package/v1/protocol/erc20/ERC20Token.js +26 -35
- package/v1/protocol/erc20/ERC20Token.js.map +1 -1
- package/v1/serializer/v3/schemas/converter/transaction-converter.d.ts +8 -0
- package/v1/serializer/v3/schemas/converter/transaction-converter.js +76 -0
- package/v1/serializer/v3/schemas/converter/transaction-converter.js.map +1 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-request-ethereum-typed.d.ts +10 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-request-ethereum-typed.js +3 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-request-ethereum-typed.js.map +1 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-request-ethereum.d.ts +14 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-request-ethereum.js +3 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-request-ethereum.js.map +1 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-response-ethereum.d.ts +3 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-response-ethereum.js +3 -0
- package/v1/serializer/v3/schemas/definitions/transaction-sign-response-ethereum.js.map +1 -0
- package/v1/serializer/v3/schemas/generated/transaction-sign-request-ethereum-typed.json +41 -0
- package/v1/serializer/v3/schemas/generated/transaction-sign-request-ethereum.json +58 -0
- package/v1/serializer/v3/schemas/generated/transaction-sign-response-ethereum.json +19 -0
- package/v1/serializer/v3/serializer-companion.js +10 -9
- package/v1/serializer/v3/serializer-companion.js.map +1 -1
- package/v1/serializer/v3/validators/transaction-validator.d.ts +7 -0
- package/v1/serializer/v3/validators/transaction-validator.js +71 -0
- package/v1/serializer/v3/validators/transaction-validator.js.map +1 -0
- package/v1/types/crypto.d.ts +2 -0
- package/v1/types/crypto.js +3 -0
- package/v1/types/crypto.js.map +1 -0
- package/v1/types/protocol.d.ts +35 -0
- package/v1/types/protocol.js +3 -0
- package/v1/types/protocol.js.map +1 -0
- package/v1/types/transaction.d.ts +24 -0
- package/v1/types/transaction.js +3 -0
- package/v1/types/transaction.js.map +1 -0
- package/v1/utils/EthereumUtils.d.ts +16 -0
- package/v1/utils/EthereumUtils.js +155 -0
- package/v1/utils/EthereumUtils.js.map +1 -0
- package/v1/utils/key.d.ts +5 -0
- package/v1/utils/key.js +101 -0
- package/v1/utils/key.js.map +1 -0
- package/v1/utils/protocol.d.ts +4 -5
- package/v1/utils/protocol.js.map +1 -1
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
28
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
31
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
32
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(o, k2, desc);
|
|
35
|
+
}) : (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
o[k2] = m[k];
|
|
38
|
+
}));
|
|
39
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
40
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
41
|
+
}) : function(o, v) {
|
|
42
|
+
o["default"] = v;
|
|
43
|
+
});
|
|
44
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
52
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
53
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
54
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
55
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
56
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
57
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
61
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
62
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
63
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
64
|
+
function step(op) {
|
|
65
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
66
|
+
while (_) try {
|
|
67
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
68
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
69
|
+
switch (op[0]) {
|
|
70
|
+
case 0: case 1: t = op; break;
|
|
71
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
72
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
73
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
74
|
+
default:
|
|
75
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
76
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
77
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
78
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
79
|
+
if (t[2]) _.ops.pop();
|
|
80
|
+
_.trys.pop(); continue;
|
|
81
|
+
}
|
|
82
|
+
op = body.call(thisArg, _);
|
|
83
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
84
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
88
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
89
|
+
};
|
|
90
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
91
|
+
exports.ERC20ProtocolImpl = void 0;
|
|
92
|
+
var coinlib_core_1 = require("@airgap/coinlib-core");
|
|
93
|
+
var bignumber_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber"));
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
var ethUtil = __importStar(require("@airgap/coinlib-core/dependencies/src/ethereumjs-util-5.2.0"));
|
|
96
|
+
var errors_1 = require("@airgap/coinlib-core/errors");
|
|
97
|
+
var hex_1 = require("@airgap/coinlib-core/utils/hex");
|
|
98
|
+
var module_kit_1 = require("@airgap/module-kit");
|
|
99
|
+
var tx_1 = require("@ethereumjs/tx");
|
|
100
|
+
var HttpEthereumNodeClient_1 = require("../../clients/node/HttpEthereumNodeClient");
|
|
101
|
+
var EthereumUtils_1 = require("../../utils/EthereumUtils");
|
|
102
|
+
var EthereumBaseProtocol_1 = require("../EthereumBaseProtocol");
|
|
103
|
+
var EthereumTransaction = require('@airgap/coinlib-core/dependencies/src/ethereumjs-tx-1.3.7/index');
|
|
104
|
+
// Implementation
|
|
105
|
+
var ERC20ProtocolImpl = /** @class */ (function (_super) {
|
|
106
|
+
__extends(ERC20ProtocolImpl, _super);
|
|
107
|
+
function ERC20ProtocolImpl(nodeClient, infoClient, options) {
|
|
108
|
+
var _this = _super.call(this, nodeClient, infoClient, {
|
|
109
|
+
network: options.network,
|
|
110
|
+
name: options.name,
|
|
111
|
+
identifier: options.identifier,
|
|
112
|
+
units: options.units,
|
|
113
|
+
mainUnit: options.mainUnit
|
|
114
|
+
}) || this;
|
|
115
|
+
_this.contractAddress = options.contractAddress;
|
|
116
|
+
return _this;
|
|
117
|
+
}
|
|
118
|
+
// Common
|
|
119
|
+
ERC20ProtocolImpl.prototype.getDetailsFromTransaction = function (transaction, publicKey) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
121
|
+
var ethTransactionDetails;
|
|
122
|
+
return __generator(this, function (_a) {
|
|
123
|
+
switch (_a.label) {
|
|
124
|
+
case 0: return [4 /*yield*/, _super.prototype.getDetailsFromTransaction.call(this, transaction, publicKey)];
|
|
125
|
+
case 1:
|
|
126
|
+
ethTransactionDetails = _a.sent();
|
|
127
|
+
switch (transaction.type) {
|
|
128
|
+
case 'signed':
|
|
129
|
+
return [2 /*return*/, this.getDetailsFromSignedContractTransaction(transaction, ethTransactionDetails)];
|
|
130
|
+
case 'unsigned':
|
|
131
|
+
return [2 /*return*/, this.getDetailsFromUnsignedContractTransaction(transaction, ethTransactionDetails)];
|
|
132
|
+
default:
|
|
133
|
+
(0, coinlib_core_1.assertNever)(transaction);
|
|
134
|
+
throw new errors_1.UnsupportedError(coinlib_core_1.Domain.ETHEREUM, 'Unsupported transaction type.');
|
|
135
|
+
}
|
|
136
|
+
return [2 /*return*/];
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
ERC20ProtocolImpl.prototype.getDetailsFromSignedContractTransaction = function (transaction, ethTransactionDetails) {
|
|
142
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
143
|
+
var extractedTx, tokenTransferDetails;
|
|
144
|
+
return __generator(this, function (_a) {
|
|
145
|
+
if (ethTransactionDetails.length !== 1) {
|
|
146
|
+
throw new errors_1.ConditionViolationError(coinlib_core_1.Domain.ERC20, 'More than one ETH transaction detected.');
|
|
147
|
+
}
|
|
148
|
+
extractedTx = new EthereumTransaction(transaction.serialized);
|
|
149
|
+
tokenTransferDetails = new HttpEthereumNodeClient_1.EthereumRPCDataTransfer("0x".concat(extractedTx.data.toString('hex')));
|
|
150
|
+
return [2 /*return*/, [
|
|
151
|
+
__assign(__assign({}, ethTransactionDetails[0]), { to: [ethUtil.toChecksumAddress(tokenTransferDetails.recipient)], amount: (0, module_kit_1.newAmount)(tokenTransferDetails.amount, 'blockchain') })
|
|
152
|
+
]];
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
};
|
|
156
|
+
ERC20ProtocolImpl.prototype.getDetailsFromUnsignedContractTransaction = function (transaction, ethTransactionDetails) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
158
|
+
var data, typedTransaction, tokenTransferDetails;
|
|
159
|
+
return __generator(this, function (_a) {
|
|
160
|
+
if (ethTransactionDetails.length !== 1) {
|
|
161
|
+
throw new errors_1.ConditionViolationError(coinlib_core_1.Domain.ERC20, 'More than one ETH transaction detected.');
|
|
162
|
+
}
|
|
163
|
+
if (transaction.ethereumType === 'raw') {
|
|
164
|
+
data = transaction.data;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
typedTransaction = tx_1.TransactionFactory.fromSerializedData(Buffer.from(transaction.serialized, 'hex'));
|
|
168
|
+
data = typedTransaction.data.toString('hex');
|
|
169
|
+
}
|
|
170
|
+
tokenTransferDetails = new HttpEthereumNodeClient_1.EthereumRPCDataTransfer(data);
|
|
171
|
+
return [2 /*return*/, [
|
|
172
|
+
__assign(__assign({}, ethTransactionDetails[0]), { to: [ethUtil.toChecksumAddress(tokenTransferDetails.recipient)], amount: (0, module_kit_1.newAmount)(tokenTransferDetails.amount, 'blockchain') })
|
|
173
|
+
]];
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
// Offline
|
|
178
|
+
ERC20ProtocolImpl.prototype.signTransactionWithSecretKey = function (transaction, secretKey) {
|
|
179
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
180
|
+
var rawTransaction;
|
|
181
|
+
return __generator(this, function (_a) {
|
|
182
|
+
if (transaction.ethereumType !== 'raw') {
|
|
183
|
+
// no v0 implementation
|
|
184
|
+
throw new errors_1.ConditionViolationError(coinlib_core_1.Domain.ERC20, 'Unsupported unsigned transaction type.');
|
|
185
|
+
}
|
|
186
|
+
rawTransaction = __assign(__assign({}, transaction), { data: !transaction.data || transaction.data === '0x'
|
|
187
|
+
? new HttpEthereumNodeClient_1.EthereumRPCDataTransfer(transaction.to, transaction.value).abiEncoded()
|
|
188
|
+
: transaction.data });
|
|
189
|
+
return [2 /*return*/, _super.prototype.signTransactionWithSecretKey.call(this, rawTransaction, secretKey)];
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
// Online
|
|
194
|
+
ERC20ProtocolImpl.prototype.getTransactionsForPublicKey = function (publicKey, limit, cursor) {
|
|
195
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
196
|
+
var address;
|
|
197
|
+
return __generator(this, function (_a) {
|
|
198
|
+
switch (_a.label) {
|
|
199
|
+
case 0: return [4 /*yield*/, this.getAddressFromPublicKey(publicKey)];
|
|
200
|
+
case 1:
|
|
201
|
+
address = _a.sent();
|
|
202
|
+
return [2 /*return*/, this.getTransactionsForAddress(address, limit, cursor)];
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
};
|
|
207
|
+
ERC20ProtocolImpl.prototype.getTransactionsForAddress = function (address, limit, cursor) {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
209
|
+
return __generator(this, function (_a) {
|
|
210
|
+
return [2 /*return*/, this.getTransactionsForAddresses([address], limit, cursor)];
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
ERC20ProtocolImpl.prototype.getTransactionsForAddresses = function (addresses, limit, cursor) {
|
|
215
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
216
|
+
var _this = this;
|
|
217
|
+
return __generator(this, function (_a) {
|
|
218
|
+
return [2 /*return*/, new Promise(function (overallResolve, overallReject) {
|
|
219
|
+
var promises = [];
|
|
220
|
+
for (var _i = 0, addresses_1 = addresses; _i < addresses_1.length; _i++) {
|
|
221
|
+
var address = addresses_1[_i];
|
|
222
|
+
promises.push(_this.infoClient.fetchContractTransactions(_this.contractAddress, address, limit, cursor));
|
|
223
|
+
}
|
|
224
|
+
Promise.all(promises)
|
|
225
|
+
.then(function (values) {
|
|
226
|
+
var page = Math.max.apply(Math, values.map(function (txResult) { return txResult.cursor.page; }));
|
|
227
|
+
var transactions = values.reduce(function (acc, current) {
|
|
228
|
+
return acc.concat(current.transactions.map(function (tx) { return (__assign(__assign({}, tx), { amount: (0, module_kit_1.newAmount)(tx.amount.value, 'blockchain'), fee: (0, module_kit_1.newAmount)(tx.fee.value, 'blockchain'), network: _this.options.network })); }));
|
|
229
|
+
}, []);
|
|
230
|
+
var hasNext = transactions.length >= limit;
|
|
231
|
+
overallResolve({
|
|
232
|
+
transactions: transactions,
|
|
233
|
+
cursor: {
|
|
234
|
+
hasNext: hasNext,
|
|
235
|
+
page: hasNext ? page : undefined
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
})
|
|
239
|
+
.catch(overallReject);
|
|
240
|
+
})];
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
ERC20ProtocolImpl.prototype.getBalanceOfPublicKey = function (publicKey) {
|
|
245
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
246
|
+
var address;
|
|
247
|
+
return __generator(this, function (_a) {
|
|
248
|
+
switch (_a.label) {
|
|
249
|
+
case 0: return [4 /*yield*/, this.getAddressFromPublicKey(publicKey)];
|
|
250
|
+
case 1:
|
|
251
|
+
address = _a.sent();
|
|
252
|
+
return [2 /*return*/, this.getBalanceOfAddress(address)];
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
};
|
|
257
|
+
ERC20ProtocolImpl.prototype.getBalanceOfAddress = function (address) {
|
|
258
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
259
|
+
return __generator(this, function (_a) {
|
|
260
|
+
return [2 /*return*/, this.getBalanceOfAddresses([address])];
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
};
|
|
264
|
+
ERC20ProtocolImpl.prototype.getBalanceOfAddresses = function (addresses) {
|
|
265
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
266
|
+
var balances, totalBalance;
|
|
267
|
+
var _this = this;
|
|
268
|
+
return __generator(this, function (_a) {
|
|
269
|
+
switch (_a.label) {
|
|
270
|
+
case 0: return [4 /*yield*/, Promise.all(addresses.map(function (address) {
|
|
271
|
+
return _this.nodeClient.callBalanceOf(_this.contractAddress, address);
|
|
272
|
+
}))];
|
|
273
|
+
case 1:
|
|
274
|
+
balances = _a.sent();
|
|
275
|
+
totalBalance = balances.reduce(function (a, b) { return a.plus(b); });
|
|
276
|
+
return [2 /*return*/, { total: (0, module_kit_1.newAmount)(totalBalance, 'blockchain') }];
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
};
|
|
281
|
+
ERC20ProtocolImpl.prototype.getTransactionMaxAmountWithPublicKey = function (publicKey, to, configuration) {
|
|
282
|
+
var _a;
|
|
283
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
284
|
+
var balance;
|
|
285
|
+
return __generator(this, function (_b) {
|
|
286
|
+
switch (_b.label) {
|
|
287
|
+
case 0: return [4 /*yield*/, this.getBalanceOfPublicKey(publicKey)];
|
|
288
|
+
case 1:
|
|
289
|
+
balance = _b.sent();
|
|
290
|
+
return [2 /*return*/, (_a = balance.transferable) !== null && _a !== void 0 ? _a : balance.total];
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
};
|
|
295
|
+
ERC20ProtocolImpl.prototype.prepareTransactionWithPublicKey = function (publicKey, details, configuration) {
|
|
296
|
+
var _a;
|
|
297
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
298
|
+
var fee, estimatedFee, wrappedFee, wrappedAmount, balance, wrappedBalance, address, ethBalance, wrappedEthBalance, estimatedGas, txCount, gasPrice, transaction;
|
|
299
|
+
return __generator(this, function (_b) {
|
|
300
|
+
switch (_b.label) {
|
|
301
|
+
case 0:
|
|
302
|
+
if (details.length !== 1) {
|
|
303
|
+
throw new errors_1.ConditionViolationError(coinlib_core_1.Domain.ETHEREUM, 'you cannot have 0 transaction details');
|
|
304
|
+
}
|
|
305
|
+
if (!((configuration === null || configuration === void 0 ? void 0 : configuration.fee) !== undefined)) return [3 /*break*/, 1];
|
|
306
|
+
fee = configuration.fee;
|
|
307
|
+
return [3 /*break*/, 3];
|
|
308
|
+
case 1: return [4 /*yield*/, this.getTransactionFeeWithPublicKey(publicKey, details)];
|
|
309
|
+
case 2:
|
|
310
|
+
estimatedFee = _b.sent();
|
|
311
|
+
fee = estimatedFee.medium;
|
|
312
|
+
_b.label = 3;
|
|
313
|
+
case 3:
|
|
314
|
+
wrappedFee = new bignumber_1.default((0, module_kit_1.newAmount)(fee).blockchain(this.feeUnits).value);
|
|
315
|
+
wrappedAmount = new bignumber_1.default((0, module_kit_1.newAmount)(details[0].amount).blockchain(this.units).value);
|
|
316
|
+
return [4 /*yield*/, this.getBalanceOfPublicKey(publicKey)];
|
|
317
|
+
case 4:
|
|
318
|
+
balance = _b.sent();
|
|
319
|
+
wrappedBalance = new bignumber_1.default((0, module_kit_1.newAmount)((_a = balance.transferable) !== null && _a !== void 0 ? _a : balance.total).blockchain(this.units).value);
|
|
320
|
+
if (!wrappedBalance.isGreaterThanOrEqualTo(wrappedAmount)) return [3 /*break*/, 11];
|
|
321
|
+
return [4 /*yield*/, this.getAddressFromPublicKey(publicKey)];
|
|
322
|
+
case 5:
|
|
323
|
+
address = _b.sent();
|
|
324
|
+
return [4 /*yield*/, _super.prototype.getBalanceOfAddresses.call(this, [address])];
|
|
325
|
+
case 6:
|
|
326
|
+
ethBalance = _b.sent();
|
|
327
|
+
wrappedEthBalance = new bignumber_1.default((0, module_kit_1.newAmount)(ethBalance.total).blockchain(this.units).value);
|
|
328
|
+
return [4 /*yield*/, this.estimateGas(address, details[0].to, wrappedAmount)];
|
|
329
|
+
case 7:
|
|
330
|
+
estimatedGas = _b.sent();
|
|
331
|
+
if (!wrappedEthBalance.isGreaterThanOrEqualTo(wrappedFee)) return [3 /*break*/, 9];
|
|
332
|
+
return [4 /*yield*/, this.nodeClient.fetchTransactionCount(address)];
|
|
333
|
+
case 8:
|
|
334
|
+
txCount = _b.sent();
|
|
335
|
+
gasPrice = wrappedFee.isEqualTo(0)
|
|
336
|
+
? new bignumber_1.default(0)
|
|
337
|
+
: wrappedFee.div(estimatedGas).integerValue(bignumber_1.default.ROUND_CEIL);
|
|
338
|
+
transaction = (0, module_kit_1.newUnsignedTransaction)({
|
|
339
|
+
ethereumType: 'raw',
|
|
340
|
+
nonce: EthereumUtils_1.EthereumUtils.toHex(txCount),
|
|
341
|
+
gasLimit: EthereumUtils_1.EthereumUtils.toHex(estimatedGas.toFixed()),
|
|
342
|
+
gasPrice: EthereumUtils_1.EthereumUtils.toHex(gasPrice.toFixed()),
|
|
343
|
+
to: this.contractAddress,
|
|
344
|
+
value: EthereumUtils_1.EthereumUtils.toHex(new bignumber_1.default(0).toFixed()),
|
|
345
|
+
chainId: this.options.network.chainId,
|
|
346
|
+
data: new HttpEthereumNodeClient_1.EthereumRPCDataTransfer(details[0].to, EthereumUtils_1.EthereumUtils.toHex(wrappedAmount.toFixed())).abiEncoded()
|
|
347
|
+
});
|
|
348
|
+
return [2 /*return*/, transaction];
|
|
349
|
+
case 9: throw new errors_1.BalanceError(coinlib_core_1.Domain.ERC20, 'not enough ETH balance');
|
|
350
|
+
case 10: return [3 /*break*/, 12];
|
|
351
|
+
case 11: throw new errors_1.BalanceError(coinlib_core_1.Domain.ERC20, 'not enough token balance');
|
|
352
|
+
case 12: return [2 /*return*/];
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
};
|
|
357
|
+
// Custom
|
|
358
|
+
ERC20ProtocolImpl.prototype.name = function () {
|
|
359
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
360
|
+
return __generator(this, function (_a) {
|
|
361
|
+
return [2 /*return*/, this.nodeClient.getContractName(this.contractAddress)];
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
};
|
|
365
|
+
ERC20ProtocolImpl.prototype.symbol = function () {
|
|
366
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
367
|
+
return __generator(this, function (_a) {
|
|
368
|
+
return [2 /*return*/, this.nodeClient.getContractSymbol(this.contractAddress)];
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
};
|
|
372
|
+
ERC20ProtocolImpl.prototype.decimals = function () {
|
|
373
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
374
|
+
return __generator(this, function (_a) {
|
|
375
|
+
return [2 /*return*/, this.nodeClient.getContractDecimals(this.contractAddress)];
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
};
|
|
379
|
+
ERC20ProtocolImpl.prototype.estimateGas = function (fromAddress, toAddress, amount, _data) {
|
|
380
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
381
|
+
var hexAmount, blockchainAmount;
|
|
382
|
+
return __generator(this, function (_a) {
|
|
383
|
+
if (typeof amount === 'string' && (0, hex_1.isHex)(amount)) {
|
|
384
|
+
hexAmount = amount;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
blockchainAmount = (0, module_kit_1.isAmount)(amount) ? (0, module_kit_1.newAmount)(amount).blockchain(this.units) : (0, module_kit_1.newAmount)(amount, 'blockchain');
|
|
388
|
+
hexAmount = EthereumUtils_1.EthereumUtils.toHex(blockchainAmount.value);
|
|
389
|
+
}
|
|
390
|
+
return [2 /*return*/, this.nodeClient.estimateTransferGas(this.contractAddress, fromAddress, toAddress, hexAmount)];
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
};
|
|
394
|
+
return ERC20ProtocolImpl;
|
|
395
|
+
}(EthereumBaseProtocol_1.EthereumBaseProtocolImpl));
|
|
396
|
+
exports.ERC20ProtocolImpl = ERC20ProtocolImpl;
|
|
397
|
+
//# sourceMappingURL=ERC20Protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ERC20Protocol.js","sourceRoot":"","sources":["../../../../src/v1/protocol/erc20/ERC20Protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { AirGapInterface,
|
|
2
|
-
import { EthereumInfoClient
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
import { AirGapInterface, RecursivePartial } from '@airgap/module-kit';
|
|
2
|
+
import { EthereumInfoClient } from '../../clients/info/EthereumInfoClient';
|
|
3
|
+
import { EthereumNodeClient } from '../../clients/node/EthereumNodeClient';
|
|
4
|
+
import { ERC20TokenMetadata, ERC20TokenOptions, EthereumProtocolNetwork } from '../../types/protocol';
|
|
5
|
+
import { ERC20Protocol, ERC20ProtocolImpl } from './ERC20Protocol';
|
|
6
|
+
export interface ERC20Token<_ProtocolNetwork extends EthereumProtocolNetwork = EthereumProtocolNetwork> extends AirGapInterface<ERC20Protocol<string, _ProtocolNetwork>, 'SingleTokenSubProtocol'> {
|
|
6
7
|
}
|
|
7
|
-
export declare class ERC20TokenImpl<_ProtocolNetwork extends
|
|
8
|
-
|
|
8
|
+
export declare class ERC20TokenImpl<_ProtocolNetwork extends EthereumProtocolNetwork = EthereumProtocolNetwork> extends ERC20ProtocolImpl<string, _ProtocolNetwork> implements ERC20Token<_ProtocolNetwork> {
|
|
9
|
+
constructor(nodeClient: EthereumNodeClient, infoClient: EthereumInfoClient, options: ERC20TokenOptions<_ProtocolNetwork>);
|
|
10
|
+
getType(): Promise<'token'>;
|
|
11
|
+
private readonly _mainProtocol;
|
|
12
|
+
mainProtocol(): Promise<string>;
|
|
13
|
+
getContractAddress(): Promise<string>;
|
|
9
14
|
}
|
|
10
|
-
declare type ERC20TokenOptionsWithoutMetadata = Omit<ERC20TokenOptions
|
|
15
|
+
declare type ERC20TokenOptionsWithoutMetadata = Omit<ERC20TokenOptions, 'name' | 'identifier' | 'contractAddress' | 'symbol' | 'marketSymbol' | 'decimals'>;
|
|
11
16
|
export declare function createERC20Token(metadata: ERC20TokenMetadata, options?: RecursivePartial<ERC20TokenOptionsWithoutMetadata>): ERC20Token;
|
|
12
|
-
export declare const ETHEREUM_ERC20_MAINNET_PROTOCOL_NETWORK:
|
|
13
|
-
export declare function createERC20TokenOptions(metadata: ERC20TokenMetadata, network?: Partial<
|
|
17
|
+
export declare const ETHEREUM_ERC20_MAINNET_PROTOCOL_NETWORK: EthereumProtocolNetwork;
|
|
18
|
+
export declare function createERC20TokenOptions(metadata: ERC20TokenMetadata, network?: Partial<EthereumProtocolNetwork>, mainIdentifier?: string): ERC20TokenOptions;
|
|
14
19
|
export {};
|
|
@@ -64,54 +64,47 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
64
64
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
65
|
exports.createERC20TokenOptions = exports.ETHEREUM_ERC20_MAINNET_PROTOCOL_NETWORK = exports.createERC20Token = exports.ERC20TokenImpl = void 0;
|
|
66
66
|
var coinlib_core_1 = require("@airgap/coinlib-core");
|
|
67
|
-
var module_kit_1 = require("@airgap/module-kit");
|
|
68
67
|
var EtherscanInfoClient_1 = require("../../clients/info/EtherscanInfoClient");
|
|
68
|
+
var HttpEthereumNodeClient_1 = require("../../clients/node/HttpEthereumNodeClient");
|
|
69
69
|
var EthereumProtocol_1 = require("../EthereumProtocol");
|
|
70
|
-
var
|
|
71
|
-
var EthereumBaseProtocol_1 = require("../EthereumBaseProtocol");
|
|
70
|
+
var ERC20Protocol_1 = require("./ERC20Protocol");
|
|
72
71
|
// Implementation
|
|
73
72
|
var ERC20TokenImpl = /** @class */ (function (_super) {
|
|
74
73
|
__extends(ERC20TokenImpl, _super);
|
|
75
|
-
function ERC20TokenImpl() {
|
|
76
|
-
|
|
74
|
+
function ERC20TokenImpl(nodeClient, infoClient, options) {
|
|
75
|
+
var _this = _super.call(this, nodeClient, infoClient, options) || this;
|
|
76
|
+
_this._mainProtocol = options.mainIdentifier;
|
|
77
|
+
return _this;
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
+
// SubProtocol
|
|
80
|
+
ERC20TokenImpl.prototype.getType = function () {
|
|
79
81
|
return __awaiter(this, void 0, void 0, function () {
|
|
80
|
-
var _this = this;
|
|
81
82
|
return __generator(this, function (_a) {
|
|
82
|
-
return [2 /*return*/,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
cursor: {
|
|
98
|
-
hasNext: hasNext,
|
|
99
|
-
page: hasNext ? page : undefined
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
})
|
|
103
|
-
.catch(overallReject);
|
|
104
|
-
})];
|
|
83
|
+
return [2 /*return*/, 'token'];
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
ERC20TokenImpl.prototype.mainProtocol = function () {
|
|
88
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
89
|
+
return __generator(this, function (_a) {
|
|
90
|
+
return [2 /*return*/, this._mainProtocol];
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
ERC20TokenImpl.prototype.getContractAddress = function () {
|
|
95
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
96
|
+
return __generator(this, function (_a) {
|
|
97
|
+
return [2 /*return*/, this.contractAddress];
|
|
105
98
|
});
|
|
106
99
|
});
|
|
107
100
|
};
|
|
108
101
|
return ERC20TokenImpl;
|
|
109
|
-
}(
|
|
102
|
+
}(ERC20Protocol_1.ERC20ProtocolImpl));
|
|
110
103
|
exports.ERC20TokenImpl = ERC20TokenImpl;
|
|
111
104
|
function createERC20Token(metadata, options) {
|
|
112
105
|
if (options === void 0) { options = {}; }
|
|
113
106
|
var completeOptions = createERC20TokenOptions(metadata, options.network, options.mainIdentifier);
|
|
114
|
-
return new ERC20TokenImpl(new
|
|
107
|
+
return new ERC20TokenImpl(new HttpEthereumNodeClient_1.HttpEthereumNodeClient(completeOptions.network.rpcUrl), new EtherscanInfoClient_1.EtherscanInfoClient(completeOptions.network.blockExplorerApi), completeOptions);
|
|
115
108
|
}
|
|
116
109
|
exports.createERC20Token = createERC20Token;
|
|
117
110
|
exports.ETHEREUM_ERC20_MAINNET_PROTOCOL_NETWORK = __assign({}, EthereumProtocol_1.ETHEREUM_MAINNET_PROTOCOL_NETWORK);
|
|
@@ -131,9 +124,7 @@ function createERC20TokenOptions(metadata, network, mainIdentifier) {
|
|
|
131
124
|
decimals: metadata.decimals
|
|
132
125
|
},
|
|
133
126
|
_a),
|
|
134
|
-
mainUnit: metadata.symbol
|
|
135
|
-
feeUnits: EthereumBaseProtocol_1.DEFAULT_ETHEREUM_UNITS_METADATA,
|
|
136
|
-
mainFeeUnit: 'ETH'
|
|
127
|
+
mainUnit: metadata.symbol
|
|
137
128
|
};
|
|
138
129
|
}
|
|
139
130
|
exports.createERC20TokenOptions = createERC20TokenOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ERC20Token.js","sourceRoot":"","sources":["../../../../src/v1/protocol/erc20/ERC20Token.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA0D;
|
|
1
|
+
{"version":3,"file":"ERC20Token.js","sourceRoot":"","sources":["../../../../src/v1/protocol/erc20/ERC20Token.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAA0D;AAM1D,8EAA4E;AAC5E,oFAAkF;AAGlF,wDAAuE;AAEvE,iDAAkE;AAOlE,iBAAiB;AAEjB;IACU,kCAA2C;IAGnD,wBAAmB,UAA8B,EAAE,UAA8B,EAAE,OAA4C;QAA/H,YACE,kBAAM,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,SAGvC;QADC,KAAI,CAAC,aAAa,GAAG,OAAO,CAAC,cAAc,CAAA;;IAC7C,CAAC;IAED,cAAc;IAED,gCAAO,GAApB;;;gBACE,sBAAO,OAAO,EAAA;;;KACf;IAGY,qCAAY,GAAzB;;;gBACE,sBAAO,IAAI,CAAC,aAAa,EAAA;;;KAC1B;IAEY,2CAAkB,GAA/B;;;gBACE,sBAAO,IAAI,CAAC,eAAe,EAAA;;;KAC5B;IACH,qBAAC;AAAD,CAAC,AAxBD,CACU,iCAAiB,GAuB1B;AAxBY,wCAAc;AAiC3B,SAAgB,gBAAgB,CAC9B,QAA4B,EAC5B,OAAgE;IAAhE,wBAAA,EAAA,YAAgE;IAEhE,IAAM,eAAe,GAAsB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAErH,OAAO,IAAI,cAAc,CACvB,IAAI,+CAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,EAC1D,IAAI,yCAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,EACjE,eAAe,CAChB,CAAA;AACH,CAAC;AAXD,4CAWC;AAEY,QAAA,uCAAuC,gBAC/C,oDAAiC,EACrC;AAED,IAAM,8BAA8B,GAA4B,+CAAuC,CAAA;AAEvG,SAAgB,uBAAuB,CACrC,QAA4B,EAC5B,OAA8C,EAC9C,cAAuB;;IADvB,wBAAA,EAAA,YAA8C;IAG9C,OAAO;QACL,OAAO,wBAAO,8BAA8B,GAAK,OAAO,CAAE;QAC1D,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,cAAc,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,kCAAmB,CAAC,GAAG;QAEzD,eAAe,EAAE,QAAQ,CAAC,eAAe;QAEzC,KAAK;YACH,GAAC,QAAQ,CAAC,MAAM,IAAG;gBACjB,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,EAAE;gBACjE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B;eACF;QACD,QAAQ,EAAE,QAAQ,CAAC,MAAM;KAC1B,CAAA;AACH,CAAC;AArBD,0DAqBC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EthereumSignedTransaction, EthereumUnsignedTransaction } from '../../../../types/transaction';
|
|
2
|
+
import { EthereumTransactionSignRequest } from '../definitions/transaction-sign-request-ethereum';
|
|
3
|
+
import { EthereumTypedTransactionSignRequest } from '../definitions/transaction-sign-request-ethereum-typed';
|
|
4
|
+
import { EthereumTransactionSignResponse } from '../definitions/transaction-sign-response-ethereum';
|
|
5
|
+
export declare function ethereumUnsignedTransactionToRequest(unsigned: EthereumUnsignedTransaction, publicKey: string, callbackUrl?: string): EthereumTransactionSignRequest | EthereumTypedTransactionSignRequest;
|
|
6
|
+
export declare function ethereumSignedTransactionToResponse(signed: EthereumSignedTransaction, accountIdentifier: string): EthereumTransactionSignResponse;
|
|
7
|
+
export declare function ethereumTransactionSignRequestToUnsigned(request: EthereumTransactionSignRequest | EthereumTypedTransactionSignRequest): EthereumUnsignedTransaction;
|
|
8
|
+
export declare function ethereumTransactionSignResponseToSigned(response: EthereumTransactionSignResponse): EthereumSignedTransaction;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.ethereumTransactionSignResponseToSigned = exports.ethereumTransactionSignRequestToUnsigned = exports.ethereumSignedTransactionToResponse = exports.ethereumUnsignedTransactionToRequest = void 0;
|
|
26
|
+
var module_kit_1 = require("@airgap/module-kit");
|
|
27
|
+
function isEthereumTypedTransactionSignRequest(request) {
|
|
28
|
+
return (0, module_kit_1.implementsInterface)(request.transaction, {
|
|
29
|
+
derivationPath: 'required',
|
|
30
|
+
masterFingerprint: 'required',
|
|
31
|
+
serialized: 'required'
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function ethereumUnsignedTransactionToRequest(unsigned, publicKey, callbackUrl) {
|
|
35
|
+
return unsigned.ethereumType === 'raw'
|
|
36
|
+
? ethereumRawUnsignedTransactionToRequest(unsigned, publicKey, callbackUrl)
|
|
37
|
+
: ethereumTypedUnsignedTransactionToRequest(unsigned, publicKey, callbackUrl);
|
|
38
|
+
}
|
|
39
|
+
exports.ethereumUnsignedTransactionToRequest = ethereumUnsignedTransactionToRequest;
|
|
40
|
+
function ethereumRawUnsignedTransactionToRequest(unsigned, publicKey, callbackUrl) {
|
|
41
|
+
var _ = unsigned.type, rest = __rest(unsigned, ["type"]);
|
|
42
|
+
return {
|
|
43
|
+
transaction: rest,
|
|
44
|
+
publicKey: publicKey,
|
|
45
|
+
callbackURL: callbackUrl
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function ethereumTypedUnsignedTransactionToRequest(unsigned, publicKey, callbackUrl) {
|
|
49
|
+
var _ = unsigned.type, rest = __rest(unsigned, ["type"]);
|
|
50
|
+
return {
|
|
51
|
+
transaction: rest,
|
|
52
|
+
publicKey: publicKey,
|
|
53
|
+
callbackURL: callbackUrl
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function ethereumSignedTransactionToResponse(signed, accountIdentifier) {
|
|
57
|
+
return { transaction: signed.serialized, accountIdentifier: accountIdentifier };
|
|
58
|
+
}
|
|
59
|
+
exports.ethereumSignedTransactionToResponse = ethereumSignedTransactionToResponse;
|
|
60
|
+
function ethereumTransactionSignRequestToUnsigned(request) {
|
|
61
|
+
return isEthereumTypedTransactionSignRequest(request)
|
|
62
|
+
? ethereumTransactionSignRequestToTypedUnsigned(request)
|
|
63
|
+
: ethereumTransactionSignRequestToRawUnsigned(request);
|
|
64
|
+
}
|
|
65
|
+
exports.ethereumTransactionSignRequestToUnsigned = ethereumTransactionSignRequestToUnsigned;
|
|
66
|
+
function ethereumTransactionSignRequestToRawUnsigned(request) {
|
|
67
|
+
return (0, module_kit_1.newUnsignedTransaction)(__assign({ ethereumType: 'raw' }, request.transaction));
|
|
68
|
+
}
|
|
69
|
+
function ethereumTransactionSignRequestToTypedUnsigned(request) {
|
|
70
|
+
return (0, module_kit_1.newUnsignedTransaction)(__assign({ ethereumType: 'typed' }, request.transaction));
|
|
71
|
+
}
|
|
72
|
+
function ethereumTransactionSignResponseToSigned(response) {
|
|
73
|
+
return (0, module_kit_1.newSignedTransaction)({ serialized: response.transaction });
|
|
74
|
+
}
|
|
75
|
+
exports.ethereumTransactionSignResponseToSigned = ethereumTransactionSignResponseToSigned;
|
|
76
|
+
//# sourceMappingURL=transaction-converter.js.map
|