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.
- package/lib/cjs/classes/Contract.d.ts +69 -0
- package/lib/cjs/classes/Contract.js +122 -0
- package/lib/cjs/{rpc → classes}/get-block.test.d.ts +0 -0
- package/lib/cjs/{rpc → classes}/get-block.test.js +5 -5
- package/lib/cjs/classes/test/Contract/crv-abi.d.ts +2 -0
- package/lib/cjs/classes/test/Contract/crv-abi.js +488 -0
- package/lib/{esm/rpc/get-block.test.d.ts → cjs/classes/test/Contract/crv.test.d.ts} +0 -0
- package/lib/cjs/classes/test/Contract/crv.test.js +48 -0
- package/lib/cjs/classes/test/Contract/fei-abi.d.ts +2 -0
- package/lib/cjs/classes/test/Contract/fei-abi.js +526 -0
- package/lib/cjs/classes/test/Contract/fei.test.d.ts +1 -0
- package/lib/cjs/classes/test/Contract/fei.test.js +62 -0
- package/lib/cjs/classes/test/Contract/foo-abi.d.ts +2 -0
- package/lib/cjs/classes/test/Contract/foo-abi.js +42 -0
- package/lib/cjs/classes/test/Contract/foo.test.d.ts +1 -0
- package/lib/cjs/classes/test/Contract/foo.test.js +25 -0
- package/lib/cjs/classes/test/Contract/uni.test.d.ts +1 -0
- package/lib/cjs/classes/test/Contract/uni.test.js +67 -0
- package/lib/cjs/classes/test/Contract/uniswap-abi.d.ts +2 -0
- package/lib/cjs/classes/test/Contract/uniswap-abi.js +121 -0
- package/lib/cjs/{rpc → classes}/utils/clean-block.d.ts +0 -0
- package/lib/cjs/{rpc → classes}/utils/clean-block.js +0 -0
- package/lib/cjs/{rpc → classes}/utils/clean-transaction.d.ts +0 -0
- package/lib/cjs/{rpc → classes}/utils/clean-transaction.js +0 -0
- package/lib/cjs/classes/utils/encode-decode-transaction.d.ts +3 -0
- package/lib/cjs/classes/utils/encode-decode-transaction.js +100 -0
- package/lib/cjs/classes/utils/fetchers.d.ts +9 -0
- package/lib/cjs/{rpc → classes}/utils/fetchers.js +8 -1
- package/lib/cjs/{rpc → classes}/utils/hex-to-decimal.d.ts +0 -0
- package/lib/cjs/{rpc → classes}/utils/hex-to-decimal.js +0 -0
- package/lib/cjs/index.d.ts +10 -6
- package/lib/cjs/index.js +12 -9
- package/lib/cjs/{rpc/index.d.ts → providers/JsonRpcProvider.d.ts} +5 -1
- package/lib/cjs/{rpc/index.js → providers/JsonRpcProvider.js} +14 -7
- package/lib/cjs/shared/tiny-big/tiny-big.d.ts +2 -2
- package/lib/cjs/types/Contract.types.d.ts +22 -0
- package/lib/cjs/types/Contract.types.js +2 -0
- package/lib/cjs/{ether-to-wei.d.ts → utils/ether-to-wei.d.ts} +3 -2
- package/lib/cjs/{ether-to-wei.js → utils/ether-to-wei.js} +4 -8
- package/lib/cjs/{is-address.d.ts → utils/is-address.d.ts} +0 -0
- package/lib/cjs/{is-address.js → utils/is-address.js} +3 -3
- package/lib/cjs/utils/tests/ether-to-wei.test.d.ts +1 -0
- package/lib/cjs/utils/tests/ether-to-wei.test.js +66 -0
- package/lib/cjs/utils/tests/is-address.test.d.ts +1 -0
- package/lib/cjs/utils/tests/is-address.test.js +56 -0
- package/lib/cjs/utils/tests/to-checksum-address.test.d.ts +1 -0
- package/lib/cjs/utils/tests/to-checksum-address.test.js +43 -0
- package/lib/cjs/utils/tests/wei-to-ether.test.d.ts +1 -0
- package/lib/cjs/utils/tests/wei-to-ether.test.js +69 -0
- package/lib/cjs/{to-checksum-address.d.ts → utils/to-checksum-address.d.ts} +0 -0
- package/lib/cjs/{to-checksum-address.js → utils/to-checksum-address.js} +1 -1
- package/lib/cjs/{wei-to-ether.d.ts → utils/wei-to-ether.d.ts} +3 -1
- package/lib/cjs/{wei-to-ether.js → utils/wei-to-ether.js} +4 -8
- package/lib/esm/classes/Contract.d.ts +12 -0
- package/lib/esm/classes/Contract.js +63 -0
- package/lib/esm/classes/get-block.test.d.ts +1 -0
- package/lib/esm/{rpc → classes}/get-block.test.js +5 -5
- package/lib/esm/classes/test/Contract/crv-abi.d.ts +2 -0
- package/lib/esm/classes/test/Contract/crv-abi.js +470 -0
- package/lib/esm/classes/test/Contract/crv.test.d.ts +1 -0
- package/lib/esm/classes/test/Contract/crv.test.js +43 -0
- package/lib/esm/classes/test/Contract/fei-abi.d.ts +2 -0
- package/lib/esm/classes/test/Contract/fei-abi.js +521 -0
- package/lib/esm/classes/test/Contract/fei.test.d.ts +1 -0
- package/lib/esm/classes/test/Contract/fei.test.js +46 -0
- package/lib/esm/classes/test/Contract/foo-abi.d.ts +2 -0
- package/lib/esm/classes/test/Contract/foo-abi.js +33 -0
- package/lib/esm/classes/test/Contract/foo.test.d.ts +1 -0
- package/lib/esm/classes/test/Contract/foo.test.js +14 -0
- package/lib/esm/classes/test/Contract/uni.test.d.ts +1 -0
- package/lib/esm/classes/test/Contract/uni.test.js +59 -0
- package/lib/esm/classes/test/Contract/uniswap-abi.d.ts +2 -0
- package/lib/esm/classes/test/Contract/uniswap-abi.js +116 -0
- package/lib/esm/{rpc → classes}/utils/clean-block.d.ts +0 -0
- package/lib/esm/{rpc → classes}/utils/clean-block.js +0 -0
- package/lib/esm/{rpc → classes}/utils/clean-transaction.d.ts +0 -0
- package/lib/esm/{rpc → classes}/utils/clean-transaction.js +0 -0
- package/lib/esm/classes/utils/encode-decode-transaction.d.ts +3 -0
- package/lib/esm/classes/utils/encode-decode-transaction.js +85 -0
- package/lib/esm/classes/utils/fetchers.d.ts +9 -0
- package/lib/esm/{rpc → classes}/utils/fetchers.js +8 -1
- package/lib/esm/{rpc → classes}/utils/hex-to-decimal.d.ts +0 -0
- package/lib/esm/{rpc → classes}/utils/hex-to-decimal.js +0 -0
- package/lib/esm/index.d.ts +10 -6
- package/lib/esm/index.js +7 -6
- package/lib/esm/{rpc/index.d.ts → providers/JsonRpcProvider.d.ts} +2 -1
- package/lib/esm/{rpc/index.js → providers/JsonRpcProvider.js} +8 -5
- package/lib/esm/shared/tiny-big/tiny-big.d.ts +2 -2
- package/lib/esm/types/Contract.types.d.ts +22 -0
- package/lib/esm/types/Contract.types.js +1 -0
- package/lib/esm/utils/ether-to-wei.d.ts +3 -0
- package/lib/esm/utils/ether-to-wei.js +7 -0
- package/lib/esm/{is-address.d.ts → utils/is-address.d.ts} +0 -0
- package/lib/esm/{is-address.js → utils/is-address.js} +2 -2
- package/lib/esm/utils/tests/ether-to-wei.test.d.ts +1 -0
- package/lib/esm/utils/tests/ether-to-wei.test.js +36 -0
- package/lib/esm/utils/tests/is-address.test.d.ts +1 -0
- package/lib/esm/utils/tests/is-address.test.js +49 -0
- package/lib/esm/utils/tests/to-checksum-address.test.d.ts +1 -0
- package/lib/esm/utils/tests/to-checksum-address.test.js +36 -0
- package/lib/esm/utils/tests/wei-to-ether.test.d.ts +1 -0
- package/lib/esm/utils/tests/wei-to-ether.test.js +38 -0
- package/lib/esm/{to-checksum-address.d.ts → utils/to-checksum-address.d.ts} +0 -0
- package/lib/esm/{to-checksum-address.js → utils/to-checksum-address.js} +1 -1
- package/lib/esm/utils/wei-to-ether.d.ts +3 -0
- package/lib/esm/utils/wei-to-ether.js +7 -0
- package/package.json +11 -11
- package/readme.md +68 -5
- package/lib/cjs/rpc/utils/fetchers.d.ts +0 -7
- package/lib/esm/ether-to-wei.d.ts +0 -2
- package/lib/esm/ether-to-wei.js +0 -8
- package/lib/esm/rpc/utils/fetchers.d.ts +0 -7
- package/lib/esm/wei-to-ether.d.ts +0 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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),
|