@ledgerhq/coin-stacks 0.1.1-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +20 -0
- package/.turbo/turbo-build.log +4 -0
- package/.unimportedrc.json +31 -0
- package/CHANGELOG.md +11 -0
- package/LICENSE.txt +21 -0
- package/jest.config.js +8 -0
- package/lib/bridge/broadcast.d.ts +4 -0
- package/lib/bridge/broadcast.d.ts.map +1 -0
- package/lib/bridge/broadcast.js +28 -0
- package/lib/bridge/broadcast.js.map +1 -0
- package/lib/bridge/buildOptimisticOperation.d.ts +4 -0
- package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -0
- package/lib/bridge/buildOptimisticOperation.js +34 -0
- package/lib/bridge/buildOptimisticOperation.js.map +1 -0
- package/lib/bridge/createTransaction.d.ts +4 -0
- package/lib/bridge/createTransaction.d.ts.map +1 -0
- package/lib/bridge/createTransaction.js +18 -0
- package/lib/bridge/createTransaction.js.map +1 -0
- package/lib/bridge/deviceTransactionConfig.d.ts +22 -0
- package/lib/bridge/deviceTransactionConfig.d.ts.map +1 -0
- package/lib/bridge/deviceTransactionConfig.js +34 -0
- package/lib/bridge/deviceTransactionConfig.js.map +1 -0
- package/lib/bridge/estimateMaxSpendable.d.ts +4 -0
- package/lib/bridge/estimateMaxSpendable.d.ts.map +1 -0
- package/lib/bridge/estimateMaxSpendable.js +46 -0
- package/lib/bridge/estimateMaxSpendable.js.map +1 -0
- package/lib/bridge/getTransactionStatus.d.ts +4 -0
- package/lib/bridge/getTransactionStatus.d.ts.map +1 -0
- package/lib/bridge/getTransactionStatus.js +60 -0
- package/lib/bridge/getTransactionStatus.js.map +1 -0
- package/lib/bridge/index.d.ts +11 -0
- package/lib/bridge/index.d.ts.map +1 -0
- package/lib/bridge/index.js +56 -0
- package/lib/bridge/index.js.map +1 -0
- package/lib/bridge/prepareTransaction.d.ts +4 -0
- package/lib/bridge/prepareTransaction.d.ts.map +1 -0
- package/lib/bridge/prepareTransaction.js +56 -0
- package/lib/bridge/prepareTransaction.js.map +1 -0
- package/lib/bridge/signOperation.d.ts +5 -0
- package/lib/bridge/signOperation.d.ts.map +1 -0
- package/lib/bridge/signOperation.js +85 -0
- package/lib/bridge/signOperation.js.map +1 -0
- package/lib/bridge/synchronization.d.ts +5 -0
- package/lib/bridge/synchronization.d.ts.map +1 -0
- package/lib/bridge/synchronization.js +62 -0
- package/lib/bridge/synchronization.js.map +1 -0
- package/lib/bridge/transaction.d.ts +14 -0
- package/lib/bridge/transaction.d.ts.map +1 -0
- package/lib/bridge/transaction.js +46 -0
- package/lib/bridge/transaction.js.map +1 -0
- package/lib/bridge/utils/addresses.d.ts +13 -0
- package/lib/bridge/utils/addresses.d.ts.map +1 -0
- package/lib/bridge/utils/addresses.js +15 -0
- package/lib/bridge/utils/addresses.js.map +1 -0
- package/lib/bridge/utils/misc.d.ts +15 -0
- package/lib/bridge/utils/misc.d.ts.map +1 -0
- package/lib/bridge/utils/misc.js +186 -0
- package/lib/bridge/utils/misc.js.map +1 -0
- package/lib/bridge/utils/misc.unit.test.d.ts +2 -0
- package/lib/bridge/utils/misc.unit.test.d.ts.map +1 -0
- package/lib/bridge/utils/misc.unit.test.js +230 -0
- package/lib/bridge/utils/misc.unit.test.js.map +1 -0
- package/lib/config.d.ts +14 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +16 -0
- package/lib/config.js.map +1 -0
- package/lib/errors.d.ts +4 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +6 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +21 -0
- package/lib/index.js.map +1 -0
- package/lib/network/api.d.ts +11 -0
- package/lib/network/api.d.ts.map +1 -0
- package/lib/network/api.js +139 -0
- package/lib/network/api.js.map +1 -0
- package/lib/network/api.types.d.ts +168 -0
- package/lib/network/api.types.d.ts.map +1 -0
- package/lib/network/api.types.js +9 -0
- package/lib/network/api.types.js.map +1 -0
- package/lib/network/index.d.ts +3 -0
- package/lib/network/index.d.ts.map +1 -0
- package/lib/network/index.js +19 -0
- package/lib/network/index.js.map +1 -0
- package/lib/signer/getAddress.d.ts +6 -0
- package/lib/signer/getAddress.d.ts.map +1 -0
- package/lib/signer/getAddress.js +31 -0
- package/lib/signer/getAddress.js.map +1 -0
- package/lib/signer/index.d.ts +4 -0
- package/lib/signer/index.d.ts.map +1 -0
- package/lib/signer/index.js +23 -0
- package/lib/signer/index.js.map +1 -0
- package/lib/signer/signMessage.d.ts +12 -0
- package/lib/signer/signMessage.d.ts.map +1 -0
- package/lib/signer/signMessage.js +31 -0
- package/lib/signer/signMessage.js.map +1 -0
- package/lib/test/bot-deviceActions.d.ts +4 -0
- package/lib/test/bot-deviceActions.d.ts.map +1 -0
- package/lib/test/bot-deviceActions.js +48 -0
- package/lib/test/bot-deviceActions.js.map +1 -0
- package/lib/test/bot-specs.d.ts +7 -0
- package/lib/test/bot-specs.d.ts.map +1 -0
- package/lib/test/bot-specs.js +73 -0
- package/lib/test/bot-specs.js.map +1 -0
- package/lib/test/bridgeDatasetTest.d.ts +4 -0
- package/lib/test/bridgeDatasetTest.d.ts.map +1 -0
- package/lib/test/bridgeDatasetTest.js +129 -0
- package/lib/test/bridgeDatasetTest.js.map +1 -0
- package/lib/test/cli.d.ts +15 -0
- package/lib/test/cli.d.ts.map +1 -0
- package/lib/test/cli.js +27 -0
- package/lib/test/cli.js.map +1 -0
- package/lib/test/index.d.ts +6 -0
- package/lib/test/index.d.ts.map +1 -0
- package/lib/test/index.js +26 -0
- package/lib/test/index.js.map +1 -0
- package/lib/types/bridge.d.ts +35 -0
- package/lib/types/bridge.d.ts.map +1 -0
- package/lib/types/bridge.js +3 -0
- package/lib/types/bridge.js.map +1 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +19 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/signer.d.ts +14 -0
- package/lib/types/signer.d.ts.map +1 -0
- package/lib/types/signer.js +3 -0
- package/lib/types/signer.js.map +1 -0
- package/lib/utils.d.ts +8 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +26 -0
- package/lib/utils.js.map +1 -0
- package/lib-es/bridge/broadcast.d.ts +4 -0
- package/lib-es/bridge/broadcast.d.ts.map +1 -0
- package/lib-es/bridge/broadcast.js +21 -0
- package/lib-es/bridge/broadcast.js.map +1 -0
- package/lib-es/bridge/buildOptimisticOperation.d.ts +4 -0
- package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -0
- package/lib-es/bridge/buildOptimisticOperation.js +27 -0
- package/lib-es/bridge/buildOptimisticOperation.js.map +1 -0
- package/lib-es/bridge/createTransaction.d.ts +4 -0
- package/lib-es/bridge/createTransaction.d.ts.map +1 -0
- package/lib-es/bridge/createTransaction.js +11 -0
- package/lib-es/bridge/createTransaction.js.map +1 -0
- package/lib-es/bridge/deviceTransactionConfig.d.ts +22 -0
- package/lib-es/bridge/deviceTransactionConfig.d.ts.map +1 -0
- package/lib-es/bridge/deviceTransactionConfig.js +32 -0
- package/lib-es/bridge/deviceTransactionConfig.js.map +1 -0
- package/lib-es/bridge/estimateMaxSpendable.d.ts +4 -0
- package/lib-es/bridge/estimateMaxSpendable.d.ts.map +1 -0
- package/lib-es/bridge/estimateMaxSpendable.js +39 -0
- package/lib-es/bridge/estimateMaxSpendable.js.map +1 -0
- package/lib-es/bridge/getTransactionStatus.d.ts +4 -0
- package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -0
- package/lib-es/bridge/getTransactionStatus.js +53 -0
- package/lib-es/bridge/getTransactionStatus.js.map +1 -0
- package/lib-es/bridge/index.d.ts +11 -0
- package/lib-es/bridge/index.d.ts.map +1 -0
- package/lib-es/bridge/index.js +48 -0
- package/lib-es/bridge/index.js.map +1 -0
- package/lib-es/bridge/prepareTransaction.d.ts +4 -0
- package/lib-es/bridge/prepareTransaction.d.ts.map +1 -0
- package/lib-es/bridge/prepareTransaction.js +49 -0
- package/lib-es/bridge/prepareTransaction.js.map +1 -0
- package/lib-es/bridge/signOperation.d.ts +5 -0
- package/lib-es/bridge/signOperation.d.ts.map +1 -0
- package/lib-es/bridge/signOperation.js +78 -0
- package/lib-es/bridge/signOperation.js.map +1 -0
- package/lib-es/bridge/synchronization.d.ts +5 -0
- package/lib-es/bridge/synchronization.d.ts.map +1 -0
- package/lib-es/bridge/synchronization.js +55 -0
- package/lib-es/bridge/synchronization.js.map +1 -0
- package/lib-es/bridge/transaction.d.ts +14 -0
- package/lib-es/bridge/transaction.d.ts.map +1 -0
- package/lib-es/bridge/transaction.js +38 -0
- package/lib-es/bridge/transaction.js.map +1 -0
- package/lib-es/bridge/utils/addresses.d.ts +13 -0
- package/lib-es/bridge/utils/addresses.d.ts.map +1 -0
- package/lib-es/bridge/utils/addresses.js +11 -0
- package/lib-es/bridge/utils/addresses.js.map +1 -0
- package/lib-es/bridge/utils/misc.d.ts +15 -0
- package/lib-es/bridge/utils/misc.d.ts.map +1 -0
- package/lib-es/bridge/utils/misc.js +176 -0
- package/lib-es/bridge/utils/misc.js.map +1 -0
- package/lib-es/bridge/utils/misc.unit.test.d.ts +2 -0
- package/lib-es/bridge/utils/misc.unit.test.d.ts.map +1 -0
- package/lib-es/bridge/utils/misc.unit.test.js +228 -0
- package/lib-es/bridge/utils/misc.unit.test.js.map +1 -0
- package/lib-es/config.d.ts +14 -0
- package/lib-es/config.d.ts.map +1 -0
- package/lib-es/config.js +11 -0
- package/lib-es/config.js.map +1 -0
- package/lib-es/errors.d.ts +4 -0
- package/lib-es/errors.d.ts.map +1 -0
- package/lib-es/errors.js +3 -0
- package/lib-es/errors.js.map +1 -0
- package/lib-es/index.d.ts +4 -0
- package/lib-es/index.d.ts.map +1 -0
- package/lib-es/index.js +3 -0
- package/lib-es/index.js.map +1 -0
- package/lib-es/network/api.d.ts +11 -0
- package/lib-es/network/api.d.ts.map +1 -0
- package/lib-es/network/api.js +124 -0
- package/lib-es/network/api.js.map +1 -0
- package/lib-es/network/api.types.d.ts +168 -0
- package/lib-es/network/api.types.d.ts.map +1 -0
- package/lib-es/network/api.types.js +6 -0
- package/lib-es/network/api.types.js.map +1 -0
- package/lib-es/network/index.d.ts +3 -0
- package/lib-es/network/index.d.ts.map +1 -0
- package/lib-es/network/index.js +3 -0
- package/lib-es/network/index.js.map +1 -0
- package/lib-es/signer/getAddress.d.ts +6 -0
- package/lib-es/signer/getAddress.d.ts.map +1 -0
- package/lib-es/signer/getAddress.js +29 -0
- package/lib-es/signer/getAddress.js.map +1 -0
- package/lib-es/signer/index.d.ts +4 -0
- package/lib-es/signer/index.d.ts.map +1 -0
- package/lib-es/signer/index.js +4 -0
- package/lib-es/signer/index.js.map +1 -0
- package/lib-es/signer/signMessage.d.ts +12 -0
- package/lib-es/signer/signMessage.d.ts.map +1 -0
- package/lib-es/signer/signMessage.js +27 -0
- package/lib-es/signer/signMessage.js.map +1 -0
- package/lib-es/test/bot-deviceActions.d.ts +4 -0
- package/lib-es/test/bot-deviceActions.d.ts.map +1 -0
- package/lib-es/test/bot-deviceActions.js +45 -0
- package/lib-es/test/bot-deviceActions.js.map +1 -0
- package/lib-es/test/bot-specs.d.ts +7 -0
- package/lib-es/test/bot-specs.d.ts.map +1 -0
- package/lib-es/test/bot-specs.js +68 -0
- package/lib-es/test/bot-specs.js.map +1 -0
- package/lib-es/test/bridgeDatasetTest.d.ts +4 -0
- package/lib-es/test/bridgeDatasetTest.d.ts.map +1 -0
- package/lib-es/test/bridgeDatasetTest.js +126 -0
- package/lib-es/test/bridgeDatasetTest.js.map +1 -0
- package/lib-es/test/cli.d.ts +15 -0
- package/lib-es/test/cli.d.ts.map +1 -0
- package/lib-es/test/cli.js +21 -0
- package/lib-es/test/cli.js.map +1 -0
- package/lib-es/test/index.d.ts +6 -0
- package/lib-es/test/index.d.ts.map +1 -0
- package/lib-es/test/index.js +6 -0
- package/lib-es/test/index.js.map +1 -0
- package/lib-es/types/bridge.d.ts +35 -0
- package/lib-es/types/bridge.d.ts.map +1 -0
- package/lib-es/types/bridge.js +2 -0
- package/lib-es/types/bridge.js.map +1 -0
- package/lib-es/types/index.d.ts +3 -0
- package/lib-es/types/index.d.ts.map +1 -0
- package/lib-es/types/index.js +3 -0
- package/lib-es/types/index.js.map +1 -0
- package/lib-es/types/signer.d.ts +14 -0
- package/lib-es/types/signer.d.ts.map +1 -0
- package/lib-es/types/signer.js +2 -0
- package/lib-es/types/signer.js.map +1 -0
- package/lib-es/utils.d.ts +8 -0
- package/lib-es/utils.d.ts.map +1 -0
- package/lib-es/utils.js +17 -0
- package/lib-es/utils.js.map +1 -0
- package/package.json +136 -0
- package/src/bridge/broadcast.ts +18 -0
- package/src/bridge/buildOptimisticOperation.ts +34 -0
- package/src/bridge/createTransaction.ts +13 -0
- package/src/bridge/deviceTransactionConfig.ts +57 -0
- package/src/bridge/estimateMaxSpendable.ts +50 -0
- package/src/bridge/getTransactionStatus.ts +56 -0
- package/src/bridge/index.ts +64 -0
- package/src/bridge/prepareTransaction.ts +60 -0
- package/src/bridge/signOperation.ts +91 -0
- package/src/bridge/synchronization.ts +55 -0
- package/src/bridge/transaction.ts +75 -0
- package/src/bridge/utils/addresses.ts +23 -0
- package/src/bridge/utils/misc.ts +274 -0
- package/src/bridge/utils/misc.unit.test.ts +237 -0
- package/src/config.ts +26 -0
- package/src/errors.ts +3 -0
- package/src/index.ts +4 -0
- package/src/network/api.ts +173 -0
- package/src/network/api.types.ts +180 -0
- package/src/network/index.ts +2 -0
- package/src/signer/getAddress.ts +27 -0
- package/src/signer/index.ts +4 -0
- package/src/signer/signMessage.ts +26 -0
- package/src/test/bot-deviceActions.ts +47 -0
- package/src/test/bot-specs.ts +82 -0
- package/src/test/bridgeDatasetTest.ts +134 -0
- package/src/test/cli.ts +38 -0
- package/src/test/index.ts +5 -0
- package/src/types/bridge.ts +49 -0
- package/src/types/index.ts +2 -0
- package/src/types/signer.ts +16 -0
- package/src/utils.ts +24 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,176 @@
|
|
|
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
|
+
import { BigNumber } from "bignumber.js";
|
|
11
|
+
import { makeUnsignedSTXTokenTransfer, createMessageSignature, deserializeCV, cvToJSON, } from "@stacks/transactions";
|
|
12
|
+
import { decodeAccountId } from "@ledgerhq/coin-framework/account/index";
|
|
13
|
+
import { fetchFullMempoolTxs, fetchNonce, StacksNetwork, } from "../../network/index";
|
|
14
|
+
import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
|
|
15
|
+
import { encodeOperationId, encodeSubOperationId } from "@ledgerhq/coin-framework/operation";
|
|
16
|
+
import { log } from "@ledgerhq/logs";
|
|
17
|
+
export const getTxToBroadcast = (operation, signature, rawData) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
var _a;
|
|
19
|
+
const { value, recipients, fee, extra: { memo }, } = operation;
|
|
20
|
+
const { anchorMode, network, xpub } = rawData;
|
|
21
|
+
const options = {
|
|
22
|
+
amount: BigNumber(value).minus(fee).toFixed(),
|
|
23
|
+
recipient: recipients[0],
|
|
24
|
+
anchorMode,
|
|
25
|
+
memo,
|
|
26
|
+
network: StacksNetwork[network],
|
|
27
|
+
publicKey: xpub,
|
|
28
|
+
fee: BigNumber(fee).toFixed(),
|
|
29
|
+
nonce: (_a = operation.transactionSequenceNumber) !== null && _a !== void 0 ? _a : 0,
|
|
30
|
+
};
|
|
31
|
+
const tx = yield makeUnsignedSTXTokenTransfer(options);
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
33
|
+
// @ts-ignore need to ignore the TS error here
|
|
34
|
+
tx.auth.spendingCondition.signature = createMessageSignature(signature);
|
|
35
|
+
return Buffer.from(tx.serialize());
|
|
36
|
+
});
|
|
37
|
+
export const getUnit = () => getCryptoCurrencyById("stacks").units[0];
|
|
38
|
+
export const getAddress = (account) => ({ address: account.freshAddress, derivationPath: account.freshAddressPath });
|
|
39
|
+
const getMemo = (memoHex) => {
|
|
40
|
+
if ((memoHex === null || memoHex === void 0 ? void 0 : memoHex.substring(0, 2)) === "0x") {
|
|
41
|
+
// eslint-disable-next-line no-control-regex
|
|
42
|
+
return Buffer.from(memoHex.substring(2), "hex").toString().replace(/\x00/g, "");
|
|
43
|
+
// NOTE: couldn't use replaceAll because it's not supported in node 14
|
|
44
|
+
}
|
|
45
|
+
return "";
|
|
46
|
+
};
|
|
47
|
+
export const mapPendingTxToOps = (accountID, address) => (tx) => {
|
|
48
|
+
const { sender_address, receipt_time, fee_rate, tx_id, token_transfer, tx_status, nonce } = tx;
|
|
49
|
+
if (tx.tx_type !== "token_transfer" || tx_status !== "pending") {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const memo = getMemo(token_transfer.memo);
|
|
53
|
+
const feeToUse = new BigNumber(fee_rate || "0");
|
|
54
|
+
const date = new Date(receipt_time * 1000);
|
|
55
|
+
const operationCommons = {
|
|
56
|
+
hash: tx_id,
|
|
57
|
+
fee: feeToUse,
|
|
58
|
+
accountId: accountID,
|
|
59
|
+
senders: [sender_address],
|
|
60
|
+
recipients: [token_transfer.recipient_address],
|
|
61
|
+
transactionSequenceNumber: nonce,
|
|
62
|
+
value: new BigNumber(token_transfer.amount).plus(feeToUse),
|
|
63
|
+
date,
|
|
64
|
+
extra: {
|
|
65
|
+
memo,
|
|
66
|
+
},
|
|
67
|
+
blockHeight: null,
|
|
68
|
+
blockHash: null,
|
|
69
|
+
};
|
|
70
|
+
const isSending = address === sender_address;
|
|
71
|
+
const isReceiving = token_transfer.recipient_address === address;
|
|
72
|
+
const ops = [];
|
|
73
|
+
if (isSending) {
|
|
74
|
+
const type = "OUT";
|
|
75
|
+
ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), type }));
|
|
76
|
+
}
|
|
77
|
+
else if (isReceiving) {
|
|
78
|
+
const type = "IN";
|
|
79
|
+
ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), type }));
|
|
80
|
+
}
|
|
81
|
+
return ops;
|
|
82
|
+
};
|
|
83
|
+
export const mapTxToOps = (accountID, address) => (tx) => {
|
|
84
|
+
var _a, _b, _c;
|
|
85
|
+
try {
|
|
86
|
+
const { tx_id, fee_rate, nonce, block_height, burn_block_time, sender_address, block_hash: blockHash, } = tx.tx;
|
|
87
|
+
const { stx_received: receivedValue, stx_sent: sentValue } = tx;
|
|
88
|
+
let recipients = [];
|
|
89
|
+
if (tx.tx.tx_type === "token_transfer" && tx.tx.token_transfer) {
|
|
90
|
+
recipients = [tx.tx.token_transfer.recipient_address];
|
|
91
|
+
}
|
|
92
|
+
const memoHex = (_a = tx.tx.token_transfer) === null || _a === void 0 ? void 0 : _a.memo;
|
|
93
|
+
const memo = getMemo(memoHex !== null && memoHex !== void 0 ? memoHex : "");
|
|
94
|
+
const ops = [];
|
|
95
|
+
const date = new Date(burn_block_time * 1000);
|
|
96
|
+
const feeToUse = new BigNumber(fee_rate || "0");
|
|
97
|
+
const isSending = sentValue !== "0" && receivedValue === "0";
|
|
98
|
+
const isReceiving = receivedValue !== "0";
|
|
99
|
+
const operationCommons = {
|
|
100
|
+
hash: tx_id,
|
|
101
|
+
blockHeight: block_height,
|
|
102
|
+
blockHash,
|
|
103
|
+
fee: feeToUse,
|
|
104
|
+
accountId: accountID,
|
|
105
|
+
senders: [sender_address],
|
|
106
|
+
transactionSequenceNumber: nonce,
|
|
107
|
+
date,
|
|
108
|
+
extra: {
|
|
109
|
+
memo,
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
if (isSending) {
|
|
113
|
+
const type = "OUT";
|
|
114
|
+
let internalOperations = undefined;
|
|
115
|
+
if (tx.tx.tx_type === "contract_call" && tx.tx.contract_call) {
|
|
116
|
+
internalOperations = [];
|
|
117
|
+
const deserialized = deserializeCV(tx.tx.contract_call.function_args[0].hex);
|
|
118
|
+
const decodedArgs = cvToJSON(deserialized);
|
|
119
|
+
for (const [idx, t] of decodedArgs.value.entries()) {
|
|
120
|
+
internalOperations.push(Object.assign(Object.assign({}, operationCommons), { id: encodeSubOperationId(accountID, tx_id, type, idx), contract: "send-many", type, value: new BigNumber(t.value.ustx.value), senders: [sender_address], recipients: [t.value.to.value], extra: {
|
|
121
|
+
memo: getMemo((_c = (_b = t.value.memo) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : ""),
|
|
122
|
+
} }));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), value: new BigNumber(sentValue), recipients,
|
|
126
|
+
type,
|
|
127
|
+
internalOperations }));
|
|
128
|
+
}
|
|
129
|
+
if (isReceiving) {
|
|
130
|
+
const type = "IN";
|
|
131
|
+
ops.push(Object.assign(Object.assign({}, operationCommons), { id: encodeOperationId(accountID, tx_id, type), value: new BigNumber(receivedValue), recipients: recipients.length ? recipients : [address], type }));
|
|
132
|
+
}
|
|
133
|
+
return ops;
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
log("warn", "mapTxToOps failed for stacks", err);
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
export function reconciliatePublicKey(publicKey, initialAccount) {
|
|
141
|
+
if (publicKey)
|
|
142
|
+
return publicKey;
|
|
143
|
+
if (initialAccount) {
|
|
144
|
+
const { xpubOrAddress } = decodeAccountId(initialAccount.id);
|
|
145
|
+
return xpubOrAddress;
|
|
146
|
+
}
|
|
147
|
+
throw new Error("publicKey wasn't properly restored");
|
|
148
|
+
}
|
|
149
|
+
export const findNextNonce = (senderAddress, pendingOps) => __awaiter(void 0, void 0, void 0, function* () {
|
|
150
|
+
let nextNonce = BigNumber(0);
|
|
151
|
+
for (const op of pendingOps) {
|
|
152
|
+
const nonce = op.transactionSequenceNumber
|
|
153
|
+
? new BigNumber(op.transactionSequenceNumber)
|
|
154
|
+
: new BigNumber(0);
|
|
155
|
+
if (nonce.gt(nextNonce)) {
|
|
156
|
+
nextNonce = nonce;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const allMempoolTxns = yield fetchFullMempoolTxs(senderAddress);
|
|
160
|
+
for (const tx of allMempoolTxns) {
|
|
161
|
+
const nonce = BigNumber(tx.nonce);
|
|
162
|
+
if (nonce.gt(nextNonce)) {
|
|
163
|
+
nextNonce = nonce;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (!nextNonce.eq(0)) {
|
|
167
|
+
nextNonce = nextNonce.plus(1);
|
|
168
|
+
}
|
|
169
|
+
const nonceResp = yield fetchNonce(senderAddress);
|
|
170
|
+
const possibleNextNonce = new BigNumber(nonceResp.possible_next_nonce);
|
|
171
|
+
if (possibleNextNonce.gt(nextNonce)) {
|
|
172
|
+
nextNonce = possibleNextNonce;
|
|
173
|
+
}
|
|
174
|
+
return nextNonce;
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=misc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/bridge/utils/misc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc.unit.test.d.ts","sourceRoot":"","sources":["../../../src/bridge/utils/misc.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,228 @@
|
|
|
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
|
+
import { mapPendingTxToOps, mapTxToOps } from "./misc";
|
|
11
|
+
import { encodeAccountId } from "@ledgerhq/coin-framework/account/index";
|
|
12
|
+
import { fetchFullTxs } from "../../network/index";
|
|
13
|
+
const Address = "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J";
|
|
14
|
+
const mempoolTransfer = {
|
|
15
|
+
tx_id: "0x628369d2c9b49f0ec95531fe1e6a39141573117f3dd047fca65ff5e4058fbc55",
|
|
16
|
+
nonce: 32,
|
|
17
|
+
fee_rate: "487",
|
|
18
|
+
sender_address: "SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA",
|
|
19
|
+
sponsored: false,
|
|
20
|
+
post_condition_mode: "deny",
|
|
21
|
+
post_conditions: [],
|
|
22
|
+
anchor_mode: "any",
|
|
23
|
+
tx_status: "pending",
|
|
24
|
+
receipt_time: 1714554733,
|
|
25
|
+
receipt_time_iso: "2024-05-01T09:12:13.000Z",
|
|
26
|
+
tx_type: "token_transfer",
|
|
27
|
+
token_transfer: {
|
|
28
|
+
recipient_address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
|
|
29
|
+
amount: "9523",
|
|
30
|
+
memo: "0x00000000000000000000000000000000000000000000000000000000000000000000",
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const sendManyTransfer = {
|
|
34
|
+
tx: {
|
|
35
|
+
tx_id: "0x68bdba90cdbd4e2e112fd008c8c396bd4ca365e482dc68fe25c7aeb5d8eb4c3f",
|
|
36
|
+
nonce: 18,
|
|
37
|
+
fee_rate: "500000",
|
|
38
|
+
sender_address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
|
|
39
|
+
sponsored: false,
|
|
40
|
+
post_condition_mode: "deny",
|
|
41
|
+
post_conditions: [
|
|
42
|
+
{
|
|
43
|
+
type: "stx",
|
|
44
|
+
condition_code: "sent_equal_to",
|
|
45
|
+
amount: "345000",
|
|
46
|
+
principal: {
|
|
47
|
+
type_id: "principal_standard",
|
|
48
|
+
address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
anchor_mode: "any",
|
|
53
|
+
is_unanchored: false,
|
|
54
|
+
block_hash: "0xc8dd294972d86b09d4226fe99f8bfcdf2c55a7280ca87b7dc8b0fd119a7059f1",
|
|
55
|
+
parent_block_hash: "0xc8f2c105e37544ce27a3a470651d950c6e8fe5f6c072aef653e7ea1fbd97a429",
|
|
56
|
+
block_height: 137791,
|
|
57
|
+
block_time: 1706802438,
|
|
58
|
+
block_time_iso: "2024-02-01T15:47:18.000Z",
|
|
59
|
+
burn_block_time: 1706802438,
|
|
60
|
+
burn_block_time_iso: "2024-02-01T15:47:18.000Z",
|
|
61
|
+
parent_burn_block_time: 1706801557,
|
|
62
|
+
parent_burn_block_time_iso: "2024-02-01T15:32:37.000Z",
|
|
63
|
+
canonical: true,
|
|
64
|
+
tx_index: 121,
|
|
65
|
+
tx_status: "success",
|
|
66
|
+
tx_result: {
|
|
67
|
+
hex: "0x0703",
|
|
68
|
+
repr: "(ok true)",
|
|
69
|
+
},
|
|
70
|
+
microblock_hash: "0x",
|
|
71
|
+
microblock_sequence: 2147483647,
|
|
72
|
+
microblock_canonical: true,
|
|
73
|
+
event_count: 6,
|
|
74
|
+
events: [],
|
|
75
|
+
execution_cost_read_count: 6,
|
|
76
|
+
execution_cost_read_length: 737,
|
|
77
|
+
execution_cost_runtime: 151010,
|
|
78
|
+
execution_cost_write_count: 3,
|
|
79
|
+
execution_cost_write_length: 3,
|
|
80
|
+
tx_type: "contract_call",
|
|
81
|
+
contract_call: {
|
|
82
|
+
contract_id: "SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.send-many-memo",
|
|
83
|
+
function_name: "send-many",
|
|
84
|
+
function_signature: "",
|
|
85
|
+
function_args: [
|
|
86
|
+
{
|
|
87
|
+
hex: "0x0b000000030c00000003046d656d6f020000000333333302746f05162bd4fbc3d1218275b9ae37c58a8dbed9a952c35c047573747801000000000000000000000000000027100c00000003046d656d6f020000000334343402746f051601a0369ffa2faa8fe74faada53e2e3d215b4d42a047573747801000000000000000000000000000088b80c00000003046d656d6f020000000335353502746f051660cc6b74d6d317918d0a7717069da56d775d817e047573747801000000000000000000000000000493e0",
|
|
88
|
+
repr: "(list (tuple (memo 0x333333) (to 'SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA) (ustx u10000)) (tuple (memo 0x343434) (to 'SPT0DMZZ8QTN3Z79YNDMMZ2WF91BD6M59S9Z10Y) (ustx u35000)) (tuple (memo 0x353535) (to 'SP1GCRTVMTV9HF4CD19VHE1MXMNPQEQC1FT6YWF5Y) (ustx u300000)))",
|
|
89
|
+
name: "",
|
|
90
|
+
type: "(list 3 (tuple (memo (buff 3)) (to principal) (ustx uint)))",
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
stx_sent: "845000",
|
|
96
|
+
stx_received: "0",
|
|
97
|
+
events: {
|
|
98
|
+
stx: {
|
|
99
|
+
transfer: 3,
|
|
100
|
+
mint: 0,
|
|
101
|
+
burn: 0,
|
|
102
|
+
},
|
|
103
|
+
ft: {
|
|
104
|
+
transfer: 0,
|
|
105
|
+
mint: 0,
|
|
106
|
+
burn: 0,
|
|
107
|
+
},
|
|
108
|
+
nft: {
|
|
109
|
+
transfer: 0,
|
|
110
|
+
mint: 0,
|
|
111
|
+
burn: 0,
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
const basicTransfer = {
|
|
116
|
+
tx: {
|
|
117
|
+
tx_id: "0x84254bb1e50b9e4f1dd48161ba5e87dff4ba8718117e8c364769067614dfb99a",
|
|
118
|
+
nonce: 22,
|
|
119
|
+
fee_rate: "125250",
|
|
120
|
+
sender_address: "SP26AZ1JSFZQ82VH5W2NJSB2QW15EW5YKT6WMD69J",
|
|
121
|
+
sponsored: false,
|
|
122
|
+
post_condition_mode: "deny",
|
|
123
|
+
post_conditions: [],
|
|
124
|
+
anchor_mode: "any",
|
|
125
|
+
is_unanchored: false,
|
|
126
|
+
block_hash: "0xd3272fbbc264eec8f8b7857541d7a5e6c043b54dd799274544a72d185dc34f1d",
|
|
127
|
+
parent_block_hash: "0x7bc3a3adae166f4a876697ad4c4f924d29dcea2c84607fc7765c0ed0855c3e90",
|
|
128
|
+
block_height: 151738,
|
|
129
|
+
block_time: 1716831904,
|
|
130
|
+
block_time_iso: "2024-05-27T17:45:04.000Z",
|
|
131
|
+
burn_block_time: 1716831849,
|
|
132
|
+
burn_block_time_iso: "2024-05-27T17:44:09.000Z",
|
|
133
|
+
parent_burn_block_time: 1716831377,
|
|
134
|
+
parent_burn_block_time_iso: "2024-05-27T17:36:17.000Z",
|
|
135
|
+
canonical: true,
|
|
136
|
+
tx_index: 29,
|
|
137
|
+
tx_status: "success",
|
|
138
|
+
tx_result: {
|
|
139
|
+
hex: "0x0703",
|
|
140
|
+
repr: "(ok true)",
|
|
141
|
+
},
|
|
142
|
+
microblock_hash: "0x",
|
|
143
|
+
microblock_sequence: 2147483647,
|
|
144
|
+
microblock_canonical: true,
|
|
145
|
+
event_count: 1,
|
|
146
|
+
events: [],
|
|
147
|
+
execution_cost_read_count: 0,
|
|
148
|
+
execution_cost_read_length: 0,
|
|
149
|
+
execution_cost_runtime: 0,
|
|
150
|
+
execution_cost_write_count: 0,
|
|
151
|
+
execution_cost_write_length: 0,
|
|
152
|
+
tx_type: "token_transfer",
|
|
153
|
+
token_transfer: {
|
|
154
|
+
recipient_address: "SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA",
|
|
155
|
+
amount: "827695",
|
|
156
|
+
memo: "0x31323333333334000000000000000000000000000000000000000000000000000000",
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
stx_sent: "952945",
|
|
160
|
+
stx_received: "0",
|
|
161
|
+
events: {
|
|
162
|
+
stx: {
|
|
163
|
+
transfer: 1,
|
|
164
|
+
mint: 0,
|
|
165
|
+
burn: 0,
|
|
166
|
+
},
|
|
167
|
+
ft: {
|
|
168
|
+
transfer: 0,
|
|
169
|
+
mint: 0,
|
|
170
|
+
burn: 0,
|
|
171
|
+
},
|
|
172
|
+
nft: {
|
|
173
|
+
transfer: 0,
|
|
174
|
+
mint: 0,
|
|
175
|
+
burn: 0,
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
describe("operation building from raw", () => {
|
|
180
|
+
test("map raw transaction to op", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
181
|
+
const accountId = encodeAccountId({
|
|
182
|
+
type: "js",
|
|
183
|
+
version: "2",
|
|
184
|
+
currencyId: "stacks",
|
|
185
|
+
xpubOrAddress: "",
|
|
186
|
+
derivationMode: "stacks_wallet",
|
|
187
|
+
});
|
|
188
|
+
// Contains operations for txn of type token_transfer
|
|
189
|
+
const operations = [sendManyTransfer, basicTransfer].flatMap(mapTxToOps(accountId, Address));
|
|
190
|
+
expect(operations.length).toBe(2);
|
|
191
|
+
const opSenMany = operations[0];
|
|
192
|
+
const opBasic = operations[1];
|
|
193
|
+
expect(opSenMany.type).toBe("OUT");
|
|
194
|
+
expect(opSenMany.internalOperations).toHaveLength(3);
|
|
195
|
+
expect(opSenMany.senders).toHaveLength(1);
|
|
196
|
+
expect(opSenMany.recipients).toHaveLength(0);
|
|
197
|
+
expect(opBasic.type).toBe("OUT");
|
|
198
|
+
expect(opBasic.internalOperations).toBeUndefined();
|
|
199
|
+
expect(opBasic.senders).toHaveLength(1);
|
|
200
|
+
expect(opBasic.recipients).toHaveLength(1);
|
|
201
|
+
}));
|
|
202
|
+
});
|
|
203
|
+
test("convert raw transactions to live operations", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
204
|
+
const rawTxs = yield fetchFullTxs(Address);
|
|
205
|
+
const operations = rawTxs.flatMap(mapTxToOps("dummyAccountID", Address));
|
|
206
|
+
expect(operations).toBeDefined();
|
|
207
|
+
expect(operations.length).toBeGreaterThan(0);
|
|
208
|
+
}));
|
|
209
|
+
describe("operation building from mempool raw", () => {
|
|
210
|
+
test("map raw mempool transaction to op", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
211
|
+
const accountId = encodeAccountId({
|
|
212
|
+
type: "js",
|
|
213
|
+
version: "2",
|
|
214
|
+
currencyId: "stacks",
|
|
215
|
+
xpubOrAddress: "",
|
|
216
|
+
derivationMode: "stacks_wallet",
|
|
217
|
+
});
|
|
218
|
+
const address = "SPNX9YY3T4GR4XDSNRVWB2MDQVCTJMP3BGT7VCZA";
|
|
219
|
+
// Contains operations for txn of type token_transfer
|
|
220
|
+
const operations = [mempoolTransfer].map(mapPendingTxToOps(accountId, address)).flat();
|
|
221
|
+
expect(operations.length).toBe(1);
|
|
222
|
+
expect(operations[0].type).toBe("OUT");
|
|
223
|
+
expect(operations[0].internalOperations).toBeUndefined();
|
|
224
|
+
expect(operations[0].senders).toHaveLength(1);
|
|
225
|
+
expect(operations[0].recipients).toHaveLength(1);
|
|
226
|
+
}));
|
|
227
|
+
});
|
|
228
|
+
//# sourceMappingURL=misc.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc.unit.test.js","sourceRoot":"","sources":["../../../src/bridge/utils/misc.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CurrencyConfig } from "@ledgerhq/coin-framework/config";
|
|
2
|
+
export type StacksCoinConfig = () => CurrencyConfig & {
|
|
3
|
+
config_currency_stacks: {
|
|
4
|
+
type: "object";
|
|
5
|
+
default: {
|
|
6
|
+
status: {
|
|
7
|
+
type: "active";
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare const setCoinConfig: (config: StacksCoinConfig) => void;
|
|
13
|
+
export declare const getCoinConfig: () => ReturnType<StacksCoinConfig>;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,MAAM,cAAc,GAAG;IACpD,sBAAsB,EAAE;QACtB,IAAI,EAAE,QAAQ,CAAC;QACf,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,aAAa,WAAY,gBAAgB,KAAG,IAExD,CAAC;AAEF,eAAO,MAAM,aAAa,QAAO,UAAU,CAAC,gBAAgB,CAM3D,CAAC"}
|
package/lib-es/config.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
let coinConfig;
|
|
2
|
+
export const setCoinConfig = (config) => {
|
|
3
|
+
coinConfig = config;
|
|
4
|
+
};
|
|
5
|
+
export const getCoinConfig = () => {
|
|
6
|
+
if (!(coinConfig === null || coinConfig === void 0 ? void 0 : coinConfig())) {
|
|
7
|
+
throw new Error("Stacks module config not set");
|
|
8
|
+
}
|
|
9
|
+
return coinConfig();
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,IAAI,UAAwC,CAAC;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAwB,EAAQ,EAAE;IAC9D,UAAU,GAAG,MAAM,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAiC,EAAE;IAC9D,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,EAAI,CAAA,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;EAA8C,CAAC"}
|
package/lib-es/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
package/lib-es/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BalanceResponse, BroadcastTransactionRequest, BroadcastTransactionResponse, EstimatedFeesRequest, EstimatedFeesResponse, GetNonceResponse, MempoolResponse, MempoolTransaction, NetworkStatusResponse, TransactionResponse, TransactionsResponse } from "./api.types";
|
|
2
|
+
export declare const fetchBalances: (addr: string) => Promise<BalanceResponse>;
|
|
3
|
+
export declare const fetchEstimatedFees: (request: EstimatedFeesRequest) => Promise<EstimatedFeesResponse>;
|
|
4
|
+
export declare const fetchBlockHeight: () => Promise<NetworkStatusResponse>;
|
|
5
|
+
export declare const fetchTxs: (addr: string, offset?: number) => Promise<TransactionsResponse>;
|
|
6
|
+
export declare const fetchFullTxs: (addr: string) => Promise<TransactionResponse[]>;
|
|
7
|
+
export declare const broadcastTx: (message: BroadcastTransactionRequest) => Promise<BroadcastTransactionResponse>;
|
|
8
|
+
export declare const fetchMempoolTxs: (addr: string, offset?: number) => Promise<MempoolResponse>;
|
|
9
|
+
export declare const fetchFullMempoolTxs: (addr: string) => Promise<MempoolTransaction[]>;
|
|
10
|
+
export declare const fetchNonce: (addr: string) => Promise<GetNonceResponse>;
|
|
11
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/network/api.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AA6DrB,eAAO,MAAM,aAAa,SAAgB,MAAM,KAAG,OAAO,CAAC,eAAe,CAGzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,YACpB,oBAAoB,KAC5B,OAAO,CAAC,qBAAqB,CAG/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,qBAAqB,CAGtE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,sBAAe,OAAO,CAAC,oBAAoB,CAUrF,CAAC;AAEF,eAAO,MAAM,YAAY,SAAgB,MAAM,KAAG,OAAO,CAAC,mBAAmB,EAAE,CA6B9E,CAAC;AAEF,eAAO,MAAM,WAAW,YACb,2BAA2B,KACnC,OAAO,CAAC,4BAA4B,CAKtC,CAAC;AAEF,eAAO,MAAM,eAAe,SAAgB,MAAM,sBAAe,OAAO,CAAC,eAAe,CAKvF,CAAC;AAEF,eAAO,MAAM,mBAAmB,SAAgB,MAAM,KAAG,OAAO,CAAC,kBAAkB,EAAE,CAcpF,CAAC;AAEF,eAAO,MAAM,UAAU,SAAgB,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAGvE,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
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
|
+
import { getEnv } from "@ledgerhq/live-env";
|
|
11
|
+
import network from "@ledgerhq/live-network/network";
|
|
12
|
+
const getStacksURL = (path) => {
|
|
13
|
+
const baseUrl = getEnv("API_STACKS_ENDPOINT");
|
|
14
|
+
if (!baseUrl)
|
|
15
|
+
throw new Error("API base URL not available");
|
|
16
|
+
return `${baseUrl}${path ? path : ""}`;
|
|
17
|
+
};
|
|
18
|
+
const fetch = (path) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
+
const url = getStacksURL(path);
|
|
20
|
+
// We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
|
|
21
|
+
const opts = {
|
|
22
|
+
method: "GET",
|
|
23
|
+
url,
|
|
24
|
+
};
|
|
25
|
+
const rawResponse = yield network(opts);
|
|
26
|
+
// We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
|
|
27
|
+
const { data } = rawResponse;
|
|
28
|
+
return data;
|
|
29
|
+
});
|
|
30
|
+
const send = (path, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
+
const url = getStacksURL(path);
|
|
32
|
+
const opts = {
|
|
33
|
+
method: "POST",
|
|
34
|
+
url,
|
|
35
|
+
data: JSON.stringify(data),
|
|
36
|
+
headers: { "Content-Type": "application/json" },
|
|
37
|
+
};
|
|
38
|
+
const rawResponse = yield network(opts);
|
|
39
|
+
// We force data to this way as network func is not using generics. Changing that func will generate errors in other implementations
|
|
40
|
+
const { data: responseData } = rawResponse;
|
|
41
|
+
return responseData;
|
|
42
|
+
});
|
|
43
|
+
const sendRaw = (path, data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
|
+
const url = getStacksURL(path);
|
|
45
|
+
const opts = {
|
|
46
|
+
method: "POST",
|
|
47
|
+
url,
|
|
48
|
+
data,
|
|
49
|
+
headers: { "Content-Type": "application/octet-stream" },
|
|
50
|
+
};
|
|
51
|
+
const rawResponse = yield network(opts);
|
|
52
|
+
// We force data to this way as network func is not using generics. Changing that func will generate errors in other implementations
|
|
53
|
+
const { data: responseData } = rawResponse;
|
|
54
|
+
return responseData;
|
|
55
|
+
});
|
|
56
|
+
export const fetchBalances = (addr) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
const data = yield fetch(`/extended/v1/address/${addr}/stx`);
|
|
58
|
+
return data; // TODO Validate if the response fits this interface
|
|
59
|
+
});
|
|
60
|
+
export const fetchEstimatedFees = (request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
|
+
const feeRate = yield send(`/v2/fees/transfer`, request);
|
|
62
|
+
return feeRate; // TODO Validate if the response fits this interface
|
|
63
|
+
});
|
|
64
|
+
export const fetchBlockHeight = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
const data = yield fetch("/extended");
|
|
66
|
+
return data; // TODO Validate if the response fits this interface
|
|
67
|
+
});
|
|
68
|
+
export const fetchTxs = (addr_1, ...args_1) => __awaiter(void 0, [addr_1, ...args_1], void 0, function* (addr, offset = 0) {
|
|
69
|
+
const limit = 50;
|
|
70
|
+
try {
|
|
71
|
+
const response = yield fetch(`/extended/v2/addresses/${addr}/transactions?offset=${offset}&limit=${limit}`);
|
|
72
|
+
return response; // TODO Validate if the response fits this interface
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
return { limit, offset, total: 0, results: [] };
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
export const fetchFullTxs = (addr) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
let qty, offset = 0;
|
|
80
|
+
let txs = [];
|
|
81
|
+
do {
|
|
82
|
+
const { results, total, limit } = yield fetchTxs(addr, offset);
|
|
83
|
+
txs = txs.concat(results.filter(t => {
|
|
84
|
+
var _a, _b, _c, _d;
|
|
85
|
+
if (((_a = t.tx) === null || _a === void 0 ? void 0 : _a.tx_type) === "token_transfer") {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
if (((_b = t.tx) === null || _b === void 0 ? void 0 : _b.tx_type) === "contract_call" &&
|
|
89
|
+
((_d = (_c = t.tx) === null || _c === void 0 ? void 0 : _c.contract_call) === null || _d === void 0 ? void 0 : _d.function_name) === "send-many") {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}));
|
|
94
|
+
offset += limit;
|
|
95
|
+
qty = total;
|
|
96
|
+
} while (offset < qty);
|
|
97
|
+
return txs; // TODO Validate if the response fits this interface
|
|
98
|
+
});
|
|
99
|
+
export const broadcastTx = (message) => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
|
+
let response = yield sendRaw(`/v2/transactions`, message);
|
|
101
|
+
if (response != "")
|
|
102
|
+
response = `0x${response}`;
|
|
103
|
+
return response; // TODO Validate if the response fits this interface
|
|
104
|
+
});
|
|
105
|
+
export const fetchMempoolTxs = (addr_1, ...args_1) => __awaiter(void 0, [addr_1, ...args_1], void 0, function* (addr, offset = 0) {
|
|
106
|
+
const response = yield fetch(`/extended/v1/tx/mempool?sender_address=${addr}&offset=${offset}`);
|
|
107
|
+
return response; // TODO Validate if the response fits this interface
|
|
108
|
+
});
|
|
109
|
+
export const fetchFullMempoolTxs = (addr) => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
let qty, offset = 0;
|
|
111
|
+
let txs = [];
|
|
112
|
+
do {
|
|
113
|
+
const { results, total, limit } = yield fetchMempoolTxs(addr, offset);
|
|
114
|
+
txs = txs.concat(results);
|
|
115
|
+
offset += limit;
|
|
116
|
+
qty = total;
|
|
117
|
+
} while (offset < qty);
|
|
118
|
+
return txs; // TODO Validate if the response fits this interface
|
|
119
|
+
});
|
|
120
|
+
export const fetchNonce = (addr) => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
|
+
const response = yield fetch(`/extended/v1/address/${addr}/nonces`);
|
|
122
|
+
return response; // TODO Validate if the response fits this interface
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=api.js.map
|