ecash-quicksend 1.3.0 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -9
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +0 -5
- package/dist/config/constants.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/send/tokensend.d.ts.map +1 -1
- package/dist/send/tokensend.js +14 -7
- package/dist/send/tokensend.js.map +1 -1
- package/dist/send/xecsend.d.ts +2 -2
- package/dist/send/xecsend.d.ts.map +1 -1
- package/dist/send/xecsend.js +0 -5
- package/dist/send/xecsend.js.map +1 -1
- package/dist/transaction/transaction-utils.js +2 -2
- package/dist/transaction/transaction-utils.js.map +1 -1
- package/dist/types.d.ts +25 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/utxo/utxo-utils.d.ts +3 -4
- package/dist/utxo/utxo-utils.d.ts.map +1 -1
- package/dist/utxo/utxo-utils.js +17 -7
- package/dist/utxo/utxo-utils.js.map +1 -1
- package/dist/wallet/mnemonic-utils.d.ts.map +1 -1
- package/dist/wallet/mnemonic-utils.js +11 -4
- package/dist/wallet/mnemonic-utils.js.map +1 -1
- package/dist/wallet/wallet-utils.d.ts.map +1 -1
- package/dist/wallet/wallet-utils.js +2 -1
- package/dist/wallet/wallet-utils.js.map +1 -1
- package/package.json +1 -3
package/README.md
CHANGED
|
@@ -13,8 +13,11 @@ npm install ecash-quicksend
|
|
|
13
13
|
|
|
14
14
|
## Migration Notes
|
|
15
15
|
|
|
16
|
-
### v1.
|
|
17
|
-
|
|
16
|
+
### v1.3.3+
|
|
17
|
+
`Recipient.amount` unit is now clearly documented: satoshis for XEC (1 XEC = 100 sats), base atoms for SLP/ALP tokens. JSDoc and example comments updated.
|
|
18
|
+
|
|
19
|
+
### v1.3.2+
|
|
20
|
+
This library no longer calls `dotenv.config()` internally and does not depend on `dotenv`. If you rely on a `.env` file for your mnemonic, install `dotenv` yourself and call `dotenv.config()` in your own application entry point before using this library:
|
|
18
21
|
|
|
19
22
|
```javascript
|
|
20
23
|
import dotenv from 'dotenv';
|
|
@@ -50,28 +53,28 @@ dotenv.config();
|
|
|
50
53
|
```javascript
|
|
51
54
|
import quick from 'ecash-quicksend';
|
|
52
55
|
|
|
53
|
-
// Send XEC
|
|
56
|
+
// Send XEC — amount in satoshis (1 XEC = 100 sats)
|
|
54
57
|
await quick.sendXec([
|
|
55
|
-
{ address: 'ecash:qq...', amount: 1000 } // 10.00 XEC
|
|
58
|
+
{ address: 'ecash:qq...', amount: 1000 } // 1000 sats = 10.00 XEC
|
|
56
59
|
]);
|
|
57
60
|
|
|
58
61
|
// Send XEC with custom mnemonic
|
|
59
62
|
await quick.sendXec([
|
|
60
|
-
{ address: 'ecash:qq...', amount: 1000 } // 10.00 XEC
|
|
63
|
+
{ address: 'ecash:qq...', amount: 1000 } // 1000 sats = 10.00 XEC
|
|
61
64
|
], {
|
|
62
65
|
mnemonic: 'your twelve word mnemonic phrase'
|
|
63
66
|
});
|
|
64
67
|
|
|
65
|
-
// Send SLP tokens — amount in atoms (smallest unit)
|
|
68
|
+
// Send SLP tokens — amount in base atoms (smallest unit, NOT display amount)
|
|
66
69
|
await quick.sendSlp([
|
|
67
|
-
{ address: 'ecash:qq...', amount: 100 } // 100 atoms
|
|
70
|
+
{ address: 'ecash:qq...', amount: 100 } // 100 atoms (e.g. 1.00 if tokenDecimals=2)
|
|
68
71
|
], {
|
|
69
72
|
tokenId: 'your-token-id',
|
|
70
73
|
});
|
|
71
74
|
|
|
72
|
-
// Send ALP tokens — amount in atoms (smallest unit)
|
|
75
|
+
// Send ALP tokens — amount in base atoms (smallest unit, NOT display amount)
|
|
73
76
|
await quick.sendAlp([
|
|
74
|
-
{ address: 'ecash:qq...', amount: 100 } // 100 atoms
|
|
77
|
+
{ address: 'ecash:qq...', amount: 100 } // 100 atoms (e.g. 1.00 if tokenDecimals=2)
|
|
75
78
|
], {
|
|
76
79
|
tokenId: 'your-token-id',
|
|
77
80
|
});
|
|
@@ -176,6 +179,21 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
176
179
|
|
|
177
180
|
## Changelog
|
|
178
181
|
|
|
182
|
+
### v1.3.4
|
|
183
|
+
- Token change output in `buildTokenOutputs` now uses `{ sats: 0n, script: walletP2pkh }` instead of a bare `Script` object, matching the format of all other outputs.
|
|
184
|
+
- Added `tokenId` format validation: non-64-char or non-hex values now throw a clear error at the entry point instead of a cryptic library exception.
|
|
185
|
+
|
|
186
|
+
### v1.3.3
|
|
187
|
+
- `validateMnemonic` now validates each word against the BIP39 wordlist (via `mnemonicToSeed` try/catch), catching misspellings that previously returned `true`.
|
|
188
|
+
- Coinbase UTXOs are now filtered from UTXO selection. Spending immature coinbase outputs causes node rejection; they are now silently excluded from both XEC and token fee inputs.
|
|
189
|
+
- `Recipient.amount` unit semantics clarified in JSDoc and examples: satoshis for XEC (1 XEC = 100 sats), base atoms for SLP/ALP tokens.
|
|
190
|
+
|
|
191
|
+
### v1.3.2
|
|
192
|
+
- `Ecc` instance is now a module-level singleton in `wallet-utils.ts`, eliminating redundant initialization overhead on every `sendXec`/`sendSlp`/`sendAlp` call.
|
|
193
|
+
- Removed `dotenv.config()` calls from library internals (`config/constants.ts`, `send/xecsend.ts`, `send/tokensend.ts`). The library no longer touches dotenv at all.
|
|
194
|
+
- Added SLP max send outputs validation: exceeding 19 recipients per tx throws a clear error instead of building an invalid transaction.
|
|
195
|
+
- Added ALP max send outputs validation: exceeding 29 recipients per tx throws a clear error.
|
|
196
|
+
|
|
179
197
|
### v1.3.0
|
|
180
198
|
- `tokenDecimals` is now optional in `sendSlp` / `sendAlp` / `send`. Token `amount` is in atoms (smallest unit), matching the ecash-wallet convention. `tokenDecimals` is accepted but ignored for backward compatibility.
|
|
181
199
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,MAAM;;CAGlB,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAKD;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOzF"}
|
package/dist/config/constants.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.CONFIG = void 0;
|
|
7
4
|
exports.validateConfig = validateConfig;
|
|
8
5
|
exports.getMnemonic = getMnemonic;
|
|
9
6
|
exports.getPrivateKeyWIF = getPrivateKeyWIF;
|
|
10
7
|
exports.getDefaultUtxoAddress = getDefaultUtxoAddress;
|
|
11
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
12
8
|
const mnemonic_utils_1 = require("../wallet/mnemonic-utils");
|
|
13
|
-
dotenv_1.default.config();
|
|
14
9
|
/**
|
|
15
10
|
* 应用程序配置常量
|
|
16
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":";;;AAaA,wCAIC;AASD,kCAEC;AAOD,4CAOC;AAOD,sDAOC;AAxDD,6DAA0D;AAE1D;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;CAC/B,CAAC;AAEF;;GAEG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,cAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,4BAA4B;AAC5B,oBAAoB;AAEpB;;;GAGG;AACH,SAAgB,WAAW;IACzB,OAAO,cAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,eAAuB,CAAC,EAAE,QAAiB;IAC1E,MAAM,aAAa,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IACjH,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,+BAAc,EAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,eAAuB,CAAC,EAAE,QAAiB;IAC/E,MAAM,aAAa,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IACjH,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,+BAAc,EAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EAEV,kBAAkB,EAClB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EAEV,kBAAkB,EAClB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,cAAM,kBAAkB;IACtB;;;;OAIG;IACG,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpG;;;;OAIG;IACG,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpG;;;;OAIG;IACG,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,UAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsB/F;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAwCzH;AAGD,QAAA,MAAM,KAAK,oBAA2B,CAAC;AAGvC,eAAe,KAAK,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAG9B,eAAO,MAAQ,OAAO,eAhGM,SAAS,EAAE,WAAW,uBAAuB,KAAG,OAAO,CAAC,iBAAiB,CAAC,EAgG9E,OAAO,eAvFH,SAAS,EAAE,WAAW,uBAAuB,KAAG,OAAO,CAAC,iBAAiB,CAAC,EAuFrE,OAAO,eA9EZ,SAAS,EAAE,YAAW,UAAU,KAAW,OAAO,CAAC,iBAAiB,CAAC,EA8EvD,IAAI,SAlD3B,eAAe,cAAc,SAAS,EAAE,YAAW,kBAAkB,KAAQ,OAAO,CAAC,iBAAiB,CAkDjE,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,gDAAoF;AACpF,4CAAyD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokensend.d.ts","sourceRoot":"","sources":["../../send/tokensend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokensend.d.ts","sourceRoot":"","sources":["../../send/tokensend.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,iBAAiB,EAA8B,MAAM,UAAU,CAAC;AA8J7G;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEnI;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEnI"}
|
package/dist/send/tokensend.js
CHANGED
|
@@ -32,15 +32,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.createRawSlpTransaction = createRawSlpTransaction;
|
|
40
37
|
exports.createRawAlpTransaction = createRawAlpTransaction;
|
|
41
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
42
|
-
dotenv_1.default.config();
|
|
43
38
|
const ecashLib = __importStar(require("ecash-lib"));
|
|
39
|
+
// SLP protocol limit: max 19 token outputs per tx (index 1–19, index 0 is OP_RETURN)
|
|
40
|
+
const SLP_MAX_SEND_OUTPUTS = ecashLib.SLP_MAX_SEND_OUTPUTS ?? 19;
|
|
41
|
+
// ALP policy limit: max 29 token outputs per tx
|
|
42
|
+
const ALP_POLICY_MAX_OUTPUTS = 29;
|
|
44
43
|
const utxo_utils_1 = require("../utxo/utxo-utils");
|
|
45
44
|
const wallet_utils_1 = require("../wallet/wallet-utils");
|
|
46
45
|
const transaction_utils_1 = require("../transaction/transaction-utils");
|
|
@@ -84,10 +83,18 @@ async function createTokenTransaction(recipients, options, tokenType = 'SLP') {
|
|
|
84
83
|
(0, transaction_builder_1.validateRequiredParams)(options, [
|
|
85
84
|
{ key: 'tokenId', message: 'tokenId is required' },
|
|
86
85
|
]);
|
|
86
|
+
// 验证接收方数量不超过协议上限
|
|
87
|
+
const maxOutputs = tokenType === 'SLP' ? SLP_MAX_SEND_OUTPUTS : ALP_POLICY_MAX_OUTPUTS;
|
|
88
|
+
if (recipients.length > maxOutputs) {
|
|
89
|
+
throw new Error(`Too many recipients: ${tokenType} transactions support at most ${maxOutputs} token outputs per tx, but ${recipients.length} were provided.`);
|
|
90
|
+
}
|
|
87
91
|
const { tokenId, tokenDecimals = 0, // 默认0:amount 直接作为 atoms 使用
|
|
88
92
|
addressIndex = 0, feeStrategy = 'all', tokenStrategy = 'all', mnemonic, // 从选项中提取助记词
|
|
89
93
|
chronik: chronikClient // 新增:从选项中提取chronik客户端
|
|
90
94
|
} = options;
|
|
95
|
+
if (!/^[0-9a-f]{64}$/.test(tokenId)) {
|
|
96
|
+
throw new Error(`Invalid tokenId: must be a 64-character lowercase hex string, got "${tokenId}"`);
|
|
97
|
+
}
|
|
91
98
|
// 初始化钱包 - 使用指定的地址索引和可选的助记词
|
|
92
99
|
const { walletSk, walletPk, walletP2pkh, address: utxoAddress } = (0, wallet_utils_1.initializeWallet)(addressIndex, mnemonic);
|
|
93
100
|
const utxos = await (0, utxo_utils_1.getUtxos)(utxoAddress, chronikClient); // 传递chronik客户端
|
|
@@ -96,8 +103,8 @@ async function createTokenTransaction(recipients, options, tokenType = 'SLP') {
|
|
|
96
103
|
}
|
|
97
104
|
// 选择代币UTXOs
|
|
98
105
|
const tokenSelection = (0, utxo_utils_1.selectSlpUtxos)(utxos, tokenId, recipients, tokenDecimals, {
|
|
99
|
-
feeStrategy
|
|
100
|
-
tokenStrategy
|
|
106
|
+
feeStrategy,
|
|
107
|
+
tokenStrategy
|
|
101
108
|
});
|
|
102
109
|
const { selectedTokenUtxos, selectedFeeUtxos, finalSendAmounts, tokenChange, dustLimit, summary } = tokenSelection;
|
|
103
110
|
// 构建交易输入和输出
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokensend.js","sourceRoot":"","sources":["../../send/tokensend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokensend.js","sourceRoot":"","sources":["../../send/tokensend.ts"],"names":[],"mappings":"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"}
|
package/dist/send/xecsend.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TransactionResult } from '../types';
|
|
1
|
+
import { TransactionResult, UtxoStrategy } from '../types';
|
|
2
2
|
interface ExtendedRecipient {
|
|
3
3
|
address: string;
|
|
4
4
|
amount: number;
|
|
@@ -18,7 +18,7 @@ interface XecTransactionResult extends TransactionResult {
|
|
|
18
18
|
address: string;
|
|
19
19
|
}>;
|
|
20
20
|
}
|
|
21
|
-
export declare function createRawXecTransaction(recipients: ExtendedRecipient[], utxoStrategy?:
|
|
21
|
+
export declare function createRawXecTransaction(recipients: ExtendedRecipient[], utxoStrategy?: UtxoStrategy, addressIndex?: number, mnemonic?: string, // 可选的助记词参数
|
|
22
22
|
chronikClient?: any): Promise<XecTransactionResult>;
|
|
23
23
|
export {};
|
|
24
24
|
//# sourceMappingURL=xecsend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xecsend.d.ts","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xecsend.d.ts","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG3D,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,UAAU,oBAAqB,SAAQ,iBAAiB;IACtD,aAAa,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,KAAK,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,GAAE,YAAoB,EAClC,YAAY,GAAE,MAAU,EACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW;AAC9B,aAAa,CAAC,EAAE,GAAG,GAClB,OAAO,CAAC,oBAAoB,CAAC,CAkG/B"}
|
package/dist/send/xecsend.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.createRawXecTransaction = createRawXecTransaction;
|
|
7
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
-
dotenv_1.default.config();
|
|
9
4
|
const utxo_utils_1 = require("../utxo/utxo-utils");
|
|
10
5
|
const wallet_utils_1 = require("../wallet/wallet-utils");
|
|
11
6
|
const transaction_utils_1 = require("../transaction/transaction-utils");
|
package/dist/send/xecsend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xecsend.js","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xecsend.js","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.buildTransactionInputs = buildTransactionInputs;
|
|
37
37
|
exports.createP2pkhScript = createP2pkhScript;
|
|
38
38
|
const ecashLib = __importStar(require("ecash-lib"));
|
|
39
|
-
const
|
|
39
|
+
const ecash_lib_1 = require("ecash-lib");
|
|
40
40
|
const { P2PKHSignatory, ALL_BIP143, Script, } = ecashLib;
|
|
41
41
|
/**
|
|
42
42
|
* 构建交易输入 - 通用函数,支持单个或多个UTXO数组
|
|
@@ -64,7 +64,7 @@ function buildTransactionInputs(utxos, walletP2pkh, walletSk, walletPk) {
|
|
|
64
64
|
*/
|
|
65
65
|
function createP2pkhScript(address) {
|
|
66
66
|
try {
|
|
67
|
-
const { hash } =
|
|
67
|
+
const { hash } = ecash_lib_1.Address.fromCashAddress(address);
|
|
68
68
|
return Script.p2pkh(Buffer.from(hash, 'hex'));
|
|
69
69
|
}
|
|
70
70
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-utils.js","sourceRoot":"","sources":["../../transaction/transaction-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,wDAgBC;AAOD,8CAOC;AA/DD,oDAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"transaction-utils.js","sourceRoot":"","sources":["../../transaction/transaction-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,wDAgBC;AAOD,8CAOC;AA/DD,oDAAsC;AACtC,yCAAoC;AAGpC,MAAM,EACJ,cAAc,EACd,UAAU,EACV,MAAM,GACP,GAAG,QAAQ,CAAC;AAiBb;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CACpC,KAAwB,EACxB,WAAgB,EAChB,QAAoB,EACpB,QAAoB;IAEpB,6CAA6C;IAC7C,MAAM,QAAQ,GAAW,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,KAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAe,CAAC;IAEhG,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,KAAK,EAAE;YACL,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE;YAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE;SAClE;QACD,SAAS,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;KAC1D,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,mBAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { ChronikClient } from "chronik-client";
|
|
2
2
|
/**
|
|
3
3
|
* 交易接收方
|
|
4
|
+
*
|
|
5
|
+
* @property address - eCash address (ecash:qq...)
|
|
6
|
+
* @property amount - Unit depends on transaction type:
|
|
7
|
+
* - XEC: satoshis (1 XEC = 100 sats, e.g. amount: 1000 = 10.00 XEC)
|
|
8
|
+
* - SLP/ALP token: base atoms (smallest unit; combine with tokenDecimals to get display amount)
|
|
4
9
|
*/
|
|
5
10
|
export interface Recipient {
|
|
6
11
|
address: string;
|
|
12
|
+
/** XEC: satoshis (1 XEC = 100 sats) | Token: base atoms (smallest unit) */
|
|
7
13
|
amount: number;
|
|
8
14
|
}
|
|
9
15
|
/**
|
|
@@ -15,6 +21,8 @@ export interface Utxo {
|
|
|
15
21
|
value: number;
|
|
16
22
|
address?: string;
|
|
17
23
|
slpToken?: SlpToken;
|
|
24
|
+
isCoinbase?: boolean;
|
|
25
|
+
blockHeight?: number;
|
|
18
26
|
[key: string]: any;
|
|
19
27
|
}
|
|
20
28
|
/**
|
|
@@ -23,6 +31,7 @@ export interface Utxo {
|
|
|
23
31
|
export interface SlpToken {
|
|
24
32
|
tokenId: string;
|
|
25
33
|
atoms: string | bigint;
|
|
34
|
+
isMintBaton: boolean;
|
|
26
35
|
[key: string]: any;
|
|
27
36
|
}
|
|
28
37
|
/**
|
|
@@ -44,8 +53,8 @@ export interface TokenTransactionOptions {
|
|
|
44
53
|
tokenId: string;
|
|
45
54
|
tokenDecimals?: number;
|
|
46
55
|
addressIndex?: number;
|
|
47
|
-
feeStrategy?:
|
|
48
|
-
tokenStrategy?:
|
|
56
|
+
feeStrategy?: FeeStrategy;
|
|
57
|
+
tokenStrategy?: TokenStrategy;
|
|
49
58
|
mnemonic?: string;
|
|
50
59
|
chronik?: ChronikClient;
|
|
51
60
|
}
|
|
@@ -53,7 +62,7 @@ export interface TokenTransactionOptions {
|
|
|
53
62
|
* XEC 交易选项(可以是字符串或对象)
|
|
54
63
|
*/
|
|
55
64
|
export interface XecTransactionOptions {
|
|
56
|
-
utxoStrategy?:
|
|
65
|
+
utxoStrategy?: UtxoStrategy;
|
|
57
66
|
addressIndex?: number;
|
|
58
67
|
mnemonic?: string;
|
|
59
68
|
chronik?: ChronikClient;
|
|
@@ -66,12 +75,12 @@ export type XecOptions = string | XecTransactionOptions;
|
|
|
66
75
|
* 通用发送方法的选项
|
|
67
76
|
*/
|
|
68
77
|
export interface GeneralSendOptions {
|
|
69
|
-
utxoStrategy?:
|
|
78
|
+
utxoStrategy?: UtxoStrategy;
|
|
70
79
|
addressIndex?: number;
|
|
71
80
|
tokenId?: string;
|
|
72
81
|
tokenDecimals?: number;
|
|
73
|
-
feeStrategy?:
|
|
74
|
-
tokenStrategy?:
|
|
82
|
+
feeStrategy?: FeeStrategy;
|
|
83
|
+
tokenStrategy?: TokenStrategy;
|
|
75
84
|
mnemonic?: string;
|
|
76
85
|
chronik?: ChronikClient;
|
|
77
86
|
}
|
|
@@ -80,7 +89,15 @@ export interface GeneralSendOptions {
|
|
|
80
89
|
*/
|
|
81
90
|
export type TransactionType = 'slp' | 'alp' | 'xec';
|
|
82
91
|
/**
|
|
83
|
-
* UTXO
|
|
92
|
+
* UTXO选择策略类型
|
|
84
93
|
*/
|
|
85
|
-
export type UtxoStrategy = 'all' | '
|
|
94
|
+
export type UtxoStrategy = 'all' | 'minimal' | 'largest_first';
|
|
95
|
+
/**
|
|
96
|
+
* 手续费UTXO选择策略类型
|
|
97
|
+
*/
|
|
98
|
+
export type FeeStrategy = 'all' | 'minimal' | 'largest_first';
|
|
99
|
+
/**
|
|
100
|
+
* 代币UTXO选择策略类型
|
|
101
|
+
*/
|
|
102
|
+
export type TokenStrategy = 'largest' | 'minimal' | 'all';
|
|
86
103
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Utxo, Recipient } from '../types';
|
|
1
|
+
import { Utxo, Recipient, UtxoStrategy, FeeStrategy, TokenStrategy } from '../types';
|
|
2
2
|
import { ChronikClient } from 'chronik-client';
|
|
3
3
|
interface UtxoSelection {
|
|
4
4
|
selectedUtxos: Utxo[];
|
|
@@ -9,8 +9,8 @@ interface UtxoSelection {
|
|
|
9
9
|
}
|
|
10
10
|
interface SlpUtxoOptions {
|
|
11
11
|
dustLimit?: number;
|
|
12
|
-
feeStrategy?:
|
|
13
|
-
tokenStrategy?:
|
|
12
|
+
feeStrategy?: FeeStrategy;
|
|
13
|
+
tokenStrategy?: TokenStrategy;
|
|
14
14
|
}
|
|
15
15
|
interface SlpUtxoSelection {
|
|
16
16
|
selectedTokenUtxos: Utxo[];
|
|
@@ -45,7 +45,6 @@ interface AddressBalance {
|
|
|
45
45
|
slpUtxos: Utxo[];
|
|
46
46
|
tokenBalances: TokenBalance[];
|
|
47
47
|
}
|
|
48
|
-
type UtxoStrategy = 'all' | 'minimal' | 'largest_first';
|
|
49
48
|
/**
|
|
50
49
|
* Get UTXOs for a given address
|
|
51
50
|
* @param address - eCash address
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxo-utils.d.ts","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utxo-utils.d.ts","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAY,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAc/C,UAAU,aAAa;IACrB,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAGD,UAAU,gBAAgB;IACxB,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC3B,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAGD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAGD,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAID;;;;;GAKG;AACH,iBAAe,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CA6BvF;AAED;;;;;;GAMG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,YAAoB,GAAG,aAAa,CA4DrG;AAED;;;;;;;;GAQG;AACH,iBAAS,cAAc,CACrB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,EAAE,EACvB,aAAa,GAAE,MAAU,EACzB,OAAO,GAAE,cAAmB,GAC3B,gBAAgB,CAqHlB;AAED;;;;;GAKG;AACH,iBAAe,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAqCxG;AAED,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,EAClB,CAAC"}
|
package/dist/utxo/utxo-utils.js
CHANGED
|
@@ -5,7 +5,6 @@ exports.selectUtxos = selectUtxos;
|
|
|
5
5
|
exports.selectSlpUtxos = selectSlpUtxos;
|
|
6
6
|
exports.getAddressBalance = getAddressBalance;
|
|
7
7
|
const ecash_lib_1 = require("ecash-lib");
|
|
8
|
-
const ecashaddrjs_1 = require("ecashaddrjs");
|
|
9
8
|
const chronik_client_1 = require("../client/chronik-client");
|
|
10
9
|
// P2PKH 交易字节大小常量
|
|
11
10
|
const P2PKH_INPUT_BYTES = 148; // txid(32) + vout(4) + scriptLen(1) + sig(72) + pubkey(33) + sequence(4) + varint(2)
|
|
@@ -16,6 +15,7 @@ function estimateFee(nInputs, nOutputs) {
|
|
|
16
15
|
const txBytes = nInputs * P2PKH_INPUT_BYTES + nOutputs * P2PKH_OUTPUT_BYTES + TX_OVERHEAD_BYTES;
|
|
17
16
|
return Number((0, ecash_lib_1.calcTxFee)(txBytes, ecash_lib_1.DEFAULT_FEE_SATS_PER_KB));
|
|
18
17
|
}
|
|
18
|
+
// UtxoStrategy 从 types.ts 导入
|
|
19
19
|
/**
|
|
20
20
|
* Get UTXOs for a given address
|
|
21
21
|
* @param address - eCash address
|
|
@@ -23,7 +23,7 @@ function estimateFee(nInputs, nOutputs) {
|
|
|
23
23
|
* @returns Array of UTXOs
|
|
24
24
|
*/
|
|
25
25
|
async function getUtxos(address, chronikClient) {
|
|
26
|
-
const { type, hash } =
|
|
26
|
+
const { type, hash } = ecash_lib_1.Address.fromCashAddress(address);
|
|
27
27
|
const client = chronikClient || chronik_client_1.chronik; // 使用传入的chronik客户端或默认的
|
|
28
28
|
try {
|
|
29
29
|
const utxosResponse = await client.script(type, hash).utxos();
|
|
@@ -35,7 +35,13 @@ async function getUtxos(address, chronikClient) {
|
|
|
35
35
|
vout: utxo.outpoint.outIdx,
|
|
36
36
|
value: Number(utxo.sats),
|
|
37
37
|
address: address,
|
|
38
|
-
|
|
38
|
+
isCoinbase: utxo.isCoinbase ?? false,
|
|
39
|
+
blockHeight: utxo.blockHeight ?? -1,
|
|
40
|
+
slpToken: utxo.token ? {
|
|
41
|
+
tokenId: utxo.token.tokenId,
|
|
42
|
+
atoms: utxo.token.atoms,
|
|
43
|
+
isMintBaton: utxo.token.isMintBaton ?? false,
|
|
44
|
+
} : undefined,
|
|
39
45
|
}));
|
|
40
46
|
return utxos;
|
|
41
47
|
}
|
|
@@ -52,8 +58,8 @@ async function getUtxos(address, chronikClient) {
|
|
|
52
58
|
* @returns 包含选择的UTXOs和相关信息
|
|
53
59
|
*/
|
|
54
60
|
function selectUtxos(utxos, sendAmount, strategy = 'all') {
|
|
55
|
-
// 过滤掉SLP代币UTXOs
|
|
56
|
-
const nonSlpUtxos = utxos.filter(utxo => !utxo.slpToken);
|
|
61
|
+
// 过滤掉SLP代币UTXOs和coinbase UTXOs(coinbase需要100个区块成熟才能花费)
|
|
62
|
+
const nonSlpUtxos = utxos.filter(utxo => !utxo.slpToken && !utxo.isCoinbase);
|
|
57
63
|
if (nonSlpUtxos.length === 0) {
|
|
58
64
|
throw new Error('No non-SLP UTXOs available');
|
|
59
65
|
}
|
|
@@ -112,8 +118,12 @@ function selectSlpUtxos(utxos, tokenId, recipients, tokenDecimals = 0, options =
|
|
|
112
118
|
tokenStrategy = 'largest' // 代币UTXO选择策略
|
|
113
119
|
} = options;
|
|
114
120
|
// 分离SLP和非SLP UTXOs
|
|
115
|
-
const slpUtxos = utxos.filter(utxo => utxo.slpToken &&
|
|
116
|
-
|
|
121
|
+
const slpUtxos = utxos.filter(utxo => utxo.slpToken &&
|
|
122
|
+
utxo.slpToken.tokenId === tokenId &&
|
|
123
|
+
!utxo.slpToken.isMintBaton // never spend mint batons as regular send inputs
|
|
124
|
+
);
|
|
125
|
+
// 过滤掉coinbase UTXOs作为手续费输入(coinbase需100个区块成熟才能花费)
|
|
126
|
+
const nonSlpUtxos = utxos.filter(utxo => !utxo.slpToken && !utxo.isCoinbase);
|
|
117
127
|
if (slpUtxos.length === 0) {
|
|
118
128
|
throw new Error(`No SLP UTXOs available for token ${tokenId}`);
|
|
119
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxo-utils.js","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"utxo-utils.js","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mnemonic-utils.d.ts","sourceRoot":"","sources":["../../wallet/mnemonic-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mnemonic-utils.d.ts","sourceRoot":"","sources":["../../wallet/mnemonic-utils.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAAU,EACxB,cAAc,GAAE,MAA2B,GAC1C,UAAU,CAkCZ;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAgB7E"}
|
|
@@ -37,7 +37,6 @@ exports.deriveBuyerKey = deriveBuyerKey;
|
|
|
37
37
|
exports.validateMnemonic = validateMnemonic;
|
|
38
38
|
const ecash_lib_1 = require("ecash-lib");
|
|
39
39
|
const wif = __importStar(require("wif"));
|
|
40
|
-
const ecashaddrjs_1 = require("ecashaddrjs");
|
|
41
40
|
/**
|
|
42
41
|
* 从助记词派生出WIF格式的私钥和地址
|
|
43
42
|
* @param mnemonic - 助记词
|
|
@@ -57,7 +56,7 @@ function deriveBuyerKey(mnemonic, addressIndex = 0, derivationPath = "m/44'/1899
|
|
|
57
56
|
// 获取公钥并创建 eCash 地址
|
|
58
57
|
const pubkey = childNode.pubkey();
|
|
59
58
|
const pubkeyHash = (0, ecash_lib_1.shaRmd160)(pubkey);
|
|
60
|
-
const ecashAddress =
|
|
59
|
+
const ecashAddress = ecash_lib_1.Address.p2pkh(pubkeyHash).toString();
|
|
61
60
|
// 提取私钥缓冲区
|
|
62
61
|
const privateKeyBuffer = childNode.seckey();
|
|
63
62
|
// 将私钥转换为 WIF (0x80 是比特币主网的前缀)
|
|
@@ -83,7 +82,15 @@ function validateMnemonic(mnemonic) {
|
|
|
83
82
|
return false;
|
|
84
83
|
}
|
|
85
84
|
const words = mnemonic.trim().split(/\s+/);
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
if (![12, 15, 18, 21, 24].includes(words.length)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
(0, ecash_lib_1.mnemonicToSeed)(mnemonic.trim());
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
88
95
|
}
|
|
89
96
|
//# sourceMappingURL=mnemonic-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mnemonic-utils.js","sourceRoot":"","sources":["../../wallet/mnemonic-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mnemonic-utils.js","sourceRoot":"","sources":["../../wallet/mnemonic-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,wCAsCC;AAOD,4CAgBC;AA/ED,yCAAuE;AACvE,yCAA2B;AAU3B;;;;;;GAMG;AACH,SAAgB,cAAc,CAC5B,QAAgB,EAChB,eAAuB,CAAC,EACxB,iBAAyB,kBAAkB;IAE3C,YAAY;IACZ,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,QAAQ,CAAC,CAAC;IAEtC,eAAe;IACf,MAAM,MAAM,GAAG,kBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErC,mBAAmB;IACnB,MAAM,kBAAkB,GAAG,GAAG,cAAc,IAAI,YAAY,EAAE,CAAC;IAE/D,YAAY;IACZ,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAExD,mBAAmB;IACnB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,mBAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE1D,UAAU;IACV,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;IAE5C,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACzC,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE,YAAY;QACrB,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,kBAAkB;KACnC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,QAAmC;IAClE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,IAAA,0BAAc,EAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-utils.d.ts","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wallet-utils.d.ts","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":"AAgBA,UAAU,UAAU;IAClB,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CA4BxF"}
|
|
@@ -39,6 +39,8 @@ const mnemonic_utils_1 = require("./mnemonic-utils");
|
|
|
39
39
|
const wif = __importStar(require("wif"));
|
|
40
40
|
const ecashLib = __importStar(require("ecash-lib"));
|
|
41
41
|
const { Ecc, Script, fromHex, shaRmd160, } = ecashLib;
|
|
42
|
+
// 模块级单例,避免每次调用都重新初始化 Ecc
|
|
43
|
+
const ecc = new Ecc();
|
|
42
44
|
/**
|
|
43
45
|
* 初始化钱包 - 优化版本,只调用一次 deriveBuyerKey
|
|
44
46
|
* @param addressIndex - 地址索引,默认为0
|
|
@@ -53,7 +55,6 @@ function initializeWallet(addressIndex = 0, mnemonic) {
|
|
|
53
55
|
}
|
|
54
56
|
// 只调用一次 deriveBuyerKey,获取完整信息
|
|
55
57
|
const derived = (0, mnemonic_utils_1.deriveBuyerKey)(finalMnemonic, addressIndex);
|
|
56
|
-
const ecc = new Ecc();
|
|
57
58
|
const decoded = wif.decode(derived.wif);
|
|
58
59
|
const privateKey = decoded.privateKey;
|
|
59
60
|
const privateKeyHex = Buffer.from(privateKey).toString('hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-utils.js","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"wallet-utils.js","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,4CA4BC;AA5DD,mDAAkD;AAClD,qDAAkD;AAClD,yCAA2B;AAC3B,oDAAsC;AAEtC,MAAM,EACJ,GAAG,EACH,MAAM,EACN,OAAO,EACP,SAAS,GACV,GAAG,QAAQ,CAAC;AAEb,yBAAyB;AACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AAatB;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,eAAuB,CAAC,EAAE,QAAiB;IAC1E,0BAA0B;IAC1B,MAAM,aAAa,GAAG,QAAQ,IAAI,IAAA,uBAAW,GAAE,CAAC;IAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IACjH,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAAG,IAAA,+BAAc,EAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG;QACH,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,WAAW;QACX,OAAO,EAAE,OAAO,CAAC,OAAO,EAAG,YAAY;QACvC,YAAY;KACb,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ecash-quicksend",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"description": "A unified transaction manager for eCash (XEC), SLP, and ALP token transactions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -45,9 +45,7 @@
|
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"chronik-client": "^3.1.1",
|
|
48
|
-
"dotenv": "^16.5.0",
|
|
49
48
|
"ecash-lib": "^3.2.0",
|
|
50
|
-
"ecashaddrjs": "^2.0.0",
|
|
51
49
|
"wif": "^5.0.0"
|
|
52
50
|
},
|
|
53
51
|
"devDependencies": {
|