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
package/src.ts/utils/uuid.ts
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explain UUID and link to RFC here.
|
|
3
|
-
*
|
|
4
|
-
* @_subsection: api/utils:UUID [about-uuid]
|
|
5
|
-
*/
|
|
6
|
-
import { getBytes, hexlify } from "./data.js";
|
|
7
|
-
|
|
8
|
-
import type { BytesLike } from "./index.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Returns the version 4 [[link-uuid]] for the %%randomBytes%%.
|
|
12
|
-
*
|
|
13
|
-
* @see: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)
|
|
14
|
-
*/
|
|
15
|
-
export function uuidV4(randomBytes: BytesLike): string {
|
|
16
|
-
const bytes = getBytes(randomBytes, "randomBytes");
|
|
17
|
-
|
|
18
|
-
// Section: 4.1.3:
|
|
19
|
-
// - time_hi_and_version[12:16] = 0b0100
|
|
20
|
-
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
21
|
-
|
|
22
|
-
// Section 4.4
|
|
23
|
-
// - clock_seq_hi_and_reserved[6] = 0b0
|
|
24
|
-
// - clock_seq_hi_and_reserved[7] = 0b1
|
|
25
|
-
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
26
|
-
|
|
27
|
-
const value = hexlify(bytes);
|
|
28
|
-
|
|
29
|
-
return [
|
|
30
|
-
value.substring(2, 10),
|
|
31
|
-
value.substring(10, 14),
|
|
32
|
-
value.substring(14, 18),
|
|
33
|
-
value.substring(18, 22),
|
|
34
|
-
value.substring(22, 34),
|
|
35
|
-
].join("-");
|
|
36
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Explain UUID and link to RFC here.
|
|
3
|
+
*
|
|
4
|
+
* @_subsection: api/utils:UUID [about-uuid]
|
|
5
|
+
*/
|
|
6
|
+
import { getBytes, hexlify } from "./data.js";
|
|
7
|
+
|
|
8
|
+
import type { BytesLike } from "./index.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Returns the version 4 [[link-uuid]] for the %%randomBytes%%.
|
|
12
|
+
*
|
|
13
|
+
* @see: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)
|
|
14
|
+
*/
|
|
15
|
+
export function uuidV4(randomBytes: BytesLike): string {
|
|
16
|
+
const bytes = getBytes(randomBytes, "randomBytes");
|
|
17
|
+
|
|
18
|
+
// Section: 4.1.3:
|
|
19
|
+
// - time_hi_and_version[12:16] = 0b0100
|
|
20
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
21
|
+
|
|
22
|
+
// Section 4.4
|
|
23
|
+
// - clock_seq_hi_and_reserved[6] = 0b0
|
|
24
|
+
// - clock_seq_hi_and_reserved[7] = 0b1
|
|
25
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
26
|
+
|
|
27
|
+
const value = hexlify(bytes);
|
|
28
|
+
|
|
29
|
+
return [
|
|
30
|
+
value.substring(2, 10),
|
|
31
|
+
value.substring(10, 14),
|
|
32
|
+
value.substring(14, 18),
|
|
33
|
+
value.substring(18, 22),
|
|
34
|
+
value.substring(22, 34),
|
|
35
|
+
].join("-");
|
|
36
|
+
}
|
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
import { getAddress, resolveAddress } from "../address/index.js";
|
|
2
|
-
import {
|
|
3
|
-
hashAuthorization, hashMessage, TypedDataEncoder
|
|
4
|
-
} from "../hash/index.js";
|
|
5
|
-
import { AbstractSigner, copyRequest } from "../providers/index.js";
|
|
6
|
-
import { computeAddress, Transaction } from "../transaction/index.js";
|
|
7
|
-
import {
|
|
8
|
-
defineProperties, getBigInt, resolveProperties, assert, assertArgument
|
|
9
|
-
} from "../utils/index.js";
|
|
10
|
-
|
|
11
|
-
import type { SigningKey } from "../crypto/index.js";
|
|
12
|
-
import type {
|
|
13
|
-
AuthorizationRequest, TypedDataDomain, TypedDataField
|
|
14
|
-
} from "../hash/index.js";
|
|
15
|
-
import type { Provider, TransactionRequest } from "../providers/index.js";
|
|
16
|
-
import type { Authorization, TransactionLike } from "../transaction/index.js";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* The **BaseWallet** is a stream-lined implementation of a
|
|
21
|
-
* [[Signer]] that operates with a private key.
|
|
22
|
-
*
|
|
23
|
-
* It is preferred to use the [[Wallet]] class, as it offers
|
|
24
|
-
* additional functionality and simplifies loading a variety
|
|
25
|
-
* of JSON formats, Mnemonic Phrases, etc.
|
|
26
|
-
*
|
|
27
|
-
* This class may be of use for those attempting to implement
|
|
28
|
-
* a minimal Signer.
|
|
29
|
-
*/
|
|
30
|
-
export class BaseWallet extends AbstractSigner {
|
|
31
|
-
/**
|
|
32
|
-
* The wallet address.
|
|
33
|
-
*/
|
|
34
|
-
readonly address!: string;
|
|
35
|
-
|
|
36
|
-
readonly #signingKey: SigningKey;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Creates a new BaseWallet for %%privateKey%%, optionally
|
|
40
|
-
* connected to %%provider%%.
|
|
41
|
-
*
|
|
42
|
-
* If %%provider%% is not specified, only offline methods can
|
|
43
|
-
* be used.
|
|
44
|
-
*/
|
|
45
|
-
constructor(privateKey: SigningKey, provider?: null | Provider) {
|
|
46
|
-
super(provider);
|
|
47
|
-
|
|
48
|
-
assertArgument(privateKey && typeof(privateKey.sign) === "function", "invalid private key", "privateKey", "[ REDACTED ]");
|
|
49
|
-
|
|
50
|
-
this.#signingKey = privateKey;
|
|
51
|
-
|
|
52
|
-
const address = computeAddress(this.signingKey.publicKey);
|
|
53
|
-
defineProperties<BaseWallet>(this, { address });
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Store private values behind getters to reduce visibility
|
|
57
|
-
// in console.log
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The [[SigningKey]] used for signing payloads.
|
|
61
|
-
*/
|
|
62
|
-
get signingKey(): SigningKey { return this.#signingKey; }
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* The private key for this wallet.
|
|
66
|
-
*/
|
|
67
|
-
get privateKey(): string { return this.signingKey.privateKey; }
|
|
68
|
-
|
|
69
|
-
async getAddress(): Promise<string> { return this.address; }
|
|
70
|
-
|
|
71
|
-
connect(provider: null | Provider): BaseWallet {
|
|
72
|
-
return new BaseWallet(this.#signingKey, provider);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async signTransaction(tx: TransactionRequest): Promise<string> {
|
|
76
|
-
tx = copyRequest(tx);
|
|
77
|
-
|
|
78
|
-
// Replace any Addressable or ENS name with an address
|
|
79
|
-
const { to, from } = await resolveProperties({
|
|
80
|
-
to: (tx.to ? resolveAddress(tx.to, this): undefined),
|
|
81
|
-
from: (tx.from ? resolveAddress(tx.from, this): undefined)
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
if (to != null) { tx.to = to; }
|
|
85
|
-
if (from != null) { tx.from = from; }
|
|
86
|
-
|
|
87
|
-
if (tx.from != null) {
|
|
88
|
-
assertArgument(getAddress(<string>(tx.from)) === this.address,
|
|
89
|
-
"transaction from address mismatch", "tx.from", tx.from);
|
|
90
|
-
delete tx.from;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Build the transaction
|
|
94
|
-
const btx = Transaction.from(<TransactionLike<string>>tx);
|
|
95
|
-
btx.signature = this.signingKey.sign(btx.unsignedHash);
|
|
96
|
-
|
|
97
|
-
return btx.serialized;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
async signMessage(message: string | Uint8Array): Promise<string> {
|
|
101
|
-
return this.signMessageSync(message);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// @TODO: Add a secialized signTx and signTyped sync that enforces
|
|
105
|
-
// all parameters are known?
|
|
106
|
-
/**
|
|
107
|
-
* Returns the signature for %%message%% signed with this wallet.
|
|
108
|
-
*/
|
|
109
|
-
signMessageSync(message: string | Uint8Array): string {
|
|
110
|
-
return this.signingKey.sign(hashMessage(message)).serialized;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Returns the Authorization for %%auth%%.
|
|
115
|
-
*/
|
|
116
|
-
authorizeSync(auth: AuthorizationRequest): Authorization {
|
|
117
|
-
assertArgument(typeof(auth.address) === "string",
|
|
118
|
-
"invalid address for authorizeSync", "auth.address", auth);
|
|
119
|
-
|
|
120
|
-
const signature = this.signingKey.sign(hashAuthorization(auth));
|
|
121
|
-
return Object.assign({ }, {
|
|
122
|
-
address: getAddress(auth.address),
|
|
123
|
-
nonce: getBigInt(auth.nonce || 0),
|
|
124
|
-
chainId: getBigInt(auth.chainId || 0),
|
|
125
|
-
}, { signature });
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Resolves to the Authorization for %%auth%%.
|
|
130
|
-
*/
|
|
131
|
-
async authorize(auth: AuthorizationRequest): Promise<Authorization> {
|
|
132
|
-
auth = Object.assign({ }, auth, {
|
|
133
|
-
address: await resolveAddress(auth.address, this)
|
|
134
|
-
});
|
|
135
|
-
return this.authorizeSync(await this.populateAuthorization(auth));
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {
|
|
139
|
-
|
|
140
|
-
// Populate any ENS names
|
|
141
|
-
const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name: string) => {
|
|
142
|
-
// @TODO: this should use resolveName; addresses don't
|
|
143
|
-
// need a provider
|
|
144
|
-
|
|
145
|
-
assert(this.provider != null, "cannot resolve ENS names without a provider", "UNSUPPORTED_OPERATION", {
|
|
146
|
-
operation: "resolveName",
|
|
147
|
-
info: { name }
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
const address = await this.provider.resolveName(name);
|
|
151
|
-
assert(address != null, "unconfigured ENS name", "UNCONFIGURED_NAME", {
|
|
152
|
-
value: name
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
return address;
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
1
|
+
import { getAddress, resolveAddress } from "../address/index.js";
|
|
2
|
+
import {
|
|
3
|
+
hashAuthorization, hashMessage, TypedDataEncoder
|
|
4
|
+
} from "../hash/index.js";
|
|
5
|
+
import { AbstractSigner, copyRequest } from "../providers/index.js";
|
|
6
|
+
import { computeAddress, Transaction } from "../transaction/index.js";
|
|
7
|
+
import {
|
|
8
|
+
defineProperties, getBigInt, resolveProperties, assert, assertArgument
|
|
9
|
+
} from "../utils/index.js";
|
|
10
|
+
|
|
11
|
+
import type { SigningKey } from "../crypto/index.js";
|
|
12
|
+
import type {
|
|
13
|
+
AuthorizationRequest, TypedDataDomain, TypedDataField
|
|
14
|
+
} from "../hash/index.js";
|
|
15
|
+
import type { Provider, TransactionRequest } from "../providers/index.js";
|
|
16
|
+
import type { Authorization, TransactionLike } from "../transaction/index.js";
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The **BaseWallet** is a stream-lined implementation of a
|
|
21
|
+
* [[Signer]] that operates with a private key.
|
|
22
|
+
*
|
|
23
|
+
* It is preferred to use the [[Wallet]] class, as it offers
|
|
24
|
+
* additional functionality and simplifies loading a variety
|
|
25
|
+
* of JSON formats, Mnemonic Phrases, etc.
|
|
26
|
+
*
|
|
27
|
+
* This class may be of use for those attempting to implement
|
|
28
|
+
* a minimal Signer.
|
|
29
|
+
*/
|
|
30
|
+
export class BaseWallet extends AbstractSigner {
|
|
31
|
+
/**
|
|
32
|
+
* The wallet address.
|
|
33
|
+
*/
|
|
34
|
+
readonly address!: string;
|
|
35
|
+
|
|
36
|
+
readonly #signingKey: SigningKey;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new BaseWallet for %%privateKey%%, optionally
|
|
40
|
+
* connected to %%provider%%.
|
|
41
|
+
*
|
|
42
|
+
* If %%provider%% is not specified, only offline methods can
|
|
43
|
+
* be used.
|
|
44
|
+
*/
|
|
45
|
+
constructor(privateKey: SigningKey, provider?: null | Provider) {
|
|
46
|
+
super(provider);
|
|
47
|
+
|
|
48
|
+
assertArgument(privateKey && typeof(privateKey.sign) === "function", "invalid private key", "privateKey", "[ REDACTED ]");
|
|
49
|
+
|
|
50
|
+
this.#signingKey = privateKey;
|
|
51
|
+
|
|
52
|
+
const address = computeAddress(this.signingKey.publicKey);
|
|
53
|
+
defineProperties<BaseWallet>(this, { address });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Store private values behind getters to reduce visibility
|
|
57
|
+
// in console.log
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The [[SigningKey]] used for signing payloads.
|
|
61
|
+
*/
|
|
62
|
+
get signingKey(): SigningKey { return this.#signingKey; }
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The private key for this wallet.
|
|
66
|
+
*/
|
|
67
|
+
get privateKey(): string { return this.signingKey.privateKey; }
|
|
68
|
+
|
|
69
|
+
async getAddress(): Promise<string> { return this.address; }
|
|
70
|
+
|
|
71
|
+
connect(provider: null | Provider): BaseWallet {
|
|
72
|
+
return new BaseWallet(this.#signingKey, provider);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async signTransaction(tx: TransactionRequest): Promise<string> {
|
|
76
|
+
tx = copyRequest(tx);
|
|
77
|
+
|
|
78
|
+
// Replace any Addressable or ENS name with an address
|
|
79
|
+
const { to, from } = await resolveProperties({
|
|
80
|
+
to: (tx.to ? resolveAddress(tx.to, this): undefined),
|
|
81
|
+
from: (tx.from ? resolveAddress(tx.from, this): undefined)
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
if (to != null) { tx.to = to; }
|
|
85
|
+
if (from != null) { tx.from = from; }
|
|
86
|
+
|
|
87
|
+
if (tx.from != null) {
|
|
88
|
+
assertArgument(getAddress(<string>(tx.from)) === this.address,
|
|
89
|
+
"transaction from address mismatch", "tx.from", tx.from);
|
|
90
|
+
delete tx.from;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Build the transaction
|
|
94
|
+
const btx = Transaction.from(<TransactionLike<string>>tx);
|
|
95
|
+
btx.signature = this.signingKey.sign(btx.unsignedHash);
|
|
96
|
+
|
|
97
|
+
return btx.serialized;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async signMessage(message: string | Uint8Array): Promise<string> {
|
|
101
|
+
return this.signMessageSync(message);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// @TODO: Add a secialized signTx and signTyped sync that enforces
|
|
105
|
+
// all parameters are known?
|
|
106
|
+
/**
|
|
107
|
+
* Returns the signature for %%message%% signed with this wallet.
|
|
108
|
+
*/
|
|
109
|
+
signMessageSync(message: string | Uint8Array): string {
|
|
110
|
+
return this.signingKey.sign(hashMessage(message)).serialized;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Returns the Authorization for %%auth%%.
|
|
115
|
+
*/
|
|
116
|
+
authorizeSync(auth: AuthorizationRequest): Authorization {
|
|
117
|
+
assertArgument(typeof(auth.address) === "string",
|
|
118
|
+
"invalid address for authorizeSync", "auth.address", auth);
|
|
119
|
+
|
|
120
|
+
const signature = this.signingKey.sign(hashAuthorization(auth));
|
|
121
|
+
return Object.assign({ }, {
|
|
122
|
+
address: getAddress(auth.address),
|
|
123
|
+
nonce: getBigInt(auth.nonce || 0),
|
|
124
|
+
chainId: getBigInt(auth.chainId || 0),
|
|
125
|
+
}, { signature });
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Resolves to the Authorization for %%auth%%.
|
|
130
|
+
*/
|
|
131
|
+
async authorize(auth: AuthorizationRequest): Promise<Authorization> {
|
|
132
|
+
auth = Object.assign({ }, auth, {
|
|
133
|
+
address: await resolveAddress(auth.address, this)
|
|
134
|
+
});
|
|
135
|
+
return this.authorizeSync(await this.populateAuthorization(auth));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {
|
|
139
|
+
|
|
140
|
+
// Populate any ENS names
|
|
141
|
+
const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name: string) => {
|
|
142
|
+
// @TODO: this should use resolveName; addresses don't
|
|
143
|
+
// need a provider
|
|
144
|
+
|
|
145
|
+
assert(this.provider != null, "cannot resolve ENS names without a provider", "UNSUPPORTED_OPERATION", {
|
|
146
|
+
operation: "resolveName",
|
|
147
|
+
info: { name }
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
const address = await this.provider.resolveName(name);
|
|
151
|
+
assert(address != null, "unconfigured ENS name", "UNCONFIGURED_NAME", {
|
|
152
|
+
value: name
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
return address;
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;
|
|
159
|
+
}
|
|
160
|
+
}
|
package/src.ts/wallet/index.ts
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* When interacting with Ethereum, it is necessary to use a private
|
|
3
|
-
* key authenticate actions by signing a payload.
|
|
4
|
-
*
|
|
5
|
-
* Wallets are the simplest way to expose the concept of an
|
|
6
|
-
* //Externally Owner Account// (EOA) as it wraps a private key
|
|
7
|
-
* and supports high-level methods to sign common types of interaction
|
|
8
|
-
* and send transactions.
|
|
9
|
-
*
|
|
10
|
-
* The class most developers will want to use is [[Wallet]], which
|
|
11
|
-
* can load a private key directly or from any common wallet format.
|
|
12
|
-
*
|
|
13
|
-
* The [[HDNodeWallet]] can be used when it is necessary to access
|
|
14
|
-
* low-level details of how an HD wallets are derived, exported
|
|
15
|
-
* or imported.
|
|
16
|
-
*
|
|
17
|
-
* @_section: api/wallet:Wallets [about-wallets]
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
export { BaseWallet } from "./base-wallet.js";
|
|
21
|
-
|
|
22
|
-
export {
|
|
23
|
-
isKeystoreJson,
|
|
24
|
-
decryptKeystoreJsonSync, encryptKeystoreJsonSync
|
|
25
|
-
} from "./json-keystore.js";
|
|
26
|
-
|
|
27
|
-
export { Wallet } from "./wallet.js";
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
export type {
|
|
31
|
-
KeystoreAccount
|
|
32
|
-
} from "./json-keystore.js"
|
|
1
|
+
/**
|
|
2
|
+
* When interacting with Ethereum, it is necessary to use a private
|
|
3
|
+
* key authenticate actions by signing a payload.
|
|
4
|
+
*
|
|
5
|
+
* Wallets are the simplest way to expose the concept of an
|
|
6
|
+
* //Externally Owner Account// (EOA) as it wraps a private key
|
|
7
|
+
* and supports high-level methods to sign common types of interaction
|
|
8
|
+
* and send transactions.
|
|
9
|
+
*
|
|
10
|
+
* The class most developers will want to use is [[Wallet]], which
|
|
11
|
+
* can load a private key directly or from any common wallet format.
|
|
12
|
+
*
|
|
13
|
+
* The [[HDNodeWallet]] can be used when it is necessary to access
|
|
14
|
+
* low-level details of how an HD wallets are derived, exported
|
|
15
|
+
* or imported.
|
|
16
|
+
*
|
|
17
|
+
* @_section: api/wallet:Wallets [about-wallets]
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export { BaseWallet } from "./base-wallet.js";
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
isKeystoreJson,
|
|
24
|
+
decryptKeystoreJsonSync, encryptKeystoreJsonSync
|
|
25
|
+
} from "./json-keystore.js";
|
|
26
|
+
|
|
27
|
+
export { Wallet } from "./wallet.js";
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
export type {
|
|
31
|
+
KeystoreAccount
|
|
32
|
+
} from "./json-keystore.js"
|