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,104 +1,104 @@
|
|
|
1
|
-
//See: https://github.com/ethereum/wiki/wiki/RLP
|
|
2
|
-
|
|
3
|
-
import { hexlify } from "./data.js";
|
|
4
|
-
import { assert, assertArgument } from "./errors.js";
|
|
5
|
-
import { getBytes } from "./data.js";
|
|
6
|
-
|
|
7
|
-
import type { BytesLike, RlpStructuredData } from "./index.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function hexlifyByte(value: number): string {
|
|
11
|
-
let result = value.toString(16);
|
|
12
|
-
while (result.length < 2) { result = "0" + result; }
|
|
13
|
-
return "0x" + result;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {
|
|
17
|
-
let result = 0;
|
|
18
|
-
for (let i = 0; i < length; i++) {
|
|
19
|
-
result = (result * 256) + data[offset + i];
|
|
20
|
-
}
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
type Decoded = {
|
|
25
|
-
result: any;
|
|
26
|
-
consumed: number;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
function _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {
|
|
30
|
-
const result: Array<any> = [];
|
|
31
|
-
|
|
32
|
-
while (childOffset < offset + 1 + length) {
|
|
33
|
-
const decoded = _decode(data, childOffset);
|
|
34
|
-
|
|
35
|
-
result.push(decoded.result);
|
|
36
|
-
|
|
37
|
-
childOffset += decoded.consumed;
|
|
38
|
-
assert(childOffset <= offset + 1 + length, "child data too short", "BUFFER_OVERRUN", {
|
|
39
|
-
buffer: data, length, offset
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {consumed: (1 + length), result: result};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// returns { consumed: number, result: Object }
|
|
47
|
-
function _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {
|
|
48
|
-
assert(data.length !== 0, "data too short", "BUFFER_OVERRUN", {
|
|
49
|
-
buffer: data, length: 0, offset: 1
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
const checkOffset = (offset: number) => {
|
|
53
|
-
assert(offset <= data.length, "data short segment too short", "BUFFER_OVERRUN", {
|
|
54
|
-
buffer: data, length: data.length, offset
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
// Array with extra length prefix
|
|
59
|
-
if (data[offset] >= 0xf8) {
|
|
60
|
-
const lengthLength = data[offset] - 0xf7;
|
|
61
|
-
checkOffset(offset + 1 + lengthLength);
|
|
62
|
-
|
|
63
|
-
const length = unarrayifyInteger(data, offset + 1, lengthLength);
|
|
64
|
-
checkOffset(offset + 1 + lengthLength + length);
|
|
65
|
-
|
|
66
|
-
return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);
|
|
67
|
-
|
|
68
|
-
} else if (data[offset] >= 0xc0) {
|
|
69
|
-
const length = data[offset] - 0xc0;
|
|
70
|
-
checkOffset(offset + 1 + length);
|
|
71
|
-
|
|
72
|
-
return _decodeChildren(data, offset, offset + 1, length);
|
|
73
|
-
|
|
74
|
-
} else if (data[offset] >= 0xb8) {
|
|
75
|
-
const lengthLength = data[offset] - 0xb7;
|
|
76
|
-
checkOffset(offset + 1 + lengthLength);
|
|
77
|
-
|
|
78
|
-
const length = unarrayifyInteger(data, offset + 1, lengthLength);
|
|
79
|
-
checkOffset(offset + 1 + lengthLength + length);
|
|
80
|
-
|
|
81
|
-
const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));
|
|
82
|
-
return { consumed: (1 + lengthLength + length), result: result }
|
|
83
|
-
|
|
84
|
-
} else if (data[offset] >= 0x80) {
|
|
85
|
-
const length = data[offset] - 0x80;
|
|
86
|
-
checkOffset(offset + 1 + length);
|
|
87
|
-
|
|
88
|
-
const result = hexlify(data.slice(offset + 1, offset + 1 + length));
|
|
89
|
-
return { consumed: (1 + length), result: result }
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return { consumed: 1, result: hexlifyByte(data[offset]) };
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Decodes %%data%% into the structured data it represents.
|
|
97
|
-
*/
|
|
98
|
-
export function decodeRlp(_data: BytesLike): RlpStructuredData {
|
|
99
|
-
const data = getBytes(_data, "data");
|
|
100
|
-
const decoded = _decode(data, 0);
|
|
101
|
-
assertArgument(decoded.consumed === data.length, "unexpected junk after rlp payload", "data", _data);
|
|
102
|
-
return decoded.result;
|
|
103
|
-
}
|
|
104
|
-
|
|
1
|
+
//See: https://github.com/ethereum/wiki/wiki/RLP
|
|
2
|
+
|
|
3
|
+
import { hexlify } from "./data.js";
|
|
4
|
+
import { assert, assertArgument } from "./errors.js";
|
|
5
|
+
import { getBytes } from "./data.js";
|
|
6
|
+
|
|
7
|
+
import type { BytesLike, RlpStructuredData } from "./index.js";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
function hexlifyByte(value: number): string {
|
|
11
|
+
let result = value.toString(16);
|
|
12
|
+
while (result.length < 2) { result = "0" + result; }
|
|
13
|
+
return "0x" + result;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {
|
|
17
|
+
let result = 0;
|
|
18
|
+
for (let i = 0; i < length; i++) {
|
|
19
|
+
result = (result * 256) + data[offset + i];
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type Decoded = {
|
|
25
|
+
result: any;
|
|
26
|
+
consumed: number;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {
|
|
30
|
+
const result: Array<any> = [];
|
|
31
|
+
|
|
32
|
+
while (childOffset < offset + 1 + length) {
|
|
33
|
+
const decoded = _decode(data, childOffset);
|
|
34
|
+
|
|
35
|
+
result.push(decoded.result);
|
|
36
|
+
|
|
37
|
+
childOffset += decoded.consumed;
|
|
38
|
+
assert(childOffset <= offset + 1 + length, "child data too short", "BUFFER_OVERRUN", {
|
|
39
|
+
buffer: data, length, offset
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return {consumed: (1 + length), result: result};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// returns { consumed: number, result: Object }
|
|
47
|
+
function _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {
|
|
48
|
+
assert(data.length !== 0, "data too short", "BUFFER_OVERRUN", {
|
|
49
|
+
buffer: data, length: 0, offset: 1
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const checkOffset = (offset: number) => {
|
|
53
|
+
assert(offset <= data.length, "data short segment too short", "BUFFER_OVERRUN", {
|
|
54
|
+
buffer: data, length: data.length, offset
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// Array with extra length prefix
|
|
59
|
+
if (data[offset] >= 0xf8) {
|
|
60
|
+
const lengthLength = data[offset] - 0xf7;
|
|
61
|
+
checkOffset(offset + 1 + lengthLength);
|
|
62
|
+
|
|
63
|
+
const length = unarrayifyInteger(data, offset + 1, lengthLength);
|
|
64
|
+
checkOffset(offset + 1 + lengthLength + length);
|
|
65
|
+
|
|
66
|
+
return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);
|
|
67
|
+
|
|
68
|
+
} else if (data[offset] >= 0xc0) {
|
|
69
|
+
const length = data[offset] - 0xc0;
|
|
70
|
+
checkOffset(offset + 1 + length);
|
|
71
|
+
|
|
72
|
+
return _decodeChildren(data, offset, offset + 1, length);
|
|
73
|
+
|
|
74
|
+
} else if (data[offset] >= 0xb8) {
|
|
75
|
+
const lengthLength = data[offset] - 0xb7;
|
|
76
|
+
checkOffset(offset + 1 + lengthLength);
|
|
77
|
+
|
|
78
|
+
const length = unarrayifyInteger(data, offset + 1, lengthLength);
|
|
79
|
+
checkOffset(offset + 1 + lengthLength + length);
|
|
80
|
+
|
|
81
|
+
const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));
|
|
82
|
+
return { consumed: (1 + lengthLength + length), result: result }
|
|
83
|
+
|
|
84
|
+
} else if (data[offset] >= 0x80) {
|
|
85
|
+
const length = data[offset] - 0x80;
|
|
86
|
+
checkOffset(offset + 1 + length);
|
|
87
|
+
|
|
88
|
+
const result = hexlify(data.slice(offset + 1, offset + 1 + length));
|
|
89
|
+
return { consumed: (1 + length), result: result }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return { consumed: 1, result: hexlifyByte(data[offset]) };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Decodes %%data%% into the structured data it represents.
|
|
97
|
+
*/
|
|
98
|
+
export function decodeRlp(_data: BytesLike): RlpStructuredData {
|
|
99
|
+
const data = getBytes(_data, "data");
|
|
100
|
+
const decoded = _decode(data, 0);
|
|
101
|
+
assertArgument(decoded.consumed === data.length, "unexpected junk after rlp payload", "data", _data);
|
|
102
|
+
return decoded.result;
|
|
103
|
+
}
|
|
104
|
+
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
//See: https://github.com/ethereum/wiki/wiki/RLP
|
|
2
|
-
|
|
3
|
-
import { getBytes } from "./data.js";
|
|
4
|
-
|
|
5
|
-
import type { RlpStructuredDataish } from "./rlp.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function arrayifyInteger(value: number): Array<number> {
|
|
9
|
-
const result: Array<number> = [];
|
|
10
|
-
while (value) {
|
|
11
|
-
result.unshift(value & 0xff);
|
|
12
|
-
value >>= 8;
|
|
13
|
-
}
|
|
14
|
-
return result;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function _encode(object: Array<any> | string | Uint8Array): Array<number> {
|
|
18
|
-
if (Array.isArray(object)) {
|
|
19
|
-
let payload: Array<number> = [];
|
|
20
|
-
object.forEach(function(child) {
|
|
21
|
-
payload = payload.concat(_encode(child));
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
if (payload.length <= 55) {
|
|
25
|
-
payload.unshift(0xc0 + payload.length)
|
|
26
|
-
return payload;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const length = arrayifyInteger(payload.length);
|
|
30
|
-
length.unshift(0xf7 + length.length);
|
|
31
|
-
|
|
32
|
-
return length.concat(payload);
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const data: Array<number> = Array.prototype.slice.call(getBytes(object, "object"));
|
|
37
|
-
|
|
38
|
-
if (data.length === 1 && data[0] <= 0x7f) {
|
|
39
|
-
return data;
|
|
40
|
-
|
|
41
|
-
} else if (data.length <= 55) {
|
|
42
|
-
data.unshift(0x80 + data.length);
|
|
43
|
-
return data;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const length = arrayifyInteger(data.length);
|
|
47
|
-
length.unshift(0xb7 + length.length);
|
|
48
|
-
|
|
49
|
-
return length.concat(data);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const nibbles = "0123456789abcdef";
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Encodes %%object%% as an RLP-encoded [[DataHexString]].
|
|
56
|
-
*/
|
|
57
|
-
export function encodeRlp(object: RlpStructuredDataish): string {
|
|
58
|
-
let result = "0x";
|
|
59
|
-
for (const v of _encode(object)) {
|
|
60
|
-
result += nibbles[v >> 4];
|
|
61
|
-
result += nibbles[v & 0xf];
|
|
62
|
-
}
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
1
|
+
//See: https://github.com/ethereum/wiki/wiki/RLP
|
|
2
|
+
|
|
3
|
+
import { getBytes } from "./data.js";
|
|
4
|
+
|
|
5
|
+
import type { RlpStructuredDataish } from "./rlp.js";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
function arrayifyInteger(value: number): Array<number> {
|
|
9
|
+
const result: Array<number> = [];
|
|
10
|
+
while (value) {
|
|
11
|
+
result.unshift(value & 0xff);
|
|
12
|
+
value >>= 8;
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function _encode(object: Array<any> | string | Uint8Array): Array<number> {
|
|
18
|
+
if (Array.isArray(object)) {
|
|
19
|
+
let payload: Array<number> = [];
|
|
20
|
+
object.forEach(function(child) {
|
|
21
|
+
payload = payload.concat(_encode(child));
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
if (payload.length <= 55) {
|
|
25
|
+
payload.unshift(0xc0 + payload.length)
|
|
26
|
+
return payload;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const length = arrayifyInteger(payload.length);
|
|
30
|
+
length.unshift(0xf7 + length.length);
|
|
31
|
+
|
|
32
|
+
return length.concat(payload);
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const data: Array<number> = Array.prototype.slice.call(getBytes(object, "object"));
|
|
37
|
+
|
|
38
|
+
if (data.length === 1 && data[0] <= 0x7f) {
|
|
39
|
+
return data;
|
|
40
|
+
|
|
41
|
+
} else if (data.length <= 55) {
|
|
42
|
+
data.unshift(0x80 + data.length);
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const length = arrayifyInteger(data.length);
|
|
47
|
+
length.unshift(0xb7 + length.length);
|
|
48
|
+
|
|
49
|
+
return length.concat(data);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const nibbles = "0123456789abcdef";
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Encodes %%object%% as an RLP-encoded [[DataHexString]].
|
|
56
|
+
*/
|
|
57
|
+
export function encodeRlp(object: RlpStructuredDataish): string {
|
|
58
|
+
let result = "0x";
|
|
59
|
+
for (const v of _encode(object)) {
|
|
60
|
+
result += nibbles[v >> 4];
|
|
61
|
+
result += nibbles[v & 0xf];
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
package/src.ts/utils/rlp.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The [[link-rlp]] (RLP) encoding is used throughout Ethereum
|
|
3
|
-
* to serialize nested structures of Arrays and data.
|
|
4
|
-
*
|
|
5
|
-
* @_subsection api/utils:Recursive-Length Prefix [about-rlp]
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export { decodeRlp } from "./rlp-decode.js";
|
|
9
|
-
export { encodeRlp } from "./rlp-encode.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* An RLP-encoded structure.
|
|
13
|
-
*/
|
|
14
|
-
export type RlpStructuredData = string | Array<RlpStructuredData>;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* An RLP-encoded structure, which allows Uint8Array.
|
|
18
|
-
*/
|
|
19
|
-
export type RlpStructuredDataish = string | Uint8Array | Array<RlpStructuredDataish>;
|
|
20
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The [[link-rlp]] (RLP) encoding is used throughout Ethereum
|
|
3
|
+
* to serialize nested structures of Arrays and data.
|
|
4
|
+
*
|
|
5
|
+
* @_subsection api/utils:Recursive-Length Prefix [about-rlp]
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { decodeRlp } from "./rlp-decode.js";
|
|
9
|
+
export { encodeRlp } from "./rlp-encode.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* An RLP-encoded structure.
|
|
13
|
+
*/
|
|
14
|
+
export type RlpStructuredData = string | Array<RlpStructuredData>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* An RLP-encoded structure, which allows Uint8Array.
|
|
18
|
+
*/
|
|
19
|
+
export type RlpStructuredDataish = string | Uint8Array | Array<RlpStructuredDataish>;
|
|
20
|
+
|
package/src.ts/utils/units.ts
CHANGED
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Most interactions with Ethereum requires integer values, which use
|
|
3
|
-
* the smallest magnitude unit.
|
|
4
|
-
*
|
|
5
|
-
* For example, imagine dealing with dollars and cents. Since dollars
|
|
6
|
-
* are divisible, non-integer values are possible, such as ``$10.77``.
|
|
7
|
-
* By using the smallest indivisible unit (i.e. cents), the value can
|
|
8
|
-
* be kept as the integer ``1077``.
|
|
9
|
-
*
|
|
10
|
-
* When receiving decimal input from the user (as a decimal string),
|
|
11
|
-
* the value should be converted to an integer and when showing a user
|
|
12
|
-
* a value, the integer value should be converted to a decimal string.
|
|
13
|
-
*
|
|
14
|
-
* This creates a clear distinction, between values to be used by code
|
|
15
|
-
* (integers) and values used for display logic to users (decimals).
|
|
16
|
-
*
|
|
17
|
-
* The native unit in Ethereum, //ether// is divisible to 18 decimal places,
|
|
18
|
-
* where each individual unit is called a //wei//.
|
|
19
|
-
*
|
|
20
|
-
* @_subsection api/utils:Unit Conversion [about-units]
|
|
21
|
-
*/
|
|
22
|
-
import { assertArgument } from "./errors.js";
|
|
23
|
-
import { FixedNumber } from "./fixednumber.js";
|
|
24
|
-
import { getNumber } from "./maths.js";
|
|
25
|
-
|
|
26
|
-
import type { BigNumberish, Numeric } from "../utils/index.js";
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const names = [
|
|
30
|
-
"wei",
|
|
31
|
-
"kwei",
|
|
32
|
-
"mwei",
|
|
33
|
-
"gwei",
|
|
34
|
-
"szabo",
|
|
35
|
-
"finney",
|
|
36
|
-
"ether",
|
|
37
|
-
];
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Converts %%value%% into a //decimal string//, assuming %%unit%% decimal
|
|
41
|
-
* places. The %%unit%% may be the number of decimal places or the name of
|
|
42
|
-
* a unit (e.g. ``"gwei"`` for 9 decimal places).
|
|
43
|
-
*
|
|
44
|
-
*/
|
|
45
|
-
export function formatUnits(value: BigNumberish, unit?: string | Numeric): string {
|
|
46
|
-
let decimals = 18;
|
|
47
|
-
if (typeof(unit) === "string") {
|
|
48
|
-
const index = names.indexOf(unit);
|
|
49
|
-
assertArgument(index >= 0, "invalid unit", "unit", unit);
|
|
50
|
-
decimals = 3 * index;
|
|
51
|
-
} else if (unit != null) {
|
|
52
|
-
decimals = getNumber(unit, "unit");
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return FixedNumber.fromValue(value, decimals, { decimals, width: 512 }).toString();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Converts the //decimal string// %%value%% to a BigInt, assuming
|
|
60
|
-
* %%unit%% decimal places. The %%unit%% may the number of decimal places
|
|
61
|
-
* or the name of a unit (e.g. ``"gwei"`` for 9 decimal places).
|
|
62
|
-
*/
|
|
63
|
-
export function parseUnits(value: string, unit?: string | Numeric): bigint {
|
|
64
|
-
assertArgument(typeof(value) === "string", "value must be a string", "value", value);
|
|
65
|
-
|
|
66
|
-
let decimals = 18;
|
|
67
|
-
if (typeof(unit) === "string") {
|
|
68
|
-
const index = names.indexOf(unit);
|
|
69
|
-
assertArgument(index >= 0, "invalid unit", "unit", unit);
|
|
70
|
-
decimals = 3 * index;
|
|
71
|
-
} else if (unit != null) {
|
|
72
|
-
decimals = getNumber(unit, "unit");
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return FixedNumber.fromString(value, { decimals, width: 512 }).value;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Converts %%value%% into a //decimal string// using 18 decimal places.
|
|
80
|
-
*/
|
|
81
|
-
export function formatEther(wei: BigNumberish): string {
|
|
82
|
-
return formatUnits(wei, 18);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Converts the //decimal string// %%ether%% to a BigInt, using 18
|
|
87
|
-
* decimal places.
|
|
88
|
-
*/
|
|
89
|
-
export function parseEther(ether: string): bigint {
|
|
90
|
-
return parseUnits(ether, 18);
|
|
91
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Most interactions with Ethereum requires integer values, which use
|
|
3
|
+
* the smallest magnitude unit.
|
|
4
|
+
*
|
|
5
|
+
* For example, imagine dealing with dollars and cents. Since dollars
|
|
6
|
+
* are divisible, non-integer values are possible, such as ``$10.77``.
|
|
7
|
+
* By using the smallest indivisible unit (i.e. cents), the value can
|
|
8
|
+
* be kept as the integer ``1077``.
|
|
9
|
+
*
|
|
10
|
+
* When receiving decimal input from the user (as a decimal string),
|
|
11
|
+
* the value should be converted to an integer and when showing a user
|
|
12
|
+
* a value, the integer value should be converted to a decimal string.
|
|
13
|
+
*
|
|
14
|
+
* This creates a clear distinction, between values to be used by code
|
|
15
|
+
* (integers) and values used for display logic to users (decimals).
|
|
16
|
+
*
|
|
17
|
+
* The native unit in Ethereum, //ether// is divisible to 18 decimal places,
|
|
18
|
+
* where each individual unit is called a //wei//.
|
|
19
|
+
*
|
|
20
|
+
* @_subsection api/utils:Unit Conversion [about-units]
|
|
21
|
+
*/
|
|
22
|
+
import { assertArgument } from "./errors.js";
|
|
23
|
+
import { FixedNumber } from "./fixednumber.js";
|
|
24
|
+
import { getNumber } from "./maths.js";
|
|
25
|
+
|
|
26
|
+
import type { BigNumberish, Numeric } from "../utils/index.js";
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
const names = [
|
|
30
|
+
"wei",
|
|
31
|
+
"kwei",
|
|
32
|
+
"mwei",
|
|
33
|
+
"gwei",
|
|
34
|
+
"szabo",
|
|
35
|
+
"finney",
|
|
36
|
+
"ether",
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Converts %%value%% into a //decimal string//, assuming %%unit%% decimal
|
|
41
|
+
* places. The %%unit%% may be the number of decimal places or the name of
|
|
42
|
+
* a unit (e.g. ``"gwei"`` for 9 decimal places).
|
|
43
|
+
*
|
|
44
|
+
*/
|
|
45
|
+
export function formatUnits(value: BigNumberish, unit?: string | Numeric): string {
|
|
46
|
+
let decimals = 18;
|
|
47
|
+
if (typeof(unit) === "string") {
|
|
48
|
+
const index = names.indexOf(unit);
|
|
49
|
+
assertArgument(index >= 0, "invalid unit", "unit", unit);
|
|
50
|
+
decimals = 3 * index;
|
|
51
|
+
} else if (unit != null) {
|
|
52
|
+
decimals = getNumber(unit, "unit");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return FixedNumber.fromValue(value, decimals, { decimals, width: 512 }).toString();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Converts the //decimal string// %%value%% to a BigInt, assuming
|
|
60
|
+
* %%unit%% decimal places. The %%unit%% may the number of decimal places
|
|
61
|
+
* or the name of a unit (e.g. ``"gwei"`` for 9 decimal places).
|
|
62
|
+
*/
|
|
63
|
+
export function parseUnits(value: string, unit?: string | Numeric): bigint {
|
|
64
|
+
assertArgument(typeof(value) === "string", "value must be a string", "value", value);
|
|
65
|
+
|
|
66
|
+
let decimals = 18;
|
|
67
|
+
if (typeof(unit) === "string") {
|
|
68
|
+
const index = names.indexOf(unit);
|
|
69
|
+
assertArgument(index >= 0, "invalid unit", "unit", unit);
|
|
70
|
+
decimals = 3 * index;
|
|
71
|
+
} else if (unit != null) {
|
|
72
|
+
decimals = getNumber(unit, "unit");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return FixedNumber.fromString(value, { decimals, width: 512 }).value;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Converts %%value%% into a //decimal string// using 18 decimal places.
|
|
80
|
+
*/
|
|
81
|
+
export function formatEther(wei: BigNumberish): string {
|
|
82
|
+
return formatUnits(wei, 18);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Converts the //decimal string// %%ether%% to a BigInt, using 18
|
|
87
|
+
* decimal places.
|
|
88
|
+
*/
|
|
89
|
+
export function parseEther(ether: string): bigint {
|
|
90
|
+
return parseUnits(ether, 18);
|
|
91
|
+
}
|