@ledgerhq/coin-ton 0.3.12-next.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.
- package/.eslintrc.js +20 -0
- package/.turbo/turbo-build.log +4 -0
- package/.unimportedrc.json +19 -0
- package/CHANGELOG.md +15 -0
- package/LICENSE.txt +21 -0
- package/jest.config.js +12 -0
- package/lib/__tests__/fixtures/api.fixtures.d.ts +4 -0
- package/lib/__tests__/fixtures/api.fixtures.d.ts.map +1 -0
- package/lib/__tests__/fixtures/api.fixtures.js +33 -0
- package/lib/__tests__/fixtures/api.fixtures.js.map +1 -0
- package/lib/__tests__/fixtures/common.fixtures.d.ts +29 -0
- package/lib/__tests__/fixtures/common.fixtures.d.ts.map +1 -0
- package/lib/__tests__/fixtures/common.fixtures.js +124 -0
- package/lib/__tests__/fixtures/common.fixtures.js.map +1 -0
- package/lib/__tests__/integration/bridge.integration.test.d.ts +14 -0
- package/lib/__tests__/integration/bridge.integration.test.d.ts.map +1 -0
- package/lib/__tests__/integration/bridge.integration.test.js +136 -0
- package/lib/__tests__/integration/bridge.integration.test.js.map +1 -0
- package/lib/__tests__/unit/api.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/api.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/api.unit.test.js +77 -0
- package/lib/__tests__/unit/api.unit.test.js.map +1 -0
- package/lib/__tests__/unit/broadcast.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/broadcast.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/broadcast.unit.test.js +40 -0
- package/lib/__tests__/unit/broadcast.unit.test.js.map +1 -0
- package/lib/__tests__/unit/createTransaction.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/createTransaction.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/createTransaction.unit.test.js +34 -0
- package/lib/__tests__/unit/createTransaction.unit.test.js.map +1 -0
- package/lib/__tests__/unit/deviceTransactionConfig.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/deviceTransactionConfig.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/deviceTransactionConfig.unit.test.js +74 -0
- package/lib/__tests__/unit/deviceTransactionConfig.unit.test.js.map +1 -0
- package/lib/__tests__/unit/estimateMaxSpendable.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/estimateMaxSpendable.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/estimateMaxSpendable.unit.test.js +31 -0
- package/lib/__tests__/unit/estimateMaxSpendable.unit.test.js.map +1 -0
- package/lib/__tests__/unit/getTransactionStatus.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/getTransactionStatus.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/getTransactionStatus.unit.test.js +96 -0
- package/lib/__tests__/unit/getTransactionStatus.unit.test.js.map +1 -0
- package/lib/__tests__/unit/hw-getAddress.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/hw-getAddress.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/hw-getAddress.unit.test.js +67 -0
- package/lib/__tests__/unit/hw-getAddress.unit.test.js.map +1 -0
- package/lib/__tests__/unit/prepareTransaction.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/prepareTransaction.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/prepareTransaction.unit.test.js +42 -0
- package/lib/__tests__/unit/prepareTransaction.unit.test.js.map +1 -0
- package/lib/__tests__/unit/signOperation.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/signOperation.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/signOperation.unit.test.js +83 -0
- package/lib/__tests__/unit/signOperation.unit.test.js.map +1 -0
- package/lib/__tests__/unit/txn.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/txn.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/txn.unit.test.js +116 -0
- package/lib/__tests__/unit/txn.unit.test.js.map +1 -0
- package/lib/__tests__/unit/utils.unit.test.d.ts +2 -0
- package/lib/__tests__/unit/utils.unit.test.d.ts.map +1 -0
- package/lib/__tests__/unit/utils.unit.test.js +97 -0
- package/lib/__tests__/unit/utils.unit.test.js.map +1 -0
- package/lib/bridge/bridgeHelpers/api.d.ts +10 -0
- package/lib/bridge/bridgeHelpers/api.d.ts.map +1 -0
- package/lib/bridge/bridgeHelpers/api.js +104 -0
- package/lib/bridge/bridgeHelpers/api.js.map +1 -0
- package/lib/bridge/bridgeHelpers/api.types.d.ts +164 -0
- package/lib/bridge/bridgeHelpers/api.types.d.ts.map +1 -0
- package/lib/bridge/bridgeHelpers/api.types.js +3 -0
- package/lib/bridge/bridgeHelpers/api.types.js.map +1 -0
- package/lib/bridge/bridgeHelpers/txn.d.ts +5 -0
- package/lib/bridge/bridgeHelpers/txn.d.ts.map +1 -0
- package/lib/bridge/bridgeHelpers/txn.js +166 -0
- package/lib/bridge/bridgeHelpers/txn.js.map +1 -0
- package/lib/bridge/js.d.ts +12 -0
- package/lib/bridge/js.d.ts.map +1 -0
- package/lib/bridge/js.js +65 -0
- package/lib/bridge/js.js.map +1 -0
- package/lib/broadcast.d.ts +5 -0
- package/lib/broadcast.d.ts.map +1 -0
- package/lib/broadcast.js +19 -0
- package/lib/broadcast.js.map +1 -0
- package/lib/cli-transaction.d.ts +12 -0
- package/lib/cli-transaction.d.ts.map +1 -0
- package/lib/cli-transaction.js +21 -0
- package/lib/cli-transaction.js.map +1 -0
- package/lib/config.d.ts +9 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +16 -0
- package/lib/config.js.map +1 -0
- package/lib/createTransaction.d.ts +5 -0
- package/lib/createTransaction.d.ts.map +1 -0
- package/lib/createTransaction.js +16 -0
- package/lib/createTransaction.js.map +1 -0
- package/lib/deviceTransactionConfig.d.ts +11 -0
- package/lib/deviceTransactionConfig.d.ts.map +1 -0
- package/lib/deviceTransactionConfig.js +37 -0
- package/lib/deviceTransactionConfig.js.map +1 -0
- package/lib/errors.d.ts +4 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +9 -0
- package/lib/errors.js.map +1 -0
- package/lib/estimateMaxSpendable.d.ts +5 -0
- package/lib/estimateMaxSpendable.d.ts.map +1 -0
- package/lib/estimateMaxSpendable.js +32 -0
- package/lib/estimateMaxSpendable.js.map +1 -0
- package/lib/getTransactionStatus.d.ts +5 -0
- package/lib/getTransactionStatus.d.ts.map +1 -0
- package/lib/getTransactionStatus.js +97 -0
- package/lib/getTransactionStatus.js.map +1 -0
- package/lib/hw-getAddress.d.ts +6 -0
- package/lib/hw-getAddress.d.ts.map +1 -0
- package/lib/hw-getAddress.js +31 -0
- package/lib/hw-getAddress.js.map +1 -0
- package/lib/hw-signMessage.d.ts +12 -0
- package/lib/hw-signMessage.d.ts.map +1 -0
- package/lib/hw-signMessage.js +33 -0
- package/lib/hw-signMessage.js.map +1 -0
- package/lib/prepareTransaction.d.ts +5 -0
- package/lib/prepareTransaction.d.ts.map +1 -0
- package/lib/prepareTransaction.js +29 -0
- package/lib/prepareTransaction.js.map +1 -0
- package/lib/signOperation.d.ts +11 -0
- package/lib/signOperation.d.ts.map +1 -0
- package/lib/signOperation.js +96 -0
- package/lib/signOperation.js.map +1 -0
- package/lib/signer.d.ts +27 -0
- package/lib/signer.d.ts.map +1 -0
- package/lib/signer.js +3 -0
- package/lib/signer.js.map +1 -0
- package/lib/specs.d.ts +8 -0
- package/lib/specs.d.ts.map +1 -0
- package/lib/specs.js +106 -0
- package/lib/specs.js.map +1 -0
- package/lib/speculos-deviceActions.d.ts +4 -0
- package/lib/speculos-deviceActions.d.ts.map +1 -0
- package/lib/speculos-deviceActions.js +34 -0
- package/lib/speculos-deviceActions.js.map +1 -0
- package/lib/synchronisation.d.ts +5 -0
- package/lib/synchronisation.d.ts.map +1 -0
- package/lib/synchronisation.js +95 -0
- package/lib/synchronisation.js.map +1 -0
- package/lib/transaction.d.ts +14 -0
- package/lib/transaction.d.ts.map +1 -0
- package/lib/transaction.js +41 -0
- package/lib/transaction.js.map +1 -0
- package/lib/types.d.ts +65 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/utils.d.ts +11 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +125 -0
- package/lib/utils.js.map +1 -0
- package/lib-es/__tests__/fixtures/api.fixtures.d.ts +4 -0
- package/lib-es/__tests__/fixtures/api.fixtures.d.ts.map +1 -0
- package/lib-es/__tests__/fixtures/api.fixtures.js +30 -0
- package/lib-es/__tests__/fixtures/api.fixtures.js.map +1 -0
- package/lib-es/__tests__/fixtures/common.fixtures.d.ts +29 -0
- package/lib-es/__tests__/fixtures/common.fixtures.d.ts.map +1 -0
- package/lib-es/__tests__/fixtures/common.fixtures.js +118 -0
- package/lib-es/__tests__/fixtures/common.fixtures.js.map +1 -0
- package/lib-es/__tests__/integration/bridge.integration.test.d.ts +14 -0
- package/lib-es/__tests__/integration/bridge.integration.test.d.ts.map +1 -0
- package/lib-es/__tests__/integration/bridge.integration.test.js +130 -0
- package/lib-es/__tests__/integration/bridge.integration.test.js.map +1 -0
- package/lib-es/__tests__/unit/api.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/api.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/api.unit.test.js +52 -0
- package/lib-es/__tests__/unit/api.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/broadcast.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/broadcast.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/broadcast.unit.test.js +35 -0
- package/lib-es/__tests__/unit/broadcast.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/createTransaction.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/createTransaction.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/createTransaction.unit.test.js +29 -0
- package/lib-es/__tests__/unit/createTransaction.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/deviceTransactionConfig.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/deviceTransactionConfig.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/deviceTransactionConfig.unit.test.js +69 -0
- package/lib-es/__tests__/unit/deviceTransactionConfig.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/estimateMaxSpendable.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/estimateMaxSpendable.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/estimateMaxSpendable.unit.test.js +26 -0
- package/lib-es/__tests__/unit/estimateMaxSpendable.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/getTransactionStatus.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/getTransactionStatus.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/getTransactionStatus.unit.test.js +91 -0
- package/lib-es/__tests__/unit/getTransactionStatus.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/hw-getAddress.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/hw-getAddress.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/hw-getAddress.unit.test.js +62 -0
- package/lib-es/__tests__/unit/hw-getAddress.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/prepareTransaction.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/prepareTransaction.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/prepareTransaction.unit.test.js +37 -0
- package/lib-es/__tests__/unit/prepareTransaction.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/signOperation.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/signOperation.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/signOperation.unit.test.js +78 -0
- package/lib-es/__tests__/unit/signOperation.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/txn.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/txn.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/txn.unit.test.js +111 -0
- package/lib-es/__tests__/unit/txn.unit.test.js.map +1 -0
- package/lib-es/__tests__/unit/utils.unit.test.d.ts +2 -0
- package/lib-es/__tests__/unit/utils.unit.test.d.ts.map +1 -0
- package/lib-es/__tests__/unit/utils.unit.test.js +95 -0
- package/lib-es/__tests__/unit/utils.unit.test.js.map +1 -0
- package/lib-es/bridge/bridgeHelpers/api.d.ts +10 -0
- package/lib-es/bridge/bridgeHelpers/api.d.ts.map +1 -0
- package/lib-es/bridge/bridgeHelpers/api.js +93 -0
- package/lib-es/bridge/bridgeHelpers/api.js.map +1 -0
- package/lib-es/bridge/bridgeHelpers/api.types.d.ts +164 -0
- package/lib-es/bridge/bridgeHelpers/api.types.d.ts.map +1 -0
- package/lib-es/bridge/bridgeHelpers/api.types.js +2 -0
- package/lib-es/bridge/bridgeHelpers/api.types.js.map +1 -0
- package/lib-es/bridge/bridgeHelpers/txn.d.ts +5 -0
- package/lib-es/bridge/bridgeHelpers/txn.d.ts.map +1 -0
- package/lib-es/bridge/bridgeHelpers/txn.js +158 -0
- package/lib-es/bridge/bridgeHelpers/txn.js.map +1 -0
- package/lib-es/bridge/js.d.ts +12 -0
- package/lib-es/bridge/js.d.ts.map +1 -0
- package/lib-es/bridge/js.js +56 -0
- package/lib-es/bridge/js.js.map +1 -0
- package/lib-es/broadcast.d.ts +5 -0
- package/lib-es/broadcast.d.ts.map +1 -0
- package/lib-es/broadcast.js +17 -0
- package/lib-es/broadcast.js.map +1 -0
- package/lib-es/cli-transaction.d.ts +12 -0
- package/lib-es/cli-transaction.d.ts.map +1 -0
- package/lib-es/cli-transaction.js +15 -0
- package/lib-es/cli-transaction.js.map +1 -0
- package/lib-es/config.d.ts +9 -0
- package/lib-es/config.d.ts.map +1 -0
- package/lib-es/config.js +11 -0
- package/lib-es/config.js.map +1 -0
- package/lib-es/createTransaction.d.ts +5 -0
- package/lib-es/createTransaction.d.ts.map +1 -0
- package/lib-es/createTransaction.js +14 -0
- package/lib-es/createTransaction.js.map +1 -0
- package/lib-es/deviceTransactionConfig.d.ts +11 -0
- package/lib-es/deviceTransactionConfig.d.ts.map +1 -0
- package/lib-es/deviceTransactionConfig.js +35 -0
- package/lib-es/deviceTransactionConfig.js.map +1 -0
- package/lib-es/errors.d.ts +4 -0
- package/lib-es/errors.d.ts.map +1 -0
- package/lib-es/errors.js +6 -0
- package/lib-es/errors.js.map +1 -0
- package/lib-es/estimateMaxSpendable.d.ts +5 -0
- package/lib-es/estimateMaxSpendable.d.ts.map +1 -0
- package/lib-es/estimateMaxSpendable.js +30 -0
- package/lib-es/estimateMaxSpendable.js.map +1 -0
- package/lib-es/getTransactionStatus.d.ts +5 -0
- package/lib-es/getTransactionStatus.d.ts.map +1 -0
- package/lib-es/getTransactionStatus.js +93 -0
- package/lib-es/getTransactionStatus.js.map +1 -0
- package/lib-es/hw-getAddress.d.ts +6 -0
- package/lib-es/hw-getAddress.d.ts.map +1 -0
- package/lib-es/hw-getAddress.js +29 -0
- package/lib-es/hw-getAddress.js.map +1 -0
- package/lib-es/hw-signMessage.d.ts +12 -0
- package/lib-es/hw-signMessage.d.ts.map +1 -0
- package/lib-es/hw-signMessage.js +29 -0
- package/lib-es/hw-signMessage.js.map +1 -0
- package/lib-es/prepareTransaction.d.ts +5 -0
- package/lib-es/prepareTransaction.d.ts.map +1 -0
- package/lib-es/prepareTransaction.js +27 -0
- package/lib-es/prepareTransaction.js.map +1 -0
- package/lib-es/signOperation.d.ts +11 -0
- package/lib-es/signOperation.d.ts.map +1 -0
- package/lib-es/signOperation.js +91 -0
- package/lib-es/signOperation.js.map +1 -0
- package/lib-es/signer.d.ts +27 -0
- package/lib-es/signer.d.ts.map +1 -0
- package/lib-es/signer.js +2 -0
- package/lib-es/signer.js.map +1 -0
- package/lib-es/specs.d.ts +8 -0
- package/lib-es/specs.d.ts.map +1 -0
- package/lib-es/specs.js +99 -0
- package/lib-es/specs.js.map +1 -0
- package/lib-es/speculos-deviceActions.d.ts +4 -0
- package/lib-es/speculos-deviceActions.d.ts.map +1 -0
- package/lib-es/speculos-deviceActions.js +31 -0
- package/lib-es/speculos-deviceActions.js.map +1 -0
- package/lib-es/synchronisation.d.ts +5 -0
- package/lib-es/synchronisation.d.ts.map +1 -0
- package/lib-es/synchronisation.js +88 -0
- package/lib-es/synchronisation.js.map +1 -0
- package/lib-es/transaction.d.ts +14 -0
- package/lib-es/transaction.d.ts.map +1 -0
- package/lib-es/transaction.js +33 -0
- package/lib-es/transaction.js.map +1 -0
- package/lib-es/types.d.ts +65 -0
- package/lib-es/types.d.ts.map +1 -0
- package/lib-es/types.js +2 -0
- package/lib-es/types.js.map +1 -0
- package/lib-es/utils.d.ts +11 -0
- package/lib-es/utils.d.ts.map +1 -0
- package/lib-es/utils.js +112 -0
- package/lib-es/utils.js.map +1 -0
- package/package.json +86 -0
- package/src/__tests__/fixtures/api.fixtures.ts +39 -0
- package/src/__tests__/fixtures/common.fixtures.ts +139 -0
- package/src/__tests__/integration/bridge.integration.test.ts +135 -0
- package/src/__tests__/unit/api.unit.test.ts +60 -0
- package/src/__tests__/unit/broadcast.unit.test.ts +36 -0
- package/src/__tests__/unit/createTransaction.unit.test.ts +20 -0
- package/src/__tests__/unit/deviceTransactionConfig.unit.test.ts +69 -0
- package/src/__tests__/unit/estimateMaxSpendable.unit.test.ts +19 -0
- package/src/__tests__/unit/getTransactionStatus.unit.test.ts +119 -0
- package/src/__tests__/unit/hw-getAddress.unit.test.ts +58 -0
- package/src/__tests__/unit/prepareTransaction.unit.test.ts +52 -0
- package/src/__tests__/unit/signOperation.unit.test.ts +90 -0
- package/src/__tests__/unit/txn.unit.test.ts +121 -0
- package/src/__tests__/unit/utils.unit.test.ts +126 -0
- package/src/bridge/bridgeHelpers/api.ts +104 -0
- package/src/bridge/bridgeHelpers/api.types.ts +178 -0
- package/src/bridge/bridgeHelpers/txn.ts +166 -0
- package/src/bridge/js.ts +65 -0
- package/src/broadcast.ts +13 -0
- package/src/cli-transaction.ts +30 -0
- package/src/config.ts +21 -0
- package/src/createTransaction.ts +17 -0
- package/src/deviceTransactionConfig.ts +48 -0
- package/src/errors.ts +6 -0
- package/src/estimateMaxSpendable.ts +40 -0
- package/src/getTransactionStatus.ts +130 -0
- package/src/hw-getAddress.ts +28 -0
- package/src/hw-signMessage.ts +31 -0
- package/src/prepareTransaction.ts +27 -0
- package/src/signOperation.ts +115 -0
- package/src/signer.ts +32 -0
- package/src/specs.ts +122 -0
- package/src/speculos-deviceActions.ts +38 -0
- package/src/synchronisation.ts +91 -0
- package/src/transaction.ts +61 -0
- package/src/types.ts +82 -0
- package/src/utils.ts +120 -0
- package/tsconfig.json +12 -0
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getTransactionStatus = void 0;
|
|
13
|
+
const errors_1 = require("@ledgerhq/errors");
|
|
14
|
+
const errors_2 = require("./errors");
|
|
15
|
+
const utils_1 = require("./utils");
|
|
16
|
+
/**
|
|
17
|
+
* Validate an address for account transaction
|
|
18
|
+
*/
|
|
19
|
+
const validateRecipient = (account, tx) => {
|
|
20
|
+
const errors = {};
|
|
21
|
+
if (tx.recipient) {
|
|
22
|
+
// Check if recipient is matching the format of account valid eth address or not
|
|
23
|
+
const isRecipientValidate = (0, utils_1.isAddressValid)(tx.recipient);
|
|
24
|
+
if (!isRecipientValidate) {
|
|
25
|
+
errors.recipient = new errors_1.InvalidAddress("", {
|
|
26
|
+
currencyName: account.currency.name,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if ((0, utils_1.addressesAreEqual)(account.freshAddress, tx.recipient)) {
|
|
30
|
+
errors.recipient = new errors_1.InvalidAddressBecauseDestinationIsAlsoSource("", {
|
|
31
|
+
currencyName: account.currency.name,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
errors.recipient = new errors_1.RecipientRequired(); // ""
|
|
37
|
+
}
|
|
38
|
+
return [errors];
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Validate the sender address for account transaction
|
|
42
|
+
*/
|
|
43
|
+
const validateSender = (account) => {
|
|
44
|
+
const errors = {};
|
|
45
|
+
// Check if sender is matching the format of account valid ton address or not
|
|
46
|
+
const isSenderValidate = (0, utils_1.isAddressValid)(account.freshAddress);
|
|
47
|
+
if (!isSenderValidate) {
|
|
48
|
+
errors.sender = new errors_1.InvalidAddress("", {
|
|
49
|
+
currencyName: account.currency.name,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return [errors];
|
|
53
|
+
};
|
|
54
|
+
const validateAmount = (account, transaction, totalSpent) => {
|
|
55
|
+
const errors = {};
|
|
56
|
+
const warnings = {};
|
|
57
|
+
// if no amount or 0
|
|
58
|
+
if (!transaction.amount || transaction.amount.isZero()) {
|
|
59
|
+
errors.amount = new errors_1.AmountRequired(); // "Amount required"
|
|
60
|
+
}
|
|
61
|
+
else if (totalSpent.isGreaterThan(account.balance)) {
|
|
62
|
+
// if not enough to make the transaction
|
|
63
|
+
errors.amount = new errors_1.NotEnoughBalance(); // "Sorry, insufficient funds"
|
|
64
|
+
}
|
|
65
|
+
return [errors, warnings];
|
|
66
|
+
};
|
|
67
|
+
const validateComment = (transaction) => {
|
|
68
|
+
const errors = {};
|
|
69
|
+
// if the comment isn'transaction encrypted, it should be valid
|
|
70
|
+
if (transaction.comment.isEncrypted || !(0, utils_1.commentIsValid)(transaction.comment)) {
|
|
71
|
+
errors.transaction = new errors_2.TonCommentInvalid();
|
|
72
|
+
}
|
|
73
|
+
return [errors];
|
|
74
|
+
};
|
|
75
|
+
const getTransactionStatus = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
const totalSpent = transaction.amount.plus(transaction.fees);
|
|
77
|
+
// Recipient related errors and warnings
|
|
78
|
+
const [recipientErr] = validateRecipient(account, transaction);
|
|
79
|
+
// Sender related errors and warnings
|
|
80
|
+
const [senderErr] = validateSender(account);
|
|
81
|
+
// Amount related errors and warnings
|
|
82
|
+
const [amountErr, amountWarn] = validateAmount(account, transaction, totalSpent);
|
|
83
|
+
// Transaction related errors and warnings
|
|
84
|
+
const [transactionErr] = validateComment(transaction);
|
|
85
|
+
const errors = Object.assign(Object.assign(Object.assign(Object.assign({}, recipientErr), senderErr), amountErr), transactionErr);
|
|
86
|
+
const warnings = Object.assign({}, amountWarn);
|
|
87
|
+
return {
|
|
88
|
+
amount: transaction.amount,
|
|
89
|
+
errors,
|
|
90
|
+
warnings,
|
|
91
|
+
estimatedFees: transaction.fees,
|
|
92
|
+
totalSpent,
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
exports.getTransactionStatus = getTransactionStatus;
|
|
96
|
+
exports.default = exports.getTransactionStatus;
|
|
97
|
+
//# sourceMappingURL=getTransactionStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../src/getTransactionStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GetAddressFn } from "@ledgerhq/coin-framework/bridge/getAddressWrapper";
|
|
2
|
+
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
3
|
+
import { TonSigner } from "./signer";
|
|
4
|
+
declare const resolver: (signerContext: SignerContext<TonSigner>) => GetAddressFn;
|
|
5
|
+
export default resolver;
|
|
6
|
+
//# sourceMappingURL=hw-getAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hw-getAddress.d.ts","sourceRoot":"","sources":["../src/hw-getAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,QAAA,MAAM,QAAQ,kBAAmB,cAAc,SAAS,CAAC,KAAG,YAmB3D,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const utils_1 = require("./utils");
|
|
13
|
+
const resolver = (signerContext) => {
|
|
14
|
+
return (deviceId_1, _a) => __awaiter(void 0, [deviceId_1, _a], void 0, function* (deviceId, { path, verify }) {
|
|
15
|
+
const ledgerPath = (0, utils_1.getLedgerTonPath)(path);
|
|
16
|
+
const sig = yield signerContext(deviceId, (signer) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
return verify
|
|
18
|
+
? yield signer.validateAddress(ledgerPath, { bounceable: false })
|
|
19
|
+
: yield signer.getAddress(ledgerPath, { bounceable: false });
|
|
20
|
+
}));
|
|
21
|
+
if (!sig.address || !sig.publicKey.length)
|
|
22
|
+
throw Error(`[ton] Response is empty ${sig.address} ${sig.publicKey}`);
|
|
23
|
+
return {
|
|
24
|
+
address: sig.address,
|
|
25
|
+
publicKey: sig.publicKey.toString("hex"),
|
|
26
|
+
path,
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
exports.default = resolver;
|
|
31
|
+
//# sourceMappingURL=hw-getAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hw-getAddress.js","sourceRoot":"","sources":["../src/hw-getAddress.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,mCAA2C;AAE3C,MAAM,QAAQ,GAAG,CAAC,aAAuC,EAAgB,EAAE;IACzE,OAAO,iBAA8D,EAAE,wDAAzD,QAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAqB;QACjE,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAM,MAAM,EAAC,EAAE;YACvD,OAAO,MAAM;gBACX,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBACjE,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC,CAAA,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM;YACvC,MAAM,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAEzE,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxC,IAAI;SACL,CAAC;IACJ,CAAC,CAAA,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
2
|
+
import { Account, AnyMessage } from "@ledgerhq/types-live";
|
|
3
|
+
import { TonSigner } from "./signer";
|
|
4
|
+
export declare const signMessage: (signerContext: SignerContext<TonSigner>) => (deviceId: string, account: Account, { message }: AnyMessage) => Promise<{
|
|
5
|
+
rsv: {
|
|
6
|
+
r: string;
|
|
7
|
+
s: string;
|
|
8
|
+
v: number;
|
|
9
|
+
};
|
|
10
|
+
signature: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=hw-signMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hw-signMessage.d.ts","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,eAAO,MAAM,WAAW,kBACN,cAAc,SAAS,CAAC,gBACvB,MAAM,WAAW,OAAO,eAAe,UAAU;;;;;;;EAsBjE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.signMessage = void 0;
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
const signMessage = (signerContext) => (deviceId_1, account_1, _a) => __awaiter(void 0, [deviceId_1, account_1, _a], void 0, function* (deviceId, account, { message }) {
|
|
15
|
+
if (typeof message !== "string")
|
|
16
|
+
throw new Error("Invalid message value");
|
|
17
|
+
const parsedMessage = JSON.parse(message);
|
|
18
|
+
const ledgerPath = (0, utils_1.getLedgerTonPath)(account.freshAddressPath);
|
|
19
|
+
const sig = yield signerContext(deviceId, signer => signer.signTransaction(ledgerPath, parsedMessage));
|
|
20
|
+
if (!sig) {
|
|
21
|
+
throw new Error("No signature");
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
rsv: {
|
|
25
|
+
r: "",
|
|
26
|
+
s: "",
|
|
27
|
+
v: 0,
|
|
28
|
+
},
|
|
29
|
+
signature: sig.toString(),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
exports.signMessage = signMessage;
|
|
33
|
+
//# sourceMappingURL=hw-signMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hw-signMessage.js","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,mCAA2C;AAEpC,MAAM,WAAW,GACtB,CAAC,aAAuC,EAAE,EAAE,CAC5C,4BAAoE,EAAE,mEAA/D,QAAgB,EAAE,OAAgB,EAAE,EAAE,OAAO,EAAc;IAChE,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAE1E,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE9D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CACjD,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,aAA+B,CAAC,CACpE,CAAC;IAEF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,CAAC;SACL;QACD,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE;KAC1B,CAAC;AACJ,CAAC,CAAA,CAAC;AAxBS,QAAA,WAAW,eAwBpB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Account, AccountBridge } from "@ledgerhq/types-live";
|
|
2
|
+
import type { Transaction } from "./types";
|
|
3
|
+
declare const prepareTransaction: AccountBridge<Transaction, Account>["prepareTransaction"];
|
|
4
|
+
export default prepareTransaction;
|
|
5
|
+
//# sourceMappingURL=prepareTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,QAAA,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,oBAAoB,CAkBjF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const jsHelpers_1 = require("@ledgerhq/coin-framework/bridge/jsHelpers");
|
|
13
|
+
const api_1 = require("./bridge/bridgeHelpers/api");
|
|
14
|
+
const utils_1 = require("./utils");
|
|
15
|
+
const prepareTransaction = (account, transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const accountInfo = yield (0, api_1.fetchAccountInfo)(account.freshAddress);
|
|
17
|
+
const simpleTx = (0, utils_1.buildTonTransaction)(transaction, accountInfo.seqno);
|
|
18
|
+
const fees = yield (0, utils_1.getTonEstimatedFees)(account, accountInfo.status === "uninit", simpleTx);
|
|
19
|
+
let amount;
|
|
20
|
+
if (transaction.useAllAmount) {
|
|
21
|
+
amount = account.spendableBalance.minus(fees);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
amount = transaction.amount;
|
|
25
|
+
}
|
|
26
|
+
return (0, jsHelpers_1.defaultUpdateTransaction)(transaction, { fees, amount });
|
|
27
|
+
});
|
|
28
|
+
exports.default = prepareTransaction;
|
|
29
|
+
//# sourceMappingURL=prepareTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,yEAAqF;AAErF,oDAA8D;AAE9D,mCAAmE;AAEnE,MAAM,kBAAkB,GAA8D,CACpF,OAAgB,EAChB,WAAwB,EACF,EAAE;IACxB,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAgB,EAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,IAAA,2BAAmB,EAAC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,IAAA,2BAAmB,EAAC,OAAO,EAAE,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE3F,IAAI,MAAM,CAAC;IACX,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;QAC7B,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,OAAO,IAAA,oCAAwB,EAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACjE,CAAC,CAAA,CAAC;AAEF,kBAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SignerContext } from "@ledgerhq/coin-framework/signer";
|
|
2
|
+
import type { Account, AccountBridge } from "@ledgerhq/types-live";
|
|
3
|
+
import type { TonSigner } from "./signer";
|
|
4
|
+
import type { TonOperation, Transaction } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* Sign Transaction with Ledger hardware
|
|
7
|
+
*/
|
|
8
|
+
export declare const buildSignOperation: (signerContext: SignerContext<TonSigner>) => AccountBridge<Transaction>["signOperation"];
|
|
9
|
+
export declare const buildOptimisticOperation: (account: Account, transaction: Transaction) => TonOperation;
|
|
10
|
+
export default buildSignOperation;
|
|
11
|
+
//# sourceMappingURL=signOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAgC,MAAM,sBAAsB,CAAC;AAKjG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAW,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkBlE;;GAEG;AACH,eAAO,MAAM,kBAAkB,kBACb,cAAc,SAAS,CAAC,KAAG,cAAc,WAAW,CAAC,CAAC,eAAe,CAsDjF,CAAC;AAEP,eAAO,MAAM,wBAAwB,YAC1B,OAAO,eACH,WAAW,KACvB,YAwBF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.buildOptimisticOperation = exports.buildSignOperation = void 0;
|
|
13
|
+
const core_1 = require("@ton/core");
|
|
14
|
+
const ton_1 = require("@ton/ton");
|
|
15
|
+
const rxjs_1 = require("rxjs");
|
|
16
|
+
const api_1 = require("./bridge/bridgeHelpers/api");
|
|
17
|
+
const utils_1 = require("./utils");
|
|
18
|
+
const packTransaction = (account, needsInit, signature) => {
|
|
19
|
+
var _a;
|
|
20
|
+
const { address } = core_1.Address.parseFriendly(account.freshAddress);
|
|
21
|
+
let init = null;
|
|
22
|
+
if (needsInit) {
|
|
23
|
+
if (((_a = account.xpub) === null || _a === void 0 ? void 0 : _a.length) !== 64)
|
|
24
|
+
throw Error("[ton] xpub can't be found");
|
|
25
|
+
const wallet = ton_1.WalletContractV4.create({
|
|
26
|
+
workchain: 0,
|
|
27
|
+
publicKey: Buffer.from(account.xpub, "hex"),
|
|
28
|
+
});
|
|
29
|
+
init = wallet.init;
|
|
30
|
+
}
|
|
31
|
+
const ext = (0, core_1.external)({ to: address, init, body: signature });
|
|
32
|
+
return (0, core_1.beginCell)().store((0, core_1.storeMessage)(ext)).endCell().toBoc().toString("base64");
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Sign Transaction with Ledger hardware
|
|
36
|
+
*/
|
|
37
|
+
const buildSignOperation = (signerContext) => ({ account, transaction, deviceId, }) => new rxjs_1.Observable(o => {
|
|
38
|
+
let cancelled = false;
|
|
39
|
+
function main() {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const address = account.freshAddress;
|
|
42
|
+
const accountInfo = yield (0, api_1.fetchAccountInfo)(address);
|
|
43
|
+
const tonTx = (0, utils_1.buildTonTransaction)(transaction, accountInfo.seqno);
|
|
44
|
+
const ledgerPath = (0, utils_1.getLedgerTonPath)(account.freshAddressPath);
|
|
45
|
+
o.next({ type: "device-signature-requested" });
|
|
46
|
+
const sig = yield signerContext(deviceId, signer => signer.signTransaction(ledgerPath, tonTx));
|
|
47
|
+
if (cancelled)
|
|
48
|
+
return;
|
|
49
|
+
o.next({ type: "device-signature-granted" });
|
|
50
|
+
if (!sig) {
|
|
51
|
+
throw new Error("No signature");
|
|
52
|
+
}
|
|
53
|
+
const signature = packTransaction(account, accountInfo.status === "uninit", sig);
|
|
54
|
+
const operation = (0, exports.buildOptimisticOperation)(account, transaction);
|
|
55
|
+
o.next({
|
|
56
|
+
type: "signed",
|
|
57
|
+
signedOperation: {
|
|
58
|
+
operation,
|
|
59
|
+
signature,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
main().then(() => o.complete(), e => o.error(e));
|
|
65
|
+
return () => {
|
|
66
|
+
cancelled = true;
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
exports.buildSignOperation = buildSignOperation;
|
|
70
|
+
const buildOptimisticOperation = (account, transaction) => {
|
|
71
|
+
const { recipient, amount, fees, comment } = transaction;
|
|
72
|
+
const { id: accountId } = account;
|
|
73
|
+
const op = {
|
|
74
|
+
id: "",
|
|
75
|
+
hash: "",
|
|
76
|
+
type: "OUT",
|
|
77
|
+
senders: [account.freshAddress],
|
|
78
|
+
recipients: [recipient],
|
|
79
|
+
accountId,
|
|
80
|
+
value: amount.plus(fees),
|
|
81
|
+
fee: fees,
|
|
82
|
+
blockHash: null,
|
|
83
|
+
blockHeight: null,
|
|
84
|
+
date: new Date(),
|
|
85
|
+
extra: {
|
|
86
|
+
// we don't know yet, will be patched in final operation
|
|
87
|
+
lt: "",
|
|
88
|
+
explorerHash: "",
|
|
89
|
+
comment: comment,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
return op;
|
|
93
|
+
};
|
|
94
|
+
exports.buildOptimisticOperation = buildOptimisticOperation;
|
|
95
|
+
exports.default = exports.buildSignOperation;
|
|
96
|
+
//# sourceMappingURL=signOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
|
package/lib/signer.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { TonCell, TonTransaction } from "./types";
|
|
3
|
+
export type TonAddress = {
|
|
4
|
+
publicKey: Buffer;
|
|
5
|
+
address: string;
|
|
6
|
+
};
|
|
7
|
+
export type TonSignature = TonCell | undefined;
|
|
8
|
+
export interface TonSigner {
|
|
9
|
+
getAddress(path: number[], opts?: {
|
|
10
|
+
testOnly?: boolean;
|
|
11
|
+
bounceable?: boolean;
|
|
12
|
+
chain?: number;
|
|
13
|
+
}): Promise<{
|
|
14
|
+
address: string;
|
|
15
|
+
publicKey: Buffer;
|
|
16
|
+
}>;
|
|
17
|
+
validateAddress(path: number[], opts?: {
|
|
18
|
+
testOnly?: boolean;
|
|
19
|
+
bounceable?: boolean;
|
|
20
|
+
chain?: number;
|
|
21
|
+
}): Promise<{
|
|
22
|
+
address: string;
|
|
23
|
+
publicKey: Buffer;
|
|
24
|
+
}>;
|
|
25
|
+
signTransaction: (path: number[], transaction: TonTransaction) => Promise<TonCell>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AAC/C,MAAM,WAAW,SAAS;IACxB,UAAU,CACR,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,eAAe,CACb,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF"}
|
package/lib/signer.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":""}
|
package/lib/specs.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AppSpec, TransactionDestinationTestInput } from "@ledgerhq/coin-framework/bot/types";
|
|
2
|
+
import { Transaction } from "./types";
|
|
3
|
+
export declare const testDestination: <T>({ destination, destinationBeforeTransaction, sendingOperation, }: TransactionDestinationTestInput<T>) => void;
|
|
4
|
+
declare const _default: {
|
|
5
|
+
tonSpecs: AppSpec<Transaction>;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=specs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AAOnG,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,eAAO,MAAM,eAAe,wEAIzB,gCAAgC,CAAC,CAAC,KAAG,IAoBvC,CAAC;;;;AAmFF,wBAEE"}
|
package/lib/specs.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
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.testDestination = void 0;
|
|
7
|
+
const specs_1 = require("@ledgerhq/coin-framework/bot/specs");
|
|
8
|
+
const cryptoassets_1 = require("@ledgerhq/cryptoassets");
|
|
9
|
+
const devices_1 = require("@ledgerhq/devices");
|
|
10
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
11
|
+
const expect_1 = __importDefault(require("expect"));
|
|
12
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
13
|
+
const speculos_deviceActions_1 = require("./speculos-deviceActions");
|
|
14
|
+
const MIN_SAFE = new bignumber_js_1.default(1.5e7); // approx two txs' fees (0.015 TON)
|
|
15
|
+
const testDestination = ({ destination, destinationBeforeTransaction, sendingOperation, }) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const amount = sendingOperation.value.minus(sendingOperation.fee);
|
|
18
|
+
const inOp = destination.operations.find(op => op.hash === sendingOperation.hash && op.type === "IN");
|
|
19
|
+
const inFees = (_a = inOp === null || inOp === void 0 ? void 0 : inOp.fee) !== null && _a !== void 0 ? _a : (0, bignumber_js_1.default)(0);
|
|
20
|
+
(0, specs_1.botTest)("account balance increased with transaction amount", () => (0, expect_1.default)(destination.balance.toString()).toBe(destinationBeforeTransaction.balance.plus(amount).minus(inFees).toString()));
|
|
21
|
+
(0, specs_1.botTest)("operation amount is consistent with sendingOperation", () => {
|
|
22
|
+
var _a;
|
|
23
|
+
return (0, expect_1.default)({
|
|
24
|
+
type: inOp === null || inOp === void 0 ? void 0 : inOp.type,
|
|
25
|
+
amount: (_a = inOp === null || inOp === void 0 ? void 0 : inOp.value) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
26
|
+
}).toMatchObject({
|
|
27
|
+
type: "IN",
|
|
28
|
+
amount: amount.toString(),
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
exports.testDestination = testDestination;
|
|
33
|
+
const tonSpecs = {
|
|
34
|
+
name: "TON",
|
|
35
|
+
currency: (0, cryptoassets_1.getCryptoCurrencyById)("ton"),
|
|
36
|
+
appQuery: {
|
|
37
|
+
model: devices_1.DeviceModelId.nanoS,
|
|
38
|
+
appName: "TON",
|
|
39
|
+
},
|
|
40
|
+
genericDeviceAction: speculos_deviceActions_1.acceptTransaction,
|
|
41
|
+
testTimeout: 6 * 60 * 1000,
|
|
42
|
+
minViableAmount: MIN_SAFE,
|
|
43
|
+
transactionCheck: ({ maxSpendable }) => {
|
|
44
|
+
(0, invariant_1.default)(maxSpendable.gt(MIN_SAFE), "balance is too low");
|
|
45
|
+
},
|
|
46
|
+
mutations: [
|
|
47
|
+
{
|
|
48
|
+
name: "Send ~50%",
|
|
49
|
+
maxRun: 1,
|
|
50
|
+
testDestination: exports.testDestination,
|
|
51
|
+
transaction: ({ account, siblings, bridge, maxSpendable }) => {
|
|
52
|
+
(0, invariant_1.default)(maxSpendable.gt(MIN_SAFE), "balance is too low");
|
|
53
|
+
const updates = [
|
|
54
|
+
{ recipient: (0, specs_1.pickSiblings)(siblings).freshAddress },
|
|
55
|
+
{ amount: maxSpendable.div(2).integerValue() },
|
|
56
|
+
];
|
|
57
|
+
if (Math.random() < 0.5)
|
|
58
|
+
updates.push({ comment: { isEncrypted: false, text: "LL Bot" } });
|
|
59
|
+
return {
|
|
60
|
+
transaction: bridge.createTransaction(account),
|
|
61
|
+
updates,
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
test: ({ accountBeforeTransaction, operation, account, transaction }) => {
|
|
65
|
+
// we don't know the exact amount in fees, so we accept +- 20% of expected fees
|
|
66
|
+
const baseAmount = accountBeforeTransaction.balance.minus(transaction.amount);
|
|
67
|
+
const maxBalance = baseAmount.minus(transaction.fees.multipliedBy(0.8).integerValue());
|
|
68
|
+
const minBalance = baseAmount.minus(transaction.fees.multipliedBy(1.2).integerValue());
|
|
69
|
+
(0, specs_1.botTest)("account spendable balance decreased with operation", () => {
|
|
70
|
+
(0, expect_1.default)(account.spendableBalance.lte(maxBalance)).toBe(true);
|
|
71
|
+
(0, expect_1.default)(account.spendableBalance.gte(minBalance)).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
(0, specs_1.botTest)("operation comment", () => (0, expect_1.default)(operation.extra).toMatchObject({
|
|
74
|
+
comment: transaction.comment,
|
|
75
|
+
}));
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "Transfer Max",
|
|
80
|
+
maxRun: 1,
|
|
81
|
+
transaction: ({ account, siblings, bridge }) => {
|
|
82
|
+
const updates = [
|
|
83
|
+
{ recipient: (0, specs_1.pickSiblings)(siblings).freshAddress },
|
|
84
|
+
{ useAllAmount: true },
|
|
85
|
+
];
|
|
86
|
+
if (Math.random() < 0.5)
|
|
87
|
+
updates.push({ comment: { isEncrypted: false, text: "LL Bot" } });
|
|
88
|
+
return {
|
|
89
|
+
transaction: bridge.createTransaction(account),
|
|
90
|
+
updates,
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
testDestination: exports.testDestination,
|
|
94
|
+
test: ({ account, transaction, operation }) => {
|
|
95
|
+
(0, specs_1.botTest)("account spendable balance is zero", () => (0, expect_1.default)(account.spendableBalance.toFixed()).toBe("0"));
|
|
96
|
+
(0, specs_1.botTest)("operation comment", () => (0, expect_1.default)(operation.extra).toMatchObject({
|
|
97
|
+
comment: transaction.comment,
|
|
98
|
+
}));
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
};
|
|
103
|
+
exports.default = {
|
|
104
|
+
tonSpecs,
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=specs.js.map
|
package/lib/specs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speculos-deviceActions.d.ts","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CA6B1E,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.acceptTransaction = void 0;
|
|
4
|
+
const specs_1 = require("@ledgerhq/coin-framework/bot/specs");
|
|
5
|
+
exports.acceptTransaction = (0, specs_1.deviceActionFlow)({
|
|
6
|
+
steps: [
|
|
7
|
+
{
|
|
8
|
+
title: "Review",
|
|
9
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
title: "To",
|
|
13
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
14
|
+
expectedValue: ({ transaction }) => transaction.recipient,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
title: "Amount",
|
|
18
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
19
|
+
expectedValue: ({ account, transaction }) => transaction.useAllAmount
|
|
20
|
+
? "ALL YOUR TONs"
|
|
21
|
+
: (0, specs_1.formatDeviceAmount)(account.currency, transaction.amount),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
title: "Comment",
|
|
25
|
+
button: specs_1.SpeculosButton.RIGHT,
|
|
26
|
+
expectedValue: ({ transaction }) => transaction.comment.text,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
title: "Approve",
|
|
30
|
+
button: specs_1.SpeculosButton.BOTH,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=speculos-deviceActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speculos-deviceActions.js","sourceRoot":"","sources":["../src/speculos-deviceActions.ts"],"names":[],"mappings":";;;AAAA,8DAI4C;AAI/B,QAAA,iBAAiB,GAAkD,IAAA,wBAAgB,EAAC;IAC/F,KAAK,EAAE;QACL;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,KAAK;SAC7B;QACD;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;SAC1D;QACD;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAC1C,WAAW,CAAC,YAAY;gBACtB,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,IAAA,0BAAkB,EAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC;SAC/D;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,KAAK;YAC5B,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI;SAC7D;QACD;YACE,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,sBAAc,CAAC,IAAI;SAC5B;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { GetAccountShape } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
2
|
+
import { Account } from "@ledgerhq/types-live";
|
|
3
|
+
export declare const getAccountShape: GetAccountShape<Account>;
|
|
4
|
+
export declare const sync: (initialAccount: Account, syncConfig: import("@ledgerhq/types-live").SyncConfig) => import("rxjs").Observable<(arg0: Account) => Account>;
|
|
5
|
+
//# sourceMappingURL=synchronisation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../src/synchronisation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAsB,MAAM,2CAA2C,CAAC;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAQ/C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,OAAO,CAiDpD,CAAC;AA8BF,eAAO,MAAM,IAAI,2IAA0C,CAAC"}
|