essential-eth 0.5.4 → 0.5.9
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/lib/cjs/classes/Contract.d.ts +10 -4
- package/lib/cjs/classes/Contract.js +15 -4
- package/lib/cjs/classes/utils/clean-block.d.ts +115 -0
- package/lib/cjs/classes/utils/clean-block.js +122 -9
- package/lib/cjs/classes/utils/clean-log.d.ts +9 -0
- package/lib/cjs/classes/utils/clean-log.js +37 -0
- package/lib/cjs/classes/utils/clean-transaction-receipt.d.ts +9 -0
- package/lib/cjs/classes/utils/clean-transaction-receipt.js +11 -16
- package/lib/cjs/classes/utils/clean-transaction.d.ts +9 -0
- package/lib/cjs/classes/utils/clean-transaction.js +10 -1
- package/lib/cjs/classes/utils/encode-decode-transaction.d.ts +12 -0
- package/lib/cjs/classes/utils/encode-decode-transaction.js +24 -0
- package/lib/cjs/classes/utils/fetchers.d.ts +31 -1
- package/lib/cjs/classes/utils/fetchers.js +30 -0
- package/lib/cjs/classes/utils/hex-to-decimal.d.ts +14 -1
- package/lib/cjs/classes/utils/hex-to-decimal.js +14 -1
- package/lib/cjs/classes/utils/prepare-transaction.d.ts +6 -0
- package/lib/cjs/classes/utils/prepare-transaction.js +45 -0
- package/lib/cjs/index.d.ts +10 -5
- package/lib/cjs/index.js +10 -2
- package/lib/cjs/logger/package-version.d.ts +1 -1
- package/lib/cjs/logger/package-version.js +1 -1
- package/lib/cjs/providers/BaseProvider.d.ts +282 -199
- package/lib/cjs/providers/BaseProvider.js +365 -214
- package/lib/cjs/providers/FallthroughProvider.d.ts +1 -2
- package/lib/cjs/providers/JsonRpcProvider.d.ts +6 -0
- package/lib/cjs/providers/JsonRpcProvider.js +6 -0
- package/lib/cjs/providers/utils/chains-info.d.ts +27 -0
- package/lib/cjs/providers/utils/chains-info.js +84 -3
- package/lib/cjs/shared/tiny-big/helpers.d.ts +16 -0
- package/lib/cjs/shared/tiny-big/helpers.js +27 -1
- package/lib/cjs/shared/tiny-big/tiny-big.d.ts +30 -4
- package/lib/cjs/shared/tiny-big/tiny-big.js +34 -4
- package/lib/cjs/types/Block.types.d.ts +11 -7
- package/lib/cjs/types/Filter.types.d.ts +16 -0
- package/lib/cjs/types/Filter.types.js +2 -0
- package/lib/cjs/types/Transaction.types.d.ts +33 -6
- package/lib/cjs/utils/bytes.d.ts +150 -33
- package/lib/cjs/utils/bytes.js +179 -32
- package/lib/cjs/utils/compute-address.d.ts +17 -0
- package/lib/cjs/utils/compute-address.js +33 -0
- package/lib/cjs/utils/compute-public-key.d.ts +18 -0
- package/lib/cjs/utils/compute-public-key.js +26 -0
- package/lib/cjs/utils/ether-to-gwei.d.ts +2 -1
- package/lib/cjs/utils/ether-to-gwei.js +2 -1
- package/lib/cjs/utils/ether-to-wei.d.ts +2 -1
- package/lib/cjs/utils/ether-to-wei.js +2 -1
- package/lib/cjs/utils/gwei-to-ether.d.ts +2 -1
- package/lib/cjs/utils/gwei-to-ether.js +2 -1
- package/lib/cjs/utils/hash-message.d.ts +3 -1
- package/lib/cjs/utils/hash-message.js +3 -1
- package/lib/cjs/utils/is-address.d.ts +2 -2
- package/lib/cjs/utils/is-address.js +2 -2
- package/lib/cjs/utils/keccak256.d.ts +15 -1
- package/lib/cjs/utils/keccak256.js +16 -2
- package/lib/cjs/utils/solidity-keccak256.d.ts +17 -7
- package/lib/cjs/utils/solidity-keccak256.js +27 -7
- package/lib/cjs/utils/split-signature.d.ts +24 -0
- package/lib/cjs/utils/split-signature.js +163 -0
- package/lib/cjs/utils/to-checksum-address.d.ts +2 -2
- package/lib/cjs/utils/to-checksum-address.js +2 -2
- package/lib/cjs/utils/to-utf8-bytes.d.ts +14 -0
- package/lib/cjs/utils/to-utf8-bytes.js +14 -0
- package/lib/cjs/utils/wei-to-ether.d.ts +2 -1
- package/lib/cjs/utils/wei-to-ether.js +14 -3
- package/lib/esm/classes/utils/clean-block.js +7 -8
- package/lib/esm/classes/utils/clean-log.d.ts +2 -0
- package/lib/esm/classes/utils/clean-log.js +26 -0
- package/lib/esm/classes/utils/clean-transaction-receipt.js +2 -16
- package/lib/esm/classes/utils/clean-transaction.js +1 -1
- package/lib/esm/classes/utils/fetchers.d.ts +1 -1
- package/lib/esm/classes/utils/prepare-transaction.d.ts +2 -0
- package/lib/esm/classes/utils/prepare-transaction.js +34 -0
- package/lib/esm/index.d.ts +10 -5
- package/lib/esm/index.js +7 -3
- package/lib/esm/logger/package-version.d.ts +1 -1
- package/lib/esm/logger/package-version.js +1 -1
- package/lib/esm/providers/BaseProvider.d.ts +7 -1
- package/lib/esm/providers/BaseProvider.js +67 -11
- package/lib/esm/providers/FallthroughProvider.d.ts +1 -2
- package/lib/esm/providers/utils/chains-info.d.ts +27 -0
- package/lib/esm/providers/utils/chains-info.js +84 -3
- package/lib/esm/shared/tiny-big/tiny-big.js +4 -0
- package/lib/esm/types/Block.types.d.ts +11 -7
- package/lib/esm/types/Filter.types.d.ts +12 -0
- package/lib/esm/types/Filter.types.js +1 -0
- package/lib/esm/types/Transaction.types.d.ts +31 -5
- package/lib/esm/utils/compute-address.d.ts +1 -0
- package/lib/esm/utils/compute-address.js +11 -0
- package/lib/esm/utils/compute-public-key.d.ts +2 -0
- package/lib/esm/utils/compute-public-key.js +6 -0
- package/lib/esm/utils/keccak256.d.ts +1 -1
- package/lib/esm/utils/keccak256.js +2 -2
- package/lib/esm/utils/split-signature.d.ts +2 -0
- package/lib/esm/utils/split-signature.js +126 -0
- package/lib/esm/utils/wei-to-ether.js +11 -2
- package/package.json +38 -11
- package/readme.md +1209 -335
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { logger } from './../logger/logger';
|
|
2
|
+
import { arrayify, hexlify, hexZeroPad, isBytesLike, isHexString, zeroPad, } from './bytes';
|
|
3
|
+
export function splitSignature(signature) {
|
|
4
|
+
const result = {
|
|
5
|
+
r: '0x',
|
|
6
|
+
s: '0x',
|
|
7
|
+
_vs: '0x',
|
|
8
|
+
recoveryParam: 0,
|
|
9
|
+
v: 0,
|
|
10
|
+
yParityAndS: '0x',
|
|
11
|
+
compact: '0x',
|
|
12
|
+
};
|
|
13
|
+
if (isBytesLike(signature)) {
|
|
14
|
+
const bytes = arrayify(signature);
|
|
15
|
+
if (bytes.length === 64) {
|
|
16
|
+
result.v = 27 + (bytes[32] >> 7);
|
|
17
|
+
bytes[32] &= 0x7f;
|
|
18
|
+
result.r = hexlify(bytes.slice(0, 32));
|
|
19
|
+
result.s = hexlify(bytes.slice(32, 64));
|
|
20
|
+
}
|
|
21
|
+
else if (bytes.length === 65) {
|
|
22
|
+
result.r = hexlify(bytes.slice(0, 32));
|
|
23
|
+
result.s = hexlify(bytes.slice(32, 64));
|
|
24
|
+
result.v = bytes[64];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
logger.throwArgumentError('invalid signature string', 'signature', signature);
|
|
28
|
+
}
|
|
29
|
+
if (result.v < 27) {
|
|
30
|
+
if (result.v === 0 || result.v === 1) {
|
|
31
|
+
result.v += 27;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
logger.throwArgumentError('signature invalid v byte', 'signature', signature);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
result.recoveryParam = 1 - (result.v % 2);
|
|
38
|
+
if (result.recoveryParam) {
|
|
39
|
+
bytes[32] |= 0x80;
|
|
40
|
+
}
|
|
41
|
+
result._vs = hexlify(bytes.slice(32, 64));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
result.r = signature.r;
|
|
45
|
+
result.s = signature.s;
|
|
46
|
+
result.v = signature.v;
|
|
47
|
+
result.recoveryParam = signature.recoveryParam;
|
|
48
|
+
result._vs = signature._vs;
|
|
49
|
+
if (result._vs != null) {
|
|
50
|
+
const vs_1 = zeroPad(arrayify(result._vs), 32);
|
|
51
|
+
result._vs = hexlify(vs_1);
|
|
52
|
+
const recoveryParam = vs_1[0] >= 128 ? 1 : 0;
|
|
53
|
+
if (result.recoveryParam == null) {
|
|
54
|
+
result.recoveryParam = recoveryParam;
|
|
55
|
+
}
|
|
56
|
+
else if (result.recoveryParam !== recoveryParam) {
|
|
57
|
+
logger.throwArgumentError('signature recoveryParam mismatch _vs', 'signature', signature);
|
|
58
|
+
}
|
|
59
|
+
vs_1[0] &= 0x7f;
|
|
60
|
+
const s = hexlify(vs_1);
|
|
61
|
+
if (result.s == null) {
|
|
62
|
+
result.s = s;
|
|
63
|
+
}
|
|
64
|
+
else if (result.s !== s) {
|
|
65
|
+
logger.throwArgumentError('signature v mismatch _vs', 'signature', signature);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (result.recoveryParam == null) {
|
|
69
|
+
if (result.v == null) {
|
|
70
|
+
logger.throwArgumentError('signature missing v and recoveryParam', 'signature', signature);
|
|
71
|
+
}
|
|
72
|
+
else if (result.v === 0 || result.v === 1) {
|
|
73
|
+
result.recoveryParam = result.v;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
result.recoveryParam = 1 - (result.v % 2);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
if (result.v == null) {
|
|
81
|
+
result.v = 27 + result.recoveryParam;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const recId = result.v === 0 || result.v === 1 ? result.v : 1 - (result.v % 2);
|
|
85
|
+
if (result.recoveryParam !== recId) {
|
|
86
|
+
logger.throwArgumentError('signature recoveryParam mismatch v', 'signature', signature);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (result.r == null || !isHexString(result.r)) {
|
|
91
|
+
logger.throwArgumentError('signature missing or invalid r', 'signature', signature);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
result.r = hexZeroPad(result.r, 32);
|
|
95
|
+
}
|
|
96
|
+
if (result.s == null || !isHexString(result.s)) {
|
|
97
|
+
logger.throwArgumentError('signature missing or invalid s', 'signature', signature);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
result.s = hexZeroPad(result.s, 32);
|
|
101
|
+
}
|
|
102
|
+
const vs = arrayify(result.s);
|
|
103
|
+
if (vs[0] >= 128) {
|
|
104
|
+
logger.throwArgumentError('signature s out of range', 'signature', signature);
|
|
105
|
+
}
|
|
106
|
+
if (result.recoveryParam) {
|
|
107
|
+
vs[0] |= 0x80;
|
|
108
|
+
}
|
|
109
|
+
const _vs = hexlify(vs);
|
|
110
|
+
if (result._vs) {
|
|
111
|
+
if (!isHexString(result._vs)) {
|
|
112
|
+
logger.throwArgumentError('signature invalid _vs', 'signature', signature);
|
|
113
|
+
}
|
|
114
|
+
result._vs = hexZeroPad(result._vs, 32);
|
|
115
|
+
}
|
|
116
|
+
if (result._vs == null) {
|
|
117
|
+
result._vs = _vs;
|
|
118
|
+
}
|
|
119
|
+
else if (result._vs !== _vs) {
|
|
120
|
+
logger.throwArgumentError('signature _vs mismatch v and s', 'signature', signature);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
result.yParityAndS = result._vs;
|
|
124
|
+
result.compact = result.r + result.yParityAndS.substring(2);
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
@@ -2,6 +2,15 @@ import { tinyBig } from '../shared/tiny-big/tiny-big';
|
|
|
2
2
|
import { validateType } from '../shared/validate-type';
|
|
3
3
|
export function weiToEther(weiQuantity) {
|
|
4
4
|
validateType(weiQuantity, ['string', 'number', 'object']);
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
try {
|
|
6
|
+
let _weiQuantity = weiQuantity;
|
|
7
|
+
if (typeof weiQuantity === 'string' && weiQuantity.slice(0, 2) === '0x') {
|
|
8
|
+
_weiQuantity = BigInt(weiQuantity).toString();
|
|
9
|
+
}
|
|
10
|
+
const result = tinyBig(_weiQuantity).div('1000000000000000000');
|
|
11
|
+
return tinyBig(result);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
7
16
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "essential-eth",
|
|
3
|
-
"description": "Ultralight JS
|
|
4
|
-
"version": "0.5.
|
|
3
|
+
"description": "Ultralight JS for Ethereum",
|
|
4
|
+
"version": "0.5.9",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"main": "./lib/cjs/index.js",
|
|
@@ -14,7 +14,28 @@
|
|
|
14
14
|
},
|
|
15
15
|
"repository": "https://github.com/dawsbot/essential-eth.git",
|
|
16
16
|
"author": "@dawsbot",
|
|
17
|
+
"size-limit": [
|
|
18
|
+
{
|
|
19
|
+
"name": "etherToWei",
|
|
20
|
+
"path": "src/index.ts",
|
|
21
|
+
"import": "{ etherToWei }",
|
|
22
|
+
"limit": "3.9kb"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "JsonRpcProvider",
|
|
26
|
+
"path": "src/index.ts",
|
|
27
|
+
"import": "{ JsonRpcProvider }",
|
|
28
|
+
"limit": "22kb"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "Contract",
|
|
32
|
+
"path": "src/index.ts",
|
|
33
|
+
"import": "{ Contract }",
|
|
34
|
+
"limit": "18kb"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
17
37
|
"scripts": {
|
|
38
|
+
"size": "size-limit",
|
|
18
39
|
"test": "npm-run-all --parallel jest compile lint",
|
|
19
40
|
"test:all-node-versions": "npx trevor",
|
|
20
41
|
"lint": "eslint --cache --fix .",
|
|
@@ -22,6 +43,7 @@
|
|
|
22
43
|
"tsc:esm": "tsc -p tsconfig.json",
|
|
23
44
|
"tsc:cjs": "tsc -p tsconfig-cjs.json",
|
|
24
45
|
"build": "rm -rf lib && npm run compile",
|
|
46
|
+
"build:readme": "bash ./scripts/markdown-magic/build-readme.sh",
|
|
25
47
|
"jest": "jest",
|
|
26
48
|
"build:chains-info": "npx ts-node scripts/fetch-chains-info.ts # used in getNetwork()",
|
|
27
49
|
"update-deps": "sh ./scripts/pre-commit.sh",
|
|
@@ -29,23 +51,26 @@
|
|
|
29
51
|
"prepare": "husky install",
|
|
30
52
|
"version": "npx genversion --es6 src/logger/package-version.ts && git add src/logger/package-version.ts",
|
|
31
53
|
"postversion": "git push --follow-tags",
|
|
32
|
-
"prepublishOnly": "npm run build"
|
|
54
|
+
"prepublishOnly": "npm run build",
|
|
55
|
+
"doc": "typedoc"
|
|
33
56
|
},
|
|
34
57
|
"devDependencies": {
|
|
58
|
+
"@size-limit/preset-small-lib": "^7.0.8",
|
|
35
59
|
"@types/body-parser": "^1.19.1",
|
|
36
|
-
"@types/eslint": "^8.4.
|
|
60
|
+
"@types/eslint": "^8.4.2",
|
|
37
61
|
"@types/express": "^4.17.13",
|
|
38
62
|
"@types/jest": "^27.4.1",
|
|
39
63
|
"@types/jest-dev-server": "^5.0.0",
|
|
40
64
|
"@types/node": "^16.10.1",
|
|
41
65
|
"@types/prettier": "^2.4.4",
|
|
42
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
43
|
-
"@typescript-eslint/parser": "^5.
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^5.26.0",
|
|
67
|
+
"@typescript-eslint/parser": "^5.26.0",
|
|
44
68
|
"body-parser": "^1.19.0",
|
|
45
69
|
"dotenv": "^16.0.0",
|
|
46
|
-
"eslint": "^8.
|
|
47
|
-
"eslint-plugin-jest": "^26.
|
|
48
|
-
"
|
|
70
|
+
"eslint": "^8.16.0",
|
|
71
|
+
"eslint-plugin-jest": "^26.2.2",
|
|
72
|
+
"eslint-plugin-jsdoc": "38.0.2",
|
|
73
|
+
"ethers": "^5.6.8",
|
|
49
74
|
"express": "^4.17.1",
|
|
50
75
|
"husky": "^7.0.4",
|
|
51
76
|
"jest": "^27.5.1",
|
|
@@ -56,15 +81,17 @@
|
|
|
56
81
|
"perf_hooks": "^0.0.1",
|
|
57
82
|
"prettier": "^2.6.2",
|
|
58
83
|
"prettier-plugin-organize-imports": "^2.3.4",
|
|
84
|
+
"size-limit": "^7.0.8",
|
|
59
85
|
"ts-jest": "^27.1.4",
|
|
60
86
|
"ts-node": "^10.2.1",
|
|
61
|
-
"typedoc": "^0.22.
|
|
87
|
+
"typedoc": "^0.22.15",
|
|
62
88
|
"typescript": "^4.6.4",
|
|
63
89
|
"web3": "^1.7.3"
|
|
64
90
|
},
|
|
65
91
|
"dependencies": {
|
|
92
|
+
"@noble/secp256k1": "^1.5.5",
|
|
66
93
|
"@types/big.js": "^6.1.3",
|
|
67
|
-
"big.js": "^6.
|
|
94
|
+
"big.js": "^6.2.0",
|
|
68
95
|
"isomorphic-unfetch": "^3.1.0",
|
|
69
96
|
"sha3": "^2.1.4"
|
|
70
97
|
},
|