ecash-quicksend 1.0.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/LICENSE +21 -0
- package/README.md +255 -0
- package/dist/client/chronik-client.d.ts +4 -0
- package/dist/client/chronik-client.d.ts.map +1 -0
- package/dist/client/chronik-client.js +14 -0
- package/dist/client/chronik-client.js.map +1 -0
- package/dist/config/constants.d.ts +21 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +46 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/send/tokensend.d.ts +10 -0
- package/dist/send/tokensend.d.ts.map +1 -0
- package/dist/send/tokensend.js +121 -0
- package/dist/send/tokensend.js.map +1 -0
- package/dist/send/xecsend.d.ts +23 -0
- package/dist/send/xecsend.d.ts.map +1 -0
- package/dist/send/xecsend.js +99 -0
- package/dist/send/xecsend.js.map +1 -0
- package/dist/transaction/transaction-builder.d.ts +33 -0
- package/dist/transaction/transaction-builder.d.ts.map +1 -0
- package/dist/transaction/transaction-builder.js +59 -0
- package/dist/transaction/transaction-builder.js.map +1 -0
- package/dist/transaction/transaction-utils.d.ts +31 -0
- package/dist/transaction/transaction-utils.d.ts.map +1 -0
- package/dist/transaction/transaction-utils.js +37 -0
- package/dist/transaction/transaction-utils.js.map +1 -0
- package/dist/types.d.ts +79 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utxo/utxo-utils.d.ts +79 -0
- package/dist/utxo/utxo-utils.d.ts.map +1 -0
- package/dist/utxo/utxo-utils.js +230 -0
- package/dist/utxo/utxo-utils.js.map +1 -0
- package/dist/wallet/mnemonic-utils.d.ts +22 -0
- package/dist/wallet/mnemonic-utils.d.ts.map +1 -0
- package/dist/wallet/mnemonic-utils.js +54 -0
- package/dist/wallet/mnemonic-utils.js.map +1 -0
- package/dist/wallet/wallet-utils.d.ts +17 -0
- package/dist/wallet/wallet-utils.d.ts.map +1 -0
- package/dist/wallet/wallet-utils.js +34 -0
- package/dist/wallet/wallet-utils.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TransactionResult } from '../types';
|
|
2
|
+
interface ExtendedRecipient {
|
|
3
|
+
address: string;
|
|
4
|
+
amount: number;
|
|
5
|
+
tokenId?: string;
|
|
6
|
+
decimals?: number;
|
|
7
|
+
}
|
|
8
|
+
interface XecTransactionResult extends TransactionResult {
|
|
9
|
+
utxoSelection: any;
|
|
10
|
+
recipients: number;
|
|
11
|
+
xecRecipients: number;
|
|
12
|
+
tokenRecipients: number;
|
|
13
|
+
totalSent: number;
|
|
14
|
+
tokenTransfers: Array<{
|
|
15
|
+
tokenId: string;
|
|
16
|
+
amount: number;
|
|
17
|
+
decimals?: number;
|
|
18
|
+
address: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export declare function createRawXecTransaction(recipients: ExtendedRecipient[], utxoStrategy?: string, addressIndex?: number): Promise<XecTransactionResult>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=xecsend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xecsend.d.ts","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,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,MAAc,EAC5B,YAAY,GAAE,MAAU,GACvB,OAAO,CAAC,oBAAoB,CAAC,CA4G/B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
dotenv.config();
|
|
3
|
+
import { getUtxos, selectUtxos } from '../utxo/utxo-utils';
|
|
4
|
+
import { initializeWallet } from '../wallet/wallet-utils';
|
|
5
|
+
import { buildTransactionInputs, createP2pkhScript } from '../transaction/transaction-utils';
|
|
6
|
+
import { buildAndBroadcastTransaction, logTransactionSummary } from '../transaction/transaction-builder';
|
|
7
|
+
export async function createRawXecTransaction(recipients, utxoStrategy = 'all', addressIndex = 0) {
|
|
8
|
+
try {
|
|
9
|
+
// 验证参数
|
|
10
|
+
if (!Array.isArray(recipients) || recipients.length === 0) {
|
|
11
|
+
throw new Error('recipients must be a non-empty array');
|
|
12
|
+
}
|
|
13
|
+
// 验证每个接收方对象
|
|
14
|
+
for (const recipient of recipients) {
|
|
15
|
+
if (!recipient.address || typeof recipient.amount !== 'number') {
|
|
16
|
+
throw new Error('Each recipient must have address and amount fields');
|
|
17
|
+
}
|
|
18
|
+
// 如果提供了tokenId,验证其格式
|
|
19
|
+
if (recipient.tokenId && typeof recipient.tokenId !== 'string') {
|
|
20
|
+
throw new Error('tokenId must be a string if provided');
|
|
21
|
+
}
|
|
22
|
+
// 如果提供了decimals,验证其为非负整数
|
|
23
|
+
if (recipient.decimals !== undefined && (!Number.isInteger(recipient.decimals) || recipient.decimals < 0)) {
|
|
24
|
+
throw new Error('decimals must be a non-negative integer if provided');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// 初始化钱包 - 使用指定的地址索引
|
|
28
|
+
const { walletSk, walletPk, walletP2pkh, address: utxoAddress } = initializeWallet(addressIndex);
|
|
29
|
+
const utxos = await getUtxos(utxoAddress);
|
|
30
|
+
if (utxos.length === 0) {
|
|
31
|
+
throw new Error(`No UTXOs found for address index ${addressIndex}`);
|
|
32
|
+
}
|
|
33
|
+
// 计算总发送金额 (只计算XEC,不包括代币)
|
|
34
|
+
const totalSendAmount = recipients
|
|
35
|
+
.filter(recipient => !recipient.tokenId) // 只计算非代币交易
|
|
36
|
+
.reduce((sum, recipient) => sum + recipient.amount, 0);
|
|
37
|
+
// 分析交易类型
|
|
38
|
+
const xecRecipients = recipients.filter(r => !r.tokenId);
|
|
39
|
+
const tokenRecipients = recipients.filter(r => r.tokenId);
|
|
40
|
+
// 选择UTXOs
|
|
41
|
+
const utxoSelection = selectUtxos(utxos, totalSendAmount, utxoStrategy);
|
|
42
|
+
const { selectedUtxos } = utxoSelection;
|
|
43
|
+
// 记录交易摘要
|
|
44
|
+
logTransactionSummary('XEC', {
|
|
45
|
+
地址索引: addressIndex,
|
|
46
|
+
策略: utxoStrategy,
|
|
47
|
+
接收方数量: recipients.length,
|
|
48
|
+
XEC接收方: xecRecipients.length,
|
|
49
|
+
代币接收方: tokenRecipients.length,
|
|
50
|
+
总发送金额: totalSendAmount,
|
|
51
|
+
UTXOs数量: selectedUtxos.length,
|
|
52
|
+
总输入: utxoSelection.totalInputValue,
|
|
53
|
+
预估手续费: utxoSelection.estimatedFee,
|
|
54
|
+
预计找零: utxoSelection.changeAmount
|
|
55
|
+
});
|
|
56
|
+
// 构建交易输入
|
|
57
|
+
const inputs = buildTransactionInputs(selectedUtxos, walletP2pkh, walletSk, walletPk);
|
|
58
|
+
// 构建交易输出 - 为每个接收方创建输出
|
|
59
|
+
const outputs = [];
|
|
60
|
+
// 添加所有接收方输出
|
|
61
|
+
recipients.forEach(recipient => {
|
|
62
|
+
const output = {
|
|
63
|
+
sats: BigInt(recipient.amount),
|
|
64
|
+
script: createP2pkhScript(recipient.address)
|
|
65
|
+
};
|
|
66
|
+
// 如果是代币交易,添加代币信息
|
|
67
|
+
if (recipient.tokenId) {
|
|
68
|
+
output.tokenId = recipient.tokenId;
|
|
69
|
+
if (recipient.decimals !== undefined) {
|
|
70
|
+
output.decimals = recipient.decimals;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
outputs.push(output);
|
|
74
|
+
});
|
|
75
|
+
// 添加找零脚本 - 保持原始逻辑!
|
|
76
|
+
outputs.push(walletP2pkh);
|
|
77
|
+
// 构建并广播交易
|
|
78
|
+
const result = await buildAndBroadcastTransaction(inputs, outputs);
|
|
79
|
+
return {
|
|
80
|
+
...result,
|
|
81
|
+
utxoSelection,
|
|
82
|
+
recipients: recipients.length,
|
|
83
|
+
xecRecipients: xecRecipients.length,
|
|
84
|
+
tokenRecipients: tokenRecipients.length,
|
|
85
|
+
totalSent: totalSendAmount,
|
|
86
|
+
tokenTransfers: tokenRecipients.map(r => ({
|
|
87
|
+
tokenId: r.tokenId,
|
|
88
|
+
amount: r.amount,
|
|
89
|
+
decimals: r.decimals,
|
|
90
|
+
address: r.address
|
|
91
|
+
}))
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('XEC transaction creation failed:', error);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=xecsend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xecsend.js","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TransactionResult } from "../types";
|
|
2
|
+
interface TransactionOptions {
|
|
3
|
+
feePerKb?: bigint;
|
|
4
|
+
dustSats?: bigint;
|
|
5
|
+
dustLimit?: number;
|
|
6
|
+
}
|
|
7
|
+
interface RequiredParamConfig {
|
|
8
|
+
key: string;
|
|
9
|
+
message: string;
|
|
10
|
+
checkUndefined?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 构建并广播交易的通用函数
|
|
14
|
+
* @param inputs - 交易输入数组
|
|
15
|
+
* @param outputs - 交易输出数组
|
|
16
|
+
* @param options - 交易选项
|
|
17
|
+
* @returns 包含 explorer 链接和交易 ID 的对象
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildAndBroadcastTransaction(inputs: any[], outputs: any[], options?: TransactionOptions): Promise<TransactionResult>;
|
|
20
|
+
/**
|
|
21
|
+
* 验证必需参数的通用函数
|
|
22
|
+
* @param params - 参数对象
|
|
23
|
+
* @param required - 必需参数配置数组
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateRequiredParams(params: any, required: RequiredParamConfig[]): void;
|
|
26
|
+
/**
|
|
27
|
+
* 记录交易摘要的通用函数
|
|
28
|
+
* @param type - 交易类型
|
|
29
|
+
* @param summary - 摘要信息
|
|
30
|
+
*/
|
|
31
|
+
export declare function logTransactionSummary(type: string, summary: any): void;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=transaction-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-builder.d.ts","sourceRoot":"","sources":["../../transaction/transaction-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAK7C,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,GAAG,EAAE,EACb,OAAO,EAAE,GAAG,EAAE,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAMzF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAEtE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { chronik } from "../client/chronik-client";
|
|
2
|
+
import ecashLib from "ecash-lib";
|
|
3
|
+
const { TxBuilder, toHex } = ecashLib;
|
|
4
|
+
/**
|
|
5
|
+
* 构建并广播交易的通用函数
|
|
6
|
+
* @param inputs - 交易输入数组
|
|
7
|
+
* @param outputs - 交易输出数组
|
|
8
|
+
* @param options - 交易选项
|
|
9
|
+
* @returns 包含 explorer 链接和交易 ID 的对象
|
|
10
|
+
*/
|
|
11
|
+
export async function buildAndBroadcastTransaction(inputs, outputs, options = {}) {
|
|
12
|
+
const { feePerKb = 1000n, dustSats = 546n, dustLimit = 546 } = options;
|
|
13
|
+
try {
|
|
14
|
+
// 构建交易
|
|
15
|
+
const txBuild = new TxBuilder({ inputs, outputs });
|
|
16
|
+
// 签名交易
|
|
17
|
+
const tx = txBuild.sign({
|
|
18
|
+
feePerKb,
|
|
19
|
+
dustSats: typeof dustSats === 'bigint' ? dustSats : BigInt(dustLimit)
|
|
20
|
+
});
|
|
21
|
+
// 序列化交易
|
|
22
|
+
const rawTxHex = toHex(tx.ser());
|
|
23
|
+
// 广播交易
|
|
24
|
+
const broadcastResponse = await chronik.broadcastTx(rawTxHex);
|
|
25
|
+
if (!broadcastResponse) {
|
|
26
|
+
throw new Error("Empty Chronik broadcast response");
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
explorerLink: `https://explorer.e.cash/tx/${broadcastResponse.txid}`,
|
|
30
|
+
broadcastResult: broadcastResponse.txid,
|
|
31
|
+
txid: broadcastResponse.txid
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("Transaction build/broadcast failed:", error);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 验证必需参数的通用函数
|
|
41
|
+
* @param params - 参数对象
|
|
42
|
+
* @param required - 必需参数配置数组
|
|
43
|
+
*/
|
|
44
|
+
export function validateRequiredParams(params, required) {
|
|
45
|
+
for (const { key, message, checkUndefined } of required) {
|
|
46
|
+
if (checkUndefined ? params[key] === undefined : !params[key]) {
|
|
47
|
+
throw new Error(message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 记录交易摘要的通用函数
|
|
53
|
+
* @param type - 交易类型
|
|
54
|
+
* @param summary - 摘要信息
|
|
55
|
+
*/
|
|
56
|
+
export function logTransactionSummary(type, summary) {
|
|
57
|
+
console.log(`${type}交易摘要:`, summary);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=transaction-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-builder.js","sourceRoot":"","sources":["../../transaction/transaction-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;AAgBtC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAa,EACb,OAAc,EACd,UAA8B,EAAE;IAEhC,MAAM,EACJ,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,GAAG,EAChB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC;QACH,OAAO;QACP,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnD,OAAO;QACP,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YACtB,QAAQ;YACR,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;SACtE,CAAC,CAAC;QAEH,QAAQ;QACR,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAEjC,OAAO;QACP,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACL,YAAY,EAAE,8BAA8B,iBAAiB,CAAC,IAAI,EAAE;YACpE,eAAe,EAAE,iBAAiB,CAAC,IAAI;YACvC,IAAI,EAAE,iBAAiB,CAAC,IAAI;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAW,EAAE,QAA+B;IACjF,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxD,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAY;IAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Utxo } from '../types';
|
|
2
|
+
interface TransactionInput {
|
|
3
|
+
input: {
|
|
4
|
+
prevOut: {
|
|
5
|
+
txid: string;
|
|
6
|
+
outIdx: number;
|
|
7
|
+
};
|
|
8
|
+
signData: {
|
|
9
|
+
sats: bigint;
|
|
10
|
+
outputScript: any;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
signatory: any;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 构建交易输入 - 通用函数,支持单个或多个UTXO数组
|
|
17
|
+
* @param utxos - 单个UTXO数组或多个UTXO数组
|
|
18
|
+
* @param walletP2pkh - 钱包脚本
|
|
19
|
+
* @param walletSk - 私钥
|
|
20
|
+
* @param walletPk - 公钥
|
|
21
|
+
* @returns 交易输入数组
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildTransactionInputs(utxos: Utxo[] | Utxo[][], walletP2pkh: any, walletSk: Uint8Array, walletPk: Uint8Array): TransactionInput[];
|
|
24
|
+
/**
|
|
25
|
+
* 创建P2PKH脚本
|
|
26
|
+
* @param address - eCash地址
|
|
27
|
+
* @returns P2PKH脚本
|
|
28
|
+
*/
|
|
29
|
+
export declare function createP2pkhScript(address: string): any;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=transaction-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-utils.d.ts","sourceRoot":"","sources":["../../transaction/transaction-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAShC,UAAU,gBAAgB;IACxB,KAAK,EAAE;QACL,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;QACF,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,YAAY,EAAE,GAAG,CAAC;SACnB,CAAC;KACH,CAAC;IACF,SAAS,EAAE,GAAG,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EACxB,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,UAAU,GACnB,gBAAgB,EAAE,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAOtD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ecashLib from 'ecash-lib';
|
|
2
|
+
import { decodeCashAddress } from 'ecashaddrjs';
|
|
3
|
+
const { P2PKHSignatory, ALL_BIP143, Script, } = ecashLib;
|
|
4
|
+
/**
|
|
5
|
+
* 构建交易输入 - 通用函数,支持单个或多个UTXO数组
|
|
6
|
+
* @param utxos - 单个UTXO数组或多个UTXO数组
|
|
7
|
+
* @param walletP2pkh - 钱包脚本
|
|
8
|
+
* @param walletSk - 私钥
|
|
9
|
+
* @param walletPk - 公钥
|
|
10
|
+
* @returns 交易输入数组
|
|
11
|
+
*/
|
|
12
|
+
export function buildTransactionInputs(utxos, walletP2pkh, walletSk, walletPk) {
|
|
13
|
+
// 如果传入的是多个数组(如SLP交易的tokenUtxos和feeUtxos),则合并
|
|
14
|
+
const allUtxos = Array.isArray(utxos[0]) ? utxos.flat() : utxos;
|
|
15
|
+
return allUtxos.map(utxo => ({
|
|
16
|
+
input: {
|
|
17
|
+
prevOut: { txid: utxo.txid, outIdx: utxo.vout },
|
|
18
|
+
signData: { sats: BigInt(utxo.value), outputScript: walletP2pkh },
|
|
19
|
+
},
|
|
20
|
+
signatory: P2PKHSignatory(walletSk, walletPk, ALL_BIP143),
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 创建P2PKH脚本
|
|
25
|
+
* @param address - eCash地址
|
|
26
|
+
* @returns P2PKH脚本
|
|
27
|
+
*/
|
|
28
|
+
export function createP2pkhScript(address) {
|
|
29
|
+
try {
|
|
30
|
+
const { hash } = decodeCashAddress(address);
|
|
31
|
+
return Script.p2pkh(Buffer.from(hash, 'hex'));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new Error(`Invalid address: ${address}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=transaction-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-utils.js","sourceRoot":"","sources":["../../transaction/transaction-utils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,EACJ,cAAc,EACd,UAAU,EACV,MAAM,GACP,GAAG,QAAQ,CAAC;AAiBb;;;;;;;GAOG;AACH,MAAM,UAAU,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,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC5C,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
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 交易接收方
|
|
3
|
+
*/
|
|
4
|
+
export interface Recipient {
|
|
5
|
+
address: string;
|
|
6
|
+
amount: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* UTXO接口 - 统一的UTXO定义
|
|
10
|
+
*/
|
|
11
|
+
export interface Utxo {
|
|
12
|
+
txid: string;
|
|
13
|
+
vout: number;
|
|
14
|
+
value: number;
|
|
15
|
+
address?: string;
|
|
16
|
+
slpToken?: SlpToken;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* SLP代币信息接口
|
|
21
|
+
*/
|
|
22
|
+
export interface SlpToken {
|
|
23
|
+
tokenId: string;
|
|
24
|
+
atoms: string | bigint;
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 交易结果 - 统一的交易结果接口
|
|
29
|
+
*/
|
|
30
|
+
export interface TransactionResult {
|
|
31
|
+
txid: string;
|
|
32
|
+
explorerLink?: string;
|
|
33
|
+
broadcastResult?: string;
|
|
34
|
+
fee?: number;
|
|
35
|
+
inputs?: any[];
|
|
36
|
+
outputs?: any[];
|
|
37
|
+
[key: string]: any;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* SLP/ALP 代币交易选项
|
|
41
|
+
*/
|
|
42
|
+
export interface TokenTransactionOptions {
|
|
43
|
+
tokenId: string;
|
|
44
|
+
tokenDecimals: number;
|
|
45
|
+
addressIndex?: number;
|
|
46
|
+
feeStrategy?: string;
|
|
47
|
+
tokenStrategy?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* XEC 交易选项(可以是字符串或对象)
|
|
51
|
+
*/
|
|
52
|
+
export interface XecTransactionOptions {
|
|
53
|
+
utxoStrategy?: string;
|
|
54
|
+
addressIndex?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* XEC 交易选项联合类型
|
|
58
|
+
*/
|
|
59
|
+
export type XecOptions = string | XecTransactionOptions;
|
|
60
|
+
/**
|
|
61
|
+
* 通用发送方法的选项
|
|
62
|
+
*/
|
|
63
|
+
export interface GeneralSendOptions {
|
|
64
|
+
utxoStrategy?: string;
|
|
65
|
+
addressIndex?: number;
|
|
66
|
+
tokenId?: string;
|
|
67
|
+
tokenDecimals?: number;
|
|
68
|
+
feeStrategy?: string;
|
|
69
|
+
tokenStrategy?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 交易类型
|
|
73
|
+
*/
|
|
74
|
+
export type TransactionType = 'slp' | 'alp' | 'xec';
|
|
75
|
+
/**
|
|
76
|
+
* UTXO策略类型
|
|
77
|
+
*/
|
|
78
|
+
export type UtxoStrategy = 'all' | 'single' | 'multiple';
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,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,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,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,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA,SAAS"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Utxo, Recipient } from '../types';
|
|
2
|
+
interface UtxoSelection {
|
|
3
|
+
selectedUtxos: Utxo[];
|
|
4
|
+
totalInputValue: number;
|
|
5
|
+
estimatedFee: number;
|
|
6
|
+
changeAmount: number;
|
|
7
|
+
utxoCount: number;
|
|
8
|
+
}
|
|
9
|
+
interface SlpUtxoOptions {
|
|
10
|
+
dustLimit?: number;
|
|
11
|
+
feeStrategy?: 'all' | 'minimal' | 'largest_first';
|
|
12
|
+
tokenStrategy?: 'largest' | 'minimal' | 'all';
|
|
13
|
+
}
|
|
14
|
+
interface SlpUtxoSelection {
|
|
15
|
+
selectedTokenUtxos: Utxo[];
|
|
16
|
+
selectedFeeUtxos: Utxo[];
|
|
17
|
+
totalFeeInputValue: number;
|
|
18
|
+
estimatedFee: number;
|
|
19
|
+
feeChangeAmount: number;
|
|
20
|
+
tokenChange: bigint;
|
|
21
|
+
finalSendAmounts: bigint[];
|
|
22
|
+
totalSendTokens: bigint;
|
|
23
|
+
totalTokens: bigint;
|
|
24
|
+
dustLimit: number;
|
|
25
|
+
summary: {
|
|
26
|
+
tokenUtxoCount: number;
|
|
27
|
+
feeUtxoCount: number;
|
|
28
|
+
recipientCount: number;
|
|
29
|
+
hasTokenChange: boolean;
|
|
30
|
+
totalOutputs: number;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
interface TokenBalance {
|
|
34
|
+
tokenId: string;
|
|
35
|
+
totalTokens: bigint;
|
|
36
|
+
utxoCount: number;
|
|
37
|
+
utxos: Utxo[];
|
|
38
|
+
}
|
|
39
|
+
interface AddressBalance {
|
|
40
|
+
totalBalance: number;
|
|
41
|
+
utxoCount: number;
|
|
42
|
+
slpUtxoCount: number;
|
|
43
|
+
nonSlpUtxos: Utxo[];
|
|
44
|
+
slpUtxos: Utxo[];
|
|
45
|
+
tokenBalances: TokenBalance[];
|
|
46
|
+
}
|
|
47
|
+
type UtxoStrategy = 'all' | 'minimal' | 'largest_first';
|
|
48
|
+
/**
|
|
49
|
+
* Get UTXOs for a given address
|
|
50
|
+
* @param address - eCash address
|
|
51
|
+
* @returns Array of UTXOs
|
|
52
|
+
*/
|
|
53
|
+
declare function getUtxos(address: string): Promise<Utxo[]>;
|
|
54
|
+
/**
|
|
55
|
+
* 选择合适的UTXOs用于普通XEC交易
|
|
56
|
+
* @param utxos - 所有可用的UTXOs
|
|
57
|
+
* @param sendAmount - 要发送的金额
|
|
58
|
+
* @param strategy - 选择策略
|
|
59
|
+
* @returns 包含选择的UTXOs和相关信息
|
|
60
|
+
*/
|
|
61
|
+
declare function selectUtxos(utxos: Utxo[], sendAmount: number, strategy?: UtxoStrategy): UtxoSelection;
|
|
62
|
+
/**
|
|
63
|
+
* 为SLP交易选择UTXOs
|
|
64
|
+
* @param utxos - 所有可用的UTXOs
|
|
65
|
+
* @param tokenId - SLP代币ID
|
|
66
|
+
* @param recipients - 接收方数组,包含address和amount
|
|
67
|
+
* @param tokenDecimals - 代币小数位数
|
|
68
|
+
* @param options - 选项
|
|
69
|
+
* @returns 包含选择的UTXOs和相关信息
|
|
70
|
+
*/
|
|
71
|
+
declare function selectSlpUtxos(utxos: Utxo[], tokenId: string, recipients: Recipient[], tokenDecimals: number, options?: SlpUtxoOptions): SlpUtxoSelection;
|
|
72
|
+
/**
|
|
73
|
+
* 获取地址余额信息
|
|
74
|
+
* @param address - eCash地址
|
|
75
|
+
* @returns 余额信息
|
|
76
|
+
*/
|
|
77
|
+
declare function getAddressBalance(address: string): Promise<AddressBalance>;
|
|
78
|
+
export { getUtxos, selectUtxos, selectSlpUtxos, getAddressBalance };
|
|
79
|
+
//# sourceMappingURL=utxo-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utxo-utils.d.ts","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAY,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrD,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,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC;IAClD,aAAa,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;CAC/C;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;AAGD,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC;AAExD;;;;GAIG;AACH,iBAAe,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAqBxD;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,EAAE,MAAM,EACrB,OAAO,GAAE,cAAmB,GAC3B,gBAAgB,CAgHlB;AAED;;;;GAIG;AACH,iBAAe,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqCzE;AAED,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,EAClB,CAAC"}
|