@ledgerhq/coin-ton 0.5.2 → 0.5.3
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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +14 -0
- package/lib/__tests__/fixtures/api.fixtures.d.ts +1 -1
- package/lib/__tests__/fixtures/api.fixtures.d.ts.map +1 -1
- package/lib/__tests__/fixtures/common.fixtures.js +4 -1
- package/lib/__tests__/fixtures/common.fixtures.js.map +1 -1
- package/lib/__tests__/integration/bridge.integration.test.js +2 -3
- package/lib/__tests__/integration/bridge.integration.test.js.map +1 -1
- package/lib/__tests__/unit/api.unit.test.js +18 -27
- package/lib/__tests__/unit/api.unit.test.js.map +1 -1
- package/lib/__tests__/unit/broadcast.unit.test.js +10 -13
- package/lib/__tests__/unit/broadcast.unit.test.js.map +1 -1
- package/lib/__tests__/unit/createTransaction.unit.test.js +2 -11
- package/lib/__tests__/unit/createTransaction.unit.test.js.map +1 -1
- package/lib/__tests__/unit/deviceTransactionConfig.unit.test.js +19 -22
- package/lib/__tests__/unit/deviceTransactionConfig.unit.test.js.map +1 -1
- package/lib/__tests__/unit/estimateMaxSpendable.unit.test.js +6 -15
- package/lib/__tests__/unit/estimateMaxSpendable.unit.test.js.map +1 -1
- package/lib/__tests__/unit/getTransactionStatus.unit.test.js +58 -48
- package/lib/__tests__/unit/getTransactionStatus.unit.test.js.map +1 -1
- package/lib/__tests__/unit/hw-getAddress.unit.test.js +12 -25
- package/lib/__tests__/unit/hw-getAddress.unit.test.js.map +1 -1
- package/lib/__tests__/unit/prepareTransaction.unit.test.js +46 -34
- package/lib/__tests__/unit/prepareTransaction.unit.test.js.map +1 -1
- package/lib/__tests__/unit/signOperation.unit.test.js +11 -22
- package/lib/__tests__/unit/signOperation.unit.test.js.map +1 -1
- package/lib/__tests__/unit/txn.unit.test.js +32 -39
- package/lib/__tests__/unit/txn.unit.test.js.map +1 -1
- package/lib/__tests__/unit/utils.unit.test.js +22 -8
- package/lib/__tests__/unit/utils.unit.test.js.map +1 -1
- package/lib/bridge/bridgeHelpers/api.js +65 -88
- package/lib/bridge/bridgeHelpers/api.js.map +1 -1
- package/lib/bridge/bridgeHelpers/txn.js +52 -66
- package/lib/bridge/bridgeHelpers/txn.js.map +1 -1
- package/lib/bridge/js.js +1 -10
- package/lib/bridge/js.js.map +1 -1
- package/lib/broadcast.js +3 -12
- package/lib/broadcast.js.map +1 -1
- package/lib/cli-transaction.js +6 -1
- package/lib/cli-transaction.js.map +1 -1
- package/lib/config.js +1 -1
- package/lib/config.js.map +1 -1
- package/lib/estimateMaxSpendable.js +7 -16
- package/lib/estimateMaxSpendable.js.map +1 -1
- package/lib/getTransactionStatus.js +14 -18
- package/lib/getTransactionStatus.js.map +1 -1
- package/lib/hw-getAddress.js +6 -15
- package/lib/hw-getAddress.js.map +1 -1
- package/lib/hw-signMessage.js +3 -12
- package/lib/hw-signMessage.js.map +1 -1
- package/lib/prepareTransaction.js +5 -15
- package/lib/prepareTransaction.js.map +1 -1
- package/lib/signOperation.js +23 -35
- package/lib/signOperation.js.map +1 -1
- package/lib/specs.js +12 -18
- package/lib/specs.js.map +1 -1
- package/lib/synchronisation.js +46 -55
- package/lib/synchronisation.js.map +1 -1
- package/lib/transaction.js +13 -2
- package/lib/transaction.js.map +1 -1
- package/lib/utils.js +11 -20
- package/lib/utils.js.map +1 -1
- package/lib-es/__tests__/fixtures/api.fixtures.d.ts +1 -1
- package/lib-es/__tests__/fixtures/api.fixtures.d.ts.map +1 -1
- package/lib-es/__tests__/fixtures/common.fixtures.js +4 -1
- package/lib-es/__tests__/fixtures/common.fixtures.js.map +1 -1
- package/lib-es/__tests__/integration/bridge.integration.test.js +2 -3
- package/lib-es/__tests__/integration/bridge.integration.test.js.map +1 -1
- package/lib-es/__tests__/unit/api.unit.test.js +18 -27
- package/lib-es/__tests__/unit/api.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/broadcast.unit.test.js +10 -13
- package/lib-es/__tests__/unit/broadcast.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/createTransaction.unit.test.js +2 -11
- package/lib-es/__tests__/unit/createTransaction.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/deviceTransactionConfig.unit.test.js +19 -22
- package/lib-es/__tests__/unit/deviceTransactionConfig.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/estimateMaxSpendable.unit.test.js +6 -15
- package/lib-es/__tests__/unit/estimateMaxSpendable.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/getTransactionStatus.unit.test.js +58 -48
- package/lib-es/__tests__/unit/getTransactionStatus.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/hw-getAddress.unit.test.js +12 -25
- package/lib-es/__tests__/unit/hw-getAddress.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/prepareTransaction.unit.test.js +46 -34
- package/lib-es/__tests__/unit/prepareTransaction.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/signOperation.unit.test.js +11 -22
- package/lib-es/__tests__/unit/signOperation.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/txn.unit.test.js +32 -39
- package/lib-es/__tests__/unit/txn.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/utils.unit.test.js +22 -8
- package/lib-es/__tests__/unit/utils.unit.test.js.map +1 -1
- package/lib-es/bridge/bridgeHelpers/api.js +65 -88
- package/lib-es/bridge/bridgeHelpers/api.js.map +1 -1
- package/lib-es/bridge/bridgeHelpers/txn.js +52 -66
- package/lib-es/bridge/bridgeHelpers/txn.js.map +1 -1
- package/lib-es/bridge/js.js +1 -10
- package/lib-es/bridge/js.js.map +1 -1
- package/lib-es/broadcast.js +3 -12
- package/lib-es/broadcast.js.map +1 -1
- package/lib-es/cli-transaction.js +6 -1
- package/lib-es/cli-transaction.js.map +1 -1
- package/lib-es/config.js +1 -1
- package/lib-es/config.js.map +1 -1
- package/lib-es/estimateMaxSpendable.js +7 -16
- package/lib-es/estimateMaxSpendable.js.map +1 -1
- package/lib-es/getTransactionStatus.js +14 -18
- package/lib-es/getTransactionStatus.js.map +1 -1
- package/lib-es/hw-getAddress.js +6 -15
- package/lib-es/hw-getAddress.js.map +1 -1
- package/lib-es/hw-signMessage.js +3 -12
- package/lib-es/hw-signMessage.js.map +1 -1
- package/lib-es/prepareTransaction.js +5 -15
- package/lib-es/prepareTransaction.js.map +1 -1
- package/lib-es/signOperation.js +23 -35
- package/lib-es/signOperation.js.map +1 -1
- package/lib-es/specs.js +12 -18
- package/lib-es/specs.js.map +1 -1
- package/lib-es/synchronisation.js +46 -55
- package/lib-es/synchronisation.js.map +1 -1
- package/lib-es/transaction.js +13 -2
- package/lib-es/transaction.js.map +1 -1
- package/lib-es/utils.js +11 -20
- package/lib-es/utils.js.map +1 -1
- package/package.json +4 -4
- package/tsconfig.json +0 -1
package/lib-es/broadcast.js
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { patchOperationWithHash } from "@ledgerhq/coin-framework/operation";
|
|
11
2
|
import { broadcastTx } from "./bridge/bridgeHelpers/api";
|
|
12
|
-
const broadcast =
|
|
13
|
-
const hash =
|
|
3
|
+
const broadcast = async ({ signedOperation: { signature, operation }, }) => {
|
|
4
|
+
const hash = await broadcastTx(signature);
|
|
14
5
|
return patchOperationWithHash(operation, hash);
|
|
15
|
-
}
|
|
6
|
+
};
|
|
16
7
|
export default broadcast;
|
|
17
8
|
//# sourceMappingURL=broadcast.js.map
|
package/lib-es/broadcast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../src/broadcast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../src/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,MAAM,SAAS,GAA4C,KAAK,EAAE,EAChE,eAAe,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAC1C,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1C,OAAO,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -8,7 +8,12 @@ function inferTransactions(transactions, opts) {
|
|
|
8
8
|
const isDelisted = account.token.delisted === true;
|
|
9
9
|
invariant(!isDelisted, "token is delisted");
|
|
10
10
|
}
|
|
11
|
-
return
|
|
11
|
+
return {
|
|
12
|
+
...transaction,
|
|
13
|
+
family: "ton",
|
|
14
|
+
mode: opts.mode || "send",
|
|
15
|
+
subAccountId: isTokenAccount ? account.id : null,
|
|
16
|
+
};
|
|
12
17
|
});
|
|
13
18
|
}
|
|
14
19
|
export default function makeCliTools() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-transaction.js","sourceRoot":"","sources":["../src/cli-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAKrC,SAAS,iBAAiB,CACxB,YAGE,EACF,IAA4B;IAE5B,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QACxD,SAAS,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE,YAAY,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC;QAEvD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;YACnD,SAAS,CAAC,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,
|
|
1
|
+
{"version":3,"file":"cli-transaction.js","sourceRoot":"","sources":["../src/cli-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAKrC,SAAS,iBAAiB,CACxB,YAGE,EACF,IAA4B;IAE5B,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QACxD,SAAS,CAAC,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE,YAAY,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC;QAEvD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;YACnD,SAAS,CAAC,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO;YACL,GAAG,WAAW;YACd,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;YACzB,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;SAClC,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,YAAY;IAClC,OAAO;QACL,OAAO,EAAE,EAAE;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
package/lib-es/config.js
CHANGED
|
@@ -3,7 +3,7 @@ export const setCoinConfig = (config) => {
|
|
|
3
3
|
coinConfig = config;
|
|
4
4
|
};
|
|
5
5
|
export const getCoinConfig = () => {
|
|
6
|
-
if (!
|
|
6
|
+
if (!coinConfig?.()) {
|
|
7
7
|
throw new Error("Ton module config not set");
|
|
8
8
|
}
|
|
9
9
|
return coinConfig();
|
package/lib-es/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,IAAI,UAAqC,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAQ,EAAE;IAC3D,UAAU,GAAG,MAAM,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAA8B,EAAE;IAC3D,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,IAAI,UAAqC,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAQ,EAAE;IAC3D,UAAU,GAAG,MAAM,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAA8B,EAAE;IAC3D,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC,CAAC"}
|
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { findSubAccountById, getMainAccount, isTokenAccount, } from "@ledgerhq/coin-framework/account/index";
|
|
11
2
|
import { BigNumber } from "bignumber.js";
|
|
12
3
|
import { fetchAccountInfo } from "./bridge/bridgeHelpers/api";
|
|
13
4
|
import { buildTonTransaction, getTonEstimatedFees } from "./utils";
|
|
14
|
-
const estimateMaxSpendable =
|
|
15
|
-
var _b, _c;
|
|
5
|
+
const estimateMaxSpendable = async ({ account, parentAccount, transaction, }) => {
|
|
16
6
|
const mainAccount = getMainAccount(account, parentAccount);
|
|
17
7
|
let balance = mainAccount.spendableBalance;
|
|
18
8
|
if (balance.eq(0))
|
|
19
9
|
return balance;
|
|
20
|
-
const accountInfo =
|
|
10
|
+
const accountInfo = await fetchAccountInfo(mainAccount.freshAddress);
|
|
21
11
|
const isTokenType = isTokenAccount(account);
|
|
22
12
|
if (transaction && !transaction.subAccountId) {
|
|
23
13
|
transaction.subAccountId = isTokenType ? account.id : null;
|
|
@@ -28,20 +18,21 @@ const estimateMaxSpendable = (_a) => __awaiter(void 0, [_a], void 0, function* (
|
|
|
28
18
|
tokenAccountTxn = true;
|
|
29
19
|
subAccount = account;
|
|
30
20
|
}
|
|
31
|
-
if (
|
|
21
|
+
if (transaction?.subAccountId && !subAccount) {
|
|
32
22
|
tokenAccountTxn = true;
|
|
33
|
-
subAccount =
|
|
23
|
+
subAccount = findSubAccountById(mainAccount, transaction.subAccountId || "") ?? null;
|
|
34
24
|
}
|
|
35
25
|
if (tokenAccountTxn && subAccount) {
|
|
36
26
|
return subAccount.spendableBalance;
|
|
37
27
|
}
|
|
38
28
|
const estimatedFees = transaction
|
|
39
|
-
?
|
|
29
|
+
? transaction.fees ??
|
|
30
|
+
(await getTonEstimatedFees(mainAccount, accountInfo.status === "uninit", buildTonTransaction(transaction, accountInfo.seqno, mainAccount)))
|
|
40
31
|
: BigNumber(0);
|
|
41
32
|
if (balance.lte(estimatedFees))
|
|
42
33
|
return new BigNumber(0);
|
|
43
34
|
balance = balance.minus(estimatedFees);
|
|
44
35
|
return balance;
|
|
45
|
-
}
|
|
36
|
+
};
|
|
46
37
|
export default estimateMaxSpendable;
|
|
47
38
|
//# sourceMappingURL=estimateMaxSpendable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimateMaxSpendable.js","sourceRoot":"","sources":["../src/estimateMaxSpendable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"estimateMaxSpendable.js","sourceRoot":"","sources":["../src/estimateMaxSpendable.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,oBAAoB,GAAgE,KAAK,EAAE,EAC/F,OAAO,EACP,aAAa,EACb,WAAW,GAKZ,EAAsB,EAAE;IACvB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC3D,IAAI,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAAC;IAE3C,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAElC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC7C,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAED,IAAI,eAAe,GAAY,KAAK,CAAC;IACrC,IAAI,UAA2C,CAAC;IAChD,IAAI,WAAW,EAAE,CAAC;QAChB,eAAe,GAAG,IAAI,CAAC;QACvB,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,WAAW,EAAE,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7C,eAAe,GAAG,IAAI,CAAC;QACvB,UAAU,GAAG,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;IACvF,CAAC;IAED,IAAI,eAAe,IAAI,UAAU,EAAE,CAAC;QAClC,OAAO,UAAU,CAAC,gBAAgB,CAAC;IACrC,CAAC;IAED,MAAM,aAAa,GAAG,WAAW;QAC/B,CAAC,CAAC,WAAW,CAAC,IAAI;YAChB,CAAC,MAAM,mBAAmB,CACxB,WAAW,EACX,WAAW,CAAC,MAAM,KAAK,QAAQ,EAC/B,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CACjE,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IAExD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEvC,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { findSubAccountById, isTokenAccount } from "@ledgerhq/coin-framework/account/index";
|
|
11
2
|
import { AmountRequired, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalance, RecipientRequired, } from "@ledgerhq/errors";
|
|
12
3
|
import { toNano } from "@ton/core";
|
|
@@ -53,16 +44,15 @@ const validateSender = (account) => {
|
|
|
53
44
|
return [errors];
|
|
54
45
|
};
|
|
55
46
|
const validateAmount = (account, transaction, totalSpent) => {
|
|
56
|
-
var _a;
|
|
57
47
|
const errors = {};
|
|
58
48
|
const warnings = {};
|
|
59
|
-
const subAccount = findSubAccountById(account,
|
|
49
|
+
const subAccount = findSubAccountById(account, transaction.subAccountId ?? "");
|
|
60
50
|
const tokenTransfer = Boolean(subAccount && isTokenAccount(subAccount));
|
|
61
51
|
// if no amount or 0
|
|
62
52
|
if (!transaction.amount || transaction.amount.isZero()) {
|
|
63
53
|
errors.amount = new AmountRequired(); // "Amount required"
|
|
64
54
|
}
|
|
65
|
-
else if (totalSpent.isGreaterThan(tokenTransfer && subAccount ? subAccount
|
|
55
|
+
else if (totalSpent.isGreaterThan(tokenTransfer && subAccount ? subAccount?.spendableBalance : account.balance)) {
|
|
66
56
|
// if not enough to make the transaction
|
|
67
57
|
errors.amount = new NotEnoughBalance(); // "Sorry, insufficient funds"
|
|
68
58
|
}
|
|
@@ -91,9 +81,8 @@ const validateComment = (transaction) => {
|
|
|
91
81
|
}
|
|
92
82
|
return [errors];
|
|
93
83
|
};
|
|
94
|
-
export const getTransactionStatus = (account, transaction) =>
|
|
95
|
-
|
|
96
|
-
const subAccount = findSubAccountById(account, (_a = transaction.subAccountId) !== null && _a !== void 0 ? _a : "");
|
|
84
|
+
export const getTransactionStatus = async (account, transaction) => {
|
|
85
|
+
const subAccount = findSubAccountById(account, transaction.subAccountId ?? "");
|
|
97
86
|
const tokenTransfer = Boolean(subAccount && isTokenAccount(subAccount));
|
|
98
87
|
const totalSpent = tokenTransfer ? transaction.amount : transaction.amount.plus(transaction.fees);
|
|
99
88
|
// Recipient related errors and warnings
|
|
@@ -104,8 +93,15 @@ export const getTransactionStatus = (account, transaction) => __awaiter(void 0,
|
|
|
104
93
|
const [amountErr, amountWarn] = validateAmount(account, transaction, totalSpent);
|
|
105
94
|
// Transaction related errors and warnings
|
|
106
95
|
const [transactionErr] = validateComment(transaction);
|
|
107
|
-
const errors =
|
|
108
|
-
|
|
96
|
+
const errors = {
|
|
97
|
+
...recipientErr,
|
|
98
|
+
...senderErr,
|
|
99
|
+
...amountErr,
|
|
100
|
+
...transactionErr,
|
|
101
|
+
};
|
|
102
|
+
const warnings = {
|
|
103
|
+
...amountWarn,
|
|
104
|
+
};
|
|
109
105
|
return {
|
|
110
106
|
amount: transaction.amount,
|
|
111
107
|
errors,
|
|
@@ -113,6 +109,6 @@ export const getTransactionStatus = (account, transaction) => __awaiter(void 0,
|
|
|
113
109
|
estimatedFees: transaction.fees,
|
|
114
110
|
totalSpent,
|
|
115
111
|
};
|
|
116
|
-
}
|
|
112
|
+
};
|
|
117
113
|
export default getTransactionStatus;
|
|
118
114
|
//# sourceMappingURL=getTransactionStatus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../src/getTransactionStatus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../src/getTransactionStatus.ts"],"names":[],"mappings":"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"}
|
package/lib-es/hw-getAddress.js
CHANGED
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { getLedgerTonPath } from "./utils";
|
|
11
2
|
const resolver = (signerContext) => {
|
|
12
|
-
return
|
|
3
|
+
return async (deviceId, { path, verify }) => {
|
|
13
4
|
const ledgerPath = getLedgerTonPath(path);
|
|
14
|
-
const sig =
|
|
5
|
+
const sig = await signerContext(deviceId, async (signer) => {
|
|
15
6
|
return verify
|
|
16
|
-
?
|
|
17
|
-
:
|
|
18
|
-
})
|
|
7
|
+
? await signer.validateAddress(ledgerPath, { bounceable: false })
|
|
8
|
+
: await signer.getAddress(ledgerPath, { bounceable: false });
|
|
9
|
+
});
|
|
19
10
|
if (!sig.address || !sig.publicKey.length)
|
|
20
11
|
throw Error(`[ton] Response is empty ${sig.address} ${sig.publicKey}`);
|
|
21
12
|
return {
|
|
@@ -23,7 +14,7 @@ const resolver = (signerContext) => {
|
|
|
23
14
|
publicKey: sig.publicKey.toString("hex"),
|
|
24
15
|
path,
|
|
25
16
|
};
|
|
26
|
-
}
|
|
17
|
+
};
|
|
27
18
|
};
|
|
28
19
|
export default resolver;
|
|
29
20
|
//# sourceMappingURL=hw-getAddress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hw-getAddress.js","sourceRoot":"","sources":["../src/hw-getAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hw-getAddress.js","sourceRoot":"","sources":["../src/hw-getAddress.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,QAAQ,GAAG,CAAC,aAAuC,EAAgB,EAAE;IACzE,OAAO,KAAK,EAAE,QAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAqB,EAAE,EAAE;QACrE,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAC,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,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,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/lib-es/hw-signMessage.js
CHANGED
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { getLedgerTonPath } from "./utils";
|
|
11
|
-
export const signMessage = (signerContext) =>
|
|
2
|
+
export const signMessage = (signerContext) => async (deviceId, account, { message }) => {
|
|
12
3
|
if (typeof message !== "string")
|
|
13
4
|
throw new Error("Invalid message value");
|
|
14
5
|
const parsedMessage = JSON.parse(message);
|
|
15
6
|
const ledgerPath = getLedgerTonPath(account.freshAddressPath);
|
|
16
|
-
const sig =
|
|
7
|
+
const sig = await signerContext(deviceId, signer => signer.signTransaction(ledgerPath, parsedMessage));
|
|
17
8
|
if (!sig) {
|
|
18
9
|
throw new Error("No signature");
|
|
19
10
|
}
|
|
@@ -25,5 +16,5 @@ export const signMessage = (signerContext) => (deviceId_1, account_1, _a) => __a
|
|
|
25
16
|
},
|
|
26
17
|
signature: sig.toString(),
|
|
27
18
|
};
|
|
28
|
-
}
|
|
19
|
+
};
|
|
29
20
|
//# sourceMappingURL=hw-signMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hw-signMessage.js","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hw-signMessage.js","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GACtB,CAAC,aAAuC,EAAE,EAAE,CAC5C,KAAK,EAAE,QAAgB,EAAE,OAAgB,EAAE,EAAE,OAAO,EAAc,EAAE,EAAE;IACpE,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,gBAAgB,CAAC,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,CAAC"}
|
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { findSubAccountById } from "@ledgerhq/coin-framework/account/index";
|
|
11
2
|
import { updateTransaction } from "@ledgerhq/coin-framework/bridge/jsHelpers";
|
|
12
3
|
import { fetchAccountInfo } from "./bridge/bridgeHelpers/api";
|
|
13
4
|
import { buildTonTransaction, getTonEstimatedFees } from "./utils";
|
|
14
|
-
const prepareTransaction = (account, transaction) =>
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
const subAccount = findSubAccountById(account, (_a = transaction.subAccountId) !== null && _a !== void 0 ? _a : "");
|
|
5
|
+
const prepareTransaction = async (account, transaction) => {
|
|
6
|
+
const accountInfo = await fetchAccountInfo(account.freshAddress);
|
|
7
|
+
const subAccount = findSubAccountById(account, transaction.subAccountId ?? "");
|
|
18
8
|
const simpleTx = buildTonTransaction(transaction, accountInfo.seqno, account);
|
|
19
|
-
const fees =
|
|
9
|
+
const fees = await getTonEstimatedFees(account, accountInfo.status === "uninit", simpleTx);
|
|
20
10
|
let amount;
|
|
21
11
|
if (transaction.useAllAmount) {
|
|
22
12
|
amount = subAccount ? subAccount.spendableBalance : account.spendableBalance.minus(fees);
|
|
@@ -25,6 +15,6 @@ const prepareTransaction = (account, transaction) => __awaiter(void 0, void 0, v
|
|
|
25
15
|
amount = transaction.amount;
|
|
26
16
|
}
|
|
27
17
|
return updateTransaction(transaction, { fees, amount });
|
|
28
|
-
}
|
|
18
|
+
};
|
|
29
19
|
export default prepareTransaction;
|
|
30
20
|
//# sourceMappingURL=prepareTransaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../src/prepareTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,kBAAkB,GAA8D,KAAK,EACzF,OAAgB,EAChB,WAAwB,EACF,EAAE;IACxB,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAE/E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE9E,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,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,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,OAAO,iBAAiB,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
package/lib-es/signOperation.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { findSubAccountById, isTokenAccount } from "@ledgerhq/coin-framework/account/index";
|
|
11
2
|
import { Address, beginCell, external, storeMessage, toNano } from "@ton/core";
|
|
12
3
|
import { WalletContractV4 } from "@ton/ton";
|
|
@@ -16,11 +7,10 @@ import { fetchAccountInfo } from "./bridge/bridgeHelpers/api";
|
|
|
16
7
|
import { TOKEN_TRANSFER_MAX_FEE } from "./constants";
|
|
17
8
|
import { buildTonTransaction, getLedgerTonPath } from "./utils";
|
|
18
9
|
const packTransaction = (account, needsInit, signature) => {
|
|
19
|
-
var _a;
|
|
20
10
|
const { address } = Address.parseFriendly(account.freshAddress);
|
|
21
11
|
let init = null;
|
|
22
12
|
if (needsInit) {
|
|
23
|
-
if (
|
|
13
|
+
if (account.xpub?.length !== 64)
|
|
24
14
|
throw Error("[ton] xpub can't be found");
|
|
25
15
|
const wallet = WalletContractV4.create({
|
|
26
16
|
workchain: 0,
|
|
@@ -36,29 +26,27 @@ const packTransaction = (account, needsInit, signature) => {
|
|
|
36
26
|
*/
|
|
37
27
|
export const buildSignOperation = (signerContext) => ({ account, transaction, deviceId, }) => new Observable(o => {
|
|
38
28
|
let cancelled = false;
|
|
39
|
-
function main() {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
});
|
|
29
|
+
async function main() {
|
|
30
|
+
const address = account.freshAddress;
|
|
31
|
+
const accountInfo = await fetchAccountInfo(address);
|
|
32
|
+
const tonTx = buildTonTransaction(transaction, accountInfo.seqno, account);
|
|
33
|
+
const ledgerPath = getLedgerTonPath(account.freshAddressPath);
|
|
34
|
+
o.next({ type: "device-signature-requested" });
|
|
35
|
+
const sig = await signerContext(deviceId, signer => signer.signTransaction(ledgerPath, tonTx));
|
|
36
|
+
if (cancelled)
|
|
37
|
+
return;
|
|
38
|
+
o.next({ type: "device-signature-granted" });
|
|
39
|
+
if (!sig) {
|
|
40
|
+
throw new Error("No signature");
|
|
41
|
+
}
|
|
42
|
+
const signature = packTransaction(account, accountInfo.status === "uninit", sig);
|
|
43
|
+
const operation = buildOptimisticOperation(account, transaction);
|
|
44
|
+
o.next({
|
|
45
|
+
type: "signed",
|
|
46
|
+
signedOperation: {
|
|
47
|
+
operation,
|
|
48
|
+
signature,
|
|
49
|
+
},
|
|
62
50
|
});
|
|
63
51
|
}
|
|
64
52
|
main().then(() => o.complete(), e => o.error(e));
|
|
@@ -69,7 +57,7 @@ export const buildSignOperation = (signerContext) => ({ account, transaction, de
|
|
|
69
57
|
export const buildOptimisticOperation = (account, transaction) => {
|
|
70
58
|
const { recipient, amount, fees, comment, useAllAmount, subAccountId } = transaction;
|
|
71
59
|
const { id: accountId } = account;
|
|
72
|
-
const subAccount = findSubAccountById(account, subAccountId
|
|
60
|
+
const subAccount = findSubAccountById(account, subAccountId ?? "");
|
|
73
61
|
const tokenTransfer = Boolean(subAccount && isTokenAccount(subAccount));
|
|
74
62
|
const value = tokenTransfer
|
|
75
63
|
? BigNumber(toNano(TOKEN_TRANSFER_MAX_FEE).toString())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
|
package/lib-es/specs.js
CHANGED
|
@@ -8,21 +8,17 @@ import { generateDeviceActionFlow } from "./speculos-deviceActions";
|
|
|
8
8
|
import { BotScenario } from "./utils";
|
|
9
9
|
const MIN_SAFE = new BigNumber(1.5e7); // approx two txs' fees (0.015 TON)
|
|
10
10
|
export const testDestination = ({ destination, destinationBeforeTransaction, sendingOperation, }) => {
|
|
11
|
-
var _a;
|
|
12
11
|
const amount = sendingOperation.value;
|
|
13
12
|
const inOp = destination.operations.find(op => op.hash === sendingOperation.hash && op.type === "IN");
|
|
14
|
-
const inFees =
|
|
13
|
+
const inFees = inOp?.fee ?? BigNumber(0);
|
|
15
14
|
botTest("account balance increased with transaction amount", () => expect(destination.balance.toString()).toBe(destinationBeforeTransaction.balance.plus(amount).minus(inFees).toString()));
|
|
16
|
-
botTest("operation amount is consistent with sendingOperation", () => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
amount: amount.toString(),
|
|
24
|
-
});
|
|
25
|
-
});
|
|
15
|
+
botTest("operation amount is consistent with sendingOperation", () => expect({
|
|
16
|
+
type: inOp?.type,
|
|
17
|
+
amount: inOp?.value?.toString(),
|
|
18
|
+
}).toMatchObject({
|
|
19
|
+
type: "IN",
|
|
20
|
+
amount: amount.toString(),
|
|
21
|
+
}));
|
|
26
22
|
};
|
|
27
23
|
const tonSpecs = {
|
|
28
24
|
name: "TON",
|
|
@@ -98,9 +94,8 @@ const tonSpecs = {
|
|
|
98
94
|
maxRun: 1,
|
|
99
95
|
deviceAction: generateDeviceActionFlow(BotScenario.TOKEN_TRANSFER),
|
|
100
96
|
transaction: ({ account, bridge, maxSpendable, siblings }) => {
|
|
101
|
-
var _a;
|
|
102
97
|
invariant(maxSpendable.gt(0), "Spendable balance is too low");
|
|
103
|
-
const subAccount =
|
|
98
|
+
const subAccount = account.subAccounts?.find(a => a.type === "TokenAccount" && a.spendableBalance.gt(0));
|
|
104
99
|
const recipient = siblings[0].freshAddress;
|
|
105
100
|
invariant(subAccount && subAccount.type === "TokenAccount", "no subAccount with jUSDT");
|
|
106
101
|
const amount = subAccount.balance.div(1.9 + 0.2 * Math.random()).integerValue();
|
|
@@ -123,11 +118,10 @@ const tonSpecs = {
|
|
|
123
118
|
};
|
|
124
119
|
},
|
|
125
120
|
test: ({ account, accountBeforeTransaction, operation, transaction, status }) => {
|
|
126
|
-
var _a, _b;
|
|
127
121
|
const subAccountId = transaction.subAccountId;
|
|
128
|
-
const subAccount =
|
|
129
|
-
const subAccountBeforeTransaction =
|
|
130
|
-
botTest("subAccount balance moved with the tx status amount", () => expect(subAccount
|
|
122
|
+
const subAccount = account.subAccounts?.find(sa => sa.id === subAccountId);
|
|
123
|
+
const subAccountBeforeTransaction = accountBeforeTransaction.subAccounts?.find(sa => sa.id === subAccountId);
|
|
124
|
+
botTest("subAccount balance moved with the tx status amount", () => expect(subAccount?.balance.toString()).toBe(subAccountBeforeTransaction?.balance.minus(status.amount).toString()));
|
|
131
125
|
botTest("operation comment", () => expect(operation.extra).toMatchObject({
|
|
132
126
|
comment: transaction.comment,
|
|
133
127
|
}));
|
package/lib-es/specs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,mCAAmC;AAE1E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,EACjC,WAAW,EACX,4BAA4B,EAC5B,gBAAgB,GACmB,EAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../src/specs.ts"],"names":[],"mappings":"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"}
|