ecash-quicksend 1.0.2 → 1.0.5
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 +76 -173
- package/dist/config/constants.d.ts +11 -4
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +21 -13
- package/dist/config/constants.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/send/tokensend.d.ts.map +1 -1
- package/dist/send/tokensend.js +7 -5
- package/dist/send/tokensend.js.map +1 -1
- package/dist/send/xecsend.d.ts +2 -1
- package/dist/send/xecsend.d.ts.map +1 -1
- package/dist/send/xecsend.js +7 -5
- package/dist/send/xecsend.js.map +1 -1
- package/dist/transaction/transaction-builder.d.ts +7 -1
- package/dist/transaction/transaction-builder.d.ts.map +1 -1
- package/dist/transaction/transaction-builder.js +4 -2
- package/dist/transaction/transaction-builder.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utxo/utxo-utils.d.ts +5 -2
- package/dist/utxo/utxo-utils.d.ts.map +1 -1
- package/dist/utxo/utxo-utils.js +7 -4
- package/dist/utxo/utxo-utils.js.map +1 -1
- package/dist/wallet/wallet-utils.d.ts +2 -1
- package/dist/wallet/wallet-utils.d.ts.map +1 -1
- package/dist/wallet/wallet-utils.js +8 -3
- package/dist/wallet/wallet-utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,17 +3,7 @@
|
|
|
3
3
|
[](https://badge.fury.io/js/ecash-quicksend)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
A unified transaction manager for eCash (XEC), SLP, and ALP token transactions.
|
|
7
|
-
|
|
8
|
-
## Features
|
|
9
|
-
|
|
10
|
-
- ✅ **XEC Transactions**: Send eCash (XEC) with customizable UTXO strategies
|
|
11
|
-
- ✅ **SLP Token Support**: Full support for Simple Ledger Protocol tokens
|
|
12
|
-
- ✅ **ALP Token Support**: Advanced Ledger Protocol token transactions
|
|
13
|
-
- ✅ **TypeScript Support**: Full TypeScript definitions included
|
|
14
|
-
- ✅ **Unified API**: Single interface for all transaction types
|
|
15
|
-
- ✅ **Flexible Configuration**: Mnemonic-based wallet management
|
|
16
|
-
- ✅ **Automatic UTXO Management**: Smart UTXO selection strategies
|
|
6
|
+
A unified transaction manager for eCash (XEC), SLP, and ALP token transactions.
|
|
17
7
|
|
|
18
8
|
## Installation
|
|
19
9
|
|
|
@@ -23,201 +13,122 @@ npm install ecash-quicksend
|
|
|
23
13
|
|
|
24
14
|
## Quick Start
|
|
25
15
|
|
|
26
|
-
###
|
|
27
|
-
|
|
28
|
-
Create a `.env` file in your project root:
|
|
16
|
+
### Setup
|
|
29
17
|
|
|
18
|
+
**Option 1: Environment Variable (Recommended)**
|
|
30
19
|
```env
|
|
31
|
-
#
|
|
32
|
-
MNEMONIC="your twelve word mnemonic phrase
|
|
20
|
+
# .env file
|
|
21
|
+
MNEMONIC="your twelve word mnemonic phrase"
|
|
33
22
|
```
|
|
34
23
|
|
|
35
|
-
|
|
24
|
+
**Option 2: Direct in Code**
|
|
25
|
+
```javascript
|
|
26
|
+
// Provide mnemonic directly in function calls
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Basic Usage
|
|
36
30
|
|
|
37
31
|
```javascript
|
|
38
32
|
import quick from 'ecash-quicksend';
|
|
39
33
|
|
|
40
34
|
// Send XEC
|
|
41
|
-
|
|
42
|
-
{ address: 'ecash:qq...', amount: 1000 } //
|
|
35
|
+
await quick.sendXec([
|
|
36
|
+
{ address: 'ecash:qq...', amount: 1000 } // 10.00 XEC
|
|
43
37
|
]);
|
|
44
38
|
|
|
45
|
-
// Send
|
|
46
|
-
|
|
47
|
-
{ address: 'ecash:qq...', amount:
|
|
39
|
+
// Send XEC with custom mnemonic
|
|
40
|
+
await quick.sendXec([
|
|
41
|
+
{ address: 'ecash:qq...', amount: 1000 } // 10.00 XEC
|
|
48
42
|
], {
|
|
49
|
-
|
|
50
|
-
tokenDecimals: 8
|
|
43
|
+
mnemonic: 'your twelve word mnemonic phrase'
|
|
51
44
|
});
|
|
52
45
|
|
|
53
|
-
// Send
|
|
54
|
-
|
|
55
|
-
{ address: 'ecash:qq...', amount: 100 }
|
|
46
|
+
// Send SLP tokens
|
|
47
|
+
await quick.sendSlp([
|
|
48
|
+
{ address: 'ecash:qq...', amount: 100 } // 1.00 token
|
|
56
49
|
], {
|
|
57
|
-
tokenId: 'your-alp-token-id',
|
|
58
|
-
tokenDecimals: 8
|
|
59
|
-
});
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## API Reference
|
|
63
|
-
|
|
64
|
-
### TransactionManager
|
|
65
|
-
|
|
66
|
-
The main class that manages all transaction types.
|
|
67
|
-
|
|
68
|
-
#### Methods
|
|
69
|
-
|
|
70
|
-
##### `sendXec(recipients, options?)`
|
|
71
|
-
|
|
72
|
-
Send eCash (XEC) to one or more recipients.
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
await quick.sendXec(
|
|
76
|
-
[{ address: 'ecash:qq...', amount: 1000 }],
|
|
77
|
-
{
|
|
78
|
-
utxoStrategy: 'all', // 'all' | 'largest' | 'smallest'
|
|
79
|
-
addressIndex: 0
|
|
80
|
-
}
|
|
81
|
-
);
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Parameters:**
|
|
85
|
-
- `recipients`: Array of `{ address: string, amount: number }`
|
|
86
|
-
- `options`: Optional configuration object
|
|
87
|
-
|
|
88
|
-
##### `sendSlp(recipients, options)`
|
|
89
|
-
|
|
90
|
-
Send SLP tokens to one or more recipients.
|
|
91
|
-
|
|
92
|
-
```typescript
|
|
93
|
-
await quick.sendSlp(
|
|
94
|
-
[{ address: 'ecash:qq...', amount: 100 }],
|
|
95
|
-
{
|
|
96
|
-
tokenId: 'your-token-id',
|
|
97
|
-
tokenDecimals: 8,
|
|
98
|
-
addressIndex: 0,
|
|
99
|
-
feeStrategy: 'auto',
|
|
100
|
-
tokenStrategy: 'auto'
|
|
101
|
-
}
|
|
102
|
-
);
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
##### `sendAlp(recipients, options)`
|
|
106
|
-
|
|
107
|
-
Send ALP tokens to one or more recipients.
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
await quick.sendAlp(
|
|
111
|
-
[{ address: 'ecash:qq...', amount: 100 }],
|
|
112
|
-
{
|
|
113
|
-
tokenId: 'your-token-id',
|
|
114
|
-
tokenDecimals: 8,
|
|
115
|
-
addressIndex: 0,
|
|
116
|
-
feeStrategy: 'auto',
|
|
117
|
-
tokenStrategy: 'auto'
|
|
118
|
-
}
|
|
119
|
-
);
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
##### `send(type, recipients, options?)`
|
|
123
|
-
|
|
124
|
-
Universal send method supporting all transaction types.
|
|
125
|
-
|
|
126
|
-
```typescript
|
|
127
|
-
// Send XEC
|
|
128
|
-
await quick.send('xec', recipients, {
|
|
129
|
-
utxoStrategy: 'all',
|
|
130
|
-
addressIndex: 0
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
// Send SLP
|
|
134
|
-
await quick.send('slp', recipients, {
|
|
135
50
|
tokenId: 'your-token-id',
|
|
136
|
-
tokenDecimals:
|
|
51
|
+
tokenDecimals: 2
|
|
137
52
|
});
|
|
138
53
|
|
|
139
|
-
// Send ALP
|
|
140
|
-
await quick.
|
|
54
|
+
// Send ALP tokens
|
|
55
|
+
await quick.sendAlp([
|
|
56
|
+
{ address: 'ecash:qq...', amount: 100 } // 0.01 token
|
|
57
|
+
], {
|
|
141
58
|
tokenId: 'your-token-id',
|
|
142
|
-
tokenDecimals:
|
|
59
|
+
tokenDecimals: 4
|
|
143
60
|
});
|
|
144
61
|
```
|
|
145
62
|
|
|
146
|
-
##
|
|
63
|
+
## API
|
|
147
64
|
|
|
148
|
-
###
|
|
65
|
+
### Methods
|
|
149
66
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
```
|
|
67
|
+
- `sendXec(recipients, options?)` - Send eCash
|
|
68
|
+
- `sendSlp(recipients, options)` - Send SLP tokens
|
|
69
|
+
- `sendAlp(recipients, options)` - Send ALP tokens
|
|
70
|
+
- `send(type, recipients, options?)` - Universal send method
|
|
156
71
|
|
|
157
|
-
###
|
|
72
|
+
### Options
|
|
158
73
|
|
|
159
74
|
```typescript
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
75
|
+
// XEC Options
|
|
76
|
+
{
|
|
77
|
+
utxoStrategy?: 'all' | 'minimal' | 'largest_first';
|
|
78
|
+
addressIndex?: number;
|
|
79
|
+
mnemonic?: string;
|
|
80
|
+
chronik?: ChronikClient;
|
|
165
81
|
}
|
|
166
|
-
```
|
|
167
82
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
83
|
+
// Token Options (SLP/ALP)
|
|
84
|
+
{
|
|
85
|
+
tokenId: string;
|
|
86
|
+
tokenDecimals: number;
|
|
87
|
+
addressIndex?: number;
|
|
88
|
+
feeStrategy?: 'all' | 'minimal' | 'largest_first';
|
|
89
|
+
tokenStrategy?: 'all' | 'largest' | 'minimal';
|
|
90
|
+
mnemonic?: string;
|
|
91
|
+
chronik?: ChronikClient;
|
|
177
92
|
}
|
|
178
93
|
```
|
|
179
94
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
utxoStrategy?: string; // 'all' | 'largest' | 'smallest'
|
|
185
|
-
addressIndex?: number; // Wallet address index (default: 0)
|
|
186
|
-
}
|
|
187
|
-
```
|
|
95
|
+
#### Strategy Details
|
|
96
|
+
- **utxoStrategy**: `'all'` (use all UTXOs) | `'minimal'` (fewest UTXOs) | `'largest_first'` (biggest UTXOs first)
|
|
97
|
+
- **feeStrategy**: `'all'` (all UTXOs for fees) | `'minimal'` (fewest for fees) | `'largest_first'` (biggest for fees)
|
|
98
|
+
- **tokenStrategy**: `'all'` (all token UTXOs) | `'largest'` (biggest token UTXO) | `'minimal'` (smallest sufficient)
|
|
188
99
|
|
|
189
100
|
## Advanced Usage
|
|
190
101
|
|
|
191
|
-
### Multiple Recipients
|
|
192
|
-
|
|
193
102
|
```javascript
|
|
194
|
-
//
|
|
103
|
+
// Multiple recipients
|
|
195
104
|
await quick.sendXec([
|
|
196
105
|
{ address: 'ecash:qq...', amount: 1000 },
|
|
197
|
-
{ address: 'ecash:qp...', amount: 2000 }
|
|
198
|
-
{ address: 'ecash:qr...', amount: 500 }
|
|
106
|
+
{ address: 'ecash:qp...', amount: 2000 }
|
|
199
107
|
]);
|
|
200
|
-
```
|
|
201
108
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
```javascript
|
|
205
|
-
// Use largest UTXO first (good for consolidation)
|
|
109
|
+
// Custom UTXO strategy
|
|
206
110
|
await quick.sendXec(recipients, { utxoStrategy: 'largest' });
|
|
207
111
|
|
|
208
|
-
//
|
|
209
|
-
await quick.sendXec(recipients, {
|
|
112
|
+
// Different address index
|
|
113
|
+
await quick.sendXec(recipients, { addressIndex: 1 });
|
|
210
114
|
|
|
211
|
-
//
|
|
212
|
-
await quick.
|
|
213
|
-
|
|
115
|
+
// Universal send method
|
|
116
|
+
await quick.send('xec', recipients);
|
|
117
|
+
await quick.send('slp', recipients, {
|
|
118
|
+
tokenId: 'token-id',
|
|
119
|
+
tokenDecimals: 2
|
|
120
|
+
});
|
|
214
121
|
|
|
215
|
-
|
|
122
|
+
// Custom chronik client
|
|
123
|
+
import { ChronikClient } from 'chronik-client';
|
|
124
|
+
const customChronik = new ChronikClient('https://your-chronik-url.com');
|
|
216
125
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
126
|
+
await quick.sendXec(recipients, { chronik: customChronik });
|
|
127
|
+
await quick.sendSlp(recipients, {
|
|
128
|
+
tokenId: 'token-id',
|
|
129
|
+
tokenDecimals: 2,
|
|
130
|
+
chronik: customChronik
|
|
131
|
+
});
|
|
221
132
|
```
|
|
222
133
|
|
|
223
134
|
## Error Handling
|
|
@@ -225,31 +136,23 @@ await quick.sendSlp(recipients, options, { addressIndex: 2 });
|
|
|
225
136
|
```javascript
|
|
226
137
|
try {
|
|
227
138
|
const result = await quick.sendXec(recipients);
|
|
228
|
-
|
|
229
|
-
if (result.success) {
|
|
230
|
-
console.log(`Transaction successful: ${result.txid}`);
|
|
231
|
-
} else {
|
|
232
|
-
console.error(`Transaction failed: ${result.message}`);
|
|
233
|
-
}
|
|
139
|
+
console.log('Success:', result.txid);
|
|
234
140
|
} catch (error) {
|
|
235
|
-
console.error('
|
|
141
|
+
console.error('Failed:', error.message);
|
|
236
142
|
}
|
|
237
143
|
```
|
|
238
144
|
|
|
239
145
|
## Requirements
|
|
240
146
|
|
|
241
147
|
- Node.js >= 18.0.0
|
|
242
|
-
-
|
|
243
|
-
- Network access to eCash blockchain
|
|
148
|
+
- Valid eCash wallet mnemonic phrase
|
|
244
149
|
|
|
245
150
|
## License
|
|
246
151
|
|
|
247
152
|
MIT
|
|
248
153
|
|
|
249
|
-
## Contributing
|
|
250
|
-
|
|
251
154
|
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
252
155
|
|
|
253
156
|
## Support
|
|
254
157
|
|
|
255
|
-
|
|
158
|
+
[Issues](https://github.com/alitayin/quicksend/issues) | [GitHub](https://github.com/alitayin/quicksend)
|
|
@@ -5,17 +5,24 @@ export declare const CONFIG: {
|
|
|
5
5
|
MNEMONIC: string;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* 验证必需的环境变量(可选调用)
|
|
9
9
|
*/
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function validateConfig(): void;
|
|
11
|
+
/**
|
|
12
|
+
* 获取助记词(从环境变量)
|
|
13
|
+
* 如果环境变量未设置,返回 null 而不是抛出错误
|
|
14
|
+
*/
|
|
15
|
+
export declare function getMnemonic(): string | null;
|
|
11
16
|
/**
|
|
12
17
|
* 获取钱包私钥WIF (从助记词派生)
|
|
13
18
|
* @param addressIndex - 地址索引,默认为0
|
|
19
|
+
* @param mnemonic - 可选:直接提供助记词,否则从环境变量获取
|
|
14
20
|
*/
|
|
15
|
-
export declare function getPrivateKeyWIF(addressIndex?: number): string;
|
|
21
|
+
export declare function getPrivateKeyWIF(addressIndex?: number, mnemonic?: string): string;
|
|
16
22
|
/**
|
|
17
23
|
* 获取默认的 UTXO 地址 (从助记词派生)
|
|
18
24
|
* @param addressIndex - 地址索引,默认为0
|
|
25
|
+
* @param mnemonic - 可选:直接提供助记词,否则从环境变量获取
|
|
19
26
|
*/
|
|
20
|
-
export declare function getDefaultUtxoAddress(addressIndex?: number): string;
|
|
27
|
+
export declare function getDefaultUtxoAddress(addressIndex?: number, mnemonic?: string): string;
|
|
21
28
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,eAAO,MAAM,MAAM;;CAGlB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"AAIA;;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
|
@@ -9,38 +9,46 @@ export const CONFIG = {
|
|
|
9
9
|
MNEMONIC: process.env.MNEMONIC,
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* 验证必需的环境变量(可选调用)
|
|
13
13
|
*/
|
|
14
|
-
function validateConfig() {
|
|
14
|
+
export function validateConfig() {
|
|
15
15
|
if (!CONFIG.MNEMONIC) {
|
|
16
16
|
throw new Error('必须设置 MNEMONIC 环境变量');
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
//
|
|
20
|
-
validateConfig();
|
|
19
|
+
// 注释掉自动验证,因为用户现在可以在代码中提供助记词
|
|
20
|
+
// validateConfig();
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* 获取助记词(从环境变量)
|
|
23
|
+
* 如果环境变量未设置,返回 null 而不是抛出错误
|
|
23
24
|
*/
|
|
24
25
|
export function getMnemonic() {
|
|
25
|
-
|
|
26
|
-
throw new Error('助记词未设置');
|
|
27
|
-
}
|
|
28
|
-
return CONFIG.MNEMONIC;
|
|
26
|
+
return CONFIG.MNEMONIC || null;
|
|
29
27
|
}
|
|
30
28
|
/**
|
|
31
29
|
* 获取钱包私钥WIF (从助记词派生)
|
|
32
30
|
* @param addressIndex - 地址索引,默认为0
|
|
31
|
+
* @param mnemonic - 可选:直接提供助记词,否则从环境变量获取
|
|
33
32
|
*/
|
|
34
|
-
export function getPrivateKeyWIF(addressIndex = 0) {
|
|
35
|
-
const
|
|
33
|
+
export function getPrivateKeyWIF(addressIndex = 0, mnemonic) {
|
|
34
|
+
const finalMnemonic = mnemonic || getMnemonic();
|
|
35
|
+
if (!finalMnemonic) {
|
|
36
|
+
throw new Error('助记词未设置:请在环境变量中设置 MNEMONIC 或在代码中提供助记词参数');
|
|
37
|
+
}
|
|
38
|
+
const derived = deriveBuyerKey(finalMnemonic, addressIndex);
|
|
36
39
|
return derived.wif;
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
39
42
|
* 获取默认的 UTXO 地址 (从助记词派生)
|
|
40
43
|
* @param addressIndex - 地址索引,默认为0
|
|
44
|
+
* @param mnemonic - 可选:直接提供助记词,否则从环境变量获取
|
|
41
45
|
*/
|
|
42
|
-
export function getDefaultUtxoAddress(addressIndex = 0) {
|
|
43
|
-
const
|
|
46
|
+
export function getDefaultUtxoAddress(addressIndex = 0, mnemonic) {
|
|
47
|
+
const finalMnemonic = mnemonic || getMnemonic();
|
|
48
|
+
if (!finalMnemonic) {
|
|
49
|
+
throw new Error('助记词未设置:请在环境变量中设置 MNEMONIC 或在代码中提供助记词参数');
|
|
50
|
+
}
|
|
51
|
+
const derived = deriveBuyerKey(finalMnemonic, addressIndex);
|
|
44
52
|
return derived.address;
|
|
45
53
|
}
|
|
46
54
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;CAC/B,CAAC;AAEF;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../config/constants.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,gBAAgB;IAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,4BAA4B;AAC5B,oBAAoB;AAEpB;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,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,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,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,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,26 +7,26 @@ declare class TransactionManager {
|
|
|
7
7
|
/**
|
|
8
8
|
* 发送 SLP 代币
|
|
9
9
|
* @param recipients - 接收方数组
|
|
10
|
-
* @param options -
|
|
10
|
+
* @param options - 交易选项(可包含助记词和chronik实例)
|
|
11
11
|
*/
|
|
12
12
|
sendSlp(recipients: Recipient[], options: TokenTransactionOptions): Promise<TransactionResult>;
|
|
13
13
|
/**
|
|
14
14
|
* 发送 ALP 代币
|
|
15
15
|
* @param recipients - 接收方数组
|
|
16
|
-
* @param options -
|
|
16
|
+
* @param options - 交易选项(可包含助记词和chronik实例)
|
|
17
17
|
*/
|
|
18
18
|
sendAlp(recipients: Recipient[], options: TokenTransactionOptions): Promise<TransactionResult>;
|
|
19
19
|
/**
|
|
20
20
|
* 发送 XEC (eCash)
|
|
21
21
|
* @param recipients - 接收方数组
|
|
22
|
-
* @param options - UTXO选择策略字符串或包含utxoStrategy和
|
|
22
|
+
* @param options - UTXO选择策略字符串或包含utxoStrategy、addressIndex、mnemonic和chronik的选项对象
|
|
23
23
|
*/
|
|
24
24
|
sendXec(recipients: Recipient[], options?: XecOptions): Promise<TransactionResult>;
|
|
25
25
|
/**
|
|
26
26
|
* 通用发送方法
|
|
27
27
|
* @param type - 交易类型
|
|
28
28
|
* @param recipients - 接收方数组
|
|
29
|
-
* @param options -
|
|
29
|
+
* @param options - 交易选项(可包含助记词和chronik实例)
|
|
30
30
|
*/
|
|
31
31
|
send(type: TransactionType, recipients: Recipient[], options?: GeneralSendOptions): Promise<TransactionResult>;
|
|
32
32
|
}
|
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,EAChB,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;
|
|
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,EAChB,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
CHANGED
|
@@ -8,7 +8,7 @@ class TransactionManager {
|
|
|
8
8
|
/**
|
|
9
9
|
* 发送 SLP 代币
|
|
10
10
|
* @param recipients - 接收方数组
|
|
11
|
-
* @param options -
|
|
11
|
+
* @param options - 交易选项(可包含助记词和chronik实例)
|
|
12
12
|
*/
|
|
13
13
|
async sendSlp(recipients, options) {
|
|
14
14
|
return await createRawSlpTransaction(recipients, options);
|
|
@@ -16,7 +16,7 @@ class TransactionManager {
|
|
|
16
16
|
/**
|
|
17
17
|
* 发送 ALP 代币
|
|
18
18
|
* @param recipients - 接收方数组
|
|
19
|
-
* @param options -
|
|
19
|
+
* @param options - 交易选项(可包含助记词和chronik实例)
|
|
20
20
|
*/
|
|
21
21
|
async sendAlp(recipients, options) {
|
|
22
22
|
return await createRawAlpTransaction(recipients, options);
|
|
@@ -24,27 +24,33 @@ class TransactionManager {
|
|
|
24
24
|
/**
|
|
25
25
|
* 发送 XEC (eCash)
|
|
26
26
|
* @param recipients - 接收方数组
|
|
27
|
-
* @param options - UTXO选择策略字符串或包含utxoStrategy和
|
|
27
|
+
* @param options - UTXO选择策略字符串或包含utxoStrategy、addressIndex、mnemonic和chronik的选项对象
|
|
28
28
|
*/
|
|
29
29
|
async sendXec(recipients, options = 'all') {
|
|
30
30
|
// 如果options是对象,提取相关参数;否则直接使用options作为策略
|
|
31
31
|
let utxoStrategy;
|
|
32
32
|
let addressIndex;
|
|
33
|
+
let mnemonic;
|
|
34
|
+
let chronikClient; // 新增:chronik客户端
|
|
33
35
|
if (typeof options === 'object' && options !== null) {
|
|
34
36
|
utxoStrategy = options.utxoStrategy || 'all';
|
|
35
37
|
addressIndex = options.addressIndex || 0;
|
|
38
|
+
mnemonic = options.mnemonic;
|
|
39
|
+
chronikClient = options.chronik; // 提取chronik客户端
|
|
36
40
|
}
|
|
37
41
|
else {
|
|
38
42
|
utxoStrategy = options;
|
|
39
43
|
addressIndex = 0;
|
|
44
|
+
mnemonic = undefined;
|
|
45
|
+
chronikClient = undefined;
|
|
40
46
|
}
|
|
41
|
-
return await createRawXecTransaction(recipients, utxoStrategy, addressIndex);
|
|
47
|
+
return await createRawXecTransaction(recipients, utxoStrategy, addressIndex, mnemonic, chronikClient);
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
44
50
|
* 通用发送方法
|
|
45
51
|
* @param type - 交易类型
|
|
46
52
|
* @param recipients - 接收方数组
|
|
47
|
-
* @param options -
|
|
53
|
+
* @param options - 交易选项(可包含助记词和chronik实例)
|
|
48
54
|
*/
|
|
49
55
|
async send(type, recipients, options = {}) {
|
|
50
56
|
switch (type.toLowerCase()) {
|
|
@@ -57,7 +63,9 @@ class TransactionManager {
|
|
|
57
63
|
tokenDecimals: options.tokenDecimals,
|
|
58
64
|
addressIndex: options.addressIndex,
|
|
59
65
|
feeStrategy: options.feeStrategy,
|
|
60
|
-
tokenStrategy: options.tokenStrategy
|
|
66
|
+
tokenStrategy: options.tokenStrategy,
|
|
67
|
+
mnemonic: options.mnemonic,
|
|
68
|
+
chronik: options.chronik // 传递chronik客户端
|
|
61
69
|
});
|
|
62
70
|
case 'alp':
|
|
63
71
|
if (!options.tokenId || !options.tokenDecimals) {
|
|
@@ -68,12 +76,16 @@ class TransactionManager {
|
|
|
68
76
|
tokenDecimals: options.tokenDecimals,
|
|
69
77
|
addressIndex: options.addressIndex,
|
|
70
78
|
feeStrategy: options.feeStrategy,
|
|
71
|
-
tokenStrategy: options.tokenStrategy
|
|
79
|
+
tokenStrategy: options.tokenStrategy,
|
|
80
|
+
mnemonic: options.mnemonic,
|
|
81
|
+
chronik: options.chronik // 传递chronik客户端
|
|
72
82
|
});
|
|
73
83
|
case 'xec':
|
|
74
84
|
const xecOptions = {
|
|
75
85
|
utxoStrategy: options.utxoStrategy,
|
|
76
|
-
addressIndex: options.addressIndex
|
|
86
|
+
addressIndex: options.addressIndex,
|
|
87
|
+
mnemonic: options.mnemonic,
|
|
88
|
+
chronik: options.chronik // 传递chronik客户端
|
|
77
89
|
};
|
|
78
90
|
return await this.sendXec(recipients, xecOptions);
|
|
79
91
|
default:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAW5D;;;GAGG;AACH,MAAM,kBAAkB;IACtB;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,UAAuB,EAAE,OAAgC;QACrE,OAAO,MAAM,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,UAAuB,EAAE,OAAgC;QACrE,OAAO,MAAM,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,UAAuB,EAAE,UAAsB,KAAK;QAChE,wCAAwC;QACxC,IAAI,YAAoB,CAAC;QACzB,IAAI,YAAoB,CAAC;
|
|
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":"AAYA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAwKjF;;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
|
@@ -67,10 +67,12 @@ async function createTokenTransaction(recipients, options, tokenType = 'SLP') {
|
|
|
67
67
|
{ key: 'tokenId', message: 'tokenId is required' },
|
|
68
68
|
{ key: 'tokenDecimals', message: 'tokenDecimals is required', checkUndefined: true }
|
|
69
69
|
]);
|
|
70
|
-
const { tokenId, tokenDecimals, addressIndex = 0, feeStrategy = 'all', tokenStrategy = 'all'
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const { tokenId, tokenDecimals, addressIndex = 0, feeStrategy = 'all', tokenStrategy = 'all', mnemonic, // 从选项中提取助记词
|
|
71
|
+
chronik: chronikClient // 新增:从选项中提取chronik客户端
|
|
72
|
+
} = options;
|
|
73
|
+
// 初始化钱包 - 使用指定的地址索引和可选的助记词
|
|
74
|
+
const { walletSk, walletPk, walletP2pkh, address: utxoAddress } = initializeWallet(addressIndex, mnemonic);
|
|
75
|
+
const utxos = await getUtxos(utxoAddress, chronikClient); // 传递chronik客户端
|
|
74
76
|
if (utxos.length === 0) {
|
|
75
77
|
throw new Error(`No UTXOs found for address index ${addressIndex}`);
|
|
76
78
|
}
|
|
@@ -99,7 +101,7 @@ async function createTokenTransaction(recipients, options, tokenType = 'SLP') {
|
|
|
99
101
|
outputs = buildSlpOutputs(tokenId, finalSendAmounts, recipients, tokenChange, dustLimit, walletP2pkh);
|
|
100
102
|
}
|
|
101
103
|
// 构建并广播交易
|
|
102
|
-
return await buildAndBroadcastTransaction(inputs, outputs, { dustLimit });
|
|
104
|
+
return await buildAndBroadcastTransaction(inputs, outputs, { dustLimit, chronik: chronikClient }); // 传递chronik客户端
|
|
103
105
|
}
|
|
104
106
|
catch (error) {
|
|
105
107
|
console.error(`${tokenType} transaction creation failed:`, error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokensend.js","sourceRoot":"","sources":["../../send/tokensend.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"tokensend.js","sourceRoot":"","sources":["../../send/tokensend.ts"],"names":[],"mappings":"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"}
|
package/dist/send/xecsend.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ interface XecTransactionResult extends TransactionResult {
|
|
|
18
18
|
address: string;
|
|
19
19
|
}>;
|
|
20
20
|
}
|
|
21
|
-
export declare function createRawXecTransaction(recipients: ExtendedRecipient[], utxoStrategy?: string, addressIndex?: number
|
|
21
|
+
export declare function createRawXecTransaction(recipients: ExtendedRecipient[], utxoStrategy?: string, addressIndex?: number, mnemonic?: string, // 可选的助记词参数
|
|
22
|
+
chronikClient?: any): Promise<XecTransactionResult>;
|
|
22
23
|
export {};
|
|
23
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":"AAOA,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,EACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW;AAC9B,aAAa,CAAC,EAAE,GAAG,GAClB,OAAO,CAAC,oBAAoB,CAAC,CA4G/B"}
|
package/dist/send/xecsend.js
CHANGED
|
@@ -4,7 +4,9 @@ import { getUtxos, selectUtxos } from '../utxo/utxo-utils';
|
|
|
4
4
|
import { initializeWallet } from '../wallet/wallet-utils';
|
|
5
5
|
import { buildTransactionInputs, createP2pkhScript } from '../transaction/transaction-utils';
|
|
6
6
|
import { buildAndBroadcastTransaction, logTransactionSummary } from '../transaction/transaction-builder';
|
|
7
|
-
export async function createRawXecTransaction(recipients, utxoStrategy = 'all', addressIndex = 0
|
|
7
|
+
export async function createRawXecTransaction(recipients, utxoStrategy = 'all', addressIndex = 0, mnemonic, // 可选的助记词参数
|
|
8
|
+
chronikClient // 新增:可选的chronik客户端参数 (使用any类型以避免循环依赖)
|
|
9
|
+
) {
|
|
8
10
|
try {
|
|
9
11
|
// 验证参数
|
|
10
12
|
if (!Array.isArray(recipients) || recipients.length === 0) {
|
|
@@ -24,9 +26,9 @@ export async function createRawXecTransaction(recipients, utxoStrategy = 'all',
|
|
|
24
26
|
throw new Error('decimals must be a non-negative integer if provided');
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
|
-
// 初始化钱包 -
|
|
28
|
-
const { walletSk, walletPk, walletP2pkh, address: utxoAddress } = initializeWallet(addressIndex);
|
|
29
|
-
const utxos = await getUtxos(utxoAddress);
|
|
29
|
+
// 初始化钱包 - 使用指定的地址索引和可选的助记词
|
|
30
|
+
const { walletSk, walletPk, walletP2pkh, address: utxoAddress } = initializeWallet(addressIndex, mnemonic);
|
|
31
|
+
const utxos = await getUtxos(utxoAddress, chronikClient); // 传递chronik客户端
|
|
30
32
|
if (utxos.length === 0) {
|
|
31
33
|
throw new Error(`No UTXOs found for address index ${addressIndex}`);
|
|
32
34
|
}
|
|
@@ -75,7 +77,7 @@ export async function createRawXecTransaction(recipients, utxoStrategy = 'all',
|
|
|
75
77
|
// 添加找零脚本 - 保持原始逻辑!
|
|
76
78
|
outputs.push(walletP2pkh);
|
|
77
79
|
// 构建并广播交易
|
|
78
|
-
const result = await buildAndBroadcastTransaction(inputs, outputs);
|
|
80
|
+
const result = await buildAndBroadcastTransaction(inputs, outputs, { chronik: chronikClient }); // 传递chronik客户端
|
|
79
81
|
return {
|
|
80
82
|
...result,
|
|
81
83
|
utxoSelection,
|
package/dist/send/xecsend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xecsend.js","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"xecsend.js","sourceRoot":"","sources":["../../send/xecsend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChronikClient } from "chronik-client";
|
|
2
2
|
interface TransactionOptions {
|
|
3
3
|
feePerKb?: bigint;
|
|
4
4
|
dustSats?: bigint;
|
|
5
5
|
dustLimit?: number;
|
|
6
|
+
chronik?: ChronikClient;
|
|
7
|
+
}
|
|
8
|
+
interface TransactionResult {
|
|
9
|
+
explorerLink: string;
|
|
10
|
+
broadcastResult: string;
|
|
11
|
+
txid: string;
|
|
6
12
|
}
|
|
7
13
|
interface RequiredParamConfig {
|
|
8
14
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-builder.d.ts","sourceRoot":"","sources":["../../transaction/transaction-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transaction-builder.d.ts","sourceRoot":"","sources":["../../transaction/transaction-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAK/C,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAGD,UAAU,iBAAiB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;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,CAsC5B;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"}
|
|
@@ -9,7 +9,9 @@ const { TxBuilder, toHex } = ecashLib;
|
|
|
9
9
|
* @returns 包含 explorer 链接和交易 ID 的对象
|
|
10
10
|
*/
|
|
11
11
|
export async function buildAndBroadcastTransaction(inputs, outputs, options = {}) {
|
|
12
|
-
const { feePerKb = 1000n, dustSats = 546n, dustLimit = 546
|
|
12
|
+
const { feePerKb = 1000n, dustSats = 546n, dustLimit = 546, chronik: chronikClient // 提取chronik客户端
|
|
13
|
+
} = options;
|
|
14
|
+
const client = chronikClient || chronik; // 使用传入的chronik客户端或默认的
|
|
13
15
|
try {
|
|
14
16
|
// 构建交易
|
|
15
17
|
const txBuild = new TxBuilder({ inputs, outputs });
|
|
@@ -21,7 +23,7 @@ export async function buildAndBroadcastTransaction(inputs, outputs, options = {}
|
|
|
21
23
|
// 序列化交易
|
|
22
24
|
const rawTxHex = toHex(tx.ser());
|
|
23
25
|
// 广播交易
|
|
24
|
-
const broadcastResponse = await
|
|
26
|
+
const broadcastResponse = await client.broadcastTx(rawTxHex);
|
|
25
27
|
if (!broadcastResponse) {
|
|
26
28
|
throw new Error("Empty Chronik broadcast response");
|
|
27
29
|
}
|
|
@@ -1 +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;
|
|
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;AAwBtC;;;;;;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,EACf,OAAO,EAAE,aAAa,CAAC,eAAe;MACvC,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,aAAa,IAAI,OAAO,CAAC,CAAC,sBAAsB;IAE/D,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,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7D,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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ChronikClient } from "chronik-client";
|
|
1
2
|
/**
|
|
2
3
|
* 交易接收方
|
|
3
4
|
*/
|
|
@@ -45,6 +46,8 @@ export interface TokenTransactionOptions {
|
|
|
45
46
|
addressIndex?: number;
|
|
46
47
|
feeStrategy?: string;
|
|
47
48
|
tokenStrategy?: string;
|
|
49
|
+
mnemonic?: string;
|
|
50
|
+
chronik?: ChronikClient;
|
|
48
51
|
}
|
|
49
52
|
/**
|
|
50
53
|
* XEC 交易选项(可以是字符串或对象)
|
|
@@ -52,6 +55,8 @@ export interface TokenTransactionOptions {
|
|
|
52
55
|
export interface XecTransactionOptions {
|
|
53
56
|
utxoStrategy?: string;
|
|
54
57
|
addressIndex?: number;
|
|
58
|
+
mnemonic?: string;
|
|
59
|
+
chronik?: ChronikClient;
|
|
55
60
|
}
|
|
56
61
|
/**
|
|
57
62
|
* XEC 交易选项联合类型
|
|
@@ -67,6 +72,8 @@ export interface GeneralSendOptions {
|
|
|
67
72
|
tokenDecimals?: number;
|
|
68
73
|
feeStrategy?: string;
|
|
69
74
|
tokenStrategy?: string;
|
|
75
|
+
mnemonic?: string;
|
|
76
|
+
chronik?: ChronikClient;
|
|
70
77
|
}
|
|
71
78
|
/**
|
|
72
79
|
* 交易类型
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;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;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,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;IACvB,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,QAAQ,GAAG,UAAU,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Utxo, Recipient } from '../types';
|
|
2
|
+
import { ChronikClient } from 'chronik-client';
|
|
2
3
|
interface UtxoSelection {
|
|
3
4
|
selectedUtxos: Utxo[];
|
|
4
5
|
totalInputValue: number;
|
|
@@ -48,9 +49,10 @@ type UtxoStrategy = 'all' | 'minimal' | 'largest_first';
|
|
|
48
49
|
/**
|
|
49
50
|
* Get UTXOs for a given address
|
|
50
51
|
* @param address - eCash address
|
|
52
|
+
* @param chronikClient - Optional chronik client instance (uses default if not provided)
|
|
51
53
|
* @returns Array of UTXOs
|
|
52
54
|
*/
|
|
53
|
-
declare function getUtxos(address: string): Promise<Utxo[]>;
|
|
55
|
+
declare function getUtxos(address: string, chronikClient?: ChronikClient): Promise<Utxo[]>;
|
|
54
56
|
/**
|
|
55
57
|
* 选择合适的UTXOs用于普通XEC交易
|
|
56
58
|
* @param utxos - 所有可用的UTXOs
|
|
@@ -72,8 +74,9 @@ declare function selectSlpUtxos(utxos: Utxo[], tokenId: string, recipients: Reci
|
|
|
72
74
|
/**
|
|
73
75
|
* 获取地址余额信息
|
|
74
76
|
* @param address - eCash地址
|
|
77
|
+
* @param chronikClient - Optional chronik client instance (uses default if not provided)
|
|
75
78
|
* @returns 余额信息
|
|
76
79
|
*/
|
|
77
|
-
declare function getAddressBalance(address: string): Promise<AddressBalance>;
|
|
80
|
+
declare function getAddressBalance(address: string, chronikClient?: ChronikClient): Promise<AddressBalance>;
|
|
78
81
|
export { getUtxos, selectUtxos, selectSlpUtxos, getAddressBalance };
|
|
79
82
|
//# sourceMappingURL=utxo-utils.d.ts.map
|
|
@@ -1 +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;
|
|
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;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/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,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;;;;;GAKG;AACH,iBAAe,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAuBvF;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;;;;;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
|
@@ -3,12 +3,14 @@ import { chronik } from '../client/chronik-client';
|
|
|
3
3
|
/**
|
|
4
4
|
* Get UTXOs for a given address
|
|
5
5
|
* @param address - eCash address
|
|
6
|
+
* @param chronikClient - Optional chronik client instance (uses default if not provided)
|
|
6
7
|
* @returns Array of UTXOs
|
|
7
8
|
*/
|
|
8
|
-
async function getUtxos(address) {
|
|
9
|
+
async function getUtxos(address, chronikClient) {
|
|
9
10
|
const { type, hash } = decodeCashAddress(address);
|
|
11
|
+
const client = chronikClient || chronik; // 使用传入的chronik客户端或默认的
|
|
10
12
|
try {
|
|
11
|
-
const utxosResponse = await
|
|
13
|
+
const utxosResponse = await client.script(type, hash).utxos();
|
|
12
14
|
if (!utxosResponse || !utxosResponse.utxos) {
|
|
13
15
|
throw new Error('utxosResponse does not contain utxos property');
|
|
14
16
|
}
|
|
@@ -188,11 +190,12 @@ function selectSlpUtxos(utxos, tokenId, recipients, tokenDecimals, options = {})
|
|
|
188
190
|
/**
|
|
189
191
|
* 获取地址余额信息
|
|
190
192
|
* @param address - eCash地址
|
|
193
|
+
* @param chronikClient - Optional chronik client instance (uses default if not provided)
|
|
191
194
|
* @returns 余额信息
|
|
192
195
|
*/
|
|
193
|
-
async function getAddressBalance(address) {
|
|
196
|
+
async function getAddressBalance(address, chronikClient) {
|
|
194
197
|
try {
|
|
195
|
-
const utxos = await getUtxos(address);
|
|
198
|
+
const utxos = await getUtxos(address, chronikClient);
|
|
196
199
|
const nonSlpUtxos = utxos.filter(utxo => !utxo.slpToken);
|
|
197
200
|
const slpUtxos = utxos.filter(utxo => utxo.slpToken);
|
|
198
201
|
const totalBalance = nonSlpUtxos.reduce((sum, utxo) => sum + utxo.value, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxo-utils.js","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"utxo-utils.js","sourceRoot":"","sources":["../../utxo/utxo-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,9 @@ interface WalletInfo {
|
|
|
10
10
|
/**
|
|
11
11
|
* 初始化钱包 - 优化版本,只调用一次 deriveBuyerKey
|
|
12
12
|
* @param addressIndex - 地址索引,默认为0
|
|
13
|
+
* @param mnemonic - 可选:直接提供助记词,否则从环境变量获取
|
|
13
14
|
* @returns 钱包相关的密钥、脚本和地址
|
|
14
15
|
*/
|
|
15
|
-
export declare function initializeWallet(addressIndex?: number): WalletInfo;
|
|
16
|
+
export declare function initializeWallet(addressIndex?: number, mnemonic?: string): WalletInfo;
|
|
16
17
|
export {};
|
|
17
18
|
//# sourceMappingURL=wallet-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-utils.d.ts","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":"AAaA,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
|
|
1
|
+
{"version":3,"file":"wallet-utils.d.ts","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":"AAaA,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,CA+BxF"}
|
|
@@ -6,13 +6,18 @@ const { Ecc, Script, fromHex, shaRmd160, } = ecashLib;
|
|
|
6
6
|
/**
|
|
7
7
|
* 初始化钱包 - 优化版本,只调用一次 deriveBuyerKey
|
|
8
8
|
* @param addressIndex - 地址索引,默认为0
|
|
9
|
+
* @param mnemonic - 可选:直接提供助记词,否则从环境变量获取
|
|
9
10
|
* @returns 钱包相关的密钥、脚本和地址
|
|
10
11
|
*/
|
|
11
|
-
export function initializeWallet(addressIndex = 0) {
|
|
12
|
-
|
|
12
|
+
export function initializeWallet(addressIndex = 0, mnemonic) {
|
|
13
|
+
// 如果提供了助记词参数就使用,否则从环境变量获取
|
|
14
|
+
const finalMnemonic = mnemonic || getMnemonic();
|
|
15
|
+
if (!finalMnemonic) {
|
|
16
|
+
throw new Error('助记词未设置:请在环境变量中设置 MNEMONIC 或在函数调用中提供助记词参数');
|
|
17
|
+
}
|
|
13
18
|
console.log('使用助记词派生私钥...');
|
|
14
19
|
// 只调用一次 deriveBuyerKey,获取完整信息
|
|
15
|
-
const derived = deriveBuyerKey(
|
|
20
|
+
const derived = deriveBuyerKey(finalMnemonic, addressIndex);
|
|
16
21
|
const ecc = new Ecc();
|
|
17
22
|
const decoded = wif.decode(derived.wif);
|
|
18
23
|
const privateKey = decoded.privateKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-utils.js","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,EACJ,GAAG,EACH,MAAM,EACN,OAAO,EACP,SAAS,GACV,GAAG,QAAQ,CAAC;AAab
|
|
1
|
+
{"version":3,"file":"wallet-utils.js","sourceRoot":"","sources":["../../wallet/wallet-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,EACJ,GAAG,EACH,MAAM,EACN,OAAO,EACP,SAAS,GACV,GAAG,QAAQ,CAAC;AAab;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,eAAuB,CAAC,EAAE,QAAiB;IAC1E,0BAA0B;IAC1B,MAAM,aAAa,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;IAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE5B,8BAA8B;IAC9B,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAE5D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,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"}
|