quantumcoin 6.14.2 → 6.14.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/CHANGELOG.md +442 -442
- package/FUNDING.json +10 -10
- package/LICENSE.md +21 -21
- package/README.md +132 -142
- package/SECURITY.md +34 -34
- package/dist/README.md +22 -22
- package/dist/quantumcoin.js +1127 -1324
- package/dist/quantumcoin.js.map +1 -1
- package/dist/quantumcoin.min.js +1 -1
- package/dist/quantumcoin.umd.js +1128 -1327
- package/dist/quantumcoin.umd.js.map +1 -1
- package/dist/quantumcoin.umd.min.js +1 -1
- package/dist/wordlists-extra.js +1 -1
- package/dist/wordlists-extra.js.map +1 -1
- package/dist/wordlists-extra.min.js +1 -1
- package/lib.commonjs/README.md +16 -16
- package/lib.commonjs/_version.js +1 -1
- package/lib.commonjs/crypto/signature.d.ts +3 -76
- package/lib.commonjs/crypto/signature.d.ts.map +1 -1
- package/lib.commonjs/crypto/signature.js +15 -199
- package/lib.commonjs/crypto/signature.js.map +1 -1
- package/lib.commonjs/crypto/signing-key.d.ts +1 -1
- package/lib.commonjs/crypto/signing-key.d.ts.map +1 -1
- package/lib.commonjs/crypto/signing-key.js +19 -10
- package/lib.commonjs/crypto/signing-key.js.map +1 -1
- package/lib.commonjs/package.json +12 -12
- package/lib.commonjs/providers/provider-jsonrpc.d.ts +0 -1
- package/lib.commonjs/providers/provider-jsonrpc.d.ts.map +1 -1
- package/lib.commonjs/providers/provider-jsonrpc.js +0 -1
- package/lib.commonjs/providers/provider-jsonrpc.js.map +1 -1
- package/lib.commonjs/quantumcoin.d.ts +2 -0
- package/lib.commonjs/quantumcoin.d.ts.map +1 -1
- package/lib.commonjs/quantumcoin.js +11 -5
- package/lib.commonjs/quantumcoin.js.map +1 -1
- package/lib.commonjs/transaction/address.d.ts.map +1 -1
- package/lib.commonjs/transaction/address.js +8 -3
- package/lib.commonjs/transaction/address.js.map +1 -1
- package/lib.commonjs/transaction/transaction.d.ts.map +1 -1
- package/lib.commonjs/transaction/transaction.js +7 -40
- package/lib.commonjs/transaction/transaction.js.map +1 -1
- package/lib.commonjs/wallet/json-keystore.d.ts.map +1 -1
- package/lib.commonjs/wallet/json-keystore.js +7 -7
- package/lib.commonjs/wallet/json-keystore.js.map +1 -1
- package/lib.commonjs/wallet/wallet.d.ts.map +1 -1
- package/lib.commonjs/wallet/wallet.js +2 -2
- package/lib.commonjs/wallet/wallet.js.map +1 -1
- package/lib.esm/README.md +16 -16
- package/lib.esm/_version.js +1 -1
- package/lib.esm/crypto/signature.d.ts +3 -76
- package/lib.esm/crypto/signature.d.ts.map +1 -1
- package/lib.esm/crypto/signature.js +16 -202
- package/lib.esm/crypto/signature.js.map +1 -1
- package/lib.esm/crypto/signing-key.d.ts +1 -1
- package/lib.esm/crypto/signing-key.d.ts.map +1 -1
- package/lib.esm/crypto/signing-key.js +20 -9
- package/lib.esm/crypto/signing-key.js.map +1 -1
- package/lib.esm/package.json +12 -12
- package/lib.esm/providers/provider-jsonrpc.d.ts +0 -1
- package/lib.esm/providers/provider-jsonrpc.d.ts.map +1 -1
- package/lib.esm/providers/provider-jsonrpc.js +0 -1
- package/lib.esm/providers/provider-jsonrpc.js.map +1 -1
- package/lib.esm/quantumcoin.d.ts +2 -0
- package/lib.esm/quantumcoin.d.ts.map +1 -1
- package/lib.esm/quantumcoin.js +6 -0
- package/lib.esm/quantumcoin.js.map +1 -1
- package/lib.esm/transaction/address.d.ts.map +1 -1
- package/lib.esm/transaction/address.js +8 -2
- package/lib.esm/transaction/address.js.map +1 -1
- package/lib.esm/transaction/transaction.d.ts.map +1 -1
- package/lib.esm/transaction/transaction.js +7 -40
- package/lib.esm/transaction/transaction.js.map +1 -1
- package/lib.esm/wallet/json-keystore.d.ts.map +1 -1
- package/lib.esm/wallet/json-keystore.js +11 -5
- package/lib.esm/wallet/json-keystore.js.map +1 -1
- package/lib.esm/wallet/wallet.d.ts.map +1 -1
- package/lib.esm/wallet/wallet.js +3 -1
- package/lib.esm/wallet/wallet.js.map +1 -1
- package/package.json +6 -5
- package/rollup.config.mjs +50 -50
- package/src.ts/_version.ts +1 -1
- package/src.ts/abi/abi-coder.ts +237 -237
- package/src.ts/abi/bytes32.ts +45 -45
- package/src.ts/abi/coders/abstract-coder.ts +541 -541
- package/src.ts/abi/coders/address.ts +36 -36
- package/src.ts/abi/coders/anonymous.ts +29 -29
- package/src.ts/abi/coders/array.ts +199 -199
- package/src.ts/abi/coders/boolean.ts +27 -27
- package/src.ts/abi/coders/bytes.ts +43 -43
- package/src.ts/abi/coders/fixed-bytes.ts +37 -37
- package/src.ts/abi/coders/null.ts +28 -28
- package/src.ts/abi/coders/number.ts +63 -63
- package/src.ts/abi/coders/string.ts +29 -29
- package/src.ts/abi/coders/tuple.ts +69 -69
- package/src.ts/abi/fragments.ts +1617 -1617
- package/src.ts/abi/index.ts +41 -41
- package/src.ts/abi/interface.ts +1271 -1271
- package/src.ts/abi/typed.ts +796 -796
- package/src.ts/address/address.ts +148 -148
- package/src.ts/address/checks.ts +123 -123
- package/src.ts/address/contract-address.ts +80 -80
- package/src.ts/address/index.ts +57 -57
- package/src.ts/constants/addresses.ts +8 -8
- package/src.ts/constants/hashes.ts +7 -7
- package/src.ts/constants/index.ts +16 -16
- package/src.ts/constants/numbers.ts +35 -35
- package/src.ts/constants/strings.ts +16 -16
- package/src.ts/contract/contract.ts +1120 -1120
- package/src.ts/contract/factory.ts +143 -143
- package/src.ts/contract/index.ts +31 -31
- package/src.ts/contract/types.ts +236 -236
- package/src.ts/contract/wrappers.ts +225 -225
- package/src.ts/crypto/crypto-browser.ts +64 -64
- package/src.ts/crypto/crypto.ts +4 -4
- package/src.ts/crypto/hmac.ts +51 -51
- package/src.ts/crypto/index.ts +59 -59
- package/src.ts/crypto/keccak.ts +54 -54
- package/src.ts/crypto/pbkdf2.ts +55 -55
- package/src.ts/crypto/random.ts +36 -36
- package/src.ts/crypto/ripemd160.ts +43 -43
- package/src.ts/crypto/scrypt.ts +114 -114
- package/src.ts/crypto/sha2.ts +78 -78
- package/src.ts/crypto/signature.ts +145 -349
- package/src.ts/crypto/signing-key.ts +126 -118
- package/src.ts/hash/authorization.ts +38 -38
- package/src.ts/hash/id.ts +17 -17
- package/src.ts/hash/index.ts +18 -18
- package/src.ts/hash/message.ts +51 -51
- package/src.ts/hash/namehash.ts +101 -101
- package/src.ts/hash/solidity.ts +117 -117
- package/src.ts/hash/typed-data.ts +658 -658
- package/src.ts/index.ts +12 -12
- package/src.ts/providers/abstract-provider.ts +1761 -1761
- package/src.ts/providers/abstract-signer.ts +314 -314
- package/src.ts/providers/community.ts +49 -49
- package/src.ts/providers/contracts.ts +42 -42
- package/src.ts/providers/default-provider.ts +96 -96
- package/src.ts/providers/ens-resolver.ts +606 -606
- package/src.ts/providers/format.ts +320 -320
- package/src.ts/providers/formatting.ts +418 -418
- package/src.ts/providers/index.ts +125 -125
- package/src.ts/providers/network.ts +327 -327
- package/src.ts/providers/pagination.ts +8 -8
- package/src.ts/providers/plugin-fallback.ts +35 -35
- package/src.ts/providers/plugins-network.ts +281 -281
- package/src.ts/providers/provider-browser.ts +334 -334
- package/src.ts/providers/provider-fallback.ts +801 -801
- package/src.ts/providers/provider-ipcsocket-browser.ts +3 -3
- package/src.ts/providers/provider-ipcsocket.ts +81 -81
- package/src.ts/providers/provider-jsonrpc.ts +1334 -1335
- package/src.ts/providers/provider-socket.ts +352 -352
- package/src.ts/providers/provider-websocket.ts +103 -103
- package/src.ts/providers/provider.ts +2136 -2136
- package/src.ts/providers/signer-noncemanager.ts +98 -98
- package/src.ts/providers/signer.ts +166 -166
- package/src.ts/providers/subscriber-connection.ts +74 -74
- package/src.ts/providers/subscriber-filterid.ts +199 -199
- package/src.ts/providers/subscriber-polling.ts +321 -321
- package/src.ts/providers/ws-browser.ts +11 -11
- package/src.ts/providers/ws.ts +3 -3
- package/src.ts/quantumcoin.ts +219 -211
- package/src.ts/thirdparty.d.ts +16 -16
- package/src.ts/transaction/accesslist.ts +43 -43
- package/src.ts/transaction/address.ts +35 -31
- package/src.ts/transaction/authorization.ts +14 -14
- package/src.ts/transaction/index.ts +51 -51
- package/src.ts/transaction/transaction.ts +1349 -1379
- package/src.ts/utils/base58.ts +73 -73
- package/src.ts/utils/base64-browser.ts +25 -25
- package/src.ts/utils/base64.ts +56 -56
- package/src.ts/utils/data.ts +199 -199
- package/src.ts/utils/errors.ts +793 -793
- package/src.ts/utils/events.ts +105 -105
- package/src.ts/utils/fetch.ts +970 -970
- package/src.ts/utils/fixednumber.ts +643 -643
- package/src.ts/utils/geturl-browser.ts +81 -81
- package/src.ts/utils/geturl.ts +134 -134
- package/src.ts/utils/index.ts +95 -95
- package/src.ts/utils/maths.ts +240 -240
- package/src.ts/utils/properties.ts +60 -60
- package/src.ts/utils/rlp-decode.ts +104 -104
- package/src.ts/utils/rlp-encode.ts +64 -64
- package/src.ts/utils/rlp.ts +20 -20
- package/src.ts/utils/units.ts +91 -91
- package/src.ts/utils/utf8.ts +325 -325
- package/src.ts/utils/uuid.ts +36 -36
- package/src.ts/wallet/base-wallet.ts +160 -160
- package/src.ts/wallet/index.ts +32 -32
- package/src.ts/wallet/json-keystore.ts +108 -106
- package/src.ts/wallet/utils.ts +147 -147
- package/src.ts/wallet/wallet.ts +138 -139
- package/src.ts/wordlists/bit-reader.ts +35 -35
- package/src.ts/wordlists/decode-owl.ts +58 -58
- package/src.ts/wordlists/decode-owla.ts +33 -33
- package/src.ts/wordlists/generation/encode-latin.ts +370 -370
- package/src.ts/wordlists/index.ts +26 -26
- package/src.ts/wordlists/lang-cz.ts +33 -33
- package/src.ts/wordlists/lang-en.ts +33 -33
- package/src.ts/wordlists/lang-es.ts +35 -35
- package/src.ts/wordlists/lang-fr.ts +34 -34
- package/src.ts/wordlists/lang-it.ts +33 -33
- package/src.ts/wordlists/lang-ja.ts +181 -181
- package/src.ts/wordlists/lang-ko.ts +104 -104
- package/src.ts/wordlists/lang-pt.ts +34 -34
- package/src.ts/wordlists/lang-zh.ts +112 -112
- package/src.ts/wordlists/wordlist-owl.ts +77 -77
- package/src.ts/wordlists/wordlist-owla.ts +41 -41
- package/src.ts/wordlists/wordlist.ts +59 -59
- package/src.ts/wordlists/wordlists-browser.ts +8 -8
- package/src.ts/wordlists/wordlists-extra.ts +9 -9
- package/src.ts/wordlists/wordlists.ts +38 -38
- package/dist/quantumcoin.min.js'.gz' +0 -0
- package/dist/quantumcoin.umd.min.js'.gz' +0 -0
- package/dist/wordlists-extra.min.js'.gz' +0 -0
- package/lib.commonjs/providers/provider-alchemy.d.ts +0 -50
- package/lib.commonjs/providers/provider-alchemy.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-alchemy.js +0 -151
- package/lib.commonjs/providers/provider-alchemy.js.map +0 -1
- package/lib.commonjs/providers/provider-ankr.d.ts +0 -61
- package/lib.commonjs/providers/provider-ankr.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-ankr.js +0 -137
- package/lib.commonjs/providers/provider-ankr.js.map +0 -1
- package/lib.commonjs/providers/provider-blockscout.d.ts +0 -59
- package/lib.commonjs/providers/provider-blockscout.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-blockscout.js +0 -145
- package/lib.commonjs/providers/provider-blockscout.js.map +0 -1
- package/lib.commonjs/providers/provider-chainstack.d.ts +0 -46
- package/lib.commonjs/providers/provider-chainstack.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-chainstack.js +0 -102
- package/lib.commonjs/providers/provider-chainstack.js.map +0 -1
- package/lib.commonjs/providers/provider-cloudflare.d.ts +0 -14
- package/lib.commonjs/providers/provider-cloudflare.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-cloudflare.js +0 -26
- package/lib.commonjs/providers/provider-cloudflare.js.map +0 -1
- package/lib.commonjs/providers/provider-etherscan.d.ts +0 -147
- package/lib.commonjs/providers/provider-etherscan.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-etherscan.js +0 -587
- package/lib.commonjs/providers/provider-etherscan.js.map +0 -1
- package/lib.commonjs/providers/provider-infura.d.ts +0 -101
- package/lib.commonjs/providers/provider-infura.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-infura.js +0 -206
- package/lib.commonjs/providers/provider-infura.js.map +0 -1
- package/lib.commonjs/providers/provider-pocket.d.ts +0 -54
- package/lib.commonjs/providers/provider-pocket.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-pocket.js +0 -109
- package/lib.commonjs/providers/provider-pocket.js.map +0 -1
- package/lib.commonjs/providers/provider-quicknode.d.ts +0 -59
- package/lib.commonjs/providers/provider-quicknode.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-quicknode.js +0 -163
- package/lib.commonjs/providers/provider-quicknode.js.map +0 -1
- package/lib.commonjs/wallet/hdwallet.d.ts +0 -248
- package/lib.commonjs/wallet/hdwallet.d.ts.map +0 -1
- package/lib.commonjs/wallet/hdwallet.js +0 -505
- package/lib.commonjs/wallet/hdwallet.js.map +0 -1
- package/lib.commonjs/wallet/json-crowdsale.d.ts +0 -27
- package/lib.commonjs/wallet/json-crowdsale.d.ts.map +0 -1
- package/lib.commonjs/wallet/json-crowdsale.js +0 -60
- package/lib.commonjs/wallet/json-crowdsale.js.map +0 -1
- package/lib.commonjs/wallet/mnemonic.d.ts +0 -65
- package/lib.commonjs/wallet/mnemonic.d.ts.map +0 -1
- package/lib.commonjs/wallet/mnemonic.js +0 -169
- package/lib.commonjs/wallet/mnemonic.js.map +0 -1
- package/lib.commonjs/wallet/seedwallet.d.ts +0 -4
- package/lib.commonjs/wallet/seedwallet.d.ts.map +0 -1
- package/lib.commonjs/wallet/seedwallet.js +0 -8
- package/lib.commonjs/wallet/seedwallet.js.map +0 -1
- package/lib.esm/providers/provider-alchemy.d.ts +0 -50
- package/lib.esm/providers/provider-alchemy.d.ts.map +0 -1
- package/lib.esm/providers/provider-alchemy.js +0 -147
- package/lib.esm/providers/provider-alchemy.js.map +0 -1
- package/lib.esm/providers/provider-ankr.d.ts +0 -61
- package/lib.esm/providers/provider-ankr.d.ts.map +0 -1
- package/lib.esm/providers/provider-ankr.js +0 -133
- package/lib.esm/providers/provider-ankr.js.map +0 -1
- package/lib.esm/providers/provider-blockscout.d.ts +0 -59
- package/lib.esm/providers/provider-blockscout.d.ts.map +0 -1
- package/lib.esm/providers/provider-blockscout.js +0 -141
- package/lib.esm/providers/provider-blockscout.js.map +0 -1
- package/lib.esm/providers/provider-chainstack.d.ts +0 -46
- package/lib.esm/providers/provider-chainstack.d.ts.map +0 -1
- package/lib.esm/providers/provider-chainstack.js +0 -98
- package/lib.esm/providers/provider-chainstack.js.map +0 -1
- package/lib.esm/providers/provider-cloudflare.d.ts +0 -14
- package/lib.esm/providers/provider-cloudflare.d.ts.map +0 -1
- package/lib.esm/providers/provider-cloudflare.js +0 -22
- package/lib.esm/providers/provider-cloudflare.js.map +0 -1
- package/lib.esm/providers/provider-etherscan.d.ts +0 -147
- package/lib.esm/providers/provider-etherscan.d.ts.map +0 -1
- package/lib.esm/providers/provider-etherscan.js +0 -584
- package/lib.esm/providers/provider-etherscan.js.map +0 -1
- package/lib.esm/providers/provider-infura.d.ts +0 -101
- package/lib.esm/providers/provider-infura.d.ts.map +0 -1
- package/lib.esm/providers/provider-infura.js +0 -201
- package/lib.esm/providers/provider-infura.js.map +0 -1
- package/lib.esm/providers/provider-pocket.d.ts +0 -54
- package/lib.esm/providers/provider-pocket.d.ts.map +0 -1
- package/lib.esm/providers/provider-pocket.js +0 -105
- package/lib.esm/providers/provider-pocket.js.map +0 -1
- package/lib.esm/providers/provider-quicknode.d.ts +0 -59
- package/lib.esm/providers/provider-quicknode.d.ts.map +0 -1
- package/lib.esm/providers/provider-quicknode.js +0 -159
- package/lib.esm/providers/provider-quicknode.js.map +0 -1
- package/lib.esm/wallet/hdwallet.d.ts +0 -248
- package/lib.esm/wallet/hdwallet.d.ts.map +0 -1
- package/lib.esm/wallet/hdwallet.js +0 -498
- package/lib.esm/wallet/hdwallet.js.map +0 -1
- package/lib.esm/wallet/json-crowdsale.d.ts +0 -27
- package/lib.esm/wallet/json-crowdsale.d.ts.map +0 -1
- package/lib.esm/wallet/json-crowdsale.js +0 -55
- package/lib.esm/wallet/json-crowdsale.js.map +0 -1
- package/lib.esm/wallet/mnemonic.d.ts +0 -65
- package/lib.esm/wallet/mnemonic.d.ts.map +0 -1
- package/lib.esm/wallet/mnemonic.js +0 -165
- package/lib.esm/wallet/mnemonic.js.map +0 -1
- package/lib.esm/wallet/seedwallet.d.ts +0 -4
- package/lib.esm/wallet/seedwallet.d.ts.map +0 -1
- package/lib.esm/wallet/seedwallet.js +0 -4
- package/lib.esm/wallet/seedwallet.js.map +0 -1
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
import { defineProperties } from "../utils/index.js";
|
|
2
|
-
import { AbstractSigner } from "./abstract-signer.js";
|
|
3
|
-
|
|
4
|
-
import type { TypedDataDomain, TypedDataField } from "../hash/index.js";
|
|
5
|
-
|
|
6
|
-
import type {
|
|
7
|
-
BlockTag, Provider, TransactionRequest, TransactionResponse
|
|
8
|
-
} from "./provider.js";
|
|
9
|
-
import type { Signer } from "./signer.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* A **NonceManager** wraps another [[Signer]] and automatically manages
|
|
14
|
-
* the nonce, ensuring serialized and sequential nonces are used during
|
|
15
|
-
* transaction.
|
|
16
|
-
*/
|
|
17
|
-
export class NonceManager extends AbstractSigner {
|
|
18
|
-
/**
|
|
19
|
-
* The Signer being managed.
|
|
20
|
-
*/
|
|
21
|
-
signer!: Signer;
|
|
22
|
-
|
|
23
|
-
#noncePromise: null | Promise<number>;
|
|
24
|
-
#delta: number;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Creates a new **NonceManager** to manage %%signer%%.
|
|
28
|
-
*/
|
|
29
|
-
constructor(signer: Signer) {
|
|
30
|
-
super(signer.provider);
|
|
31
|
-
defineProperties<NonceManager>(this, { signer });
|
|
32
|
-
|
|
33
|
-
this.#noncePromise = null;
|
|
34
|
-
this.#delta = 0;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async getAddress(): Promise<string> {
|
|
38
|
-
return this.signer.getAddress();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
connect(provider: null | Provider): NonceManager {
|
|
42
|
-
return new NonceManager(this.signer.connect(provider));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async getNonce(blockTag?: BlockTag): Promise<number> {
|
|
46
|
-
if (blockTag === "pending") {
|
|
47
|
-
if (this.#noncePromise == null) {
|
|
48
|
-
this.#noncePromise = super.getNonce("pending");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const delta = this.#delta;
|
|
52
|
-
return (await this.#noncePromise) + delta;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return super.getNonce(blockTag);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Manually increment the nonce. This may be useful when managng
|
|
60
|
-
* offline transactions.
|
|
61
|
-
*/
|
|
62
|
-
increment(): void {
|
|
63
|
-
this.#delta++;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Resets the nonce, causing the **NonceManager** to reload the current
|
|
68
|
-
* nonce from the blockchain on the next transaction.
|
|
69
|
-
*/
|
|
70
|
-
reset(): void {
|
|
71
|
-
this.#delta = 0;
|
|
72
|
-
this.#noncePromise = null;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {
|
|
76
|
-
const noncePromise = this.getNonce("pending");
|
|
77
|
-
this.increment();
|
|
78
|
-
|
|
79
|
-
tx = await this.signer.populateTransaction(tx);
|
|
80
|
-
tx.nonce = await noncePromise;
|
|
81
|
-
|
|
82
|
-
// @TODO: Maybe handle interesting/recoverable errors?
|
|
83
|
-
// Like don't increment if the tx was certainly not sent
|
|
84
|
-
return await this.signer.sendTransaction(tx);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
signTransaction(tx: TransactionRequest): Promise<string> {
|
|
88
|
-
return this.signer.signTransaction(tx);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
signMessage(message: string | Uint8Array): Promise<string> {
|
|
92
|
-
return this.signer.signMessage(message);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {
|
|
96
|
-
return this.signer.signTypedData(domain, types, value);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
1
|
+
import { defineProperties } from "../utils/index.js";
|
|
2
|
+
import { AbstractSigner } from "./abstract-signer.js";
|
|
3
|
+
|
|
4
|
+
import type { TypedDataDomain, TypedDataField } from "../hash/index.js";
|
|
5
|
+
|
|
6
|
+
import type {
|
|
7
|
+
BlockTag, Provider, TransactionRequest, TransactionResponse
|
|
8
|
+
} from "./provider.js";
|
|
9
|
+
import type { Signer } from "./signer.js";
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A **NonceManager** wraps another [[Signer]] and automatically manages
|
|
14
|
+
* the nonce, ensuring serialized and sequential nonces are used during
|
|
15
|
+
* transaction.
|
|
16
|
+
*/
|
|
17
|
+
export class NonceManager extends AbstractSigner {
|
|
18
|
+
/**
|
|
19
|
+
* The Signer being managed.
|
|
20
|
+
*/
|
|
21
|
+
signer!: Signer;
|
|
22
|
+
|
|
23
|
+
#noncePromise: null | Promise<number>;
|
|
24
|
+
#delta: number;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new **NonceManager** to manage %%signer%%.
|
|
28
|
+
*/
|
|
29
|
+
constructor(signer: Signer) {
|
|
30
|
+
super(signer.provider);
|
|
31
|
+
defineProperties<NonceManager>(this, { signer });
|
|
32
|
+
|
|
33
|
+
this.#noncePromise = null;
|
|
34
|
+
this.#delta = 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async getAddress(): Promise<string> {
|
|
38
|
+
return this.signer.getAddress();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
connect(provider: null | Provider): NonceManager {
|
|
42
|
+
return new NonceManager(this.signer.connect(provider));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async getNonce(blockTag?: BlockTag): Promise<number> {
|
|
46
|
+
if (blockTag === "pending") {
|
|
47
|
+
if (this.#noncePromise == null) {
|
|
48
|
+
this.#noncePromise = super.getNonce("pending");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const delta = this.#delta;
|
|
52
|
+
return (await this.#noncePromise) + delta;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return super.getNonce(blockTag);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Manually increment the nonce. This may be useful when managng
|
|
60
|
+
* offline transactions.
|
|
61
|
+
*/
|
|
62
|
+
increment(): void {
|
|
63
|
+
this.#delta++;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Resets the nonce, causing the **NonceManager** to reload the current
|
|
68
|
+
* nonce from the blockchain on the next transaction.
|
|
69
|
+
*/
|
|
70
|
+
reset(): void {
|
|
71
|
+
this.#delta = 0;
|
|
72
|
+
this.#noncePromise = null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {
|
|
76
|
+
const noncePromise = this.getNonce("pending");
|
|
77
|
+
this.increment();
|
|
78
|
+
|
|
79
|
+
tx = await this.signer.populateTransaction(tx);
|
|
80
|
+
tx.nonce = await noncePromise;
|
|
81
|
+
|
|
82
|
+
// @TODO: Maybe handle interesting/recoverable errors?
|
|
83
|
+
// Like don't increment if the tx was certainly not sent
|
|
84
|
+
return await this.signer.sendTransaction(tx);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
signTransaction(tx: TransactionRequest): Promise<string> {
|
|
88
|
+
return this.signer.signTransaction(tx);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
signMessage(message: string | Uint8Array): Promise<string> {
|
|
92
|
+
return this.signer.signMessage(message);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {
|
|
96
|
+
return this.signer.signTypedData(domain, types, value);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
|
|
2
|
-
import type { Addressable, NameResolver } from "../address/index.js";
|
|
3
|
-
import type {
|
|
4
|
-
AuthorizationRequest, TypedDataDomain, TypedDataField
|
|
5
|
-
} from "../hash/index.js";
|
|
6
|
-
import type { Authorization, TransactionLike } from "../transaction/index.js";
|
|
7
|
-
|
|
8
|
-
import type { ContractRunner } from "./contracts.js";
|
|
9
|
-
import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* A Signer represents an account on the Ethereum Blockchain, and is most often
|
|
13
|
-
* backed by a private key represented by a mnemonic or residing on a Hardware Wallet.
|
|
14
|
-
*
|
|
15
|
-
* The API remains abstract though, so that it can deal with more advanced exotic
|
|
16
|
-
* Signing entities, such as Smart Contract Wallets or Virtual Wallets (where the
|
|
17
|
-
* private key may not be known).
|
|
18
|
-
*/
|
|
19
|
-
export interface Signer extends Addressable, ContractRunner, NameResolver {
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The [[Provider]] attached to this Signer (if any).
|
|
23
|
-
*/
|
|
24
|
-
provider: null | Provider;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Returns a new instance of this Signer connected to //provider// or detached
|
|
28
|
-
* from any Provider if null.
|
|
29
|
-
*/
|
|
30
|
-
connect(provider: null | Provider): Signer;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
////////////////////
|
|
34
|
-
// State
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Get the address of the Signer.
|
|
38
|
-
*/
|
|
39
|
-
getAddress(): Promise<string>;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Gets the next nonce required for this Signer to send a transaction.
|
|
43
|
-
*
|
|
44
|
-
* @param blockTag - The blocktag to base the transaction count on, keep in mind
|
|
45
|
-
* many nodes do not honour this value and silently ignore it [default: ``"latest"``]
|
|
46
|
-
*/
|
|
47
|
-
getNonce(blockTag?: BlockTag): Promise<number>;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
////////////////////
|
|
51
|
-
// Preparation
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Prepares a {@link TransactionRequest} for calling:
|
|
55
|
-
* - resolves ``to`` and ``from`` addresses
|
|
56
|
-
* - if ``from`` is specified , check that it matches this Signer
|
|
57
|
-
*
|
|
58
|
-
* @param tx - The call to prepare
|
|
59
|
-
*/
|
|
60
|
-
populateCall(tx: TransactionRequest): Promise<TransactionLike<string>>;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Prepares a {@link TransactionRequest} for sending to the network by
|
|
64
|
-
* populating any missing properties:
|
|
65
|
-
* - resolves ``to`` and ``from`` addresses
|
|
66
|
-
* - if ``from`` is specified , check that it matches this Signer
|
|
67
|
-
* - populates ``nonce`` via ``signer.getNonce("pending")``
|
|
68
|
-
* - populates ``gasLimit`` via ``signer.estimateGas(tx)``
|
|
69
|
-
* - populates ``chainId`` via ``signer.provider.getNetwork()``
|
|
70
|
-
* - populates ``type`` and relevant fee data for that type (``gasPrice``
|
|
71
|
-
* for legacy transactions, ``maxFeePerGas`` for EIP-1559, etc)
|
|
72
|
-
*
|
|
73
|
-
* @note Some Signer implementations may skip populating properties that
|
|
74
|
-
* are populated downstream; for example JsonRpcSigner defers to the
|
|
75
|
-
* node to populate the nonce and fee data.
|
|
76
|
-
*
|
|
77
|
-
* @param tx - The call to prepare
|
|
78
|
-
*/
|
|
79
|
-
populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>>;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
////////////////////
|
|
83
|
-
// Execution
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Estimates the required gas required to execute //tx// on the Blockchain. This
|
|
87
|
-
* will be the expected amount a transaction will require as its ``gasLimit``
|
|
88
|
-
* to successfully run all the necessary computations and store the needed state
|
|
89
|
-
* that the transaction intends.
|
|
90
|
-
*
|
|
91
|
-
* Keep in mind that this is **best efforts**, since the state of the Blockchain
|
|
92
|
-
* is in flux, which could affect transaction gas requirements.
|
|
93
|
-
*
|
|
94
|
-
* @throws UNPREDICTABLE_GAS_LIMIT A transaction that is believed by the node to likely
|
|
95
|
-
* fail will throw an error during gas estimation. This could indicate that it
|
|
96
|
-
* will actually fail or that the circumstances are simply too complex for the
|
|
97
|
-
* node to take into account. In these cases, a manually determined ``gasLimit``
|
|
98
|
-
* will need to be made.
|
|
99
|
-
*/
|
|
100
|
-
estimateGas(tx: TransactionRequest): Promise<bigint>;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Evaluates the //tx// by running it against the current Blockchain state. This
|
|
104
|
-
* cannot change state and has no cost in ether, as it is effectively simulating
|
|
105
|
-
* execution.
|
|
106
|
-
*
|
|
107
|
-
* This can be used to have the Blockchain perform computations based on its state
|
|
108
|
-
* (e.g. running a Contract's getters) or to simulate the effect of a transaction
|
|
109
|
-
* before actually performing an operation.
|
|
110
|
-
*/
|
|
111
|
-
call(tx: TransactionRequest): Promise<string>;
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Resolves an ENS Name to an address.
|
|
115
|
-
*/
|
|
116
|
-
resolveName(name: string): Promise<null | string>;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
////////////////////
|
|
120
|
-
// Signing
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Signs %%tx%%, returning the fully signed transaction. This does not
|
|
124
|
-
* populate any additional properties within the transaction.
|
|
125
|
-
*/
|
|
126
|
-
signTransaction(tx: TransactionRequest): Promise<string>;
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Sends %%tx%% to the Network. The ``signer.populateTransaction(tx)``
|
|
130
|
-
* is called first to ensure all necessary properties for the
|
|
131
|
-
* transaction to be valid have been popualted first.
|
|
132
|
-
*/
|
|
133
|
-
sendTransaction(tx: TransactionRequest): Promise<TransactionResponse>;
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Signs an [[link-eip-191]] prefixed personal message.
|
|
137
|
-
*
|
|
138
|
-
* If the %%message%% is a string, it is signed as UTF-8 encoded bytes. It is **not**
|
|
139
|
-
* interpretted as a [[BytesLike]]; so the string ``"0x1234"`` is signed as six
|
|
140
|
-
* characters, **not** two bytes.
|
|
141
|
-
*
|
|
142
|
-
* To sign that example as two bytes, the Uint8Array should be used
|
|
143
|
-
* (i.e. ``new Uint8Array([ 0x12, 0x34 ])``).
|
|
144
|
-
*/
|
|
145
|
-
signMessage(message: string | Uint8Array): Promise<string>;
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Signs the [[link-eip-712]] typed data.
|
|
149
|
-
*/
|
|
150
|
-
signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Prepares an [[AuthorizationRequest]] for authorization by
|
|
154
|
-
* populating any missing properties:
|
|
155
|
-
* - resolves ``address`` (if an Addressable or ENS name)
|
|
156
|
-
* - populates ``nonce`` via ``signer.getNonce("pending")``
|
|
157
|
-
* - populates ``chainId`` via ``signer.provider.getNetwork()``
|
|
158
|
-
*/
|
|
159
|
-
populateAuthorization(auth: AuthorizationRequest): Promise<AuthorizationRequest>;
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Signs an %%authorization%% to be used in [[link-eip-7702]]
|
|
163
|
-
* transactions.
|
|
164
|
-
*/
|
|
165
|
-
authorize(authorization: AuthorizationRequest): Promise<Authorization>;
|
|
166
|
-
}
|
|
1
|
+
|
|
2
|
+
import type { Addressable, NameResolver } from "../address/index.js";
|
|
3
|
+
import type {
|
|
4
|
+
AuthorizationRequest, TypedDataDomain, TypedDataField
|
|
5
|
+
} from "../hash/index.js";
|
|
6
|
+
import type { Authorization, TransactionLike } from "../transaction/index.js";
|
|
7
|
+
|
|
8
|
+
import type { ContractRunner } from "./contracts.js";
|
|
9
|
+
import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A Signer represents an account on the Ethereum Blockchain, and is most often
|
|
13
|
+
* backed by a private key represented by a mnemonic or residing on a Hardware Wallet.
|
|
14
|
+
*
|
|
15
|
+
* The API remains abstract though, so that it can deal with more advanced exotic
|
|
16
|
+
* Signing entities, such as Smart Contract Wallets or Virtual Wallets (where the
|
|
17
|
+
* private key may not be known).
|
|
18
|
+
*/
|
|
19
|
+
export interface Signer extends Addressable, ContractRunner, NameResolver {
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The [[Provider]] attached to this Signer (if any).
|
|
23
|
+
*/
|
|
24
|
+
provider: null | Provider;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Returns a new instance of this Signer connected to //provider// or detached
|
|
28
|
+
* from any Provider if null.
|
|
29
|
+
*/
|
|
30
|
+
connect(provider: null | Provider): Signer;
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
////////////////////
|
|
34
|
+
// State
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get the address of the Signer.
|
|
38
|
+
*/
|
|
39
|
+
getAddress(): Promise<string>;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Gets the next nonce required for this Signer to send a transaction.
|
|
43
|
+
*
|
|
44
|
+
* @param blockTag - The blocktag to base the transaction count on, keep in mind
|
|
45
|
+
* many nodes do not honour this value and silently ignore it [default: ``"latest"``]
|
|
46
|
+
*/
|
|
47
|
+
getNonce(blockTag?: BlockTag): Promise<number>;
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
////////////////////
|
|
51
|
+
// Preparation
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Prepares a {@link TransactionRequest} for calling:
|
|
55
|
+
* - resolves ``to`` and ``from`` addresses
|
|
56
|
+
* - if ``from`` is specified , check that it matches this Signer
|
|
57
|
+
*
|
|
58
|
+
* @param tx - The call to prepare
|
|
59
|
+
*/
|
|
60
|
+
populateCall(tx: TransactionRequest): Promise<TransactionLike<string>>;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Prepares a {@link TransactionRequest} for sending to the network by
|
|
64
|
+
* populating any missing properties:
|
|
65
|
+
* - resolves ``to`` and ``from`` addresses
|
|
66
|
+
* - if ``from`` is specified , check that it matches this Signer
|
|
67
|
+
* - populates ``nonce`` via ``signer.getNonce("pending")``
|
|
68
|
+
* - populates ``gasLimit`` via ``signer.estimateGas(tx)``
|
|
69
|
+
* - populates ``chainId`` via ``signer.provider.getNetwork()``
|
|
70
|
+
* - populates ``type`` and relevant fee data for that type (``gasPrice``
|
|
71
|
+
* for legacy transactions, ``maxFeePerGas`` for EIP-1559, etc)
|
|
72
|
+
*
|
|
73
|
+
* @note Some Signer implementations may skip populating properties that
|
|
74
|
+
* are populated downstream; for example JsonRpcSigner defers to the
|
|
75
|
+
* node to populate the nonce and fee data.
|
|
76
|
+
*
|
|
77
|
+
* @param tx - The call to prepare
|
|
78
|
+
*/
|
|
79
|
+
populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>>;
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
////////////////////
|
|
83
|
+
// Execution
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Estimates the required gas required to execute //tx// on the Blockchain. This
|
|
87
|
+
* will be the expected amount a transaction will require as its ``gasLimit``
|
|
88
|
+
* to successfully run all the necessary computations and store the needed state
|
|
89
|
+
* that the transaction intends.
|
|
90
|
+
*
|
|
91
|
+
* Keep in mind that this is **best efforts**, since the state of the Blockchain
|
|
92
|
+
* is in flux, which could affect transaction gas requirements.
|
|
93
|
+
*
|
|
94
|
+
* @throws UNPREDICTABLE_GAS_LIMIT A transaction that is believed by the node to likely
|
|
95
|
+
* fail will throw an error during gas estimation. This could indicate that it
|
|
96
|
+
* will actually fail or that the circumstances are simply too complex for the
|
|
97
|
+
* node to take into account. In these cases, a manually determined ``gasLimit``
|
|
98
|
+
* will need to be made.
|
|
99
|
+
*/
|
|
100
|
+
estimateGas(tx: TransactionRequest): Promise<bigint>;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Evaluates the //tx// by running it against the current Blockchain state. This
|
|
104
|
+
* cannot change state and has no cost in ether, as it is effectively simulating
|
|
105
|
+
* execution.
|
|
106
|
+
*
|
|
107
|
+
* This can be used to have the Blockchain perform computations based on its state
|
|
108
|
+
* (e.g. running a Contract's getters) or to simulate the effect of a transaction
|
|
109
|
+
* before actually performing an operation.
|
|
110
|
+
*/
|
|
111
|
+
call(tx: TransactionRequest): Promise<string>;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Resolves an ENS Name to an address.
|
|
115
|
+
*/
|
|
116
|
+
resolveName(name: string): Promise<null | string>;
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
////////////////////
|
|
120
|
+
// Signing
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Signs %%tx%%, returning the fully signed transaction. This does not
|
|
124
|
+
* populate any additional properties within the transaction.
|
|
125
|
+
*/
|
|
126
|
+
signTransaction(tx: TransactionRequest): Promise<string>;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Sends %%tx%% to the Network. The ``signer.populateTransaction(tx)``
|
|
130
|
+
* is called first to ensure all necessary properties for the
|
|
131
|
+
* transaction to be valid have been popualted first.
|
|
132
|
+
*/
|
|
133
|
+
sendTransaction(tx: TransactionRequest): Promise<TransactionResponse>;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Signs an [[link-eip-191]] prefixed personal message.
|
|
137
|
+
*
|
|
138
|
+
* If the %%message%% is a string, it is signed as UTF-8 encoded bytes. It is **not**
|
|
139
|
+
* interpretted as a [[BytesLike]]; so the string ``"0x1234"`` is signed as six
|
|
140
|
+
* characters, **not** two bytes.
|
|
141
|
+
*
|
|
142
|
+
* To sign that example as two bytes, the Uint8Array should be used
|
|
143
|
+
* (i.e. ``new Uint8Array([ 0x12, 0x34 ])``).
|
|
144
|
+
*/
|
|
145
|
+
signMessage(message: string | Uint8Array): Promise<string>;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Signs the [[link-eip-712]] typed data.
|
|
149
|
+
*/
|
|
150
|
+
signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Prepares an [[AuthorizationRequest]] for authorization by
|
|
154
|
+
* populating any missing properties:
|
|
155
|
+
* - resolves ``address`` (if an Addressable or ENS name)
|
|
156
|
+
* - populates ``nonce`` via ``signer.getNonce("pending")``
|
|
157
|
+
* - populates ``chainId`` via ``signer.provider.getNetwork()``
|
|
158
|
+
*/
|
|
159
|
+
populateAuthorization(auth: AuthorizationRequest): Promise<AuthorizationRequest>;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Signs an %%authorization%% to be used in [[link-eip-7702]]
|
|
163
|
+
* transactions.
|
|
164
|
+
*/
|
|
165
|
+
authorize(authorization: AuthorizationRequest): Promise<Authorization>;
|
|
166
|
+
}
|