essential-eth 0.2.2 → 0.3.3

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 (114) hide show
  1. package/lib/cjs/classes/Contract.d.ts +69 -0
  2. package/lib/cjs/classes/Contract.js +122 -0
  3. package/lib/cjs/{rpc → classes}/get-block.test.d.ts +0 -0
  4. package/lib/cjs/{rpc → classes}/get-block.test.js +5 -5
  5. package/lib/cjs/classes/test/Contract/crv-abi.d.ts +2 -0
  6. package/lib/cjs/classes/test/Contract/crv-abi.js +488 -0
  7. package/lib/{esm/rpc/get-block.test.d.ts → cjs/classes/test/Contract/crv.test.d.ts} +0 -0
  8. package/lib/cjs/classes/test/Contract/crv.test.js +48 -0
  9. package/lib/cjs/classes/test/Contract/fei-abi.d.ts +2 -0
  10. package/lib/cjs/classes/test/Contract/fei-abi.js +526 -0
  11. package/lib/cjs/classes/test/Contract/fei.test.d.ts +1 -0
  12. package/lib/cjs/classes/test/Contract/fei.test.js +62 -0
  13. package/lib/cjs/classes/test/Contract/foo-abi.d.ts +2 -0
  14. package/lib/cjs/classes/test/Contract/foo-abi.js +42 -0
  15. package/lib/cjs/classes/test/Contract/foo.test.d.ts +1 -0
  16. package/lib/cjs/classes/test/Contract/foo.test.js +25 -0
  17. package/lib/cjs/classes/test/Contract/uni.test.d.ts +1 -0
  18. package/lib/cjs/classes/test/Contract/uni.test.js +67 -0
  19. package/lib/cjs/classes/test/Contract/uniswap-abi.d.ts +2 -0
  20. package/lib/cjs/classes/test/Contract/uniswap-abi.js +121 -0
  21. package/lib/cjs/{rpc → classes}/utils/clean-block.d.ts +0 -0
  22. package/lib/cjs/{rpc → classes}/utils/clean-block.js +0 -0
  23. package/lib/cjs/{rpc → classes}/utils/clean-transaction.d.ts +0 -0
  24. package/lib/cjs/{rpc → classes}/utils/clean-transaction.js +0 -0
  25. package/lib/cjs/classes/utils/encode-decode-transaction.d.ts +3 -0
  26. package/lib/cjs/classes/utils/encode-decode-transaction.js +100 -0
  27. package/lib/cjs/classes/utils/fetchers.d.ts +9 -0
  28. package/lib/cjs/{rpc → classes}/utils/fetchers.js +8 -1
  29. package/lib/cjs/{rpc → classes}/utils/hex-to-decimal.d.ts +0 -0
  30. package/lib/cjs/{rpc → classes}/utils/hex-to-decimal.js +0 -0
  31. package/lib/cjs/index.d.ts +10 -6
  32. package/lib/cjs/index.js +12 -9
  33. package/lib/cjs/{rpc/index.d.ts → providers/JsonRpcProvider.d.ts} +5 -1
  34. package/lib/cjs/{rpc/index.js → providers/JsonRpcProvider.js} +14 -7
  35. package/lib/cjs/shared/tiny-big/tiny-big.d.ts +2 -2
  36. package/lib/cjs/types/Contract.types.d.ts +22 -0
  37. package/lib/cjs/types/Contract.types.js +2 -0
  38. package/lib/cjs/{ether-to-wei.d.ts → utils/ether-to-wei.d.ts} +3 -2
  39. package/lib/cjs/{ether-to-wei.js → utils/ether-to-wei.js} +4 -8
  40. package/lib/cjs/{is-address.d.ts → utils/is-address.d.ts} +0 -0
  41. package/lib/cjs/{is-address.js → utils/is-address.js} +3 -3
  42. package/lib/cjs/utils/tests/ether-to-wei.test.d.ts +1 -0
  43. package/lib/cjs/utils/tests/ether-to-wei.test.js +66 -0
  44. package/lib/cjs/utils/tests/is-address.test.d.ts +1 -0
  45. package/lib/cjs/utils/tests/is-address.test.js +56 -0
  46. package/lib/cjs/utils/tests/to-checksum-address.test.d.ts +1 -0
  47. package/lib/cjs/utils/tests/to-checksum-address.test.js +43 -0
  48. package/lib/cjs/utils/tests/wei-to-ether.test.d.ts +1 -0
  49. package/lib/cjs/utils/tests/wei-to-ether.test.js +69 -0
  50. package/lib/cjs/{to-checksum-address.d.ts → utils/to-checksum-address.d.ts} +0 -0
  51. package/lib/cjs/{to-checksum-address.js → utils/to-checksum-address.js} +1 -1
  52. package/lib/cjs/{wei-to-ether.d.ts → utils/wei-to-ether.d.ts} +3 -1
  53. package/lib/cjs/{wei-to-ether.js → utils/wei-to-ether.js} +4 -8
  54. package/lib/esm/classes/Contract.d.ts +12 -0
  55. package/lib/esm/classes/Contract.js +63 -0
  56. package/lib/esm/classes/get-block.test.d.ts +1 -0
  57. package/lib/esm/{rpc → classes}/get-block.test.js +5 -5
  58. package/lib/esm/classes/test/Contract/crv-abi.d.ts +2 -0
  59. package/lib/esm/classes/test/Contract/crv-abi.js +470 -0
  60. package/lib/esm/classes/test/Contract/crv.test.d.ts +1 -0
  61. package/lib/esm/classes/test/Contract/crv.test.js +43 -0
  62. package/lib/esm/classes/test/Contract/fei-abi.d.ts +2 -0
  63. package/lib/esm/classes/test/Contract/fei-abi.js +521 -0
  64. package/lib/esm/classes/test/Contract/fei.test.d.ts +1 -0
  65. package/lib/esm/classes/test/Contract/fei.test.js +46 -0
  66. package/lib/esm/classes/test/Contract/foo-abi.d.ts +2 -0
  67. package/lib/esm/classes/test/Contract/foo-abi.js +33 -0
  68. package/lib/esm/classes/test/Contract/foo.test.d.ts +1 -0
  69. package/lib/esm/classes/test/Contract/foo.test.js +14 -0
  70. package/lib/esm/classes/test/Contract/uni.test.d.ts +1 -0
  71. package/lib/esm/classes/test/Contract/uni.test.js +59 -0
  72. package/lib/esm/classes/test/Contract/uniswap-abi.d.ts +2 -0
  73. package/lib/esm/classes/test/Contract/uniswap-abi.js +116 -0
  74. package/lib/esm/{rpc → classes}/utils/clean-block.d.ts +0 -0
  75. package/lib/esm/{rpc → classes}/utils/clean-block.js +0 -0
  76. package/lib/esm/{rpc → classes}/utils/clean-transaction.d.ts +0 -0
  77. package/lib/esm/{rpc → classes}/utils/clean-transaction.js +0 -0
  78. package/lib/esm/classes/utils/encode-decode-transaction.d.ts +3 -0
  79. package/lib/esm/classes/utils/encode-decode-transaction.js +85 -0
  80. package/lib/esm/classes/utils/fetchers.d.ts +9 -0
  81. package/lib/esm/{rpc → classes}/utils/fetchers.js +8 -1
  82. package/lib/esm/{rpc → classes}/utils/hex-to-decimal.d.ts +0 -0
  83. package/lib/esm/{rpc → classes}/utils/hex-to-decimal.js +0 -0
  84. package/lib/esm/index.d.ts +10 -6
  85. package/lib/esm/index.js +7 -6
  86. package/lib/esm/{rpc/index.d.ts → providers/JsonRpcProvider.d.ts} +2 -1
  87. package/lib/esm/{rpc/index.js → providers/JsonRpcProvider.js} +8 -5
  88. package/lib/esm/shared/tiny-big/tiny-big.d.ts +2 -2
  89. package/lib/esm/types/Contract.types.d.ts +22 -0
  90. package/lib/esm/types/Contract.types.js +1 -0
  91. package/lib/esm/utils/ether-to-wei.d.ts +3 -0
  92. package/lib/esm/utils/ether-to-wei.js +7 -0
  93. package/lib/esm/{is-address.d.ts → utils/is-address.d.ts} +0 -0
  94. package/lib/esm/{is-address.js → utils/is-address.js} +2 -2
  95. package/lib/esm/utils/tests/ether-to-wei.test.d.ts +1 -0
  96. package/lib/esm/utils/tests/ether-to-wei.test.js +36 -0
  97. package/lib/esm/utils/tests/is-address.test.d.ts +1 -0
  98. package/lib/esm/utils/tests/is-address.test.js +49 -0
  99. package/lib/esm/utils/tests/to-checksum-address.test.d.ts +1 -0
  100. package/lib/esm/utils/tests/to-checksum-address.test.js +36 -0
  101. package/lib/esm/utils/tests/wei-to-ether.test.d.ts +1 -0
  102. package/lib/esm/utils/tests/wei-to-ether.test.js +38 -0
  103. package/lib/esm/{to-checksum-address.d.ts → utils/to-checksum-address.d.ts} +0 -0
  104. package/lib/esm/{to-checksum-address.js → utils/to-checksum-address.js} +1 -1
  105. package/lib/esm/utils/wei-to-ether.d.ts +3 -0
  106. package/lib/esm/utils/wei-to-ether.js +7 -0
  107. package/package.json +11 -11
  108. package/readme.md +68 -5
  109. package/lib/cjs/rpc/utils/fetchers.d.ts +0 -7
  110. package/lib/esm/ether-to-wei.d.ts +0 -2
  111. package/lib/esm/ether-to-wei.js +0 -8
  112. package/lib/esm/rpc/utils/fetchers.d.ts +0 -7
  113. package/lib/esm/wei-to-ether.d.ts +0 -1
  114. package/lib/esm/wei-to-ether.js +0 -8
