@ledgerhq/coin-hedera 1.11.2 → 1.12.0-nightly.1
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 +1 -1
- package/CHANGELOG.md +22 -0
- package/lib/api/network.d.ts.map +1 -1
- package/lib/api/network.js +18 -9
- package/lib/api/network.js.map +1 -1
- package/lib/api/network.test.d.ts +2 -0
- package/lib/api/network.test.d.ts.map +1 -0
- package/lib/api/network.test.js +45 -0
- package/lib/api/network.test.js.map +1 -0
- package/lib/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib/bridge/prepareTransaction.js +23 -1
- package/lib/bridge/prepareTransaction.js.map +1 -1
- package/lib/bridge/prepareTransaction.test.d.ts +2 -0
- package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
- package/lib/bridge/prepareTransaction.test.js +58 -0
- package/lib/bridge/prepareTransaction.test.js.map +1 -0
- package/lib/bridge/synchronisation.d.ts.map +1 -1
- package/lib/bridge/synchronisation.js +3 -2
- package/lib/bridge/synchronisation.js.map +1 -1
- package/lib/transaction.d.ts.map +1 -1
- package/lib/transaction.js +6 -0
- package/lib/transaction.js.map +1 -1
- package/lib/types/bridge.d.ts +4 -1
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib-es/api/network.d.ts.map +1 -1
- package/lib-es/api/network.js +18 -9
- package/lib-es/api/network.js.map +1 -1
- package/lib-es/api/network.test.d.ts +2 -0
- package/lib-es/api/network.test.d.ts.map +1 -0
- package/lib-es/api/network.test.js +40 -0
- package/lib-es/api/network.test.js.map +1 -0
- package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
- package/lib-es/bridge/prepareTransaction.js +24 -2
- package/lib-es/bridge/prepareTransaction.js.map +1 -1
- package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
- package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
- package/lib-es/bridge/prepareTransaction.test.js +30 -0
- package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
- package/lib-es/bridge/synchronisation.d.ts.map +1 -1
- package/lib-es/bridge/synchronisation.js +3 -2
- package/lib-es/bridge/synchronisation.js.map +1 -1
- package/lib-es/transaction.d.ts.map +1 -1
- package/lib-es/transaction.js +3 -0
- package/lib-es/transaction.js.map +1 -1
- package/lib-es/types/bridge.d.ts +4 -1
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/api/network.test.ts +49 -0
- package/src/api/network.ts +24 -9
- package/src/bridge/prepareTransaction.test.ts +38 -0
- package/src/bridge/prepareTransaction.ts +26 -2
- package/src/bridge/synchronisation.ts +4 -2
- package/src/transaction.ts +3 -0
- package/src/types/bridge.ts +4 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @ledgerhq/coin-hedera@1.11.
|
|
2
|
+
> @ledgerhq/coin-hedera@1.11.3-nightly.0 build /home/runner/work/ledger-live/ledger-live/libs/coin-modules/coin-hedera
|
|
3
3
|
> tsc --outDir lib --module commonjs --moduleResolution node10 && tsc -m ES6 --outDir lib-es
|
|
4
4
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @ledgerhq/coin-hedera
|
|
2
2
|
|
|
3
|
+
## 1.12.0-nightly.1
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#10972](https://github.com/LedgerHQ/ledger-live/pull/10972) [`f077f72`](https://github.com/LedgerHQ/ledger-live/commit/f077f7205667f4f7b82ae7584e80964c5ac7601a) Thanks [@scavassa-yld](https://github.com/scavassa-yld)! - support for Hedera swaps
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`3979c07`](https://github.com/LedgerHQ/ledger-live/commit/3979c0715e4f54165c89d00ebe1441e064e1a110)]:
|
|
12
|
+
- @ledgerhq/coin-framework@6.6.0-nightly.1
|
|
13
|
+
- @ledgerhq/live-countervalues@0.7.3-nightly.1
|
|
14
|
+
|
|
15
|
+
## 1.11.3-nightly.0
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [[`e04d493`](https://github.com/LedgerHQ/ledger-live/commit/e04d49340c65c8b4608a37bb726d21350fdd32f1), [`4d60b7e`](https://github.com/LedgerHQ/ledger-live/commit/4d60b7e0984f0f8ef75c1483e0cfaf5784fbc5ed), [`e3b568d`](https://github.com/LedgerHQ/ledger-live/commit/e3b568d2cbeee6dcf19a7047ce9fa11a04b0ae2a), [`0d368f0`](https://github.com/LedgerHQ/ledger-live/commit/0d368f0e682b3bd3daafa6af5b396648a95b1488), [`fe1abf6`](https://github.com/LedgerHQ/ledger-live/commit/fe1abf640cc1a30b2e78bf7aa4a12e983a068f2e)]:
|
|
20
|
+
- @ledgerhq/types-live@6.86.0-nightly.0
|
|
21
|
+
- @ledgerhq/cryptoassets@13.30.0-nightly.0
|
|
22
|
+
- @ledgerhq/coin-framework@6.6.0-nightly.0
|
|
23
|
+
- @ledgerhq/live-countervalues@0.7.3-nightly.0
|
|
24
|
+
|
|
3
25
|
## 1.11.2
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
package/lib/api/network.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAEL,mBAAmB,EAMnB,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEjG;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAEL,mBAAmB,EAMnB,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEjG;AAgFD,wBAAsB,wBAAwB,CAAC,EAC7C,OAAO,EACP,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CAC1B,GAAG,OAAO,CAAC,mBAAmB,GAAG,yBAAyB,CAAC,CAW3D;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAehF"}
|
package/lib/api/network.js
CHANGED
|
@@ -18,35 +18,44 @@ const nodeAccountIds = [new sdk_1.AccountId(3)];
|
|
|
18
18
|
async function buildUnsignedCoinTransaction({ account, transaction, }) {
|
|
19
19
|
const accountId = account.freshAddress;
|
|
20
20
|
const hbarAmount = sdk_1.Hbar.fromTinybars(transaction.amount);
|
|
21
|
-
|
|
21
|
+
const tx = new sdk_1.TransferTransaction()
|
|
22
22
|
.setNodeAccountIds(nodeAccountIds)
|
|
23
23
|
.setTransactionId(sdk_1.TransactionId.generate(accountId))
|
|
24
24
|
.setTransactionMemo(transaction.memo ?? "")
|
|
25
25
|
.addHbarTransfer(accountId, hbarAmount.negated())
|
|
26
|
-
.addHbarTransfer(transaction.recipient, hbarAmount)
|
|
27
|
-
|
|
26
|
+
.addHbarTransfer(transaction.recipient, hbarAmount);
|
|
27
|
+
if (transaction.maxFee) {
|
|
28
|
+
tx.setMaxTransactionFee(sdk_1.Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
29
|
+
}
|
|
30
|
+
return tx.freeze();
|
|
28
31
|
}
|
|
29
32
|
async function buildUnsignedTokenTransaction({ account, tokenAccount, transaction, }) {
|
|
30
33
|
const accountId = account.freshAddress;
|
|
31
34
|
const tokenId = tokenAccount.token.contractAddress;
|
|
32
|
-
|
|
35
|
+
const tx = new sdk_1.TransferTransaction()
|
|
33
36
|
.setNodeAccountIds(nodeAccountIds)
|
|
34
37
|
.setTransactionId(sdk_1.TransactionId.generate(accountId))
|
|
35
38
|
.setTransactionMemo(transaction.memo ?? "")
|
|
36
39
|
.addTokenTransfer(tokenId, accountId, transaction.amount.negated().toNumber())
|
|
37
|
-
.addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber())
|
|
38
|
-
|
|
40
|
+
.addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber());
|
|
41
|
+
if (transaction.maxFee) {
|
|
42
|
+
tx.setMaxTransactionFee(sdk_1.Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
43
|
+
}
|
|
44
|
+
return tx.freeze();
|
|
39
45
|
}
|
|
40
46
|
async function buildTokenAssociateTransaction({ account, transaction, }) {
|
|
41
47
|
(0, invariant_1.default)((0, logic_1.isTokenAssociateTransaction)(transaction), "invalid transaction properties");
|
|
42
48
|
const accountId = account.freshAddress;
|
|
43
|
-
|
|
49
|
+
const tx = new sdk_1.TokenAssociateTransaction()
|
|
44
50
|
.setNodeAccountIds(nodeAccountIds)
|
|
45
51
|
.setTransactionId(sdk_1.TransactionId.generate(accountId))
|
|
46
52
|
.setTransactionMemo(transaction.memo ?? "")
|
|
47
53
|
.setAccountId(accountId)
|
|
48
|
-
.setTokenIds([transaction.properties.token.contractAddress])
|
|
49
|
-
|
|
54
|
+
.setTokenIds([transaction.properties.token.contractAddress]);
|
|
55
|
+
if (transaction.maxFee) {
|
|
56
|
+
tx.setMaxTransactionFee(sdk_1.Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
57
|
+
}
|
|
58
|
+
return tx.freeze();
|
|
50
59
|
}
|
|
51
60
|
async function buildUnsignedTransaction({ account, transaction, }) {
|
|
52
61
|
const subAccount = (0, helpers_1.findSubAccountById)(account, transaction?.subAccountId || "");
|
package/lib/api/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":";;;;;;AACA,0DAAkC;AAElC,wCASwB;AAExB,sEAA8F;AAC9F,sCAAkD;AAElD,oCAAuD;AAEvD,SAAgB,oBAAoB,CAAC,WAA8B;IACjE,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1C,CAAC;AAFD,oDAEC;AAED,mGAAmG;AACnG,MAAM,cAAc,GAAgB,CAAC,IAAI,eAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,KAAK,UAAU,4BAA4B,CAAC,EAC1C,OAAO,EACP,WAAW,GAIZ;IACC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,MAAM,UAAU,GAAG,UAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzD,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":";;;;;;AACA,0DAAkC;AAElC,wCASwB;AAExB,sEAA8F;AAC9F,sCAAkD;AAElD,oCAAuD;AAEvD,SAAgB,oBAAoB,CAAC,WAA8B;IACjE,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1C,CAAC;AAFD,oDAEC;AAED,mGAAmG;AACnG,MAAM,cAAc,GAAgB,CAAC,IAAI,eAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,KAAK,UAAU,4BAA4B,CAAC,EAC1C,OAAO,EACP,WAAW,GAIZ;IACC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,MAAM,UAAU,GAAG,UAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,IAAI,yBAAmB,EAAE;SACjC,iBAAiB,CAAC,cAAc,CAAC;SACjC,gBAAgB,CAAC,mBAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACnD,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;SAC1C,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC;SAChD,eAAe,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEtD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,EAAE,CAAC,oBAAoB,CAAC,UAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,EAC3C,OAAO,EACP,YAAY,EACZ,WAAW,GAKZ;IACC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC;IAEnD,MAAM,EAAE,GAAG,IAAI,yBAAmB,EAAE;SACjC,iBAAiB,CAAC,cAAc,CAAC;SACjC,gBAAgB,CAAC,mBAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACnD,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;SAC1C,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;SAC7E,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,EAAE,CAAC,oBAAoB,CAAC,UAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,8BAA8B,CAAC,EAC5C,OAAO,EACP,WAAW,GAIZ;IACC,IAAA,mBAAS,EAAC,IAAA,mCAA2B,EAAC,WAAW,CAAC,EAAE,gCAAgC,CAAC,CAAC;IAEtF,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IAEvC,MAAM,EAAE,GAAG,IAAI,+BAAyB,EAAE;SACvC,iBAAiB,CAAC,cAAc,CAAC;SACjC,gBAAgB,CAAC,mBAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACnD,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;SAC1C,YAAY,CAAC,SAAS,CAAC;SACvB,WAAW,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAE/D,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,EAAE,CAAC,oBAAoB,CAAC,UAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAAC,EAC7C,OAAO,EACP,WAAW,GAIZ;IACC,MAAM,UAAU,GAAG,IAAA,4BAAkB,EAAC,OAAO,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAG,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC;IAEtD,IAAI,IAAA,mCAA2B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,OAAO,8BAA8B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9B,OAAO,6BAA6B,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3F,CAAC;SAAM,CAAC;QACN,OAAO,4BAA4B,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAjBD,4DAiBC;AAMM,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,SAAS,GAAG,eAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,cAAc,CAAC;IAEnB,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,IAAI,yBAAmB,CAAC;YAC7C,SAAS;SACV,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,8BAAqB,EAAE,CAAC;IACpC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,cAAQ,CAAC,OAAO,CAAC;KACnD,CAAC;AACJ,CAAC;AAfD,8CAeC;AAED,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAE/C,SAAS,SAAS;IAChB,aAAa,KAAK,YAAM,CAAC,UAAU,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAEnE,0EAA0E;IAE1E,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,gBAAgB;IACvB,oBAAoB,KAAK,YAAM,CAAC,UAAU,EAAE,CAAC;IAE7C,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../src/api/network.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
|
+
const sdk_1 = require("@hashgraph/sdk");
|
|
8
|
+
const network_1 = require("./network");
|
|
9
|
+
const invariant_1 = __importDefault(require("invariant"));
|
|
10
|
+
describe("buildUnsignedTransaction", () => {
|
|
11
|
+
const mockAccount = {
|
|
12
|
+
freshAddress: "0.0.123",
|
|
13
|
+
id: "hedera:0:0.0.123",
|
|
14
|
+
balance: new bignumber_js_1.default(1000),
|
|
15
|
+
};
|
|
16
|
+
test("builds basic transaction without maxFee", async () => {
|
|
17
|
+
const transaction = {
|
|
18
|
+
family: "hedera",
|
|
19
|
+
amount: new bignumber_js_1.default(100),
|
|
20
|
+
recipient: "0.0.456",
|
|
21
|
+
memo: "test memo",
|
|
22
|
+
};
|
|
23
|
+
const result = await (0, network_1.buildUnsignedTransaction)({ account: mockAccount, transaction });
|
|
24
|
+
expect(result).toBeInstanceOf(sdk_1.TransferTransaction);
|
|
25
|
+
(0, invariant_1.default)(result instanceof sdk_1.TransferTransaction, "hedera: TransferTransaction type guard");
|
|
26
|
+
expect(result.transactionMemo).toBe("test memo");
|
|
27
|
+
expect(result.isFrozen()).toBe(true);
|
|
28
|
+
expect(result.hbarTransfers.size).toBe(2);
|
|
29
|
+
const senderTransfer = result.hbarTransfers.get("0.0.123");
|
|
30
|
+
const recipientTransfer = result.hbarTransfers.get("0.0.456");
|
|
31
|
+
expect(senderTransfer?.toTinybars().toNumber()).toBe(-100);
|
|
32
|
+
expect(recipientTransfer?.toTinybars().toNumber()).toBe(100);
|
|
33
|
+
});
|
|
34
|
+
test("sets max transaction fee when provided", async () => {
|
|
35
|
+
const transaction = {
|
|
36
|
+
family: "hedera",
|
|
37
|
+
amount: new bignumber_js_1.default(100),
|
|
38
|
+
recipient: "0.0.456",
|
|
39
|
+
maxFee: new bignumber_js_1.default(50),
|
|
40
|
+
};
|
|
41
|
+
const result = await (0, network_1.buildUnsignedTransaction)({ account: mockAccount, transaction });
|
|
42
|
+
expect(result.maxTransactionFee?.toTinybars().toNumber()).toBe(50);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=network.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.js","sourceRoot":"","sources":["../../src/api/network.test.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AACrC,wCAAqD;AAErD,uCAAqD;AAErD,0DAAkC;AAElC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,WAAW,GAAG;QAClB,YAAY,EAAE,SAAS;QACvB,EAAE,EAAE,kBAAkB;QACtB,OAAO,EAAE,IAAI,sBAAS,CAAC,IAAI,CAAC;KAClB,CAAC;IAEb,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAwB,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,yBAAmB,CAAC,CAAC;QACnD,IAAA,mBAAS,EAAC,MAAM,YAAY,yBAAmB,EAAE,wCAAwC,CAAC,CAAC;QAC3F,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,IAAI,sBAAS,CAAC,EAAE,CAAC;SAC1B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAwB,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CA+B/E,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.prepareTransaction = void 0;
|
|
4
|
+
const helpers_1 = require("@ledgerhq/coin-framework/account/helpers");
|
|
4
5
|
const utils_1 = require("./utils");
|
|
6
|
+
const constants_1 = require("../constants");
|
|
7
|
+
const logic_1 = require("../logic");
|
|
5
8
|
/**
|
|
6
9
|
* Gather any more neccessary information for a transaction,
|
|
7
10
|
* potentially from a network.
|
|
@@ -11,9 +14,28 @@ const utils_1 = require("./utils");
|
|
|
11
14
|
*
|
|
12
15
|
*/
|
|
13
16
|
const prepareTransaction = async (account, transaction) => {
|
|
17
|
+
const subAccount = (0, helpers_1.findSubAccountById)(account, transaction?.subAccountId || "");
|
|
18
|
+
const isTokenTransaction = (0, helpers_1.isTokenAccount)(subAccount);
|
|
19
|
+
let operationType;
|
|
20
|
+
if ((0, logic_1.isTokenAssociateTransaction)(transaction)) {
|
|
21
|
+
operationType = constants_1.HEDERA_OPERATION_TYPES.TokenAssociate;
|
|
22
|
+
}
|
|
23
|
+
else if (isTokenTransaction) {
|
|
24
|
+
operationType = constants_1.HEDERA_OPERATION_TYPES.TokenTransfer;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
operationType = constants_1.HEDERA_OPERATION_TYPES.CryptoTransfer;
|
|
28
|
+
}
|
|
14
29
|
// explicitly calculate transaction amount to account for `useAllAmount` flag (send max flow)
|
|
15
30
|
// i.e. if `useAllAmount` has been toggled to true, this is where it will update the transaction to reflect that action
|
|
16
|
-
const { amount } = await
|
|
31
|
+
const [{ amount }, estimatedFees] = await Promise.all([
|
|
32
|
+
(0, utils_1.calculateAmount)({ account, transaction }),
|
|
33
|
+
(0, utils_1.getEstimatedFees)(account, operationType),
|
|
34
|
+
]);
|
|
35
|
+
// `maxFee` must be explicitly set to avoid the @hashgraph/sdk default fallback
|
|
36
|
+
// this ensures device app validation passes (e.g. during swap flow)
|
|
37
|
+
// it's applied via `tx.setMaxTransactionFee` when building the transaction
|
|
38
|
+
transaction.maxFee = estimatedFees;
|
|
17
39
|
transaction.amount = amount;
|
|
18
40
|
return transaction;
|
|
19
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":";;;AAAA,sEAA8F;AAG9F,mCAA4D;AAC5D,4CAAsD;AACtD,oCAAuD;AAEvD;;;;;;;GAOG;AACI,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACW,EAAE;IACxB,MAAM,UAAU,GAAG,IAAA,4BAAkB,EAAC,OAAO,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAG,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC;IACtD,IAAI,aAAqC,CAAC;IAE1C,IAAI,IAAA,mCAA2B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,aAAa,GAAG,kCAAsB,CAAC,cAAc,CAAC;IACxD,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9B,aAAa,GAAG,kCAAsB,CAAC,aAAa,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,kCAAsB,CAAC,cAAc,CAAC;IACxD,CAAC;IAED,6FAA6F;IAC7F,uHAAuH;IACvH,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,IAAA,uBAAe,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACzC,IAAA,wBAAgB,EAAC,OAAO,EAAE,aAAa,CAAC;KACzC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,oEAAoE;IACpE,2EAA2E;IAC3E,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC;IAEnC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AA/BW,QAAA,kBAAkB,sBA+B7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.test.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
30
|
+
const utils = __importStar(require("./utils"));
|
|
31
|
+
const prepareTransaction_1 = require("./prepareTransaction");
|
|
32
|
+
describe("prepareTransaction", () => {
|
|
33
|
+
const mockAccount = {
|
|
34
|
+
id: "hedera:0:testAccount",
|
|
35
|
+
freshAddress: "0.0.123",
|
|
36
|
+
spendableBalance: new bignumber_js_1.default(1000000),
|
|
37
|
+
currency: { id: "hedera" },
|
|
38
|
+
};
|
|
39
|
+
const mockTx = {
|
|
40
|
+
family: "hedera",
|
|
41
|
+
amount: new bignumber_js_1.default(0),
|
|
42
|
+
recipient: "",
|
|
43
|
+
useAllAmount: false,
|
|
44
|
+
};
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
jest.clearAllMocks();
|
|
47
|
+
jest.spyOn(utils, "getEstimatedFees").mockResolvedValue(Promise.resolve(new bignumber_js_1.default(10)));
|
|
48
|
+
jest
|
|
49
|
+
.spyOn(utils, "calculateAmount")
|
|
50
|
+
.mockResolvedValue(Promise.resolve({ amount: new bignumber_js_1.default(100), totalSpent: new bignumber_js_1.default(100) }));
|
|
51
|
+
});
|
|
52
|
+
test("should set amount and maxFee from utils", async () => {
|
|
53
|
+
const result = await (0, prepareTransaction_1.prepareTransaction)(mockAccount, mockTx);
|
|
54
|
+
expect(result.amount).toStrictEqual(new bignumber_js_1.default(100));
|
|
55
|
+
expect(result.maxFee).toStrictEqual(new bignumber_js_1.default(10));
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=prepareTransaction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.test.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAqC;AAErC,+CAAiC;AACjC,6DAA0D;AAG1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,sBAAsB;QAC1B,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,IAAI,sBAAS,CAAC,OAAO,CAAC;QACxC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;KAChB,CAAC;IAEb,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC;QACxB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,KAAK;KACL,CAAC;IAEjB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI;aACD,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC;aAC/B,iBAAiB,CAChB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,sBAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAChF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAkB,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,aAAa,CA8E1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAqBhC,CAAC"}
|
|
@@ -29,6 +29,7 @@ const getAccountShape = async (info, { blacklistedTokenIds }) => {
|
|
|
29
29
|
(0, mirror_1.getAccount)(address),
|
|
30
30
|
(0, mirror_1.getAccountTokens)(address),
|
|
31
31
|
]);
|
|
32
|
+
const accountBalance = new bignumber_js_1.BigNumber(mirrorAccount.balance.balance);
|
|
32
33
|
// we should sync again when new tokens are added or blacklist changes
|
|
33
34
|
const syncHash = (0, utils_1.getSyncHash)(currency, blacklistedTokenIds);
|
|
34
35
|
const shouldSyncFromScratch = !initialAccount || syncHash !== initialAccount?.syncHash;
|
|
@@ -51,8 +52,8 @@ const getAccountShape = async (info, { blacklistedTokenIds }) => {
|
|
|
51
52
|
freshAddress: address,
|
|
52
53
|
syncHash,
|
|
53
54
|
lastSyncDate: new Date(),
|
|
54
|
-
balance:
|
|
55
|
-
spendableBalance:
|
|
55
|
+
balance: accountBalance,
|
|
56
|
+
spendableBalance: accountBalance,
|
|
56
57
|
operations,
|
|
57
58
|
operationsCount: operations.length,
|
|
58
59
|
// NOTE: there are no "blocks" in hedera
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAyC;AACzC,0DAAkC;AAElC,oEAA+F;AAK/F,yEAAqE;AACrE,8DAAmE;AACnE,0CAAsF;AACtF,mCAMiB;AAEjB,wCAAuD;AAEhD,MAAM,eAAe,GAAmC,KAAK,EAClE,IAAI,EACJ,EAAE,mBAAmB,EAAE,EACU,EAAE;IACnC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAEnE,IAAA,mBAAS,EAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;IAEpD,MAAM,aAAa,GAAG,IAAA,yBAAe,EAAC;QACpC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,OAAO;QACtB,cAAc;KACf,CAAC,CAAC;IAEH,yCAAyC;IACzC,sFAAsF;IACtF,yEAAyE;IACzE,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACtD,IAAA,mBAAU,EAAC,OAAO,CAAC;QACnB,IAAA,yBAAgB,EAAC,OAAO,CAAC;KAC1B,CAAC,CAAC;IAEH,sEAAsE;IACtE,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC5D,MAAM,qBAAqB,GAAG,CAAC,cAAc,IAAI,QAAQ,KAAK,cAAc,EAAE,QAAQ,CAAC;IAEvF,MAAM,aAAa,GAAG,cAAc,EAAE,UAAU,IAAI,EAAE,CAAC;IACvD,MAAM,iBAAiB,GAAG,cAAc,EAAE,iBAAiB,IAAI,EAAE,CAAC;IAElE,mEAAmE;IACnE,MAAM,wBAAwB,GAC5B,CAAC,qBAAqB,IAAI,aAAa,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,IAAI,wBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACnE,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,uBAAuB,GAAG,MAAM,IAAA,+BAAuB,EAC3D,aAAa,EACb,OAAO,EACP,wBAAwB,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CACtE,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,sBAAc,EACzC,aAAa,EACb,uBAAuB,CAAC,eAAe,EACvC,YAAY,CACb,CAAC;IACF,MAAM,WAAW,GAAG,IAAA,wBAAgB,EAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,IAAA,yBAAiB,EACrC,uBAAuB,CAAC,cAAc,EACtC,uBAAuB,CAAC,eAAe,EACvC,YAAY,CACb,CAAC;IACF,MAAM,qBAAqB,GAAG,IAAA,0BAAkB,EAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,qBAAqB;QACtC,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,IAAA,oBAAQ,EAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAEnD,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,YAAY,EAAE,OAAO;QACrB,QAAQ;QACR,YAAY,EAAE,IAAI,IAAI,EAAE;QACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"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"}
|
package/lib/transaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAOpF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CASlE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAS/D;;;;;;;;;AAED,wBAOE"}
|
package/lib/transaction.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.toTransactionRaw = exports.fromTransactionRaw = exports.formatTransaction = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
4
8
|
const formatters_1 = require("@ledgerhq/coin-framework/formatters");
|
|
5
9
|
const serialization_1 = require("@ledgerhq/coin-framework/serialization");
|
|
6
10
|
const index_1 = require("@ledgerhq/coin-framework/account/index");
|
|
@@ -19,6 +23,7 @@ function fromTransactionRaw(tr) {
|
|
|
19
23
|
...common,
|
|
20
24
|
family: tr.family,
|
|
21
25
|
memo: tr.memo,
|
|
26
|
+
...(tr.maxFee && { maxFee: new bignumber_js_1.default(tr.maxFee) }),
|
|
22
27
|
};
|
|
23
28
|
}
|
|
24
29
|
exports.fromTransactionRaw = fromTransactionRaw;
|
|
@@ -28,6 +33,7 @@ function toTransactionRaw(t) {
|
|
|
28
33
|
...common,
|
|
29
34
|
family: t.family,
|
|
30
35
|
memo: t.memo,
|
|
36
|
+
...(t.maxFee && { maxFee: t.maxFee.toString() }),
|
|
31
37
|
};
|
|
32
38
|
}
|
|
33
39
|
exports.toTransactionRaw = toTransactionRaw;
|
package/lib/transaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,oEAA8E;AAC9E,0EAKgD;AAEhD,kEAA4E;AAC5E,qEAA+E;AAE/E,SAAgB,iBAAiB,CAAC,WAAwB,EAAE,OAAgB;IAC1E,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE;QAC1F,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,QAAQ,MAAM,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAC;AACvD,CAAC;AAPD,8CAOC;AAED,SAAgB,kBAAkB,CAAC,EAAkB;IACnD,MAAM,MAAM,GAAG,IAAA,wCAAwB,EAAC,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,sBAAS,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AATD,gDASC;AAED,SAAgB,gBAAgB,CAAC,CAAc;IAC7C,MAAM,MAAM,GAAG,IAAA,sCAAsB,EAAC,CAAC,CAAC,CAAC;IAEzC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AATD,4CASC;AAED,kBAAe;IACb,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,wBAAwB,EAAxB,8CAAwB;IACxB,sBAAsB,EAAtB,4CAAsB;IACtB,uBAAuB,EAAvB,oCAAuB;CACxB,CAAC"}
|
package/lib/types/bridge.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
3
|
import type { Account, AccountRaw, Operation, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw } from "@ledgerhq/types-live";
|
|
3
4
|
import { HEDERA_TRANSACTION_KINDS } from "../constants";
|
|
4
5
|
export type NetworkInfo = {
|
|
@@ -14,11 +15,13 @@ export type TokenAssociateProperties = {
|
|
|
14
15
|
export type Transaction = TransactionCommon & {
|
|
15
16
|
family: "hedera";
|
|
16
17
|
memo?: string | undefined;
|
|
18
|
+
maxFee?: BigNumber;
|
|
17
19
|
properties?: TokenAssociateProperties;
|
|
18
20
|
};
|
|
19
21
|
export type TransactionRaw = TransactionCommonRaw & {
|
|
20
22
|
family: "hedera";
|
|
21
23
|
memo?: string | undefined;
|
|
24
|
+
maxFee?: string;
|
|
22
25
|
properties?: TokenAssociateProperties;
|
|
23
26
|
};
|
|
24
27
|
export type TransactionStatus = TransactionStatusCommon;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC;IAC1D,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAEL,mBAAmB,EAMnB,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEjG;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAEL,mBAAmB,EAMnB,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEjG;AAgFD,wBAAsB,wBAAwB,CAAC,EAC7C,OAAO,EACP,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;CAC1B,GAAG,OAAO,CAAC,mBAAmB,GAAG,yBAAyB,CAAC,CAW3D;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAehF"}
|
package/lib-es/api/network.js
CHANGED
|
@@ -11,35 +11,44 @@ const nodeAccountIds = [new AccountId(3)];
|
|
|
11
11
|
async function buildUnsignedCoinTransaction({ account, transaction, }) {
|
|
12
12
|
const accountId = account.freshAddress;
|
|
13
13
|
const hbarAmount = Hbar.fromTinybars(transaction.amount);
|
|
14
|
-
|
|
14
|
+
const tx = new TransferTransaction()
|
|
15
15
|
.setNodeAccountIds(nodeAccountIds)
|
|
16
16
|
.setTransactionId(TransactionId.generate(accountId))
|
|
17
17
|
.setTransactionMemo(transaction.memo ?? "")
|
|
18
18
|
.addHbarTransfer(accountId, hbarAmount.negated())
|
|
19
|
-
.addHbarTransfer(transaction.recipient, hbarAmount)
|
|
20
|
-
|
|
19
|
+
.addHbarTransfer(transaction.recipient, hbarAmount);
|
|
20
|
+
if (transaction.maxFee) {
|
|
21
|
+
tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
22
|
+
}
|
|
23
|
+
return tx.freeze();
|
|
21
24
|
}
|
|
22
25
|
async function buildUnsignedTokenTransaction({ account, tokenAccount, transaction, }) {
|
|
23
26
|
const accountId = account.freshAddress;
|
|
24
27
|
const tokenId = tokenAccount.token.contractAddress;
|
|
25
|
-
|
|
28
|
+
const tx = new TransferTransaction()
|
|
26
29
|
.setNodeAccountIds(nodeAccountIds)
|
|
27
30
|
.setTransactionId(TransactionId.generate(accountId))
|
|
28
31
|
.setTransactionMemo(transaction.memo ?? "")
|
|
29
32
|
.addTokenTransfer(tokenId, accountId, transaction.amount.negated().toNumber())
|
|
30
|
-
.addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber())
|
|
31
|
-
|
|
33
|
+
.addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber());
|
|
34
|
+
if (transaction.maxFee) {
|
|
35
|
+
tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
36
|
+
}
|
|
37
|
+
return tx.freeze();
|
|
32
38
|
}
|
|
33
39
|
async function buildTokenAssociateTransaction({ account, transaction, }) {
|
|
34
40
|
invariant(isTokenAssociateTransaction(transaction), "invalid transaction properties");
|
|
35
41
|
const accountId = account.freshAddress;
|
|
36
|
-
|
|
42
|
+
const tx = new TokenAssociateTransaction()
|
|
37
43
|
.setNodeAccountIds(nodeAccountIds)
|
|
38
44
|
.setTransactionId(TransactionId.generate(accountId))
|
|
39
45
|
.setTransactionMemo(transaction.memo ?? "")
|
|
40
46
|
.setAccountId(accountId)
|
|
41
|
-
.setTokenIds([transaction.properties.token.contractAddress])
|
|
42
|
-
|
|
47
|
+
.setTokenIds([transaction.properties.token.contractAddress]);
|
|
48
|
+
if (transaction.maxFee) {
|
|
49
|
+
tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
50
|
+
}
|
|
51
|
+
return tx.freeze();
|
|
43
52
|
}
|
|
44
53
|
export async function buildUnsignedTransaction({ account, transaction, }) {
|
|
45
54
|
const subAccount = findSubAccountById(account, transaction?.subAccountId || "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,MAAM,EACN,mBAAmB,EACnB,IAAI,EACJ,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,UAAU,oBAAoB,CAAC,WAA8B;IACjE,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,mGAAmG;AACnG,MAAM,cAAc,GAAgB,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,KAAK,UAAU,4BAA4B,CAAC,EAC1C,OAAO,EACP,WAAW,GAIZ;IACC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzD,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/api/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../src/api/network.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import { TransferTransaction } from "@hashgraph/sdk";
|
|
3
|
+
import { buildUnsignedTransaction } from "./network";
|
|
4
|
+
import invariant from "invariant";
|
|
5
|
+
describe("buildUnsignedTransaction", () => {
|
|
6
|
+
const mockAccount = {
|
|
7
|
+
freshAddress: "0.0.123",
|
|
8
|
+
id: "hedera:0:0.0.123",
|
|
9
|
+
balance: new BigNumber(1000),
|
|
10
|
+
};
|
|
11
|
+
test("builds basic transaction without maxFee", async () => {
|
|
12
|
+
const transaction = {
|
|
13
|
+
family: "hedera",
|
|
14
|
+
amount: new BigNumber(100),
|
|
15
|
+
recipient: "0.0.456",
|
|
16
|
+
memo: "test memo",
|
|
17
|
+
};
|
|
18
|
+
const result = await buildUnsignedTransaction({ account: mockAccount, transaction });
|
|
19
|
+
expect(result).toBeInstanceOf(TransferTransaction);
|
|
20
|
+
invariant(result instanceof TransferTransaction, "hedera: TransferTransaction type guard");
|
|
21
|
+
expect(result.transactionMemo).toBe("test memo");
|
|
22
|
+
expect(result.isFrozen()).toBe(true);
|
|
23
|
+
expect(result.hbarTransfers.size).toBe(2);
|
|
24
|
+
const senderTransfer = result.hbarTransfers.get("0.0.123");
|
|
25
|
+
const recipientTransfer = result.hbarTransfers.get("0.0.456");
|
|
26
|
+
expect(senderTransfer?.toTinybars().toNumber()).toBe(-100);
|
|
27
|
+
expect(recipientTransfer?.toTinybars().toNumber()).toBe(100);
|
|
28
|
+
});
|
|
29
|
+
test("sets max transaction fee when provided", async () => {
|
|
30
|
+
const transaction = {
|
|
31
|
+
family: "hedera",
|
|
32
|
+
amount: new BigNumber(100),
|
|
33
|
+
recipient: "0.0.456",
|
|
34
|
+
maxFee: new BigNumber(50),
|
|
35
|
+
};
|
|
36
|
+
const result = await buildUnsignedTransaction({ account: mockAccount, transaction });
|
|
37
|
+
expect(result.maxTransactionFee?.toTinybars().toNumber()).toBe(50);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=network.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.js","sourceRoot":"","sources":["../../src/api/network.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,WAAW,GAAG;QAClB,YAAY,EAAE,SAAS;QACvB,EAAE,EAAE,kBAAkB;QACtB,OAAO,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;KAClB,CAAC;IAEb,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACnD,SAAS,CAAC,MAAM,YAAY,mBAAmB,EAAE,wCAAwC,CAAC,CAAC;QAC3F,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,WAAW,GAAgB;YAC/B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC;YAC1B,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;SAC1B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CA+B/E,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { findSubAccountById, isTokenAccount } from "@ledgerhq/coin-framework/account/helpers";
|
|
2
|
+
import { calculateAmount, getEstimatedFees } from "./utils";
|
|
3
|
+
import { HEDERA_OPERATION_TYPES } from "../constants";
|
|
4
|
+
import { isTokenAssociateTransaction } from "../logic";
|
|
2
5
|
/**
|
|
3
6
|
* Gather any more neccessary information for a transaction,
|
|
4
7
|
* potentially from a network.
|
|
@@ -8,9 +11,28 @@ import { calculateAmount } from "./utils";
|
|
|
8
11
|
*
|
|
9
12
|
*/
|
|
10
13
|
export const prepareTransaction = async (account, transaction) => {
|
|
14
|
+
const subAccount = findSubAccountById(account, transaction?.subAccountId || "");
|
|
15
|
+
const isTokenTransaction = isTokenAccount(subAccount);
|
|
16
|
+
let operationType;
|
|
17
|
+
if (isTokenAssociateTransaction(transaction)) {
|
|
18
|
+
operationType = HEDERA_OPERATION_TYPES.TokenAssociate;
|
|
19
|
+
}
|
|
20
|
+
else if (isTokenTransaction) {
|
|
21
|
+
operationType = HEDERA_OPERATION_TYPES.TokenTransfer;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
operationType = HEDERA_OPERATION_TYPES.CryptoTransfer;
|
|
25
|
+
}
|
|
11
26
|
// explicitly calculate transaction amount to account for `useAllAmount` flag (send max flow)
|
|
12
27
|
// i.e. if `useAllAmount` has been toggled to true, this is where it will update the transaction to reflect that action
|
|
13
|
-
const { amount } = await
|
|
28
|
+
const [{ amount }, estimatedFees] = await Promise.all([
|
|
29
|
+
calculateAmount({ account, transaction }),
|
|
30
|
+
getEstimatedFees(account, operationType),
|
|
31
|
+
]);
|
|
32
|
+
// `maxFee` must be explicitly set to avoid the @hashgraph/sdk default fallback
|
|
33
|
+
// this ensures device app validation passes (e.g. during swap flow)
|
|
34
|
+
// it's applied via `tx.setMaxTransactionFee` when building the transaction
|
|
35
|
+
transaction.maxFee = estimatedFees;
|
|
14
36
|
transaction.amount = amount;
|
|
15
37
|
return transaction;
|
|
16
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG9F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACW,EAAE;IACxB,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,aAAqC,CAAC;IAE1C,IAAI,2BAA2B,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,aAAa,GAAG,sBAAsB,CAAC,cAAc,CAAC;IACxD,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9B,aAAa,GAAG,sBAAsB,CAAC,aAAa,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,sBAAsB,CAAC,cAAc,CAAC;IACxD,CAAC;IAED,6FAA6F;IAC7F,uHAAuH;IACvH,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACzC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC;KACzC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,oEAAoE;IACpE,2EAA2E;IAC3E,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC;IAEnC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.test.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import * as utils from "./utils";
|
|
3
|
+
import { prepareTransaction } from "./prepareTransaction";
|
|
4
|
+
describe("prepareTransaction", () => {
|
|
5
|
+
const mockAccount = {
|
|
6
|
+
id: "hedera:0:testAccount",
|
|
7
|
+
freshAddress: "0.0.123",
|
|
8
|
+
spendableBalance: new BigNumber(1000000),
|
|
9
|
+
currency: { id: "hedera" },
|
|
10
|
+
};
|
|
11
|
+
const mockTx = {
|
|
12
|
+
family: "hedera",
|
|
13
|
+
amount: new BigNumber(0),
|
|
14
|
+
recipient: "",
|
|
15
|
+
useAllAmount: false,
|
|
16
|
+
};
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
jest.clearAllMocks();
|
|
19
|
+
jest.spyOn(utils, "getEstimatedFees").mockResolvedValue(Promise.resolve(new BigNumber(10)));
|
|
20
|
+
jest
|
|
21
|
+
.spyOn(utils, "calculateAmount")
|
|
22
|
+
.mockResolvedValue(Promise.resolve({ amount: new BigNumber(100), totalSpent: new BigNumber(100) }));
|
|
23
|
+
});
|
|
24
|
+
test("should set amount and maxFee from utils", async () => {
|
|
25
|
+
const result = await prepareTransaction(mockAccount, mockTx);
|
|
26
|
+
expect(result.amount).toStrictEqual(new BigNumber(100));
|
|
27
|
+
expect(result.maxFee).toStrictEqual(new BigNumber(10));
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=prepareTransaction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepareTransaction.test.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,sBAAsB;QAC1B,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;QACxC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;KAChB,CAAC;IAEb,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;QACxB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,KAAK;KACL,CAAC;IAEjB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI;aACD,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC;aAC/B,iBAAiB,CAChB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAChF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,aAAa,CA8E1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAqBhC,CAAC"}
|
|
@@ -23,6 +23,7 @@ export const getAccountShape = async (info, { blacklistedTokenIds }) => {
|
|
|
23
23
|
getAccount(address),
|
|
24
24
|
getAccountTokens(address),
|
|
25
25
|
]);
|
|
26
|
+
const accountBalance = new BigNumber(mirrorAccount.balance.balance);
|
|
26
27
|
// we should sync again when new tokens are added or blacklist changes
|
|
27
28
|
const syncHash = getSyncHash(currency, blacklistedTokenIds);
|
|
28
29
|
const shouldSyncFromScratch = !initialAccount || syncHash !== initialAccount?.syncHash;
|
|
@@ -45,8 +46,8 @@ export const getAccountShape = async (info, { blacklistedTokenIds }) => {
|
|
|
45
46
|
freshAddress: address,
|
|
46
47
|
syncHash,
|
|
47
48
|
lastSyncDate: new Date(),
|
|
48
|
-
balance:
|
|
49
|
-
spendableBalance:
|
|
49
|
+
balance: accountBalance,
|
|
50
|
+
spendableBalance: accountBalance,
|
|
50
51
|
operations,
|
|
51
52
|
operationsCount: operations.length,
|
|
52
53
|
// NOTE: there are no "blocks" in hedera
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAOpF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CASlE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAS/D;;;;;;;;;AAED,wBAOE"}
|
package/lib-es/transaction.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
1
2
|
import { formatTransactionStatus } from "@ledgerhq/coin-framework/formatters";
|
|
2
3
|
import { fromTransactionCommonRaw, fromTransactionStatusRawCommon as fromTransactionStatusRaw, toTransactionCommonRaw, toTransactionStatusRawCommon as toTransactionStatusRaw, } from "@ledgerhq/coin-framework/serialization";
|
|
3
4
|
import { getAccountCurrency } from "@ledgerhq/coin-framework/account/index";
|
|
@@ -15,6 +16,7 @@ export function fromTransactionRaw(tr) {
|
|
|
15
16
|
...common,
|
|
16
17
|
family: tr.family,
|
|
17
18
|
memo: tr.memo,
|
|
19
|
+
...(tr.maxFee && { maxFee: new BigNumber(tr.maxFee) }),
|
|
18
20
|
};
|
|
19
21
|
}
|
|
20
22
|
export function toTransactionRaw(t) {
|
|
@@ -23,6 +25,7 @@ export function toTransactionRaw(t) {
|
|
|
23
25
|
...common,
|
|
24
26
|
family: t.family,
|
|
25
27
|
memo: t.memo,
|
|
28
|
+
...(t.maxFee && { maxFee: t.maxFee.toString() }),
|
|
26
29
|
};
|
|
27
30
|
}
|
|
28
31
|
export default {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACL,wBAAwB,EACxB,8BAA8B,IAAI,wBAAwB,EAC1D,sBAAsB,EACtB,4BAA4B,IAAI,sBAAsB,GACvD,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,MAAM,UAAU,iBAAiB,CAAC,WAAwB,EAAE,OAAgB;IAC1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE;QAC1F,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,QAAQ,MAAM,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAkB;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAc;IAC7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAEzC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,eAAe;IACb,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,wBAAwB;IACxB,sBAAsB;IACtB,uBAAuB;CACxB,CAAC"}
|
package/lib-es/types/bridge.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
3
|
import type { Account, AccountRaw, Operation, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw } from "@ledgerhq/types-live";
|
|
3
4
|
import { HEDERA_TRANSACTION_KINDS } from "../constants";
|
|
4
5
|
export type NetworkInfo = {
|
|
@@ -14,11 +15,13 @@ export type TokenAssociateProperties = {
|
|
|
14
15
|
export type Transaction = TransactionCommon & {
|
|
15
16
|
family: "hedera";
|
|
16
17
|
memo?: string | undefined;
|
|
18
|
+
maxFee?: BigNumber;
|
|
17
19
|
properties?: TokenAssociateProperties;
|
|
18
20
|
};
|
|
19
21
|
export type TransactionRaw = TransactionCommonRaw & {
|
|
20
22
|
family: "hedera";
|
|
21
23
|
memo?: string | undefined;
|
|
24
|
+
maxFee?: string;
|
|
22
25
|
properties?: TokenAssociateProperties;
|
|
23
26
|
};
|
|
24
27
|
export type TransactionStatus = TransactionStatusCommon;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC;IAC1D,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/coin-hedera",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0-nightly.1",
|
|
4
4
|
"description": "Ledger Hedera Coin integration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ledger",
|
|
@@ -82,14 +82,14 @@
|
|
|
82
82
|
"invariant": "^2.2.2",
|
|
83
83
|
"lodash": "^4.17.21",
|
|
84
84
|
"rxjs": "^7.8.1",
|
|
85
|
-
"@ledgerhq/
|
|
86
|
-
"@ledgerhq/
|
|
85
|
+
"@ledgerhq/coin-framework": "^6.6.0-nightly.1",
|
|
86
|
+
"@ledgerhq/cryptoassets": "^13.30.0-nightly.0",
|
|
87
87
|
"@ledgerhq/devices": "8.6.0",
|
|
88
|
-
"@ledgerhq/errors": "^6.
|
|
89
|
-
"@ledgerhq/live-countervalues": "^0.7.
|
|
88
|
+
"@ledgerhq/errors": "^6.26.0-nightly.0",
|
|
89
|
+
"@ledgerhq/live-countervalues": "^0.7.3-nightly.1",
|
|
90
90
|
"@ledgerhq/live-env": "^2.17.0",
|
|
91
91
|
"@ledgerhq/live-network": "^2.0.18",
|
|
92
|
-
"@ledgerhq/types-live": "^6.
|
|
92
|
+
"@ledgerhq/types-live": "^6.86.0-nightly.0"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@types/imurmurhash": "^0.1.4",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"jest": "^29.7.0",
|
|
101
101
|
"ts-jest": "^29.1.1",
|
|
102
102
|
"@ledgerhq/disable-network-setup": "^0.0.0",
|
|
103
|
-
"@ledgerhq/types-cryptoassets": "^7.
|
|
103
|
+
"@ledgerhq/types-cryptoassets": "^7.28.0-nightly.0"
|
|
104
104
|
},
|
|
105
105
|
"scripts": {
|
|
106
106
|
"clean": "rimraf lib lib-es",
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import { TransferTransaction } from "@hashgraph/sdk";
|
|
3
|
+
import type { Account } from "@ledgerhq/types-live";
|
|
4
|
+
import { buildUnsignedTransaction } from "./network";
|
|
5
|
+
import { Transaction } from "../types";
|
|
6
|
+
import invariant from "invariant";
|
|
7
|
+
|
|
8
|
+
describe("buildUnsignedTransaction", () => {
|
|
9
|
+
const mockAccount = {
|
|
10
|
+
freshAddress: "0.0.123",
|
|
11
|
+
id: "hedera:0:0.0.123",
|
|
12
|
+
balance: new BigNumber(1000),
|
|
13
|
+
} as Account;
|
|
14
|
+
|
|
15
|
+
test("builds basic transaction without maxFee", async () => {
|
|
16
|
+
const transaction: Transaction = {
|
|
17
|
+
family: "hedera",
|
|
18
|
+
amount: new BigNumber(100),
|
|
19
|
+
recipient: "0.0.456",
|
|
20
|
+
memo: "test memo",
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const result = await buildUnsignedTransaction({ account: mockAccount, transaction });
|
|
24
|
+
|
|
25
|
+
expect(result).toBeInstanceOf(TransferTransaction);
|
|
26
|
+
invariant(result instanceof TransferTransaction, "hedera: TransferTransaction type guard");
|
|
27
|
+
expect(result.transactionMemo).toBe("test memo");
|
|
28
|
+
expect(result.isFrozen()).toBe(true);
|
|
29
|
+
expect(result.hbarTransfers.size).toBe(2);
|
|
30
|
+
|
|
31
|
+
const senderTransfer = result.hbarTransfers.get("0.0.123");
|
|
32
|
+
const recipientTransfer = result.hbarTransfers.get("0.0.456");
|
|
33
|
+
|
|
34
|
+
expect(senderTransfer?.toTinybars().toNumber()).toBe(-100);
|
|
35
|
+
expect(recipientTransfer?.toTinybars().toNumber()).toBe(100);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("sets max transaction fee when provided", async () => {
|
|
39
|
+
const transaction: Transaction = {
|
|
40
|
+
family: "hedera",
|
|
41
|
+
amount: new BigNumber(100),
|
|
42
|
+
recipient: "0.0.456",
|
|
43
|
+
maxFee: new BigNumber(50),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const result = await buildUnsignedTransaction({ account: mockAccount, transaction });
|
|
47
|
+
expect(result.maxTransactionFee?.toTinybars().toNumber()).toBe(50);
|
|
48
|
+
});
|
|
49
|
+
});
|
package/src/api/network.ts
CHANGED
|
@@ -34,13 +34,18 @@ async function buildUnsignedCoinTransaction({
|
|
|
34
34
|
const accountId = account.freshAddress;
|
|
35
35
|
const hbarAmount = Hbar.fromTinybars(transaction.amount);
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
const tx = new TransferTransaction()
|
|
38
38
|
.setNodeAccountIds(nodeAccountIds)
|
|
39
39
|
.setTransactionId(TransactionId.generate(accountId))
|
|
40
40
|
.setTransactionMemo(transaction.memo ?? "")
|
|
41
41
|
.addHbarTransfer(accountId, hbarAmount.negated())
|
|
42
|
-
.addHbarTransfer(transaction.recipient, hbarAmount)
|
|
43
|
-
|
|
42
|
+
.addHbarTransfer(transaction.recipient, hbarAmount);
|
|
43
|
+
|
|
44
|
+
if (transaction.maxFee) {
|
|
45
|
+
tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return tx.freeze();
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
async function buildUnsignedTokenTransaction({
|
|
@@ -55,13 +60,18 @@ async function buildUnsignedTokenTransaction({
|
|
|
55
60
|
const accountId = account.freshAddress;
|
|
56
61
|
const tokenId = tokenAccount.token.contractAddress;
|
|
57
62
|
|
|
58
|
-
|
|
63
|
+
const tx = new TransferTransaction()
|
|
59
64
|
.setNodeAccountIds(nodeAccountIds)
|
|
60
65
|
.setTransactionId(TransactionId.generate(accountId))
|
|
61
66
|
.setTransactionMemo(transaction.memo ?? "")
|
|
62
67
|
.addTokenTransfer(tokenId, accountId, transaction.amount.negated().toNumber())
|
|
63
|
-
.addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber())
|
|
64
|
-
|
|
68
|
+
.addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber());
|
|
69
|
+
|
|
70
|
+
if (transaction.maxFee) {
|
|
71
|
+
tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return tx.freeze();
|
|
65
75
|
}
|
|
66
76
|
|
|
67
77
|
async function buildTokenAssociateTransaction({
|
|
@@ -75,13 +85,18 @@ async function buildTokenAssociateTransaction({
|
|
|
75
85
|
|
|
76
86
|
const accountId = account.freshAddress;
|
|
77
87
|
|
|
78
|
-
|
|
88
|
+
const tx = new TokenAssociateTransaction()
|
|
79
89
|
.setNodeAccountIds(nodeAccountIds)
|
|
80
90
|
.setTransactionId(TransactionId.generate(accountId))
|
|
81
91
|
.setTransactionMemo(transaction.memo ?? "")
|
|
82
92
|
.setAccountId(accountId)
|
|
83
|
-
.setTokenIds([transaction.properties.token.contractAddress])
|
|
84
|
-
|
|
93
|
+
.setTokenIds([transaction.properties.token.contractAddress]);
|
|
94
|
+
|
|
95
|
+
if (transaction.maxFee) {
|
|
96
|
+
tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return tx.freeze();
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
export async function buildUnsignedTransaction({
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import type { Account } from "@ledgerhq/types-live";
|
|
3
|
+
import * as utils from "./utils";
|
|
4
|
+
import { prepareTransaction } from "./prepareTransaction";
|
|
5
|
+
import { Transaction } from "../types";
|
|
6
|
+
|
|
7
|
+
describe("prepareTransaction", () => {
|
|
8
|
+
const mockAccount = {
|
|
9
|
+
id: "hedera:0:testAccount",
|
|
10
|
+
freshAddress: "0.0.123",
|
|
11
|
+
spendableBalance: new BigNumber(1000000),
|
|
12
|
+
currency: { id: "hedera" },
|
|
13
|
+
} as Account;
|
|
14
|
+
|
|
15
|
+
const mockTx = {
|
|
16
|
+
family: "hedera",
|
|
17
|
+
amount: new BigNumber(0),
|
|
18
|
+
recipient: "",
|
|
19
|
+
useAllAmount: false,
|
|
20
|
+
} as Transaction;
|
|
21
|
+
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
jest.clearAllMocks();
|
|
24
|
+
|
|
25
|
+
jest.spyOn(utils, "getEstimatedFees").mockResolvedValue(Promise.resolve(new BigNumber(10)));
|
|
26
|
+
jest
|
|
27
|
+
.spyOn(utils, "calculateAmount")
|
|
28
|
+
.mockResolvedValue(
|
|
29
|
+
Promise.resolve({ amount: new BigNumber(100), totalSpent: new BigNumber(100) }),
|
|
30
|
+
);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("should set amount and maxFee from utils", async () => {
|
|
34
|
+
const result = await prepareTransaction(mockAccount, mockTx);
|
|
35
|
+
expect(result.amount).toStrictEqual(new BigNumber(100));
|
|
36
|
+
expect(result.maxFee).toStrictEqual(new BigNumber(10));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { findSubAccountById, isTokenAccount } from "@ledgerhq/coin-framework/account/helpers";
|
|
1
2
|
import type { AccountBridge } from "@ledgerhq/types-live";
|
|
2
3
|
import type { Transaction } from "../types";
|
|
3
|
-
import { calculateAmount } from "./utils";
|
|
4
|
+
import { calculateAmount, getEstimatedFees } from "./utils";
|
|
5
|
+
import { HEDERA_OPERATION_TYPES } from "../constants";
|
|
6
|
+
import { isTokenAssociateTransaction } from "../logic";
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* Gather any more neccessary information for a transaction,
|
|
@@ -14,9 +17,30 @@ export const prepareTransaction: AccountBridge<Transaction>["prepareTransaction"
|
|
|
14
17
|
account,
|
|
15
18
|
transaction,
|
|
16
19
|
): Promise<Transaction> => {
|
|
20
|
+
const subAccount = findSubAccountById(account, transaction?.subAccountId || "");
|
|
21
|
+
const isTokenTransaction = isTokenAccount(subAccount);
|
|
22
|
+
let operationType: HEDERA_OPERATION_TYPES;
|
|
23
|
+
|
|
24
|
+
if (isTokenAssociateTransaction(transaction)) {
|
|
25
|
+
operationType = HEDERA_OPERATION_TYPES.TokenAssociate;
|
|
26
|
+
} else if (isTokenTransaction) {
|
|
27
|
+
operationType = HEDERA_OPERATION_TYPES.TokenTransfer;
|
|
28
|
+
} else {
|
|
29
|
+
operationType = HEDERA_OPERATION_TYPES.CryptoTransfer;
|
|
30
|
+
}
|
|
31
|
+
|
|
17
32
|
// explicitly calculate transaction amount to account for `useAllAmount` flag (send max flow)
|
|
18
33
|
// i.e. if `useAllAmount` has been toggled to true, this is where it will update the transaction to reflect that action
|
|
19
|
-
const { amount } = await
|
|
34
|
+
const [{ amount }, estimatedFees] = await Promise.all([
|
|
35
|
+
calculateAmount({ account, transaction }),
|
|
36
|
+
getEstimatedFees(account, operationType),
|
|
37
|
+
]);
|
|
38
|
+
|
|
39
|
+
// `maxFee` must be explicitly set to avoid the @hashgraph/sdk default fallback
|
|
40
|
+
// this ensures device app validation passes (e.g. during swap flow)
|
|
41
|
+
// it's applied via `tx.setMaxTransactionFee` when building the transaction
|
|
42
|
+
transaction.maxFee = estimatedFees;
|
|
43
|
+
|
|
20
44
|
transaction.amount = amount;
|
|
21
45
|
|
|
22
46
|
return transaction;
|
|
@@ -43,6 +43,8 @@ export const getAccountShape: GetAccountShape<HederaAccount> = async (
|
|
|
43
43
|
getAccountTokens(address),
|
|
44
44
|
]);
|
|
45
45
|
|
|
46
|
+
const accountBalance = new BigNumber(mirrorAccount.balance.balance);
|
|
47
|
+
|
|
46
48
|
// we should sync again when new tokens are added or blacklist changes
|
|
47
49
|
const syncHash = getSyncHash(currency, blacklistedTokenIds);
|
|
48
50
|
const shouldSyncFromScratch = !initialAccount || syncHash !== initialAccount?.syncHash;
|
|
@@ -82,8 +84,8 @@ export const getAccountShape: GetAccountShape<HederaAccount> = async (
|
|
|
82
84
|
freshAddress: address,
|
|
83
85
|
syncHash,
|
|
84
86
|
lastSyncDate: new Date(),
|
|
85
|
-
balance:
|
|
86
|
-
spendableBalance:
|
|
87
|
+
balance: accountBalance,
|
|
88
|
+
spendableBalance: accountBalance,
|
|
87
89
|
operations,
|
|
88
90
|
operationsCount: operations.length,
|
|
89
91
|
// NOTE: there are no "blocks" in hedera
|
package/src/transaction.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
1
2
|
import type { Transaction, TransactionRaw } from "./types";
|
|
2
3
|
import { formatTransactionStatus } from "@ledgerhq/coin-framework/formatters";
|
|
3
4
|
import {
|
|
@@ -26,6 +27,7 @@ export function fromTransactionRaw(tr: TransactionRaw): Transaction {
|
|
|
26
27
|
...common,
|
|
27
28
|
family: tr.family,
|
|
28
29
|
memo: tr.memo,
|
|
30
|
+
...(tr.maxFee && { maxFee: new BigNumber(tr.maxFee) }),
|
|
29
31
|
};
|
|
30
32
|
}
|
|
31
33
|
|
|
@@ -36,6 +38,7 @@ export function toTransactionRaw(t: Transaction): TransactionRaw {
|
|
|
36
38
|
...common,
|
|
37
39
|
family: t.family,
|
|
38
40
|
memo: t.memo,
|
|
41
|
+
...(t.maxFee && { maxFee: t.maxFee.toString() }),
|
|
39
42
|
};
|
|
40
43
|
}
|
|
41
44
|
|
package/src/types/bridge.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
|
|
2
3
|
import type {
|
|
3
4
|
Account,
|
|
4
5
|
AccountRaw,
|
|
@@ -26,12 +27,14 @@ export type TokenAssociateProperties = {
|
|
|
26
27
|
export type Transaction = TransactionCommon & {
|
|
27
28
|
family: "hedera";
|
|
28
29
|
memo?: string | undefined;
|
|
30
|
+
maxFee?: BigNumber;
|
|
29
31
|
properties?: TokenAssociateProperties;
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
export type TransactionRaw = TransactionCommonRaw & {
|
|
33
35
|
family: "hedera";
|
|
34
36
|
memo?: string | undefined;
|
|
37
|
+
maxFee?: string;
|
|
35
38
|
properties?: TokenAssociateProperties;
|
|
36
39
|
};
|
|
37
40
|
|