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.
Files changed (98) hide show
  1. package/lib/cjs/classes/Contract.d.ts +10 -4
  2. package/lib/cjs/classes/Contract.js +15 -4
  3. package/lib/cjs/classes/utils/clean-block.d.ts +115 -0
  4. package/lib/cjs/classes/utils/clean-block.js +122 -9
  5. package/lib/cjs/classes/utils/clean-log.d.ts +9 -0
  6. package/lib/cjs/classes/utils/clean-log.js +37 -0
  7. package/lib/cjs/classes/utils/clean-transaction-receipt.d.ts +9 -0
  8. package/lib/cjs/classes/utils/clean-transaction-receipt.js +11 -16
  9. package/lib/cjs/classes/utils/clean-transaction.d.ts +9 -0
  10. package/lib/cjs/classes/utils/clean-transaction.js +10 -1
  11. package/lib/cjs/classes/utils/encode-decode-transaction.d.ts +12 -0
  12. package/lib/cjs/classes/utils/encode-decode-transaction.js +24 -0
  13. package/lib/cjs/classes/utils/fetchers.d.ts +31 -1
  14. package/lib/cjs/classes/utils/fetchers.js +30 -0
  15. package/lib/cjs/classes/utils/hex-to-decimal.d.ts +14 -1
  16. package/lib/cjs/classes/utils/hex-to-decimal.js +14 -1
  17. package/lib/cjs/classes/utils/prepare-transaction.d.ts +6 -0
  18. package/lib/cjs/classes/utils/prepare-transaction.js +45 -0
  19. package/lib/cjs/index.d.ts +10 -5
  20. package/lib/cjs/index.js +10 -2
  21. package/lib/cjs/logger/package-version.d.ts +1 -1
  22. package/lib/cjs/logger/package-version.js +1 -1
  23. package/lib/cjs/providers/BaseProvider.d.ts +282 -199
  24. package/lib/cjs/providers/BaseProvider.js +365 -214
  25. package/lib/cjs/providers/FallthroughProvider.d.ts +1 -2
  26. package/lib/cjs/providers/JsonRpcProvider.d.ts +6 -0
  27. package/lib/cjs/providers/JsonRpcProvider.js +6 -0
  28. package/lib/cjs/providers/utils/chains-info.d.ts +27 -0
  29. package/lib/cjs/providers/utils/chains-info.js +84 -3
  30. package/lib/cjs/shared/tiny-big/helpers.d.ts +16 -0
  31. package/lib/cjs/shared/tiny-big/helpers.js +27 -1
  32. package/lib/cjs/shared/tiny-big/tiny-big.d.ts +30 -4
  33. package/lib/cjs/shared/tiny-big/tiny-big.js +34 -4
  34. package/lib/cjs/types/Block.types.d.ts +11 -7
  35. package/lib/cjs/types/Filter.types.d.ts +16 -0
  36. package/lib/cjs/types/Filter.types.js +2 -0
  37. package/lib/cjs/types/Transaction.types.d.ts +33 -6
  38. package/lib/cjs/utils/bytes.d.ts +150 -33
  39. package/lib/cjs/utils/bytes.js +179 -32
  40. package/lib/cjs/utils/compute-address.d.ts +17 -0
  41. package/lib/cjs/utils/compute-address.js +33 -0
  42. package/lib/cjs/utils/compute-public-key.d.ts +18 -0
  43. package/lib/cjs/utils/compute-public-key.js +26 -0
  44. package/lib/cjs/utils/ether-to-gwei.d.ts +2 -1
  45. package/lib/cjs/utils/ether-to-gwei.js +2 -1
  46. package/lib/cjs/utils/ether-to-wei.d.ts +2 -1
  47. package/lib/cjs/utils/ether-to-wei.js +2 -1
  48. package/lib/cjs/utils/gwei-to-ether.d.ts +2 -1
  49. package/lib/cjs/utils/gwei-to-ether.js +2 -1
  50. package/lib/cjs/utils/hash-message.d.ts +3 -1
  51. package/lib/cjs/utils/hash-message.js +3 -1
  52. package/lib/cjs/utils/is-address.d.ts +2 -2
  53. package/lib/cjs/utils/is-address.js +2 -2
  54. package/lib/cjs/utils/keccak256.d.ts +15 -1
  55. package/lib/cjs/utils/keccak256.js +16 -2
  56. package/lib/cjs/utils/solidity-keccak256.d.ts +17 -7
  57. package/lib/cjs/utils/solidity-keccak256.js +27 -7
  58. package/lib/cjs/utils/split-signature.d.ts +24 -0
  59. package/lib/cjs/utils/split-signature.js +163 -0
  60. package/lib/cjs/utils/to-checksum-address.d.ts +2 -2
  61. package/lib/cjs/utils/to-checksum-address.js +2 -2
  62. package/lib/cjs/utils/to-utf8-bytes.d.ts +14 -0
  63. package/lib/cjs/utils/to-utf8-bytes.js +14 -0
  64. package/lib/cjs/utils/wei-to-ether.d.ts +2 -1
  65. package/lib/cjs/utils/wei-to-ether.js +14 -3
  66. package/lib/esm/classes/utils/clean-block.js +7 -8
  67. package/lib/esm/classes/utils/clean-log.d.ts +2 -0
  68. package/lib/esm/classes/utils/clean-log.js +26 -0
  69. package/lib/esm/classes/utils/clean-transaction-receipt.js +2 -16
  70. package/lib/esm/classes/utils/clean-transaction.js +1 -1
  71. package/lib/esm/classes/utils/fetchers.d.ts +1 -1
  72. package/lib/esm/classes/utils/prepare-transaction.d.ts +2 -0
  73. package/lib/esm/classes/utils/prepare-transaction.js +34 -0
  74. package/lib/esm/index.d.ts +10 -5
  75. package/lib/esm/index.js +7 -3
  76. package/lib/esm/logger/package-version.d.ts +1 -1
  77. package/lib/esm/logger/package-version.js +1 -1
  78. package/lib/esm/providers/BaseProvider.d.ts +7 -1
  79. package/lib/esm/providers/BaseProvider.js +67 -11
  80. package/lib/esm/providers/FallthroughProvider.d.ts +1 -2
  81. package/lib/esm/providers/utils/chains-info.d.ts +27 -0
  82. package/lib/esm/providers/utils/chains-info.js +84 -3
  83. package/lib/esm/shared/tiny-big/tiny-big.js +4 -0
  84. package/lib/esm/types/Block.types.d.ts +11 -7
  85. package/lib/esm/types/Filter.types.d.ts +12 -0
  86. package/lib/esm/types/Filter.types.js +1 -0
  87. package/lib/esm/types/Transaction.types.d.ts +31 -5
  88. package/lib/esm/utils/compute-address.d.ts +1 -0
  89. package/lib/esm/utils/compute-address.js +11 -0
  90. package/lib/esm/utils/compute-public-key.d.ts +2 -0
  91. package/lib/esm/utils/compute-public-key.js +6 -0
  92. package/lib/esm/utils/keccak256.d.ts +1 -1
  93. package/lib/esm/utils/keccak256.js +2 -2
  94. package/lib/esm/utils/split-signature.d.ts +2 -0
  95. package/lib/esm/utils/split-signature.js +126 -0
  96. package/lib/esm/utils/wei-to-ether.js +11 -2
  97. package/package.json +38 -11
  98. 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
- const result = tinyBig(weiQuantity).div('1000000000000000000');
6
- return tinyBig(result);
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 library for Ethereum utilities",
4
- "version": "0.5.4",
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.1",
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.21.0",
43
- "@typescript-eslint/parser": "^5.21.0",
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.14.0",
47
- "eslint-plugin-jest": "^26.1.5",
48
- "ethers": "^5.6.4",
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.13",
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.1.1",
94
+ "big.js": "^6.2.0",
68
95
  "isomorphic-unfetch": "^3.1.0",
69
96
  "sha3": "^2.1.4"
70
97
  },