hodl-wallet 2.0.2 → 2.0.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 +42 -3
- package/dist/agent-cli.d.ts +11 -0
- package/dist/agent-cli.js +310 -0
- package/dist/agent-cli.js.map +1 -0
- package/dist/agent-errors.d.ts +7 -0
- package/dist/agent-errors.js +13 -0
- package/dist/agent-errors.js.map +1 -0
- package/dist/amounts.d.ts +3 -0
- package/dist/amounts.js +51 -0
- package/dist/amounts.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +95 -37
- package/dist/index.js.map +1 -1
- package/dist/network/arb.d.ts +3 -0
- package/dist/network/arb.js +4 -1
- package/dist/network/arb.js.map +1 -1
- package/dist/network/avax.d.ts +3 -0
- package/dist/network/avax.js +3 -0
- package/dist/network/avax.js.map +1 -1
- package/dist/network/bsc.d.ts +3 -0
- package/dist/network/bsc.js +3 -0
- package/dist/network/bsc.js.map +1 -1
- package/dist/network/btc.d.ts +3 -0
- package/dist/network/btc.js +3 -0
- package/dist/network/btc.js.map +1 -1
- package/dist/network/eth.d.ts +3 -0
- package/dist/network/eth.js +3 -0
- package/dist/network/eth.js.map +1 -1
- package/dist/network/ftm.d.ts +3 -0
- package/dist/network/ftm.js +3 -0
- package/dist/network/ftm.js.map +1 -1
- package/dist/network/hyperliquid.d.ts +2 -0
- package/dist/network/hyperliquid.js +2 -0
- package/dist/network/hyperliquid.js.map +1 -1
- package/dist/network/lib/BaseNetwork.d.ts +8 -4
- package/dist/network/lib/BaseNetwork.js +1 -1
- package/dist/network/lib/BaseNetwork.js.map +1 -1
- package/dist/network/lib/BitcoinNetwork.d.ts +9 -4
- package/dist/network/lib/BitcoinNetwork.js +92 -8
- package/dist/network/lib/BitcoinNetwork.js.map +1 -1
- package/dist/network/lib/Web3Network.d.ts +6 -2
- package/dist/network/lib/Web3Network.js +156 -58
- package/dist/network/lib/Web3Network.js.map +1 -1
- package/dist/network/op.d.ts +3 -0
- package/dist/network/op.js +4 -1
- package/dist/network/op.js.map +1 -1
- package/dist/network/pol.d.ts +3 -0
- package/dist/network/pol.js +3 -0
- package/dist/network/pol.js.map +1 -1
- package/dist/network/types.d.ts +33 -3
- package/dist/network-registry.d.ts +9 -0
- package/dist/network-registry.js +50 -0
- package/dist/network-registry.js.map +1 -0
- package/dist/persist.js +1 -1
- package/dist/persist.js.map +1 -1
- package/dist/profile-lock.d.ts +14 -0
- package/dist/profile-lock.js +84 -0
- package/dist/profile-lock.js.map +1 -0
- package/dist/wallet-service.d.ts +73 -0
- package/dist/wallet-service.js +633 -0
- package/dist/wallet-service.js.map +1 -0
- package/package.json +8 -8
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { BaseNetworkContract, NetworkConfig, SignedTransaction, TransferOptions, WalletAccount } from '../types.js';
|
|
1
|
+
import type { AssetBalance, BaseNetworkContract, NetworkConfig, PreparedTransfer, SignedTransaction, TransactionStatus, TransferOptions, WalletAccount } from '../types.js';
|
|
2
2
|
export default abstract class BaseNetwork implements BaseNetworkContract {
|
|
3
3
|
config: NetworkConfig;
|
|
4
4
|
name: string;
|
|
5
5
|
constructor(config: NetworkConfig);
|
|
6
|
-
abstract getBalance(address: string): Promise<string
|
|
6
|
+
abstract getBalance(address: string): Promise<string>;
|
|
7
7
|
abstract transfer(from: WalletAccount, to: string, amount: number | string, options?: TransferOptions): Promise<SignedTransaction | string | unknown>;
|
|
8
8
|
abstract transferToken(from: WalletAccount, to: string, amount: number | string, tokenSymbol: string, options?: TransferOptions): Promise<SignedTransaction | string | unknown>;
|
|
9
9
|
abstract estimateGas(transaction: unknown): Promise<unknown>;
|
|
@@ -14,7 +14,11 @@ export default abstract class BaseNetwork implements BaseNetworkContract {
|
|
|
14
14
|
abstract accountFromMnemonic(mnemonic: string): Promise<WalletAccount>;
|
|
15
15
|
abstract createAccountFromMnemonic(wordCount?: 12 | 24): Promise<WalletAccount>;
|
|
16
16
|
abstract validateMnemonic(mnemonic: string): boolean;
|
|
17
|
-
abstract getTokenBalance(address: string, tokenSymbol: string): Promise<string
|
|
18
|
-
|
|
17
|
+
abstract getTokenBalance(address: string, tokenSymbol: string): Promise<string>;
|
|
18
|
+
abstract getAssetBalance(address: string, asset: string): Promise<AssetBalance>;
|
|
19
|
+
abstract validateAddress(address: string): boolean;
|
|
20
|
+
abstract prepareTransfer(from: WalletAccount, to: string, amount: string, asset: string, options?: TransferOptions): Promise<PreparedTransfer>;
|
|
21
|
+
abstract getTransactionStatus(transactionHash: string): Promise<TransactionStatus>;
|
|
22
|
+
getTokenBalances(address: string): Promise<Array<[string, string]>>;
|
|
19
23
|
abstract sendSignedTransaction(signedTx: SignedTransaction | string): Promise<unknown>;
|
|
20
24
|
}
|
|
@@ -8,7 +8,7 @@ export default class BaseNetwork {
|
|
|
8
8
|
async getTokenBalances(address) {
|
|
9
9
|
const balances = [];
|
|
10
10
|
const nativeBalance = await this.getBalance(address);
|
|
11
|
-
balances.push([this.config.nativeToken,
|
|
11
|
+
balances.push([this.config.nativeToken, nativeBalance]);
|
|
12
12
|
for (const symbol of Object.keys(this.config.tokens)) {
|
|
13
13
|
const tokenBalance = await this.getTokenBalance(address, symbol);
|
|
14
14
|
balances.push([symbol, tokenBalance]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseNetwork.js","sourceRoot":"","sources":["../../../network/lib/BaseNetwork.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseNetwork.js","sourceRoot":"","sources":["../../../network/lib/BaseNetwork.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,OAAgB,WAAW;IACrC,MAAM,CAAgB;IACtB,IAAI,CAAS;IAEb,YAAY,MAAqB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,CAAC;IAmDD,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAClC,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAE7C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;QAExD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjE,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CAGJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BaseNetwork from './BaseNetwork.js';
|
|
2
|
-
import type { NetworkConfig, SignedTransaction, TransferOptions, WalletAccount } from '../types.js';
|
|
2
|
+
import type { AssetBalance, NetworkConfig, PreparedTransfer, SignedTransaction, TransactionStatus, TransferOptions, WalletAccount } from '../types.js';
|
|
3
3
|
type BitcoinUtxo = {
|
|
4
4
|
txid: string;
|
|
5
5
|
vout: number;
|
|
@@ -16,9 +16,13 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
16
16
|
private network;
|
|
17
17
|
private url;
|
|
18
18
|
constructor(config: NetworkConfig);
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
validateAddress(address: string): boolean;
|
|
20
|
+
getBalance(address: string): Promise<string>;
|
|
21
|
+
getAssetBalance(address: string, asset: string): Promise<AssetBalance>;
|
|
22
|
+
getTokenBalance(address: string, tokenSymbol: string): Promise<string>;
|
|
21
23
|
transfer(from: WalletAccount, to: string, amount: number | string, options?: TransferOptions): Promise<string>;
|
|
24
|
+
private buildTransaction;
|
|
25
|
+
prepareTransfer(from: WalletAccount, to: string, amount: string, asset: string, options?: TransferOptions): Promise<PreparedTransfer>;
|
|
22
26
|
getTransaction(txid: string): Promise<string>;
|
|
23
27
|
estimateTxSize(numInputs: number, numOutputs: number): number;
|
|
24
28
|
createAccountDetails(keyPair: BitcoinKeyPair): WalletAccount;
|
|
@@ -28,11 +32,12 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
28
32
|
accountFromMnemonic(mnemonic: string): Promise<WalletAccount>;
|
|
29
33
|
createAccountFromMnemonic(wordCount?: 12 | 24): Promise<WalletAccount>;
|
|
30
34
|
validateMnemonic(mnemonic: string): boolean;
|
|
31
|
-
satoshisToBTC(satoshis: number):
|
|
35
|
+
satoshisToBTC(satoshis: number): string;
|
|
32
36
|
BTCToSatoshis(btc: number | string): number;
|
|
33
37
|
getUTXOs(address: string): Promise<BitcoinUtxo[]>;
|
|
34
38
|
handleNativeTransfer(from: WalletAccount, to: string, amount: number | string, options?: TransferOptions): Promise<string>;
|
|
35
39
|
sendSignedTransaction(signedTx: SignedTransaction | string): Promise<BitcoinBroadcastResult>;
|
|
40
|
+
getTransactionStatus(transactionHash: string): Promise<TransactionStatus>;
|
|
36
41
|
fetchFromApi(path: string, options: RequestInit | undefined, responseType: 'text'): Promise<string>;
|
|
37
42
|
fetchFromApi<T>(path: string, options?: RequestInit, responseType?: 'json'): Promise<T>;
|
|
38
43
|
transferToken(): Promise<never>;
|
|
@@ -4,6 +4,7 @@ import bip39 from 'bip39';
|
|
|
4
4
|
import * as ecc from 'tiny-secp256k1';
|
|
5
5
|
import { BIP32Factory } from 'bip32';
|
|
6
6
|
import { ECPairFactory } from 'ecpair';
|
|
7
|
+
import { formatUnits, parseDecimalToUnits } from '../../amounts.js';
|
|
7
8
|
const bip32 = BIP32Factory(ecc);
|
|
8
9
|
const ECPair = ECPairFactory(ecc);
|
|
9
10
|
export default class BitcoinNetwork extends BaseNetwork {
|
|
@@ -15,14 +16,37 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
15
16
|
this.network = networkName === 'testnet' ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
|
|
16
17
|
this.url = config.url;
|
|
17
18
|
}
|
|
19
|
+
validateAddress(address) {
|
|
20
|
+
try {
|
|
21
|
+
bitcoin.address.toOutputScript(address, this.network);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
18
28
|
async getBalance(address) {
|
|
29
|
+
return (await this.getAssetBalance(address, this.config.nativeToken)).amount;
|
|
30
|
+
}
|
|
31
|
+
async getAssetBalance(address, asset) {
|
|
32
|
+
if (asset.toUpperCase() !== this.config.nativeToken) {
|
|
33
|
+
throw new Error(`Token ${asset} not supported on Bitcoin network`);
|
|
34
|
+
}
|
|
35
|
+
if (!this.validateAddress(address)) {
|
|
36
|
+
throw new Error('Invalid Bitcoin address.');
|
|
37
|
+
}
|
|
19
38
|
try {
|
|
20
39
|
const data = await this.fetchFromApi(`/address/${address}`);
|
|
21
40
|
const chainStats = data.chain_stats;
|
|
22
41
|
const mempoolStats = data.mempool_stats;
|
|
23
42
|
const balance = (chainStats.funded_txo_sum - chainStats.spent_txo_sum) +
|
|
24
43
|
(mempoolStats.funded_txo_sum - mempoolStats.spent_txo_sum);
|
|
25
|
-
return
|
|
44
|
+
return {
|
|
45
|
+
asset: this.config.nativeToken,
|
|
46
|
+
amount: formatUnits(BigInt(balance), 8),
|
|
47
|
+
baseUnits: balance.toString(),
|
|
48
|
+
decimals: 8
|
|
49
|
+
};
|
|
26
50
|
}
|
|
27
51
|
catch (error) {
|
|
28
52
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -36,10 +60,23 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
36
60
|
throw new Error(`Token ${tokenSymbol} not supported on Bitcoin network`);
|
|
37
61
|
}
|
|
38
62
|
async transfer(from, to, amount, options = {}) {
|
|
63
|
+
return (await this.buildTransaction(from, to, amount.toString(), options)).rawTransaction;
|
|
64
|
+
}
|
|
65
|
+
async buildTransaction(from, to, amount, options) {
|
|
66
|
+
if (!this.validateAddress(from.address) || !this.validateAddress(to)) {
|
|
67
|
+
throw new Error('Invalid Bitcoin address.');
|
|
68
|
+
}
|
|
39
69
|
try {
|
|
40
70
|
const utxos = await this.getUTXOs(from.address);
|
|
41
|
-
const
|
|
42
|
-
|
|
71
|
+
const amountBaseUnits = parseDecimalToUnits(amount, 8);
|
|
72
|
+
if (amountBaseUnits > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
73
|
+
throw new Error('Bitcoin amount exceeds the safe transaction range.');
|
|
74
|
+
}
|
|
75
|
+
const satoshis = Number(amountBaseUnits);
|
|
76
|
+
const feeRate = options.feeRate ?? this.config.feeRate;
|
|
77
|
+
if (typeof feeRate !== 'number' || !Number.isInteger(feeRate) || feeRate <= 0) {
|
|
78
|
+
throw new Error('Bitcoin fee rate must be configured as a positive integer.');
|
|
79
|
+
}
|
|
43
80
|
const psbt = new bitcoin.Psbt({ network: this.network });
|
|
44
81
|
psbt.setVersion(2);
|
|
45
82
|
psbt.setLocktime(0);
|
|
@@ -58,20 +95,22 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
58
95
|
break;
|
|
59
96
|
}
|
|
60
97
|
}
|
|
61
|
-
|
|
98
|
+
const estimatedFee = this.estimateTxSize(psbt.inputCount, 2) * feeRate;
|
|
99
|
+
if (totalInputValue < satoshis + estimatedFee) {
|
|
62
100
|
throw new Error('Insufficient balance for the transaction including fees.');
|
|
63
101
|
}
|
|
64
102
|
psbt.addOutput({
|
|
65
103
|
address: to,
|
|
66
104
|
value: satoshis
|
|
67
105
|
});
|
|
68
|
-
const estimatedFee = this.estimateTxSize(psbt.inputCount, 2) * feeRate;
|
|
69
106
|
const changeValue = totalInputValue - satoshis - estimatedFee;
|
|
107
|
+
let returnedChange = 0;
|
|
70
108
|
if (changeValue > 546) {
|
|
71
109
|
psbt.addOutput({
|
|
72
110
|
address: from.address,
|
|
73
111
|
value: changeValue
|
|
74
112
|
});
|
|
113
|
+
returnedChange = changeValue;
|
|
75
114
|
}
|
|
76
115
|
const keyPair = ECPair.fromWIF(from.privateKey, this.network);
|
|
77
116
|
for (let i = 0; i < psbt.inputCount; i++) {
|
|
@@ -84,13 +123,40 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
84
123
|
}
|
|
85
124
|
}
|
|
86
125
|
psbt.finalizeAllInputs();
|
|
87
|
-
return
|
|
126
|
+
return {
|
|
127
|
+
rawTransaction: psbt.extractTransaction().toHex(),
|
|
128
|
+
feeBaseUnits: BigInt(totalInputValue - satoshis - returnedChange),
|
|
129
|
+
amountBaseUnits
|
|
130
|
+
};
|
|
88
131
|
}
|
|
89
132
|
catch (error) {
|
|
90
133
|
const message = error instanceof Error ? error.message : String(error);
|
|
91
134
|
throw new Error(`Failed to create transaction: ${message}`);
|
|
92
135
|
}
|
|
93
136
|
}
|
|
137
|
+
async prepareTransfer(from, to, amount, asset, options = {}) {
|
|
138
|
+
if (asset.toUpperCase() !== this.config.nativeToken) {
|
|
139
|
+
throw new Error(`Token ${asset} not supported on Bitcoin network`);
|
|
140
|
+
}
|
|
141
|
+
const built = await this.buildTransaction(from, to, amount, options);
|
|
142
|
+
const transaction = bitcoin.Transaction.fromHex(built.rawTransaction);
|
|
143
|
+
return {
|
|
144
|
+
from: from.address,
|
|
145
|
+
to,
|
|
146
|
+
asset: this.config.nativeToken,
|
|
147
|
+
amount: formatUnits(built.amountBaseUnits, 8),
|
|
148
|
+
amountBaseUnits: built.amountBaseUnits.toString(),
|
|
149
|
+
fee: {
|
|
150
|
+
asset: this.config.nativeToken,
|
|
151
|
+
amount: formatUnits(built.feeBaseUnits, 8),
|
|
152
|
+
baseUnits: built.feeBaseUnits.toString(),
|
|
153
|
+
decimals: 8,
|
|
154
|
+
estimated: true
|
|
155
|
+
},
|
|
156
|
+
transactionHash: transaction.getId(),
|
|
157
|
+
rawTransaction: built.rawTransaction
|
|
158
|
+
};
|
|
159
|
+
}
|
|
94
160
|
async getTransaction(txid) {
|
|
95
161
|
try {
|
|
96
162
|
return await this.fetchFromApi(`/tx/${txid}/hex`, {}, 'text');
|
|
@@ -181,10 +247,14 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
181
247
|
return bip39.validateMnemonic(mnemonic);
|
|
182
248
|
}
|
|
183
249
|
satoshisToBTC(satoshis) {
|
|
184
|
-
return satoshis
|
|
250
|
+
return formatUnits(BigInt(satoshis), 8);
|
|
185
251
|
}
|
|
186
252
|
BTCToSatoshis(btc) {
|
|
187
|
-
|
|
253
|
+
const units = parseDecimalToUnits(btc.toString(), 8);
|
|
254
|
+
if (units > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
255
|
+
throw new Error('Bitcoin amount exceeds the safe transaction range.');
|
|
256
|
+
}
|
|
257
|
+
return Number(units);
|
|
188
258
|
}
|
|
189
259
|
async getUTXOs(address) {
|
|
190
260
|
try {
|
|
@@ -218,6 +288,20 @@ export default class BitcoinNetwork extends BaseNetwork {
|
|
|
218
288
|
throw new Error(`Failed to broadcast transaction: ${message}`);
|
|
219
289
|
}
|
|
220
290
|
}
|
|
291
|
+
async getTransactionStatus(transactionHash) {
|
|
292
|
+
const response = await fetch(`${this.url}/tx/${transactionHash}/status`);
|
|
293
|
+
if (response.status === 404) {
|
|
294
|
+
return { state: 'not_found', transactionHash };
|
|
295
|
+
}
|
|
296
|
+
if (!response.ok) {
|
|
297
|
+
throw new Error(`Failed to get transaction status: ${response.status} ${response.statusText}`);
|
|
298
|
+
}
|
|
299
|
+
const status = await response.json();
|
|
300
|
+
return {
|
|
301
|
+
state: status.confirmed ? 'confirmed' : 'submitted',
|
|
302
|
+
transactionHash
|
|
303
|
+
};
|
|
304
|
+
}
|
|
221
305
|
async fetchFromApi(path, options = {}, responseType = 'json') {
|
|
222
306
|
const response = await fetch(`${this.url}${path}`, options);
|
|
223
307
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitcoinNetwork.js","sourceRoot":"","sources":["../../../network/lib/BitcoinNetwork.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BitcoinNetwork.js","sourceRoot":"","sources":["../../../network/lib/BitcoinNetwork.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import BaseNetwork from './BaseNetwork.js';
|
|
2
2
|
import { Web3 } from 'web3';
|
|
3
|
-
import type { NetworkConfig, SignedTransaction, TransferOptions, WalletAccount } from '../types.js';
|
|
3
|
+
import type { AssetBalance, NetworkConfig, PreparedTransfer, SignedTransaction, TransactionStatus, TransferOptions, WalletAccount } from '../types.js';
|
|
4
4
|
export default class Web3Network extends BaseNetwork {
|
|
5
5
|
private web3;
|
|
6
6
|
constructor(config: NetworkConfig);
|
|
7
7
|
private formatPrivateKey;
|
|
8
|
+
validateAddress(address: string): boolean;
|
|
8
9
|
getBalance(address: string): Promise<string>;
|
|
9
10
|
transfer(from: WalletAccount, to: string, amount: number | string, options?: TransferOptions): Promise<SignedTransaction>;
|
|
10
11
|
transferToken(from: WalletAccount, to: string, amount: number | string, tokenSymbol: string, options?: TransferOptions): Promise<SignedTransaction>;
|
|
@@ -12,7 +13,10 @@ export default class Web3Network extends BaseNetwork {
|
|
|
12
13
|
getGasPrice(): Promise<bigint>;
|
|
13
14
|
handleERC20Transfer(account: WalletAccount, token: string, recipient: string, amount: number | string): Promise<SignedTransaction>;
|
|
14
15
|
handleNativeTransfer(account: WalletAccount, recipient: string, amount: number | string): Promise<SignedTransaction>;
|
|
15
|
-
getTokenBalance(address: string, tokenSymbol: string): Promise<string
|
|
16
|
+
getTokenBalance(address: string, tokenSymbol: string): Promise<string>;
|
|
17
|
+
getAssetBalance(address: string, asset: string): Promise<AssetBalance>;
|
|
18
|
+
prepareTransfer(from: WalletAccount, to: string, amount: string, asset: string, options?: TransferOptions): Promise<PreparedTransfer>;
|
|
19
|
+
getTransactionStatus(transactionHash: string): Promise<TransactionStatus>;
|
|
16
20
|
validatePrivateKey(privateKey: string): boolean;
|
|
17
21
|
privateKeyToAccount(privateKey: string): Promise<WalletAccount>;
|
|
18
22
|
createAccount(): Promise<WalletAccount>;
|
|
@@ -3,6 +3,7 @@ import { Web3 } from 'web3';
|
|
|
3
3
|
import { ERC20_ABI } from '../abis/erc20.js';
|
|
4
4
|
import bip39 from 'bip39';
|
|
5
5
|
import hdkey from 'hdkey';
|
|
6
|
+
import { formatUnits, parseDecimalToUnits } from '../../amounts.js';
|
|
6
7
|
export default class Web3Network extends BaseNetwork {
|
|
7
8
|
web3;
|
|
8
9
|
constructor(config) {
|
|
@@ -12,43 +13,26 @@ export default class Web3Network extends BaseNetwork {
|
|
|
12
13
|
formatPrivateKey(privateKey) {
|
|
13
14
|
return privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`;
|
|
14
15
|
}
|
|
16
|
+
validateAddress(address) {
|
|
17
|
+
return this.web3.utils.isAddress(address);
|
|
18
|
+
}
|
|
15
19
|
async getBalance(address) {
|
|
16
20
|
const balanceWei = await this.web3.eth.getBalance(address);
|
|
17
|
-
return
|
|
21
|
+
return formatUnits(balanceWei, 18);
|
|
18
22
|
}
|
|
19
23
|
async transfer(from, to, amount, options = {}) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
to,
|
|
25
|
-
value: this.web3.utils.toWei(amount.toString(), 'ether'),
|
|
26
|
-
gas: gasLimit,
|
|
27
|
-
gasPrice,
|
|
28
|
-
...(this.config.chainId !== undefined ? { chainId: this.config.chainId } : {})
|
|
24
|
+
const prepared = await this.prepareTransfer(from, to, amount.toString(), this.config.nativeToken, options);
|
|
25
|
+
return {
|
|
26
|
+
rawTransaction: prepared.rawTransaction,
|
|
27
|
+
transactionHash: prepared.transactionHash
|
|
29
28
|
};
|
|
30
|
-
return this.web3.eth.accounts.signTransaction(tx, from.privateKey);
|
|
31
29
|
}
|
|
32
30
|
async transferToken(from, to, amount, tokenSymbol, options = {}) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const decimals = Number(await contract.methods.decimals().call());
|
|
38
|
-
const numericAmount = typeof amount === 'number' ? amount : Number(amount);
|
|
39
|
-
const value = BigInt(numericAmount * (10 ** decimals));
|
|
40
|
-
const data = contract.methods.transfer(to, value.toString()).encodeABI();
|
|
41
|
-
const gasLimit = options.gasLimit || 100000;
|
|
42
|
-
const gasPrice = await this.getGasPrice();
|
|
43
|
-
const tx = {
|
|
44
|
-
from: from.address,
|
|
45
|
-
to: tokenConfig.address,
|
|
46
|
-
data,
|
|
47
|
-
gas: gasLimit,
|
|
48
|
-
gasPrice,
|
|
49
|
-
...(this.config.chainId !== undefined ? { chainId: this.config.chainId } : {})
|
|
31
|
+
const prepared = await this.prepareTransfer(from, to, amount.toString(), tokenSymbol, options);
|
|
32
|
+
return {
|
|
33
|
+
rawTransaction: prepared.rawTransaction,
|
|
34
|
+
transactionHash: prepared.transactionHash
|
|
50
35
|
};
|
|
51
|
-
return this.web3.eth.accounts.signTransaction(tx, from.privateKey);
|
|
52
36
|
}
|
|
53
37
|
async estimateGas(transaction) {
|
|
54
38
|
return this.web3.eth.estimateGas(transaction);
|
|
@@ -57,24 +41,7 @@ export default class Web3Network extends BaseNetwork {
|
|
|
57
41
|
return this.web3.eth.getGasPrice();
|
|
58
42
|
}
|
|
59
43
|
async handleERC20Transfer(account, token, recipient, amount) {
|
|
60
|
-
|
|
61
|
-
if (!tokenConfig)
|
|
62
|
-
throw new Error(`Token ${token} not supported`);
|
|
63
|
-
const contract = new this.web3.eth.Contract(ERC20_ABI, tokenConfig.address);
|
|
64
|
-
const decimals = parseInt(await contract.methods.decimals().call(), 10);
|
|
65
|
-
const weiAmount = BigInt(this.web3.utils.toWei(amount, 'ether'));
|
|
66
|
-
const adjustedAmount = weiAmount / (10n ** BigInt(18 - decimals));
|
|
67
|
-
const data = contract.methods.transfer(recipient, adjustedAmount.toString()).encodeABI();
|
|
68
|
-
const gasLimit = 100000;
|
|
69
|
-
const gasPrice = await this.web3.eth.getGasPrice();
|
|
70
|
-
const tx = {
|
|
71
|
-
from: account.address,
|
|
72
|
-
to: tokenConfig.address,
|
|
73
|
-
data: data,
|
|
74
|
-
gas: gasLimit,
|
|
75
|
-
gasPrice: gasPrice,
|
|
76
|
-
};
|
|
77
|
-
return this.web3.eth.accounts.signTransaction(tx, account.privateKey);
|
|
44
|
+
return this.transferToken(account, recipient, amount, token);
|
|
78
45
|
}
|
|
79
46
|
async handleNativeTransfer(account, recipient, amount) {
|
|
80
47
|
const gasPrice = await this.getGasPrice();
|
|
@@ -87,16 +54,137 @@ export default class Web3Network extends BaseNetwork {
|
|
|
87
54
|
return this.transfer(account, recipient, amount, { gasLimit, gasPrice });
|
|
88
55
|
}
|
|
89
56
|
async getTokenBalance(address, tokenSymbol) {
|
|
90
|
-
|
|
91
|
-
|
|
57
|
+
return (await this.getAssetBalance(address, tokenSymbol)).amount;
|
|
58
|
+
}
|
|
59
|
+
async getAssetBalance(address, asset) {
|
|
60
|
+
if (!this.validateAddress(address)) {
|
|
61
|
+
throw new Error('Invalid EVM address.');
|
|
62
|
+
}
|
|
63
|
+
const symbol = asset.toUpperCase();
|
|
64
|
+
if (symbol === this.config.nativeToken) {
|
|
65
|
+
const baseUnits = await this.web3.eth.getBalance(address);
|
|
66
|
+
return {
|
|
67
|
+
asset: symbol,
|
|
68
|
+
amount: formatUnits(baseUnits, 18),
|
|
69
|
+
baseUnits: baseUnits.toString(),
|
|
70
|
+
decimals: 18
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const tokenConfig = this.config.tokens[symbol];
|
|
74
|
+
if (!tokenConfig) {
|
|
75
|
+
throw new Error(`Token ${symbol} not supported`);
|
|
92
76
|
}
|
|
93
|
-
const tokenConfig = this.config.tokens[tokenSymbol];
|
|
94
|
-
if (!tokenConfig)
|
|
95
|
-
throw new Error(`Token ${tokenSymbol} not supported`);
|
|
96
77
|
const contract = new this.web3.eth.Contract(ERC20_ABI, tokenConfig.address);
|
|
97
|
-
const
|
|
78
|
+
const baseUnits = String(await contract.methods.balanceOf(address).call());
|
|
98
79
|
const decimals = Number(await contract.methods.decimals().call());
|
|
99
|
-
|
|
80
|
+
if (!Number.isInteger(decimals) || decimals < 0) {
|
|
81
|
+
throw new Error(`Token ${symbol} returned invalid decimals.`);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
asset: symbol,
|
|
85
|
+
amount: formatUnits(baseUnits, decimals),
|
|
86
|
+
baseUnits,
|
|
87
|
+
decimals
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async prepareTransfer(from, to, amount, asset, options = {}) {
|
|
91
|
+
if (!this.validateAddress(from.address) || !this.validateAddress(to)) {
|
|
92
|
+
throw new Error('Invalid EVM address.');
|
|
93
|
+
}
|
|
94
|
+
const configuredChainId = this.config.chainId;
|
|
95
|
+
if (configuredChainId === undefined) {
|
|
96
|
+
throw new Error(`Network ${this.config.id} does not define a chain ID.`);
|
|
97
|
+
}
|
|
98
|
+
const providerChainId = Number(await this.web3.eth.getChainId());
|
|
99
|
+
if (providerChainId !== configuredChainId) {
|
|
100
|
+
throw new Error(`RPC chain ID mismatch: expected ${configuredChainId}, received ${providerChainId}.`);
|
|
101
|
+
}
|
|
102
|
+
const symbol = asset.toUpperCase();
|
|
103
|
+
const balance = await this.getAssetBalance(from.address, symbol);
|
|
104
|
+
const amountBaseUnits = parseDecimalToUnits(amount, balance.decimals);
|
|
105
|
+
if (BigInt(balance.baseUnits) < amountBaseUnits) {
|
|
106
|
+
throw new Error(`Insufficient ${symbol} balance.`);
|
|
107
|
+
}
|
|
108
|
+
const gasPrice = options.gasPrice !== undefined
|
|
109
|
+
? BigInt(options.gasPrice)
|
|
110
|
+
: await this.getGasPrice();
|
|
111
|
+
const nonce = await this.web3.eth.getTransactionCount(from.address, 'pending');
|
|
112
|
+
let transaction;
|
|
113
|
+
if (symbol === this.config.nativeToken) {
|
|
114
|
+
transaction = {
|
|
115
|
+
from: from.address,
|
|
116
|
+
to,
|
|
117
|
+
value: amountBaseUnits.toString()
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const tokenConfig = this.config.tokens[symbol];
|
|
122
|
+
if (!tokenConfig) {
|
|
123
|
+
throw new Error(`Token ${symbol} not supported`);
|
|
124
|
+
}
|
|
125
|
+
const contract = new this.web3.eth.Contract(ERC20_ABI, tokenConfig.address);
|
|
126
|
+
transaction = {
|
|
127
|
+
from: from.address,
|
|
128
|
+
to: tokenConfig.address,
|
|
129
|
+
data: contract.methods.transfer(to, amountBaseUnits.toString()).encodeABI(),
|
|
130
|
+
value: '0'
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const gas = options.gasLimit !== undefined
|
|
134
|
+
? BigInt(options.gasLimit)
|
|
135
|
+
: await this.web3.eth.estimateGas(transaction);
|
|
136
|
+
const feeBaseUnits = gas * gasPrice;
|
|
137
|
+
const nativeBalance = await this.getAssetBalance(from.address, this.config.nativeToken);
|
|
138
|
+
const requiredNative = symbol === this.config.nativeToken
|
|
139
|
+
? amountBaseUnits + feeBaseUnits
|
|
140
|
+
: feeBaseUnits;
|
|
141
|
+
if (BigInt(nativeBalance.baseUnits) < requiredNative) {
|
|
142
|
+
throw new Error(`Insufficient ${this.config.nativeToken} balance for amount and fee.`);
|
|
143
|
+
}
|
|
144
|
+
const signed = await this.web3.eth.accounts.signTransaction({
|
|
145
|
+
...transaction,
|
|
146
|
+
nonce,
|
|
147
|
+
gas,
|
|
148
|
+
gasPrice,
|
|
149
|
+
chainId: configuredChainId
|
|
150
|
+
}, from.privateKey);
|
|
151
|
+
if (!signed.rawTransaction) {
|
|
152
|
+
throw new Error('Failed to create a signed transaction.');
|
|
153
|
+
}
|
|
154
|
+
const transactionHash = signed.transactionHash || this.web3.utils.keccak256(signed.rawTransaction);
|
|
155
|
+
if (!transactionHash) {
|
|
156
|
+
throw new Error('Failed to calculate transaction hash.');
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
from: from.address,
|
|
160
|
+
to,
|
|
161
|
+
asset: symbol,
|
|
162
|
+
amount: formatUnits(amountBaseUnits, balance.decimals),
|
|
163
|
+
amountBaseUnits: amountBaseUnits.toString(),
|
|
164
|
+
fee: {
|
|
165
|
+
asset: this.config.nativeToken,
|
|
166
|
+
amount: formatUnits(feeBaseUnits, 18),
|
|
167
|
+
baseUnits: feeBaseUnits.toString(),
|
|
168
|
+
decimals: 18,
|
|
169
|
+
estimated: true
|
|
170
|
+
},
|
|
171
|
+
transactionHash,
|
|
172
|
+
rawTransaction: signed.rawTransaction
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async getTransactionStatus(transactionHash) {
|
|
176
|
+
const receipt = await this.web3.eth.getTransactionReceipt(transactionHash);
|
|
177
|
+
if (receipt) {
|
|
178
|
+
return {
|
|
179
|
+
state: isFailedReceiptStatus(receipt.status) ? 'failed' : 'confirmed',
|
|
180
|
+
transactionHash
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const transaction = await this.web3.eth.getTransaction(transactionHash);
|
|
184
|
+
return {
|
|
185
|
+
state: transaction ? 'submitted' : 'not_found',
|
|
186
|
+
transactionHash
|
|
187
|
+
};
|
|
100
188
|
}
|
|
101
189
|
validatePrivateKey(privateKey) {
|
|
102
190
|
if (!privateKey) {
|
|
@@ -148,13 +236,23 @@ export default class Web3Network extends BaseNetwork {
|
|
|
148
236
|
return bip39.validateMnemonic(mnemonic);
|
|
149
237
|
}
|
|
150
238
|
async sendSignedTransaction(signedTx) {
|
|
239
|
+
let receipt;
|
|
151
240
|
if (typeof signedTx === 'string') {
|
|
152
|
-
|
|
241
|
+
receipt = await this.web3.eth.sendSignedTransaction(signedTx);
|
|
153
242
|
}
|
|
154
|
-
|
|
155
|
-
|
|
243
|
+
else {
|
|
244
|
+
if (!signedTx.rawTransaction) {
|
|
245
|
+
throw new Error('Signed transaction rawTransaction is required.');
|
|
246
|
+
}
|
|
247
|
+
receipt = await this.web3.eth.sendSignedTransaction(signedTx.rawTransaction);
|
|
156
248
|
}
|
|
157
|
-
|
|
249
|
+
if (isFailedReceiptStatus(receipt.status)) {
|
|
250
|
+
throw new Error('Transaction was mined but reverted.');
|
|
251
|
+
}
|
|
252
|
+
return receipt;
|
|
158
253
|
}
|
|
159
254
|
}
|
|
255
|
+
function isFailedReceiptStatus(status) {
|
|
256
|
+
return status === false || status === 0 || status === 0n || status === '0x0';
|
|
257
|
+
}
|
|
160
258
|
//# sourceMappingURL=Web3Network.js.map
|