@@ -0,0 +1,69 @@
1
+ import { JsonRpcProvider } from '../providers/JsonRpcProvider';
2
+ import { ContractInterface } from '../types/Contract.types';
3
+ export declare class BaseContract {
4
+ /**
5
+ * The URL to your Eth node. Consider POKT or Infura
6
+ */
7
+ readonly _address: string;
8
+ readonly _contractInterface: ContractInterface;
9
+ readonly _provider: JsonRpcProvider;
10
+ /**
11
+ * @param addressOrName - The ethereum address of the smart-contract
12
+ * @param contractInterface - The JSON ABI of the smart-contract (like http://api.etherscan.io/api?module=contract&action=getabi&address=0x090d4613473dee047c3f2706764f49e0821d256e&format=raw)
13
+ * @param signerOrProvider - An instantiated essential-eth provider
14
+ */
15
+ constructor(addressOrName: string, contractInterface: ContractInterface, signerOrProvider: JsonRpcProvider);
16
+ }
17
+ export declare function defineReadOnly<T>(object: T, name: string, value: any): void;
18
+ /**
19
+ * Only accepts ABIS in JSON format. This allows for stronger typing and assurances of data-types
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { Contract, JsonRpcProvider } from 'essential-eth';
24
+ * // UNI airdrop contract
25
+ * const contractAddress = '0x090D4613473dEE047c3f2706764f49E0821D256e';
26
+ * const provider = new JsonRpcProvider();
27
+ *
28
+ * const JSONABI = [
29
+ * {
30
+ * inputs: [
31
+ * {
32
+ * internalType: 'uint256',
33
+ * name: 'index',
34
+ * type: 'uint256',
35
+ * },
36
+ * ],
37
+ * name: 'isClaimed',
38
+ * outputs: [
39
+ * {
40
+ * internalType: 'bool',
41
+ * name: '',
42
+ * type: 'bool',
43
+ * },
44
+ * ],
45
+ * stateMutability: 'view',
46
+ * type: 'function',
47
+ * },
48
+ * ]
49
+ *
50
+ * const contract = new Contract(
51
+ * contractAddress,
52
+ * JSONABI,
53
+ * provider,
54
+ * );
55
+ *
56
+ * (async () => {
57
+ * // prints boolean as to whether index 0 has claimed airdrop or not
58
+ * console.log(await contract.isClaimed(0));
59
+ * })()
60
+ *
61
+ *
62
+ * ```
63
+ */
64
+ export declare class Contract extends BaseContract {
65
+ /**
66
+ * The dynamic contract calls on any given contract. Like "isClaimed", "merkleRoot", etc.
67
+ */
68
+ readonly [key: string]: any;
69
+ }
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Contract = exports.defineReadOnly = exports.BaseContract = void 0;
13
+ const encode_decode_transaction_1 = require("./utils/encode-decode-transaction");
14
+ const fetchers_1 = require("./utils/fetchers");
15
+ function estimateGas(txnData) {
16
+ // https://ethereum.stackexchange.com/questions/1570/what-does-intrinsic-gas-too-low-mean/1694
17
+ txnData.split('').reduce((previousValue, currentValue) => {
18
+ const characterCost = currentValue === '0' ? 4 : 68;
19
+ return previousValue + characterCost;
20
+ }, 0);
21
+ }
22
+ class BaseContract {
23
+ /**
24
+ * @param addressOrName - The ethereum address of the smart-contract
25
+ * @param contractInterface - The JSON ABI of the smart-contract (like http://api.etherscan.io/api?module=contract&action=getabi&address=0x090d4613473dee047c3f2706764f49e0821d256e&format=raw)
26
+ * @param signerOrProvider - An instantiated essential-eth provider
27
+ */
28
+ constructor(addressOrName, contractInterface, signerOrProvider) {
29
+ this._address = addressOrName;
30
+ this._contractInterface = contractInterface;
31
+ this._provider = signerOrProvider;
32
+ contractInterface
33
+ .filter((jsonABIArgument) => jsonABIArgument.type === 'function')
34
+ .forEach((jsonABIArgument) => {
35
+ if ('name' in jsonABIArgument &&
36
+ typeof jsonABIArgument.name === 'string') {
37
+ defineReadOnly(this, jsonABIArgument.name, (..._args) => __awaiter(this, void 0, void 0, function* () {
38
+ let functionArguments = _args;
39
+ let options = {};
40
+ // remove options from encoding
41
+ const lastArg = _args[_args.length - 1];
42
+ if (!Array.isArray(lastArg) && typeof lastArg === 'object') {
43
+ options = lastArg;
44
+ functionArguments = _args.slice(0, _args.length - 1);
45
+ }
46
+ const data = (0, encode_decode_transaction_1.encodeData)(jsonABIArgument, functionArguments);
47
+ const decimalGas = typeof options.gasLimit === 'number'
48
+ ? options.gasLimit /* user passed in "gasLimit" directly */
49
+ : typeof (jsonABIArgument === null || jsonABIArgument === void 0 ? void 0 : jsonABIArgument.gas) ===
50
+ 'number' /* ABI specified "gas". */
51
+ ? estimateGas(data)
52
+ : null;
53
+ const nodeResponse = yield (0, fetchers_1.post)(this._provider._rpcUrl, (0, fetchers_1.buildRPCPostBody)('eth_call', [
54
+ Object.assign({ to: this._address.toLowerCase(), data: data }, (decimalGas
55
+ ? { gas: `0x${decimalGas.toString(16)}` }
56
+ : {})),
57
+ 'latest',
58
+ ]));
59
+ return (0, encode_decode_transaction_1.decodeRPCResponse)(jsonABIArgument, nodeResponse);
60
+ }));
61
+ }
62
+ });
63
+ }
64
+ }
65
+ exports.BaseContract = BaseContract;
66
+ function defineReadOnly(object, name, value) {
67
+ Object.defineProperty(object, name, {
68
+ enumerable: true,
69
+ value: value,
70
+ writable: false,
71
+ });
72
+ }
73
+ exports.defineReadOnly = defineReadOnly;
74
+ /**
75
+ * Only accepts ABIS in JSON format. This allows for stronger typing and assurances of data-types
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { Contract, JsonRpcProvider } from 'essential-eth';
80
+ * // UNI airdrop contract
81
+ * const contractAddress = '0x090D4613473dEE047c3f2706764f49E0821D256e';
82
+ * const provider = new JsonRpcProvider();
83
+ *
84
+ * const JSONABI = [
85
+ * {
86
+ * inputs: [
87
+ * {
88
+ * internalType: 'uint256',
89
+ * name: 'index',
90
+ * type: 'uint256',
91
+ * },
92
+ * ],
93
+ * name: 'isClaimed',
94
+ * outputs: [
95
+ * {
96
+ * internalType: 'bool',
97
+ * name: '',
98
+ * type: 'bool',
99
+ * },
100
+ * ],
101
+ * stateMutability: 'view',
102
+ * type: 'function',
103
+ * },
104
+ * ]
105
+ *
106
+ * const contract = new Contract(
107
+ * contractAddress,
108
+ * JSONABI,
109
+ * provider,
110
+ * );
111
+ *
112
+ * (async () => {
113
+ * // prints boolean as to whether index 0 has claimed airdrop or not
114
+ * console.log(await contract.isClaimed(0));
115
+ * })()
116
+ *
117
+ *
118
+ * ```
119
+ */
120
+ class Contract extends BaseContract {
121
+ }
122
+ exports.Contract = Contract;
File without changes
@@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const big_js_1 = __importDefault(require("big.js"));
16
16
  const just_omit_1 = __importDefault(require("just-omit"));
