@ledgerhq/live-common 27.7.1 → 27.7.2-hotfix.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/families/ethereum/__tests__/transaction.unit.test.js +10 -0
- package/lib/families/ethereum/__tests__/transaction.unit.test.js.map +1 -1
- package/lib/families/ethereum/modules/send.d.ts.map +1 -1
- package/lib/families/ethereum/modules/send.js +2 -1
- package/lib/families/ethereum/modules/send.js.map +1 -1
- package/lib/families/ethereum/prepareTransaction.d.ts.map +1 -1
- package/lib/families/ethereum/prepareTransaction.js +27 -7
- package/lib/families/ethereum/prepareTransaction.js.map +1 -1
- package/package.json +1 -1
- package/src/families/ethereum/__tests__/transaction.unit.test.ts +23 -0
- package/src/families/ethereum/modules/send.ts +5 -1
- package/src/families/ethereum/prepareTransaction.ts +27 -10
|
@@ -48,6 +48,16 @@ describe("Ethereum transaction tests", function () {
|
|
|
48
48
|
to: sendMaxTransaction.recipient
|
|
49
49
|
});
|
|
50
50
|
});
|
|
51
|
+
it("should not return a negative amount for a send max", function () {
|
|
52
|
+
var ethEmptyAccount = __assign(__assign({}, ethAccount), { spendableBalance: new bignumber_js_1["default"](0), balance: new bignumber_js_1["default"](0) });
|
|
53
|
+
var sendMaxTransaction = __assign(__assign({}, (0, createTransaction_1["default"])()), { recipient: "0xc3f95102D5c8F2c83e49Ce3Acfb905eDfb7f37dE", useAllAmount: true, maxFeePerGas: new bignumber_js_1["default"](1000000000), useGasLimit: new bignumber_js_1["default"](21000) });
|
|
54
|
+
var txData = {};
|
|
55
|
+
mode.fillTransactionData(ethEmptyAccount, sendMaxTransaction, txData);
|
|
56
|
+
expect(txData).toEqual({
|
|
57
|
+
value: "0x0",
|
|
58
|
+
to: sendMaxTransaction.recipient
|
|
59
|
+
});
|
|
60
|
+
});
|
|
51
61
|
});
|
|
52
62
|
describe("ERC1155", function () {
|
|
53
63
|
var mode = modules_1.modes["erc1155.transfer"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.unit.test.js","sourceRoot":"","sources":["../../../../src/families/ethereum/__tests__/transaction.unit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transaction.unit.test.js","sourceRoot":"","sources":["../../../../src/families/ethereum/__tests__/transaction.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/send.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAY3C,oBAAY,KAAK,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/send.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAY3C,oBAAY,KAAK,GAAG,MAAM,CAAC;AAyN3B,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAE3C,CAAC"}
|
|
@@ -69,7 +69,8 @@ var send = {
|
|
|
69
69
|
var feePerGas = (0, transaction_1.EIP1559ShouldBeUsed)(a.currency)
|
|
70
70
|
? t.maxFeePerGas
|
|
71
71
|
: t.gasPrice;
|
|
72
|
-
|
|
72
|
+
// Prevents a send max with a negative amount
|
|
73
|
+
amount = bignumber_js_1.BigNumber.maximum(a.spendableBalance.minus(gasLimit.times(feePerGas || 0)), 0);
|
|
73
74
|
}
|
|
74
75
|
else {
|
|
75
76
|
(0, invariant_1["default"])(t.amount, "amount is missing");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/send.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../../src/families/ethereum/modules/send.ts"],"names":[],"mappings":";;;;;;AAAA,6BAA6B;AAC7B,kEAAiC;AACjC,wDAAkC;AAClC,gDAA0B;AAC1B,6CAAyC;AAEzC,2CAK0B;AAC1B,8CAIwB;AAExB,IAAM,IAAI,GAAe;IACvB,qBAAqB,YAAC,CAAC,EAAE,CAAC,EAAE,MAAM;QAChC,IAAM,YAAY,GAAG,IAAA,+BAAiB,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAM,OAAO,GAAG,YAAY,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YAC5B,IAAI,YAAY,EAAE;gBAChB,aAAa;gBACb,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY;oBAChC,CAAC,CAAC,OAAO,CAAC,gBAAgB;oBAC1B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACb,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;aACtE;iBAAM;gBACL,gBAAgB;gBAChB,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY;oBAChC,CAAC,CAAC,OAAO,CAAC,gBAAgB;oBAC1B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACxC,MAAM,CAAC,MAAM,GAAG,wBAAS,CAAC,GAAG,CAC3B,CAAC,CAAC,YAAY;oBACZ,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;oBACtD,CAAC,CAAC,CAAC,CAAC,MAAM,EACZ,CAAC,CACF,CAAC;gBAEF,IACE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAChD;oBACA,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,mBAAU,EAAE,CAAC;iBAC/C;gBAED,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE;oBAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,wCAA+B,EAAE,CAAC;iBAC9D;aACF;YAED,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;gBACX,IACE,CAAC,CAAC,CAAC,eAAe;oBAClB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;oBACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EACnB;oBACA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,uBAAc,EAAE,CAAC;iBAC7C;qBAAM,IACL,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC9C;oBACA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,yBAAgB,EAAE,CAAC;iBAC/C;aACF;SACF;IACH,CAAC;IAED,mBAAmB,YAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAM,UAAU,GAAG,IAAA,+BAAiB,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3C,IAAI,UAAU,EAAE;YACN,IAAA,KAAK,GAAK,UAAU,MAAf,CAAgB;YAC7B,IAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAA,sBAAS,EAAC,IAAI,EAAE,2CAA2C,CAAC,CAAC;YAC7D,EAAE,CAAC,IAAI,GAAG,IAAI,GAAI,IAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClD,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC;YAC9B,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC;SACnB;aAAM;YACL,IAAI,MAAM,SAAA,CAAC;YAEX,IAAI,CAAC,CAAC,YAAY,EAAE;gBAClB,IAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC;gBAChC,IAAM,SAAS,GAAG,IAAA,iCAAmB,EAAC,CAAC,CAAC,QAAQ,CAAC;oBAC/C,CAAC,CAAC,CAAC,CAAC,YAAY;oBAChB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACf,6CAA6C;gBAC7C,MAAM,GAAG,wBAAS,CAAC,OAAO,CACxB,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EACxD,CAAC,CACF,CAAC;aACH;iBAAM;gBACL,IAAA,sBAAS,EAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACzC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;aACnB;YAED,IAAI,CAAC,CAAC,IAAI,EAAE;gBACV,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACzC;YAED,EAAE,CAAC,KAAK,GAAG,YAAK,IAAI,wBAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;YACrD,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;SACrB;IACH,CAAC;IAED,2BAA2B,YAAC,EAAmC,EAAE,MAAM;;YAAzC,WAAW,iBAAA,EAAY,MAAM,mBAAA;QACzD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,WAAW,CAAC,IAAI,0CAAE,MAAM,EAAE;YAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4CE;YACF,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;SACJ;IACH,CAAC;IAED,uBAAuB,YAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAM,UAAU,GAAG,IAAA,+BAAiB,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3C,IAAI,UAAU,EAAE;YACd,iBAAiB;YACjB,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC;YACjB,EAAE,CAAC,aAAa,GAAG;gBACjB;oBACE,EAAE,EAAE,UAAG,UAAU,CAAC,EAAE,cAAI,EAAE,CAAC,IAAI,SAAM;oBACrC,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,yBAAyB,EAAE,EAAE,CAAC,yBAAyB;oBACvD,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,CAAC,CAAC,YAAY;wBACnB,CAAC,CAAC,UAAU,CAAC,gBAAgB;wBAC7B,CAAC,CAAC,IAAI,wBAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;oBAChC,GAAG,EAAE,EAAE,CAAC,GAAG;oBACX,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE,EAAE,CAAC,OAAO;oBACnB,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBACzB,SAAS,EAAE,UAAU,CAAC,EAAE;oBACxB,IAAI,EAAE,IAAI,IAAI,EAAE;oBAChB,KAAK,EAAE,EAAE;iBACV;aACF,CAAC;SACH;IACH,CAAC;IAED,sGAAsG;IACtG,mBAAmB,EAAE,cAAM,OAAA,CAAC;QAC1B,KAAK,EAAE,IAAI;QACX,eAAe,EAAE,IAAI;QACrB,GAAG,EAAE,IAAI;KACV,CAAC,EAJyB,CAIzB;CACH,CAAC;AAEF,SAAS,wBAAwB,CAC/B,OAAO,EACP,WAAW;IAEX,IAAM,YAAY,GAAG,IAAA,+BAAiB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,IAAM,SAAS,GAAG,kBAAK,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAA,gBAAgB,GAAK,YAAY,iBAAjB,CAAkB;IAC1C,IAAI,MAAM,CAAC;IAEX,IAAI,WAAW,CAAC,YAAY,EAAE;QAC5B,MAAM,GAAG,gBAAgB,CAAC;KAC3B;SAAM;QACL,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO;QAChC,MAAM,GAAG,IAAI,wBAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE;YAC5C,MAAM,IAAI,yBAAgB,EAAE,CAAC;SAC9B;KACF;IAED,OAAO,2BAAG,CAAC,YAAY,CACrB,2BAA2B,EAC3B,SAAS,EACT,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CACpB,CAAC;AACJ,CAAC;AAEY,QAAA,KAAK,GAA8B;IAC9C,IAAI,MAAA;CACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../../src/families/ethereum/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASrD,OAAO,EAAe,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../../src/families/ethereum/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AASrD,OAAO,EAAe,WAAW,EAAE,MAAM,SAAS,CAAC;AAKnD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAoF7E,CAAC;AAEJ,eAAe,kBAAkB,CAAC"}
|
|
@@ -57,8 +57,9 @@ var gas_2 = require("./gas");
|
|
|
57
57
|
var logic_1 = require("./logic");
|
|
58
58
|
var transaction_1 = require("./transaction");
|
|
59
59
|
var modules_1 = require("./modules");
|
|
60
|
+
var account_1 = require("../../account");
|
|
60
61
|
var prepareTransaction = function (account, tx) { return __awaiter(void 0, void 0, void 0, function () {
|
|
61
|
-
var networkInfo, _a, maxPriorityFeePerGas, maxFeePerGas, gasPrice, estimatedGasLimit,
|
|
62
|
+
var networkInfo, _a, maxPriorityFeePerGas, maxFeePerGas, gasPrice, estimatedGasLimit, protoTransaction;
|
|
62
63
|
return __generator(this, function (_b) {
|
|
63
64
|
switch (_b.label) {
|
|
64
65
|
case 0:
|
|
@@ -86,15 +87,34 @@ var prepareTransaction = function (account, tx) { return __awaiter(void 0, void
|
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
if (!(0, logic_1.isEthereumAddress)(tx.recipient)) return [3 /*break*/, 4];
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
protoTransaction = (function () {
|
|
91
|
+
try {
|
|
92
|
+
return (0, transaction_1.buildEthereumTx)(account, tx, account.operationsCount).tx;
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
// fallback in case @ethereumjs/tx breaks on building a potentially partial transaction
|
|
96
|
+
var subAccount = tx.subAccountId
|
|
97
|
+
? (0, account_1.findSubAccountById)(account, tx.subAccountId)
|
|
98
|
+
: null;
|
|
99
|
+
var recipient = (subAccount === null || subAccount === void 0 ? void 0 : subAccount.type) === "TokenAccount"
|
|
100
|
+
? subAccount.token.contractAddress
|
|
101
|
+
: tx.recipient;
|
|
102
|
+
return {
|
|
103
|
+
from: account.freshAddress,
|
|
104
|
+
to: recipient,
|
|
105
|
+
data: undefined,
|
|
106
|
+
value: tx.amount
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
})();
|
|
110
|
+
(0, invariant_1["default"])(protoTransaction.to, "ethereum transaction has no recipient");
|
|
111
|
+
return [4 /*yield*/, (0, gas_2.estimateGasLimit)(account, protoTransaction.to.toString(),
|
|
92
112
|
// Those are the only elements from a transaction necessary to estimate the gas limit
|
|
93
113
|
{
|
|
94
114
|
from: account.freshAddress,
|
|
95
|
-
value: "0x" + (
|
|
96
|
-
data:
|
|
97
|
-
? "0x".concat(
|
|
115
|
+
value: "0x" + (protoTransaction.value.toString(16) || "00"),
|
|
116
|
+
data: protoTransaction.data
|
|
117
|
+
? "0x".concat(protoTransaction.data.toString("hex"))
|
|
98
118
|
: "0x"
|
|
99
119
|
})];
|
|
100
120
|
case 3:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../../src/families/ethereum/prepareTransaction.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAAkC;AAElC,6BAKe;AACf,6BAAyC;AACzC,iCAA4C;AAE5C,6CAAqE;AACrE,qCAA4E;
|
|
1
|
+
{"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../../src/families/ethereum/prepareTransaction.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -72,6 +72,29 @@ describe("Ethereum transaction tests", () => {
|
|
|
72
72
|
to: sendMaxTransaction.recipient,
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
|
+
|
|
76
|
+
it("should not return a negative amount for a send max", () => {
|
|
77
|
+
const ethEmptyAccount = {
|
|
78
|
+
...ethAccount,
|
|
79
|
+
spendableBalance: new BigNumber(0), // empty account
|
|
80
|
+
balance: new BigNumber(0), // empty account
|
|
81
|
+
};
|
|
82
|
+
const sendMaxTransaction = {
|
|
83
|
+
...createTransaction(),
|
|
84
|
+
recipient: "0xc3f95102D5c8F2c83e49Ce3Acfb905eDfb7f37dE",
|
|
85
|
+
useAllAmount: true,
|
|
86
|
+
maxFeePerGas: new BigNumber(1000000000), // 1 Gwei
|
|
87
|
+
useGasLimit: new BigNumber(21000),
|
|
88
|
+
};
|
|
89
|
+
const txData = {};
|
|
90
|
+
|
|
91
|
+
mode.fillTransactionData(ethEmptyAccount, sendMaxTransaction, txData);
|
|
92
|
+
|
|
93
|
+
expect(txData).toEqual({
|
|
94
|
+
value: "0x0", // theorically this should be negative as the account has 0 ETH but transaction still has fees
|
|
95
|
+
to: sendMaxTransaction.recipient,
|
|
96
|
+
});
|
|
97
|
+
});
|
|
75
98
|
});
|
|
76
99
|
|
|
77
100
|
describe("ERC1155", () => {
|
|
@@ -87,7 +87,11 @@ const send: ModeModule = {
|
|
|
87
87
|
const feePerGas = EIP1559ShouldBeUsed(a.currency)
|
|
88
88
|
? t.maxFeePerGas
|
|
89
89
|
: t.gasPrice;
|
|
90
|
-
|
|
90
|
+
// Prevents a send max with a negative amount
|
|
91
|
+
amount = BigNumber.maximum(
|
|
92
|
+
a.spendableBalance.minus(gasLimit.times(feePerGas || 0)),
|
|
93
|
+
0
|
|
94
|
+
);
|
|
91
95
|
} else {
|
|
92
96
|
invariant(t.amount, "amount is missing");
|
|
93
97
|
amount = t.amount;
|
|
@@ -11,6 +11,7 @@ import { isEthereumAddress } from "./logic";
|
|
|
11
11
|
import { NetworkInfo, Transaction } from "./types";
|
|
12
12
|
import { buildEthereumTx, EIP1559ShouldBeUsed } from "./transaction";
|
|
13
13
|
import { prepareTransaction as prepareTransactionModules } from "./modules";
|
|
14
|
+
import { findSubAccountById } from "../../account";
|
|
14
15
|
|
|
15
16
|
export const prepareTransaction: AccountBridge<Transaction>["prepareTransaction"] =
|
|
16
17
|
async (account, tx) => {
|
|
@@ -49,22 +50,38 @@ export const prepareTransaction: AccountBridge<Transaction>["prepareTransaction"
|
|
|
49
50
|
|
|
50
51
|
let estimatedGasLimit;
|
|
51
52
|
if (isEthereumAddress(tx.recipient)) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
// building a bear minimum transaction for gas estimation
|
|
54
|
+
const protoTransaction = (() => {
|
|
55
|
+
try {
|
|
56
|
+
return buildEthereumTx(account, tx, account.operationsCount).tx;
|
|
57
|
+
} catch (e) {
|
|
58
|
+
// fallback in case @ethereumjs/tx breaks on building a potentially partial transaction
|
|
59
|
+
const subAccount = tx.subAccountId
|
|
60
|
+
? findSubAccountById(account, tx.subAccountId)
|
|
61
|
+
: null;
|
|
62
|
+
const recipient =
|
|
63
|
+
subAccount?.type === "TokenAccount"
|
|
64
|
+
? subAccount.token.contractAddress
|
|
65
|
+
: tx.recipient;
|
|
66
|
+
return {
|
|
67
|
+
from: account.freshAddress,
|
|
68
|
+
to: recipient,
|
|
69
|
+
data: undefined,
|
|
70
|
+
value: tx.amount,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
})();
|
|
74
|
+
invariant(protoTransaction.to, "ethereum transaction has no recipient");
|
|
58
75
|
|
|
59
76
|
estimatedGasLimit = await estimateGasLimit(
|
|
60
77
|
account,
|
|
61
|
-
|
|
78
|
+
protoTransaction.to!.toString(),
|
|
62
79
|
// Those are the only elements from a transaction necessary to estimate the gas limit
|
|
63
80
|
{
|
|
64
81
|
from: account.freshAddress,
|
|
65
|
-
value: "0x" + (
|
|
66
|
-
data:
|
|
67
|
-
? `0x${
|
|
82
|
+
value: "0x" + (protoTransaction.value.toString(16) || "00"),
|
|
83
|
+
data: protoTransaction.data
|
|
84
|
+
? `0x${protoTransaction.data.toString("hex")}`
|
|
68
85
|
: "0x",
|
|
69
86
|
}
|
|
70
87
|
);
|