@sidhujag/sysweb3-keyring 1.0.627 → 2.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/CHANGELOG.md +42 -0
- package/README.md +66 -0
- package/cjs/hardware-wallet-manager.js +302 -128
- package/cjs/hardware-wallet-manager.js.map +1 -1
- package/cjs/keyring-core.js +2605 -0
- package/cjs/keyring-core.js.map +1 -0
- package/cjs/keyring-manager.js +31 -2439
- package/cjs/keyring-manager.js.map +1 -1
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
- package/cjs/ledger/host-types.js +10 -0
- package/cjs/ledger/host-types.js.map +1 -0
- package/cjs/ledger/index.js +243 -447
- package/cjs/ledger/index.js.map +1 -1
- package/cjs/ledger/prepare-psbt.js +177 -0
- package/cjs/ledger/prepare-psbt.js.map +1 -0
- package/cjs/software-hd-account.js +23 -0
- package/cjs/software-hd-account.js.map +1 -0
- package/cjs/software.js +74 -0
- package/cjs/software.js.map +1 -0
- package/cjs/storage-core.js +227 -0
- package/cjs/storage-core.js.map +1 -0
- package/cjs/storage.js +15 -210
- package/cjs/storage.js.map +1 -1
- package/cjs/transactions/ethereum.js +176 -39
- package/cjs/transactions/ethereum.js.map +1 -1
- package/cjs/transactions/evm-local-signer.js +11 -1
- package/cjs/transactions/evm-local-signer.js.map +1 -1
- package/cjs/transactions/hardware-psbt.js +159 -0
- package/cjs/transactions/hardware-psbt.js.map +1 -0
- package/cjs/transactions/prepared-evm.js +196 -0
- package/cjs/transactions/prepared-evm.js.map +1 -0
- package/cjs/transactions/syscoin-core.js +651 -0
- package/cjs/transactions/syscoin-core.js.map +1 -0
- package/cjs/transactions/syscoin.js +8 -768
- package/cjs/transactions/syscoin.js.map +1 -1
- package/cjs/trezor/connect.js +243 -0
- package/cjs/trezor/connect.js.map +1 -0
- package/cjs/trezor/index.js +96 -58
- package/cjs/trezor/index.js.map +1 -1
- package/cjs/trezor/witness.js +25 -0
- package/cjs/trezor/witness.js.map +1 -0
- package/cjs/types.js.map +1 -1
- package/cjs/utils/psbt-account-scope.js +5 -3
- package/cjs/utils/psbt-account-scope.js.map +1 -1
- package/esm/errorUtils.js +72 -0
- package/esm/errorUtils.js.map +1 -0
- package/esm/ethers-v6.js +207 -0
- package/esm/ethers-v6.js.map +1 -0
- package/esm/hardware-wallet-manager.js +643 -0
- package/esm/hardware-wallet-manager.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
- package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
- package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
- package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
- package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
- package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
- package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
- package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
- package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
- package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
- package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
- package/esm/ledger/consts.js +4 -0
- package/esm/ledger/consts.js.map +1 -0
- package/esm/ledger/dmk-evm.js +258 -0
- package/esm/ledger/dmk-evm.js.map +1 -0
- package/esm/ledger/dmk-session.js +264 -0
- package/esm/ledger/dmk-session.js.map +1 -0
- package/esm/ledger/dmk-utxo.js +279 -0
- package/esm/ledger/dmk-utxo.js.map +1 -0
- package/esm/ledger/host-types.js +5 -0
- package/esm/ledger/host-types.js.map +1 -0
- package/esm/ledger/index.js +268 -0
- package/esm/ledger/index.js.map +1 -0
- package/esm/ledger/prepare-psbt.js +141 -0
- package/esm/ledger/prepare-psbt.js.map +1 -0
- package/esm/ledger/types.js +2 -0
- package/esm/ledger/types.js.map +1 -0
- package/esm/ledger-host.js +36 -0
- package/esm/ledger-host.js.map +1 -0
- package/esm/private-records.js +153 -0
- package/esm/private-records.js.map +1 -0
- package/esm/providers.js +588 -0
- package/esm/providers.js.map +1 -0
- package/esm/signers.js +28 -0
- package/esm/signers.js.map +1 -0
- package/esm/trezor/connect.js +206 -0
- package/esm/trezor/connect.js.map +1 -0
- package/esm/trezor/index.js +876 -0
- package/esm/trezor/index.js.map +1 -0
- package/esm/trezor/witness.js +21 -0
- package/esm/trezor/witness.js.map +1 -0
- package/esm/types.js +17 -0
- package/esm/types.js.map +1 -0
- package/esm/utils/derivation-paths.js +109 -0
- package/esm/utils/derivation-paths.js.map +1 -0
- package/esm/utils/psbt-account-scope.js +310 -0
- package/esm/utils/psbt-account-scope.js.map +1 -0
- package/package.json +55 -8
- package/types/hardware-wallet-manager.d.ts +12 -19
- package/types/keyring-core.d.ts +263 -0
- package/types/keyring-manager.d.ts +7 -224
- package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
- package/types/ledger/dmk-evm.d.ts +8 -0
- package/types/ledger/dmk-session.d.ts +60 -0
- package/types/ledger/dmk-utxo.d.ts +26 -0
- package/types/ledger/host-types.d.ts +131 -0
- package/types/ledger/index.d.ts +21 -58
- package/types/ledger/prepare-psbt.d.ts +3 -0
- package/types/ledger/types.d.ts +3 -0
- package/types/ledger-host.d.ts +7 -0
- package/types/software-hd-account.d.ts +16 -0
- package/types/software.d.ts +39 -0
- package/types/storage-core.d.ts +22 -0
- package/types/storage.d.ts +1 -4
- package/types/transactions/ethereum.d.ts +17 -7
- package/types/transactions/evm-local-signer.d.ts +3 -1
- package/types/transactions/hardware-psbt.d.ts +7 -0
- package/types/transactions/prepared-evm.d.ts +53 -0
- package/types/transactions/syscoin-core.d.ts +92 -0
- package/types/transactions/syscoin.d.ts +8 -67
- package/types/trezor/connect.d.ts +42 -0
- package/types/trezor/index.d.ts +22 -4
- package/types/trezor/witness.d.ts +3 -0
- package/types/types.d.ts +10 -0
- package/types/utils/psbt-account-scope.d.ts +1 -0
- package/cjs/transactions/__tests__/integration.test.js +0 -237
- package/cjs/transactions/__tests__/integration.test.js.map +0 -1
- package/cjs/transactions/__tests__/syscoin.test.js +0 -361
- package/cjs/transactions/__tests__/syscoin.test.js.map +0 -1
- package/types/transactions/__tests__/integration.test.d.ts +0 -1
- package/types/transactions/__tests__/syscoin.test.d.ts +0 -1
package/esm/providers.js
ADDED
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
import { FeeData } from 'ethers/providers';
|
|
2
|
+
import { FetchRequest, getBigInt } from 'ethers/utils';
|
|
3
|
+
import { handleStatusCodeError } from './errorUtils';
|
|
4
|
+
import { BigNumber, JsonRpcProvider, normalizeTransactionRequest, } from './ethers-v6';
|
|
5
|
+
const TRANSACTION_RESPONSE_BIG_NUMBER_FIELDS = new Set([
|
|
6
|
+
'gasLimit',
|
|
7
|
+
'gasPrice',
|
|
8
|
+
'maxFeePerGas',
|
|
9
|
+
'maxPriorityFeePerGas',
|
|
10
|
+
'value',
|
|
11
|
+
]);
|
|
12
|
+
const TRANSACTION_RESPONSE_NUMBER_FIELDS = new Set(['chainId']);
|
|
13
|
+
const TRANSACTION_RECEIPT_BIG_NUMBER_FIELDS = new Set([
|
|
14
|
+
'blobGasPrice',
|
|
15
|
+
'blobGasUsed',
|
|
16
|
+
'cumulativeGasUsed',
|
|
17
|
+
'effectiveGasPrice',
|
|
18
|
+
'gasPrice',
|
|
19
|
+
'gasUsed',
|
|
20
|
+
]);
|
|
21
|
+
const FEE_DATA_CACHE_TTL_MS = 5000;
|
|
22
|
+
// A stale response must never be interpreted as the result of another RPC.
|
|
23
|
+
// Keep the sentinel in the message for callers that serialize errors as text.
|
|
24
|
+
export class RpcResponseIntegrityError extends Error {
|
|
25
|
+
constructor(message = 'JSON-RPC response does not match its request', retryable = true) {
|
|
26
|
+
super(`[SYSWEB3_RPC_RESPONSE_INVALID] ${message}`);
|
|
27
|
+
this.retryable = retryable;
|
|
28
|
+
this.code = 'SYSWEB3_RPC_RESPONSE_INVALID';
|
|
29
|
+
this.name = 'RpcResponseIntegrityError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Only these standard, side-effect-free reads may recover from a stale cache
|
|
33
|
+
// entry. Never infer retry eligibility from an RPC method prefix.
|
|
34
|
+
const RECOVERABLE_READ_METHODS = new Set([
|
|
35
|
+
'eth_chainId',
|
|
36
|
+
'net_version',
|
|
37
|
+
'web3_clientVersion',
|
|
38
|
+
'eth_blockNumber',
|
|
39
|
+
'eth_syncing',
|
|
40
|
+
'eth_getBalance',
|
|
41
|
+
'eth_getTransactionCount',
|
|
42
|
+
'eth_getCode',
|
|
43
|
+
'eth_getStorageAt',
|
|
44
|
+
'eth_getProof',
|
|
45
|
+
'eth_call',
|
|
46
|
+
'eth_estimateGas',
|
|
47
|
+
'eth_createAccessList',
|
|
48
|
+
'eth_gasPrice',
|
|
49
|
+
'eth_maxPriorityFeePerGas',
|
|
50
|
+
'eth_feeHistory',
|
|
51
|
+
'eth_getBlockByNumber',
|
|
52
|
+
'eth_getBlockByHash',
|
|
53
|
+
'eth_getBlockTransactionCountByNumber',
|
|
54
|
+
'eth_getBlockTransactionCountByHash',
|
|
55
|
+
'eth_getTransactionByHash',
|
|
56
|
+
'eth_getTransactionByBlockNumberAndIndex',
|
|
57
|
+
'eth_getTransactionByBlockHashAndIndex',
|
|
58
|
+
'eth_getTransactionReceipt',
|
|
59
|
+
'eth_getLogs',
|
|
60
|
+
]);
|
|
61
|
+
let rpcRecoveryNonce = 0;
|
|
62
|
+
// Shared across provider instances and seeded anew on process restart. These
|
|
63
|
+
// numeric correlation IDs are not authorization tokens.
|
|
64
|
+
let nextRpcWireId = Math.floor(Math.random() * 2 ** 51);
|
|
65
|
+
const reserveRpcWireId = () => {
|
|
66
|
+
const id = ++nextRpcWireId;
|
|
67
|
+
if (!Number.isSafeInteger(id)) {
|
|
68
|
+
throw new RpcResponseIntegrityError('RPC request ID range exhausted', false);
|
|
69
|
+
}
|
|
70
|
+
return id;
|
|
71
|
+
};
|
|
72
|
+
const recoveryUrl = (original) => {
|
|
73
|
+
const url = new URL(original);
|
|
74
|
+
const token = `${Date.now()}-${++rpcRecoveryNonce}-${Math.random()
|
|
75
|
+
.toString(36)
|
|
76
|
+
.slice(2)}`;
|
|
77
|
+
// Append without reserializing existing query values (including auth data).
|
|
78
|
+
url.search += `${url.search ? '&' : '?'}sysweb3_rpc_request=${token}`;
|
|
79
|
+
return url.toString();
|
|
80
|
+
};
|
|
81
|
+
const getChainIdFromNetworkish = (network) => {
|
|
82
|
+
if (network == null)
|
|
83
|
+
return undefined;
|
|
84
|
+
if (typeof network === 'number')
|
|
85
|
+
return network;
|
|
86
|
+
if (typeof network === 'bigint')
|
|
87
|
+
return Number(network);
|
|
88
|
+
const chainId = network.chainId;
|
|
89
|
+
if (chainId == null)
|
|
90
|
+
return undefined;
|
|
91
|
+
return typeof chainId === 'bigint' ? Number(chainId) : Number(chainId);
|
|
92
|
+
};
|
|
93
|
+
const parseChainId = (chainId) => {
|
|
94
|
+
if (typeof chainId === 'number')
|
|
95
|
+
return chainId;
|
|
96
|
+
if (typeof chainId === 'bigint')
|
|
97
|
+
return Number(chainId);
|
|
98
|
+
return Number(BigInt(chainId));
|
|
99
|
+
};
|
|
100
|
+
const defineValue = (target, field, value) => {
|
|
101
|
+
Object.defineProperty(target, field, {
|
|
102
|
+
value,
|
|
103
|
+
configurable: true,
|
|
104
|
+
enumerable: true,
|
|
105
|
+
writable: true,
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
const wrapBigNumberFields = (source, fields, omittedFields = fields) => {
|
|
109
|
+
if (!source)
|
|
110
|
+
return source;
|
|
111
|
+
const wrapped = Object.create(Object.getPrototypeOf(source));
|
|
112
|
+
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
113
|
+
for (const field of omittedFields) {
|
|
114
|
+
delete descriptors[field];
|
|
115
|
+
}
|
|
116
|
+
Object.defineProperties(wrapped, descriptors);
|
|
117
|
+
for (const field of fields) {
|
|
118
|
+
if (source[field] != null) {
|
|
119
|
+
defineValue(wrapped, field, BigNumber.from(source[field]));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return wrapped;
|
|
123
|
+
};
|
|
124
|
+
export const wrapTransactionReceipt = (receipt) => {
|
|
125
|
+
const wrapped = wrapBigNumberFields(receipt, TRANSACTION_RECEIPT_BIG_NUMBER_FIELDS);
|
|
126
|
+
if (!wrapped)
|
|
127
|
+
return wrapped;
|
|
128
|
+
return new Proxy(wrapped, {
|
|
129
|
+
get(target, property, receiver) {
|
|
130
|
+
const value = Reflect.get(target, property, receiver);
|
|
131
|
+
return typeof value === 'function' ? value.bind(receipt) : value;
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
export const wrapTransactionResponse = (transaction) => {
|
|
136
|
+
if (!transaction)
|
|
137
|
+
return transaction;
|
|
138
|
+
const omittedFields = new Set([
|
|
139
|
+
...TRANSACTION_RESPONSE_BIG_NUMBER_FIELDS,
|
|
140
|
+
...TRANSACTION_RESPONSE_NUMBER_FIELDS,
|
|
141
|
+
'wait',
|
|
142
|
+
]);
|
|
143
|
+
const wrapped = wrapBigNumberFields(transaction, TRANSACTION_RESPONSE_BIG_NUMBER_FIELDS, omittedFields);
|
|
144
|
+
for (const field of TRANSACTION_RESPONSE_NUMBER_FIELDS) {
|
|
145
|
+
if (transaction[field] != null) {
|
|
146
|
+
defineValue(wrapped, field, Number(transaction[field]));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (typeof transaction.wait === 'function') {
|
|
150
|
+
defineValue(wrapped, 'wait', async (...args) => wrapTransactionReceipt(await transaction.wait(...args)));
|
|
151
|
+
}
|
|
152
|
+
return new Proxy(wrapped, {
|
|
153
|
+
get(target, property, receiver) {
|
|
154
|
+
const value = Reflect.get(target, property, receiver);
|
|
155
|
+
return typeof value === 'function' ? value.bind(transaction) : value;
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
// Preserve JSON-RPC error details (code, revert data) on thrown errors so
|
|
160
|
+
// consumers can decode custom contract errors instead of only seeing
|
|
161
|
+
// "execution reverted".
|
|
162
|
+
const makeRpcError = (rpcError) => {
|
|
163
|
+
const error = new Error(rpcError.message);
|
|
164
|
+
if (rpcError.code !== undefined) {
|
|
165
|
+
error.code = rpcError.code;
|
|
166
|
+
}
|
|
167
|
+
if (rpcError.data !== undefined) {
|
|
168
|
+
error.data = rpcError.data;
|
|
169
|
+
}
|
|
170
|
+
return error;
|
|
171
|
+
};
|
|
172
|
+
class BaseProvider extends JsonRpcProvider {
|
|
173
|
+
constructor(signal, url, network) {
|
|
174
|
+
super(typeof url === 'string' ? url : url?.url, network, network == null ? undefined : { staticNetwork: true });
|
|
175
|
+
this.isPossibleGetChainId = true;
|
|
176
|
+
this.cooldownTime = 120 * 1000;
|
|
177
|
+
this.rateLimit = 30;
|
|
178
|
+
this.requestCount = 0;
|
|
179
|
+
this.lastRequestTime = 0;
|
|
180
|
+
this.currentChainId = '';
|
|
181
|
+
this.feeDataCache = null;
|
|
182
|
+
this.feeDataPromise = null;
|
|
183
|
+
this.chainIdVerificationPromise = null;
|
|
184
|
+
this.isInCooldown = false;
|
|
185
|
+
this.errorMessage = '';
|
|
186
|
+
this.serverHasAnError = false;
|
|
187
|
+
this.throttledRequest = (requestFn) => {
|
|
188
|
+
if (!this.canMakeRequest()) {
|
|
189
|
+
return this.cooldown();
|
|
190
|
+
}
|
|
191
|
+
// Execute request immediately without timeout delay
|
|
192
|
+
return requestFn().catch((error) => {
|
|
193
|
+
if (error.name === 'AbortError') {
|
|
194
|
+
console.log('Aborted request', error);
|
|
195
|
+
return Promise.reject(error);
|
|
196
|
+
}
|
|
197
|
+
throw error;
|
|
198
|
+
});
|
|
199
|
+
};
|
|
200
|
+
this.canMakeRequest = () => {
|
|
201
|
+
const now = Date.now();
|
|
202
|
+
let elapsedTime = 0;
|
|
203
|
+
if (this.lastRequestTime > 0) {
|
|
204
|
+
elapsedTime = now - this.lastRequestTime;
|
|
205
|
+
}
|
|
206
|
+
if (elapsedTime <= this.cooldownTime && this.serverHasAnError) {
|
|
207
|
+
this.isInCooldown = true;
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
if (elapsedTime >= this.cooldownTime && this.serverHasAnError) {
|
|
211
|
+
this.requestCount = 0;
|
|
212
|
+
this.serverHasAnError = false;
|
|
213
|
+
this.isInCooldown = true;
|
|
214
|
+
return false; //One last blocked request before cooldown ends
|
|
215
|
+
}
|
|
216
|
+
if (this.requestCount < this.rateLimit || !this.serverHasAnError) {
|
|
217
|
+
this.requestCount++;
|
|
218
|
+
if (elapsedTime > 1000) {
|
|
219
|
+
//Uncomment the console.log to see the request per second
|
|
220
|
+
// console.log(
|
|
221
|
+
// `Request/sec to Provider(${this.connection.url}): ${this.requestCount}`
|
|
222
|
+
// );
|
|
223
|
+
this.requestCount = 1;
|
|
224
|
+
this.lastRequestTime = now;
|
|
225
|
+
}
|
|
226
|
+
else if (this.lastRequestTime === 0) {
|
|
227
|
+
this.lastRequestTime = now;
|
|
228
|
+
}
|
|
229
|
+
this.isInCooldown = false;
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
this.cooldown = async () => {
|
|
234
|
+
const now = Date.now();
|
|
235
|
+
const elapsedTime = now - this.lastRequestTime;
|
|
236
|
+
console.error('Cant make request, rpc cooldown is active for the next: ', (this.cooldownTime - elapsedTime) / 1000, ' seconds');
|
|
237
|
+
throw {
|
|
238
|
+
message: `Cant make request, rpc cooldown is active for the next: ${(this.cooldownTime - elapsedTime) / 1000} seconds`,
|
|
239
|
+
};
|
|
240
|
+
};
|
|
241
|
+
this.send = async (method, params) => {
|
|
242
|
+
if (!this.isPossibleGetChainId && method === 'eth_chainId') {
|
|
243
|
+
return this.currentChainId;
|
|
244
|
+
}
|
|
245
|
+
const [json] = await this.requestRpc([{ method, params }], false);
|
|
246
|
+
if (json.error) {
|
|
247
|
+
this.errorMessage = json.error.message;
|
|
248
|
+
throw makeRpcError(json.error);
|
|
249
|
+
}
|
|
250
|
+
if (method === 'eth_chainId') {
|
|
251
|
+
this.currentChainId = json.result;
|
|
252
|
+
this.isPossibleGetChainId = false;
|
|
253
|
+
}
|
|
254
|
+
return json.result;
|
|
255
|
+
};
|
|
256
|
+
this.configuredChainId = getChainIdFromNetworkish(network);
|
|
257
|
+
this.signal = signal;
|
|
258
|
+
this._pendingBatchAggregator = null;
|
|
259
|
+
this._pendingBatch = null;
|
|
260
|
+
this.bindMethods();
|
|
261
|
+
}
|
|
262
|
+
bindMethods() {
|
|
263
|
+
const proto = Object.getPrototypeOf(this);
|
|
264
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
265
|
+
if (typeof this[key] === 'function' && key !== 'constructor') {
|
|
266
|
+
this[key] = this[key].bind(this);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
async verifyConfiguredChainId() {
|
|
271
|
+
if (this.configuredChainId == null)
|
|
272
|
+
return;
|
|
273
|
+
if (!this.chainIdVerificationPromise) {
|
|
274
|
+
this.chainIdVerificationPromise =
|
|
275
|
+
this.fetchAndVerifyConfiguredChainId().finally(() => {
|
|
276
|
+
this.chainIdVerificationPromise = null;
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
return this.chainIdVerificationPromise;
|
|
280
|
+
}
|
|
281
|
+
async fetchAndVerifyConfiguredChainId() {
|
|
282
|
+
this.isPossibleGetChainId = true;
|
|
283
|
+
const actualChainId = parseChainId(await this.send('eth_chainId', []));
|
|
284
|
+
if (actualChainId !== this.configuredChainId) {
|
|
285
|
+
throw new Error(`Configured EVM chainId ${this.configuredChainId} does not match RPC eth_chainId ${actualChainId}`);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
validateRpcResponses(json, requests, batch) {
|
|
289
|
+
if (batch ? !Array.isArray(json) : Array.isArray(json)) {
|
|
290
|
+
throw new RpcResponseIntegrityError();
|
|
291
|
+
}
|
|
292
|
+
const responses = batch ? json : [json];
|
|
293
|
+
if (responses.length !== requests.length) {
|
|
294
|
+
throw new RpcResponseIntegrityError();
|
|
295
|
+
}
|
|
296
|
+
const expectedIds = new Set(requests.map((request) => request.id));
|
|
297
|
+
const byId = new Map();
|
|
298
|
+
for (const response of responses) {
|
|
299
|
+
if (!response ||
|
|
300
|
+
typeof response !== 'object' ||
|
|
301
|
+
Array.isArray(response) ||
|
|
302
|
+
typeof response.id !== 'number' ||
|
|
303
|
+
!expectedIds.has(response.id) ||
|
|
304
|
+
byId.has(response.id)) {
|
|
305
|
+
throw new RpcResponseIntegrityError();
|
|
306
|
+
}
|
|
307
|
+
const hasResult = Object.prototype.hasOwnProperty.call(response, 'result');
|
|
308
|
+
const hasError = Object.prototype.hasOwnProperty.call(response, 'error');
|
|
309
|
+
if (response.jsonrpc !== '2.0' ||
|
|
310
|
+
hasResult === hasError ||
|
|
311
|
+
(hasError &&
|
|
312
|
+
(!response.error ||
|
|
313
|
+
typeof response.error.message !== 'string' ||
|
|
314
|
+
!Number.isSafeInteger(response.error.code)))) {
|
|
315
|
+
throw new RpcResponseIntegrityError('Invalid JSON-RPC response envelope', false);
|
|
316
|
+
}
|
|
317
|
+
byId.set(response.id, response);
|
|
318
|
+
}
|
|
319
|
+
return requests.map((request) => byId.get(request.id));
|
|
320
|
+
}
|
|
321
|
+
async requestRpc(inputs, batch) {
|
|
322
|
+
const canRecover = inputs.every(({ method }) => RECOVERABLE_READ_METHODS.has(method));
|
|
323
|
+
const originalUrl = this._getConnection().url;
|
|
324
|
+
let originalBody = '';
|
|
325
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
326
|
+
if (this.signal.aborted) {
|
|
327
|
+
throw this.signal.reason || new Error('RPC request aborted');
|
|
328
|
+
}
|
|
329
|
+
// Reserve the whole request range before any dispatch or await.
|
|
330
|
+
// A recovery must repeat the serialized read, even if its caller mutates
|
|
331
|
+
// an input object while the first response is delayed.
|
|
332
|
+
const source = attempt === 0
|
|
333
|
+
? inputs
|
|
334
|
+
: batch
|
|
335
|
+
? JSON.parse(originalBody)
|
|
336
|
+
: [JSON.parse(originalBody)];
|
|
337
|
+
const requests = source.map(({ method, params }) => ({
|
|
338
|
+
jsonrpc: '2.0',
|
|
339
|
+
method,
|
|
340
|
+
params,
|
|
341
|
+
id: reserveRpcWireId(),
|
|
342
|
+
}));
|
|
343
|
+
const options = {
|
|
344
|
+
method: 'POST',
|
|
345
|
+
headers: { 'Content-Type': 'application/json' },
|
|
346
|
+
body: JSON.stringify(batch ? requests : requests[0]),
|
|
347
|
+
signal: this.signal,
|
|
348
|
+
};
|
|
349
|
+
if (attempt === 0)
|
|
350
|
+
originalBody = options.body;
|
|
351
|
+
const json = await this.throttledRequest(async () => {
|
|
352
|
+
const response = await fetch(attempt === 0 ? originalUrl : recoveryUrl(originalUrl), options);
|
|
353
|
+
if (!response.ok) {
|
|
354
|
+
let errorBody = { error: undefined, message: undefined };
|
|
355
|
+
try {
|
|
356
|
+
errorBody = await response.json();
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
console.warn('No body in request');
|
|
360
|
+
}
|
|
361
|
+
this.errorMessage =
|
|
362
|
+
errorBody.error || errorBody.message || 'No message from Provider';
|
|
363
|
+
handleStatusCodeError(response.status, this.errorMessage);
|
|
364
|
+
}
|
|
365
|
+
if (response.status !== 200) {
|
|
366
|
+
throw new Error(`Unexpected HTTP status code: ${response.status}`);
|
|
367
|
+
}
|
|
368
|
+
try {
|
|
369
|
+
return await response.json();
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
if (this.signal.aborted || error?.name === 'AbortError')
|
|
373
|
+
throw error;
|
|
374
|
+
throw new RpcResponseIntegrityError('Invalid JSON-RPC JSON response', false);
|
|
375
|
+
}
|
|
376
|
+
}).catch((error) => {
|
|
377
|
+
if (attempt === 0 ||
|
|
378
|
+
error instanceof RpcResponseIntegrityError ||
|
|
379
|
+
this.signal.aborted ||
|
|
380
|
+
error?.name === 'AbortError') {
|
|
381
|
+
throw error;
|
|
382
|
+
}
|
|
383
|
+
throw new RpcResponseIntegrityError('JSON-RPC response recovery failed', false);
|
|
384
|
+
});
|
|
385
|
+
try {
|
|
386
|
+
const responses = this.validateRpcResponses(json, requests, batch);
|
|
387
|
+
this.serverHasAnError = false;
|
|
388
|
+
return responses;
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
if (!(error instanceof RpcResponseIntegrityError) ||
|
|
392
|
+
!error.retryable ||
|
|
393
|
+
attempt !== 0 ||
|
|
394
|
+
!canRecover) {
|
|
395
|
+
throw error;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
throw new RpcResponseIntegrityError();
|
|
400
|
+
}
|
|
401
|
+
// Ethers uses this primitive for network auto-detection and inherited send.
|
|
402
|
+
// Share wire IDs and validation, then restore its caller IDs after correlation.
|
|
403
|
+
async _send(payload) {
|
|
404
|
+
const inputs = Array.isArray(payload) ? payload : [payload];
|
|
405
|
+
if (!inputs.length)
|
|
406
|
+
return [];
|
|
407
|
+
const callerIds = inputs.map(({ id }) => id);
|
|
408
|
+
const responses = await this.requestRpc(inputs, Array.isArray(payload));
|
|
409
|
+
return responses.map((response, index) => ({
|
|
410
|
+
...response,
|
|
411
|
+
id: callerIds[index],
|
|
412
|
+
}));
|
|
413
|
+
}
|
|
414
|
+
async sendBatch(method, params) {
|
|
415
|
+
if (!params.length)
|
|
416
|
+
return [];
|
|
417
|
+
const responses = await this.requestRpc(params.map((param) => ({ method, params: param })), true);
|
|
418
|
+
return responses.map((json) => {
|
|
419
|
+
if (json.error) {
|
|
420
|
+
this.errorMessage = json.error.message;
|
|
421
|
+
throw makeRpcError(json.error);
|
|
422
|
+
}
|
|
423
|
+
return json.result;
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
async getGasPrice() {
|
|
427
|
+
return BigNumber.from(await this.send('eth_gasPrice', []));
|
|
428
|
+
}
|
|
429
|
+
async getFeeData() {
|
|
430
|
+
const now = Date.now();
|
|
431
|
+
if (this.feeDataCache && this.feeDataCache.expiresAt > now) {
|
|
432
|
+
return this.feeDataCache.value;
|
|
433
|
+
}
|
|
434
|
+
if (this.feeDataPromise) {
|
|
435
|
+
return this.feeDataPromise;
|
|
436
|
+
}
|
|
437
|
+
this.feeDataPromise = this.fetchFeeData();
|
|
438
|
+
try {
|
|
439
|
+
const value = await this.feeDataPromise;
|
|
440
|
+
this.feeDataCache = {
|
|
441
|
+
expiresAt: Date.now() + FEE_DATA_CACHE_TTL_MS,
|
|
442
|
+
value,
|
|
443
|
+
};
|
|
444
|
+
return value;
|
|
445
|
+
}
|
|
446
|
+
finally {
|
|
447
|
+
this.feeDataPromise = null;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
async readFeeData() {
|
|
451
|
+
const network = await this.getNetwork();
|
|
452
|
+
// Ethers tolerates unavailable optional fee methods; keep that behavior,
|
|
453
|
+
// but never convert a response-integrity failure into an invented quote.
|
|
454
|
+
const optionalFee = async (method) => {
|
|
455
|
+
try {
|
|
456
|
+
return getBigInt(await this._perform({ method }), '%response');
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
if (error?.code === 'SYSWEB3_RPC_RESPONSE_INVALID' ||
|
|
460
|
+
error?.name === 'AbortError' ||
|
|
461
|
+
this.signal.aborted)
|
|
462
|
+
throw error;
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
const getFeeData = async () => {
|
|
467
|
+
const [block, gasPrice, priorityFee] = await Promise.all([
|
|
468
|
+
super.getBlock('latest'),
|
|
469
|
+
optionalFee('getGasPrice'),
|
|
470
|
+
optionalFee('getPriorityFee'),
|
|
471
|
+
]);
|
|
472
|
+
let maxFeePerGas = null;
|
|
473
|
+
let maxPriorityFeePerGas = null;
|
|
474
|
+
if (block?.baseFeePerGas != null && priorityFee != null) {
|
|
475
|
+
maxPriorityFeePerGas = priorityFee;
|
|
476
|
+
maxFeePerGas = block.baseFeePerGas * 2n + maxPriorityFeePerGas;
|
|
477
|
+
}
|
|
478
|
+
return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);
|
|
479
|
+
};
|
|
480
|
+
// Preserve network-specific fee plugins, including Polygon's fee reader.
|
|
481
|
+
const plugin = network.getPlugin('org.ethers.plugins.network.FetchUrlFeeDataPlugin');
|
|
482
|
+
if (plugin) {
|
|
483
|
+
// Polygon wraps reader failures in SERVER_ERROR. Preserve this
|
|
484
|
+
// invocation's integrity/cancellation failure through that wrapper.
|
|
485
|
+
let readerFailure;
|
|
486
|
+
const pluginReader = async () => {
|
|
487
|
+
try {
|
|
488
|
+
return await getFeeData();
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
if (error?.code === 'SYSWEB3_RPC_RESPONSE_INVALID' ||
|
|
492
|
+
error?.name === 'AbortError' ||
|
|
493
|
+
this.signal.aborted) {
|
|
494
|
+
readerFailure = error;
|
|
495
|
+
}
|
|
496
|
+
throw error;
|
|
497
|
+
}
|
|
498
|
+
};
|
|
499
|
+
let result;
|
|
500
|
+
try {
|
|
501
|
+
result = await plugin.processFunc(pluginReader, this, new FetchRequest(plugin.url));
|
|
502
|
+
}
|
|
503
|
+
catch (error) {
|
|
504
|
+
throw readerFailure ?? error;
|
|
505
|
+
}
|
|
506
|
+
if (readerFailure)
|
|
507
|
+
throw readerFailure;
|
|
508
|
+
return new FeeData(result.gasPrice, result.maxFeePerGas, result.maxPriorityFeePerGas);
|
|
509
|
+
}
|
|
510
|
+
return getFeeData();
|
|
511
|
+
}
|
|
512
|
+
async fetchFeeData() {
|
|
513
|
+
const feeData = await this.readFeeData();
|
|
514
|
+
const maxFeePerGas = feeData.maxFeePerGas == null
|
|
515
|
+
? null
|
|
516
|
+
: BigNumber.from(feeData.maxFeePerGas);
|
|
517
|
+
const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas == null
|
|
518
|
+
? null
|
|
519
|
+
: BigNumber.from(feeData.maxPriorityFeePerGas);
|
|
520
|
+
if (maxFeePerGas == null || maxPriorityFeePerGas == null) {
|
|
521
|
+
const block = await super.getBlock('latest');
|
|
522
|
+
if (!block)
|
|
523
|
+
throw new Error('Block not found');
|
|
524
|
+
if (block?.baseFeePerGas != null) {
|
|
525
|
+
throw new Error('EIP-1559 fee data unavailable');
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
if ((maxFeePerGas != null && maxFeePerGas.isNegative()) ||
|
|
529
|
+
(maxPriorityFeePerGas != null && maxPriorityFeePerGas.isNegative()) ||
|
|
530
|
+
(maxFeePerGas != null &&
|
|
531
|
+
maxPriorityFeePerGas != null &&
|
|
532
|
+
maxPriorityFeePerGas.gt(maxFeePerGas)))
|
|
533
|
+
throw new Error('Invalid EIP-1559 fee data');
|
|
534
|
+
const gasPrice = feeData.gasPrice == null ? null : BigNumber.from(feeData.gasPrice);
|
|
535
|
+
if (gasPrice?.isNegative())
|
|
536
|
+
throw new Error('Invalid gas price');
|
|
537
|
+
return {
|
|
538
|
+
gasPrice,
|
|
539
|
+
maxFeePerGas,
|
|
540
|
+
maxPriorityFeePerGas,
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
async getBalance(address, blockTag) {
|
|
544
|
+
return BigNumber.from(await super.getBalance(address, blockTag));
|
|
545
|
+
}
|
|
546
|
+
async normalizeLegacyCallRequest(transaction) {
|
|
547
|
+
const normalized = normalizeTransactionRequest(transaction);
|
|
548
|
+
// Some legacy/non-EIP-1559 RPCs reject a type field on call/estimateGas.
|
|
549
|
+
// Preserve the old provider behavior by stripping explicit type 0 only
|
|
550
|
+
// when the network does not expose EIP-1559 fee fields.
|
|
551
|
+
if (normalized?.type === 0 &&
|
|
552
|
+
normalized.maxFeePerGas == null &&
|
|
553
|
+
normalized.maxPriorityFeePerGas == null) {
|
|
554
|
+
const feeData = await this.readFeeData();
|
|
555
|
+
if (feeData.maxFeePerGas == null &&
|
|
556
|
+
feeData.maxPriorityFeePerGas == null) {
|
|
557
|
+
delete normalized.type;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return normalized;
|
|
561
|
+
}
|
|
562
|
+
async call(transaction, blockTag) {
|
|
563
|
+
const normalized = await this.normalizeLegacyCallRequest(transaction);
|
|
564
|
+
if (blockTag != null) {
|
|
565
|
+
normalized.blockTag = blockTag;
|
|
566
|
+
}
|
|
567
|
+
return await super.call(normalized);
|
|
568
|
+
}
|
|
569
|
+
async estimateGas(transaction) {
|
|
570
|
+
const normalized = await this.normalizeLegacyCallRequest(transaction);
|
|
571
|
+
return BigNumber.from(await super.estimateGas(normalized));
|
|
572
|
+
}
|
|
573
|
+
async getBlock(blockHashOrBlockTag) {
|
|
574
|
+
return await super.getBlock(blockHashOrBlockTag);
|
|
575
|
+
}
|
|
576
|
+
async getTransaction(hash) {
|
|
577
|
+
return wrapTransactionResponse(await super.getTransaction(hash));
|
|
578
|
+
}
|
|
579
|
+
async sendTransaction(signedTransaction) {
|
|
580
|
+
return wrapTransactionResponse(await this.broadcastTransaction(signedTransaction));
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
export class CustomJsonRpcProvider extends BaseProvider {
|
|
584
|
+
constructor(signal, url, network) {
|
|
585
|
+
super(signal, url, network);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"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"}
|
package/esm/signers.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as syscoinjs from 'syscoinjs-lib';
|
|
2
|
+
// NOTE: Avoid direct bitcoinjs-lib types; rely on syscoinjs's embedded bitcoinjs
|
|
3
|
+
export const getSyscoinSigners = ({ mnemonic, rpc, }) => {
|
|
4
|
+
const { url, slip44, currency } = rpc.formattedNetwork;
|
|
5
|
+
let config = null;
|
|
6
|
+
let pubTypes = null;
|
|
7
|
+
let networks = null;
|
|
8
|
+
let isTestnet = false;
|
|
9
|
+
// Determine if this is a testnet based on slip44 and currency
|
|
10
|
+
isTestnet =
|
|
11
|
+
slip44 === 1 || Boolean(currency && currency.toLowerCase().startsWith('t'));
|
|
12
|
+
if (rpc.networkConfig) {
|
|
13
|
+
const { networkConfig } = rpc;
|
|
14
|
+
const { networks: _networkConfig, types } = networkConfig;
|
|
15
|
+
config = isTestnet ? _networkConfig.testnet : _networkConfig.mainnet;
|
|
16
|
+
networks = _networkConfig;
|
|
17
|
+
pubTypes = types.zPubType;
|
|
18
|
+
}
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
const hd = new syscoinjs.utils.HDSigner(mnemonic, null, isTestnet, // Use proper testnet flag
|
|
21
|
+
networks, slip44, pubTypes, 84);
|
|
22
|
+
const main = new syscoinjs.SyscoinJSLib(hd, url, config);
|
|
23
|
+
return {
|
|
24
|
+
hd,
|
|
25
|
+
main,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=signers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signers.js","sourceRoot":"","sources":["../../src/signers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAG3C,iFAAiF;AAEjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,QAAQ,EACR,GAAG,GACkB,EAAsC,EAAE;IAC7D,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC;IACvD,IAAI,MAAM,GAA0B,IAAI,CAAC;IACzC,IAAI,QAAQ,GAAqB,IAAI,CAAC;IACtC,IAAI,QAAQ,GACV,IAAI,CAAC;IACP,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,8DAA8D;IAC9D,SAAS;QACP,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9E,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;QAC9B,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;QAE1D,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;QACrE,QAAQ,GAAG,cAAc,CAAC;QAC1B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,aAAa;IACb,MAAM,EAAE,GAAoB,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,CACtD,QAAQ,EACR,IAAI,EACJ,SAAS,EAAE,0BAA0B;IACrC,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,EAAE,CACH,CAAC;IAEF,MAAM,IAAI,GAAQ,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAE9D,OAAO;QACL,EAAE;QACF,IAAI;KACL,CAAC;AACJ,CAAC,CAAC"}
|