17
17
  const web3_1 = __importDefault(require("web3"));
18
- const _1 = require(".");
18
+ const JsonRpcProvider_1 = require("../providers/JsonRpcProvider");
19
19
  // const rpcUrl = 'http://localhost:3001/post';
20
20
  const rpcUrl = 'https://free-eth-node.com/api/eth';
21
21
  describe('matches web3', () => {
@@ -30,7 +30,7 @@ describe('matches web3', () => {
30
30
  .toNumber()).toBeLessThan(4000000 /* 2616793 and 1187442 on recent tests */);
31
31
  }
32
32
  it('should allow default eth node to get latest block', () => __awaiter(void 0, void 0, void 0, function* () {
33
- const essentialEth = new _1.EssentialEth();
33
+ const essentialEth = new JsonRpcProvider_1.JsonRpcProvider();
34
34
  const web3 = new web3_1.default(rpcUrl);
35
35
  const [eeLatestBlock, web3LatestBlock] = yield Promise.all([
36
36
  essentialEth.getBlock('latest'),
@@ -39,7 +39,7 @@ describe('matches web3', () => {
39
39
  testBlockEquality(eeLatestBlock, web3LatestBlock);
40
40
  }));
41
41
  it('should get latest block', () => __awaiter(void 0, void 0, void 0, function* () {
42
- const essentialEth = new _1.EssentialEth(rpcUrl);
42
+ const essentialEth = new JsonRpcProvider_1.JsonRpcProvider(rpcUrl);
43
43
  const web3 = new web3_1.default(rpcUrl);
44
44
  const [eeLatestBlock, web3LatestBlock] = yield Promise.all([
45
45
  essentialEth.getBlock('latest'),
@@ -48,7 +48,7 @@ describe('matches web3', () => {
48
48
  testBlockEquality(eeLatestBlock, web3LatestBlock);
49
49
  }));
50
50
  it('should get earliest block', () => __awaiter(void 0, void 0, void 0, function* () {
51
- const essentialEth = new _1.EssentialEth(rpcUrl);
51
+ const essentialEth = new JsonRpcProvider_1.JsonRpcProvider(rpcUrl);
52
52
  const web3 = new web3_1.default(rpcUrl);
53
53
  const [eeEarliestBlock, web3EarliestBlock] = yield Promise.all([
54
54
  essentialEth.getBlock('earliest'),
@@ -58,7 +58,7 @@ describe('matches web3', () => {
58
58
  }));
59
59
  const blockNumber = Math.floor(Math.random() * 13250630);
60
60
  it(`should get random block as decimal integer. (block #${blockNumber})`, () => __awaiter(void 0, void 0, void 0, function* () {
61
- const essentialEth = new _1.EssentialEth(rpcUrl);
61
+ const essentialEth = new JsonRpcProvider_1.JsonRpcProvider(rpcUrl);
62
62
  const web3 = new web3_1.default(rpcUrl);
63
63
  const [eeRandomBlock, web3RandomBlock] = yield Promise.all([
64
64
  essentialEth.getBlock(blockNumber, true),
@@ -0,0 +1,2 @@
1
+ import { JSONABI } from '../../../types/Contract.types';
2
+ export declare const abi: JSONABI;