Compare commits

...

218 Commits

Author SHA1 Message Date
Richard Moore
3abfdffffa Updated dist files. 2020-11-17 20:36:19 -05:00
Richard Moore
02546b9401 Fix browser ws alias. 2020-11-17 20:07:22 -05:00
Richard Moore
fff72ef369 Use faux-registry to better simulate real world React Native apps. 2020-11-17 18:48:02 -05:00
Richard Moore
f10977ab35 Fixing React Native tests. 2020-11-17 13:41:43 -05:00
Richard Moore
1729f804fb Prevent node 8 from using rollup (contains incompatible syntax). 2020-11-17 02:51:54 -05:00
Richard Moore
8933467c01 Updated dist build. 2020-11-16 23:07:24 -05:00
Richard Moore
22bd0c76dd Use dist files in browser tests. 2020-11-16 21:20:35 -05:00
Richard Moore
4809325bee Refactoring dist build process. 2020-11-14 17:42:36 -05:00
Richard Moore
e0b1d0e1e0 Updated dist files. 2020-10-22 21:55:40 -04:00
Richard Moore
fe17a29581 Allow 0x as a numeric value for 0 in Provider formatter (#1104). 2020-10-22 21:03:51 -04:00
Richard Moore
d8cdd0e94c admin: Updated spell checker and mime-types. 2020-10-22 20:01:57 -04:00
Richard Moore
5a9bc30336 Updated dist files. 2020-10-22 20:01:18 -04:00
Richard Moore
28f60d5ef8 Use POST for long requests in EtherscanProvider (#1093). 2020-10-22 19:46:52 -04:00
Richard Moore
a21202c66b Export verifyTypedData in utils (#687). 2020-10-20 00:17:43 -04:00
Richard Moore
116cc89686 admin: updated publish script to allow forcing publish 2020-10-20 00:17:02 -04:00
Richard Moore
550ecf2f25 Added verifyTypedData for EIP-712 typed data (#687). 2020-10-20 00:15:55 -04:00
Richard Moore
7b19fdfeed Updated dist files. 2020-10-19 01:27:15 -04:00
Richard Moore
15a90af5be Fix signTypedData call for JsonRpcSigner (#687). 2020-10-19 01:17:36 -04:00
Richard Moore
86146650d8 Updated dist files. 2020-10-18 23:19:16 -04:00
Richard Moore
7fcae25a78 Refactoring test case generation scripts. 2020-10-18 21:55:12 -04:00
Richard Moore
15893537c3 Added EIP-712 test cases (#687). 2020-10-18 21:54:21 -04:00
Richard Moore
be4e2164e6 Initial Signer support for EIP-712 signed typed data (#687). 2020-10-18 21:52:25 -04:00
Richard Moore
3e676f21b0 Split hash library files up. 2020-10-18 21:45:32 -04:00
Richard Moore
5a4dd5a703 Added EIP-712 multi-dimensional array support (#687). 2020-10-12 00:58:04 -04:00
Richard Moore
345a830dc4 Consolidated TypedDataEncoder methods (#687). 2020-10-10 04:44:17 -04:00
Richard Moore
cfa6dec293 Initial EIP-712 utilities (#687). 2020-10-10 04:12:52 -04:00
Richard Moore
5a6d9a3a38 Added test cases for PocketProvider. 2020-10-08 21:29:14 -04:00
Richard Moore
a62d20d86f Added initial PocketProvider (#1052). 2020-10-08 20:21:32 -04:00
Richard Moore
5e0e3de52e Admin: Upddated spell-check script. 2020-10-07 20:11:34 -04:00
Richard Moore
d78b7a3998 Updated dist files. 2020-10-07 20:10:50 -04:00
Richard Moore
5abc2f36e2 Better error message for parseUnits of non-strings (#981). 2020-10-07 19:50:27 -04:00
Richard Moore
38a068bcea Add gzip support to AlchemyProivder and InfuraProvider fetching (#1085). 2020-10-07 19:43:20 -04:00
Richard Moore
65772a8e1a Add gzip support to getUrl in node (#1085). 2020-10-07 19:40:28 -04:00
Richard Moore
a022093ce0 Added CommunityResourcable to mark Providers as highly throttled. 2020-10-07 17:28:18 -04:00
Richard Moore
50f84b3c57 Updated dist files. 2020-10-07 00:25:28 -04:00
Richard Moore
df21d5326a Admin: Added retry logic, fixed version exports and removed unnecessary logging. 2020-10-07 00:11:47 -04:00
Richard Moore
e65fa8fc00 Docs: Added referral link to Alchemy. 2020-10-07 00:09:10 -04:00
Richard Moore
8e682cc848 Added debug event info to WebSocketProvider (#1018). 2020-10-06 21:12:49 -04:00
Richard Moore
ef8e4330d3 Docs: Merge typos fixes (#1082). 2020-10-06 17:20:25 -04:00
Richard Moore
a0278615a4 Merge branch 'fix-doc-typos' of git://github.com/yuetloo/ethers.js into yuetloo-fix-doc-typos 2020-10-06 17:20:07 -04:00
Richard Moore
d8821d7317 Docs: Fixed typo (#1087). 2020-10-06 17:18:09 -04:00
Richard Moore
78a82d9ff2 CI: Force INFURA for provider and contract tests. 2020-10-06 16:58:52 -04:00
Richard Moore
1ac7decd89 CI: Removed solc tests to try fixing Promise issues. 2020-10-06 14:51:55 -04:00
Richard Moore
4fa7276cc1 CI: Updated provider tests. 2020-10-06 01:46:23 -04:00
Richard Moore
6ae222d55c CI: Temporarily remove Cloudflare from tests. 2020-10-05 23:51:14 -04:00
Richard Moore
efeeda5e5c CI: Updated dist files. 2020-10-05 23:27:03 -04:00
Richard Moore
c75c937b13 Updated dist files. 2020-10-05 22:17:15 -04:00
Richard Moore
d1ee596292 CI: Fix provider timeout. 2020-10-05 21:25:37 -04:00
Richard Moore
b61e2cc96a Updated dist files. 2020-10-05 16:49:47 -04:00
Richard Moore
ca94445f0f Added custom API key for Alchemy in test suite. 2020-10-05 16:44:40 -04:00
Richard Moore
4d95fe925d Updated dist files. 2020-10-05 15:46:12 -04:00
Richard Moore
f3e5b0ded1 ABI encoding performance additions (#1012). 2020-10-05 15:34:00 -04:00
Yuet Loo Wong
8ce9761bad fix typo begine to begins 2020-10-03 14:24:47 -03:00
Richard Moore
3d051e454d Export hexConcat in utils (#1079). 2020-10-03 13:18:56 -04:00
Yuet Loo Wong
c48ad4421f fix typos in documentation 2020-10-03 13:30:15 -03:00
Richard Moore
40264ff900 Cache chain ID for WebSocketProvider (#1054). 2020-10-03 02:54:03 -04:00
Richard Moore
e86f83b9c0 Docs: Fixed typo (#1074). 2020-10-03 02:23:32 -04:00
Richard Moore
e986b09e58 Build: Added new publish script. 2020-10-03 02:20:50 -04:00
Richard Moore
22dee96f51 Updated dist files. 2020-09-26 03:27:47 -04:00
Richard Moore
0c614b7097 CI: Refactored changelog admin script. 2020-09-26 03:25:54 -04:00
Richard Moore
f0a5869c53 Add more accurate intrinsic gas cost to ABI calls with specified gas property (#1058). 2020-09-26 02:17:05 -04:00
Richard Moore
5cd1668e0d Better errors for unconfigured ENS names (#1066). 2020-09-26 01:23:43 -04:00
Richard Moore
0b061d68cc CI: Fixed reaxct-native tests with new scripts. 2020-09-23 15:53:42 -04:00
Richard Moore
ffa4a2d054 CI: Fix test cases. 2020-09-23 01:00:30 -04:00
Richard Moore
f8072a8004 Build: Added node 8 support. 2020-09-23 00:23:02 -04:00
Richard Moore
4306b3563a Updated CLI solc to versin 0.7.1. 2020-09-23 00:00:21 -04:00
Richard Moore
c4de88af6f Docs: Fix typo (#1044). 2020-09-22 23:51:59 -04:00
Richard Moore
9486185ceb Updated dist files. 2020-09-22 23:18:45 -04:00
Richard Moore
261eb04e97 Ignore metadata files in each package. 2020-09-22 22:57:17 -04:00
Richard Moore
832bd6c908 Refactored admin scripts. 2020-09-22 22:54:48 -04:00
Richard Moore
05844caf85 Extended Karma testing timeout managed by tests. 2020-09-21 22:44:37 -04:00
Richard Moore
f7e82fcb46 Started refactoring admin scripts into TypeScript. 2020-09-21 01:14:06 -04:00
Richard Moore
27b3af0a7b Removed dead files. 2020-09-17 17:17:15 -04:00
Richard Moore
f733fac875 Custom API key for Etherscan during tests (#824). 2020-09-17 03:44:29 -04:00
Richard Moore
1097a1b020 Replaced lerna with admin hoist and link scripts. 2020-09-17 03:40:55 -04:00
Richard Moore
ea422d63b3 Replaced lerna with admin hoist and link scripts. 2020-09-17 03:39:25 -04:00
Richard Moore
a3821f6c4b Updated dist files. 2020-09-16 19:44:55 -04:00
Richard Moore
de8a717b4c Refactored provider test cases to more reliable CI. 2020-09-16 19:38:01 -04:00
Richard Moore
86e0269a86 Extend Karma timeout for new provider tests. 2020-09-16 11:00:29 -04:00
Richard Moore
d15c097dba Updated dist files. 2020-09-16 03:08:36 -04:00
Richard Moore
49f71574f4 More robust blockchain error detection (#1047) 2020-09-16 02:19:28 -04:00
Richard Moore
9ee685df46 Forward blockchain errors from Signer during gas estimation (#1047). 2020-09-15 22:14:22 -04:00
Richard Moore
263bfe5ce6 Improve fetch errors with looser mime-type detection (#1047). 2020-09-15 22:12:56 -04:00
Richard Moore
e8a9eea493 CI: Add node-hid requirements to all jobs. 2020-09-12 01:31:17 -04:00
Richard Moore
1c499c9f42 CI: Add node-hid requirements. 2020-09-12 01:18:28 -04:00
Richard Moore
c1a297db99 Updated dist files. 2020-09-11 02:10:58 -04:00
Richard Moore
be92339696 Force content-length in web fetching. 2020-09-11 01:10:53 -04:00
Richard Moore
bc3eeeca39 Better error forwarding from FallbackProvider (#1021). 2020-09-11 01:10:15 -04:00
Richard Moore
042b74e6ee Add clamping functions to FixedNumber (#1037). 2020-09-10 01:16:28 -04:00
Richard Moore
6e10675adf Docs: updated dist files. 2020-09-08 01:12:15 -04:00
Richard Moore
2b83feb6bd Docs: fixed markdown. 2020-09-08 01:11:29 -04:00
Richard Moore
19fd55e935 Docs: add example for custom ENS address (#911). 2020-09-08 01:10:08 -04:00
Richard Moore
710998b19a Docs: Added link to React-Native. 2020-09-08 00:36:44 -04:00
Richard Moore
828a35fdca Merge branch 'ChrisChinchilla-ethereum-basics' 2020-09-08 00:30:09 -04:00
Richard Moore
95bcda0d8a Merge branch 'ethereum-basics' of git://github.com/ChrisChinchilla/ethers.js into ChrisChinchilla-ethereum-basics 2020-09-08 00:29:14 -04:00
Richard Moore
ccfe205db8 Merge branch 'ChrisChinchilla-master' 2020-09-08 00:27:57 -04:00
Richard Moore
f9684aeec2 Merge branch 'master' of git://github.com/ChrisChinchilla/ethers.js into ChrisChinchilla-master 2020-09-08 00:26:54 -04:00
Richard Moore
9d5de46c84 Updated dist files. 2020-09-07 19:55:52 -04:00
Richard Moore
28ee745211 Docs: added React Native and fixed typos. 2020-09-07 19:40:50 -04:00
Richard Moore
4e394fc680 Allow events to use compact bytes ABI coded data for Solidity 0.4 external events (#891, #992). 2020-09-07 19:35:37 -04:00
Richard Moore
97acaa1129 Docs: fixed typo (#1026). 2020-09-06 01:57:06 -04:00
Richard Moore
fe280c8458 Updated dist files. 2020-09-05 23:57:15 -04:00
Richard Moore
bdccf7b8d3 Synced unorm in shims to most recent version. 2020-09-05 23:45:25 -04:00
Richard Moore
0234cfbbef Updated dist files. 2020-09-05 23:35:35 -04:00
Richard Moore
cadb28d6b3 Fixed LedgerSigner sendTransaction (#936). 2020-09-05 04:37:47 -04:00
Richard Moore
72385c2287 Added BrainWallet to experimental exports. 2020-09-05 04:29:53 -04:00
Richard Moore
201e5ced9c More readable server errors. 2020-09-05 04:29:08 -04:00
Richard Moore
bf481f4bbf Updated dist files. 2020-09-05 01:23:16 -04:00
Richard Moore
681f2a50b2 Fixed test retry in browsers. 2020-09-05 01:14:25 -04:00
Richard Moore
18fdb96fe1 Updated dist files. 2020-09-04 03:21:51 -04:00
Richard Moore
35b64b9a65 Add test retry support to reporter. 2020-09-04 03:15:07 -04:00
Richard Moore
4ca98825d4 Updated dist files. 2020-09-04 02:11:49 -04:00
Richard Moore
0558bba8eb Added retry logic to provider tests. 2020-09-04 02:06:04 -04:00
Richard Moore
a440317594 Updated dist files. 2020-09-04 01:37:14 -04:00
Richard Moore
2359a98641 Fixed link in docs (#1028). 2020-09-04 01:26:29 -04:00
Richard Moore
a32fbd835d Ignore coverage build folder. 2020-09-04 01:24:54 -04:00
Richard Moore
6fd3bb62d1 Added memory-like support and new opcodes to asm. 2020-09-04 01:20:35 -04:00
Richard Moore
83db8a6bd1 Added basic ENS resolver functions for contenthash, text and multi-coin addresses (#1003). 2020-09-04 01:18:57 -04:00
Richard Moore
f24240eddf Updated dist files. 2020-08-27 22:04:58 -04:00
Richard Moore
d01d0c8448 Added support for changing Reporter logging function. 2020-08-27 21:58:34 -04:00
Richard Moore
d3b473e7c7 Added test-react script. 2020-08-27 21:56:40 -04:00
Richard Moore
57eb5b777e Initial React Native test harness (#993). 2020-08-27 21:54:16 -04:00
Richard Moore
240aac5683 Updating shims for constrained environments (#944, #993). 2020-08-27 14:23:23 -04:00
Richard Moore
8abdbbbf63 Updating shims for constrained environments (#944, #993). 2020-08-27 14:22:58 -04:00
Richard Moore
5fcd03f27e Updated dist files. 2020-08-25 01:53:48 -04:00
Richard Moore
cb8f4a3a4e Updated docs for all packages on npm pages (#1013). 2020-08-25 01:09:48 -04:00
Richard Moore
8facc1a530 Added JSON support to BigNumber (#1010). 2020-08-24 23:15:03 -04:00
Richard Moore
17fdca8994 CI: added dummy file to preserve output folder. 2020-08-23 20:00:39 -04:00
Richard Moore
df0caab5d6 CI: added coverage artifacts. 2020-08-23 19:44:43 -04:00
Richard Moore
9733927f82 CI: added coverage artifacts. 2020-08-23 19:42:49 -04:00
Richard Moore
28dbcfc38c CI: added coverage artifacts. 2020-08-23 19:39:57 -04:00
Richard Moore
bb8e77dc70 Updated admin scripts. 2020-08-23 16:37:24 -04:00
Richard Moore
ae619bcfc7 CI: do not build dist files in node 8 (dependency syntax issues). 2020-08-23 16:35:15 -04:00
Richard Moore
5b5904ea99 Updated packages for security audit. 2020-08-20 17:22:41 -04:00
Richard Moore
8f4b3027ef Run bootstrap in postinstall for better testing UX (#1001). 2020-08-20 17:09:30 -04:00
Richard Moore
e9009631d5 Fixed typo in docs (#976). 2020-08-20 16:51:41 -04:00
Richard Moore
be273f26e9 Fixed typos in readme (#996). 2020-08-20 16:49:34 -04:00
Richard Moore
b0c082d728 Fix emitted error for ABI code array count mismatch (#1004). 2020-08-20 15:33:16 -04:00
Richard Moore
9640e864a6 Updated dist files. 2020-08-04 20:55:55 -04:00
Richard Moore
e1bbb064a1 Do not mutate connection in fetchJson. 2020-08-04 20:49:40 -04:00
Richard Moore
d38ebaeb23 Updated dist files. 2020-08-04 20:33:21 -04:00
Richard Moore
39a16260a7 Updated dist files. 2020-07-31 01:32:26 -04:00
Richard Moore
2c49a52a41 Renamed and documented experimental fetchData function. 2020-07-31 01:15:22 -04:00
Richard Moore
c414a45825 Updated dist files. 2020-07-30 17:04:53 -04:00
Richard Moore
e2d6f281d5 Abstract fetchJson for data. 2020-07-30 17:03:36 -04:00
Richard Moore
ba404ffb0b Updated dist files. 2020-07-20 02:27:26 -04:00
Richard Moore
af10705632 Add testcases for setLogLevel (#947). 2020-07-20 01:43:47 -04:00
Richard Moore
5443363de4 Fix Logger setLogLevel with enum case mismatch (#947). 2020-07-20 01:43:02 -04:00
Richard Moore
e3f7426af4 Removed UUID dependency from json-wallets (#966). 2020-07-20 01:33:15 -04:00
Richard Moore
8b907d5f5f Added link to Chrome CLI switches for Karma Browser Tests. 2020-07-19 01:19:38 -04:00
Richard Moore
771190202f Fixed typo in DAI docs example (#958). 2020-07-18 06:08:45 -04:00
Richard Moore
5a4e3ede2a Updated browser tests to lie about User-Agent to fix Etherscan tests. 2020-07-18 03:58:19 -04:00
Richard Moore
78b350bbc5 Removed unnecessary dependency from BigNumber (#951). 2020-07-16 05:47:58 -04:00
Richard Moore
fe2f0f7489 Updated dist files. 2020-07-16 05:35:32 -04:00
Richard Moore
9f20258d5d Longer Etherscan throttle slot interval. 2020-07-16 05:29:33 -04:00
Richard Moore
63dd3d4682 Fixed ENS overrides for the default provider (#959). 2020-07-16 05:27:36 -04:00
Richard Moore
b1166211e2 Updated dist files. 2020-07-15 14:00:36 -04:00
Richard Moore
7d43545303 Added Retry-After support and adjustable slot interval to fetchJson. 2020-07-14 22:50:05 -04:00
Chris Chinchilla
32de4f1930 Minor typo changes 2020-07-14 14:12:22 +02:00
Chris Chinchilla
232c7a895b Further review 2020-07-14 14:08:59 +02:00
Chris Chinchilla
c443a8bd9d Further review 2020-07-14 14:08:59 +02:00
Chris Chinchilla
0940944048 Start review of getting started guide 2020-07-14 14:08:59 +02:00
Chris Chinchilla
3ac0aeaac6 Further review 2020-07-14 14:05:55 +02:00
Chris Chinchilla
8557285da6 Merge branch 'master' of github.com:ethers-io/ethers.js 2020-07-14 13:14:08 +02:00
Chris Chinchilla
fb46e0fd79 Further review 2020-07-14 13:13:52 +02:00
Richard Moore
6fa853b309 Updated dist files. 2020-07-14 02:33:30 -04:00
Richard Moore
88c7eaed06 Added initial throttling support (#139, #904, #926). 2020-07-14 02:26:45 -04:00
Richard Moore
c730cbc629 docs: Added Provider api-keys page. 2020-07-14 02:12:59 -04:00
Richard Moore
4ef3fc501b docs: Updated code samples to use WebSocketProvider destroy. 2020-07-14 02:11:57 -04:00
Richard Moore
c22fd3e73d Fixed CI fail-fast and continue-on-error 2020-07-13 19:48:31 -04:00
Richard Moore
78eb9d6176 Updated dist files. 2020-07-13 09:34:20 -04:00
Richard Moore
00f4ba0eeb Prevent a CI job failure from killing the workflow. 2020-07-13 09:28:08 -04:00
Richard Moore
588f64c760 Use status code 1000 on WebSocket hangup for compatibility. 2020-07-13 09:27:08 -04:00
Richard Moore
6039464342 Updated dist files. 2020-07-13 08:50:41 -04:00
Richard Moore
866ab30400 Removing node v14 from CI (temporary). 2020-07-13 08:42:40 -04:00
Richard Moore
57fd6f0604 Updated WebSocketProvider to use web-style event listener API. 2020-07-13 08:41:54 -04:00
Richard Moore
49e83b0c4d Updated dist files. 2020-07-13 08:03:56 -04:00
Richard Moore
1cfe4962aa Added tests to help fill out coverage tests. 2020-07-13 07:30:49 -04:00
Richard Moore
79b1da130b Normalize formatUnits to simplified decimals. 2020-07-13 07:28:56 -04:00
Richard Moore
e128bfcd10 Prevent zero-padding on Solidity type lengths. 2020-07-13 07:28:05 -04:00
Richard Moore
e3d3e604f2 Set sensible defaults for INFURA and AlchemyAPI getWebSocketProvider methods. 2020-07-13 07:26:40 -04:00
Richard Moore
619a8888eb Added logger assert methods. 2020-07-13 07:24:57 -04:00
Richard Moore
c304d37cbd Added coverage keep-alive reporter. 2020-07-13 07:23:41 -04:00
Richard Moore
149e0839b1 Added TypeScript map generation and files. 2020-07-13 06:50:29 -04:00
Richard Moore
0c1d55b6dc Added initial code coverage testing. 2020-07-13 06:48:33 -04:00
Richard Moore
d0a79c6a13 Added destroy to WebSocketProvider. 2020-07-12 05:02:08 -04:00
Richard Moore
c6601769ad Updated packages (security updates). 2020-07-08 12:33:55 -04:00
Richard Moore
a78ca7eb8d Updated docs. 2020-07-07 23:20:32 -04:00
Richard Moore
59239d2f61 Updated dist files. 2020-07-07 23:19:00 -04:00
Richard Moore
bf65ddbff0 Fixed splitSignature when recoveryParam is encoded directly (#893, #933). 2020-07-07 22:54:35 -04:00
Richard Moore
7e56f3d392 Fixed BigNumber string validation (#935). 2020-07-07 22:18:02 -04:00
Chris Chinchilla
84d6fdfc37 Start review of getting started guide 2020-07-07 14:41:23 +02:00
Richard Moore
4124a568fd Adding @yuetloo web3 migration docs. 2020-07-06 18:26:11 -04:00
Yuet Loo Wong
db7202578d migration from web3 2020-07-06 17:47:51 -04:00
Richard Moore
e38fa1cdd4 Updated spell check script. 2020-07-05 00:03:50 -04:00
Richard Moore
a1b2a62e6b Updated docs build. 2020-07-05 00:02:47 -04:00
Richard Moore
f34be4e2c2 Updated dist files. 2020-07-05 00:01:57 -04:00
Richard Moore
84e253f3f9 Prevent negative exponents in BigNumber (#925). 2020-07-04 23:41:05 -04:00
Richard Moore
0fd9aa5cb6 Fixed StaticJsonRpcProvider when auto-detecting network (#901). 2020-07-04 23:06:18 -04:00
Richard Moore
2a73b6ed34 Updated docs for ESM import. 2020-07-04 22:46:47 -04:00
Richard Moore
0838135d4a Fixed typos in docs (#921). 2020-07-04 22:44:27 -04:00
Richard Moore
a144ed8a71 Fixed migration docs (#890). 2020-07-04 21:29:18 -04:00
Richard Moore
c646a0c881 Updated docs build. 2020-07-03 01:54:56 -04:00
Richard Moore
0059b7e468 Fixed documentation typos (#895, #917, #924). 2020-07-03 01:44:17 -04:00
Richard Moore
4838874127 Added WebSocket static method to Alchemy provider and updated Alchemy URLs. 2020-07-03 01:41:32 -04:00
Richard Moore
96cb44025b Updated dist files. 2020-06-29 00:54:30 -04:00
Richard Moore
7fe702d59b Fixed typo in error string. 2020-06-29 00:45:47 -04:00
Richard Moore
9e1434503e Updated elliptic package to address possible malleability issue; which should not affect Ethereum. 2020-06-29 00:40:17 -04:00
Richard Moore
08c74e9a13 Fixed FixedNumber unguarded constructor and added isZero (#898). 2020-06-29 00:38:27 -04:00
Richard Moore
c53864de0a Added StaticJsonRpcProvider for reducing calls to chainId in certain cases (#901). 2020-06-29 00:21:59 -04:00
Richard Moore
8c1ff4c862 Allow getDefaultProvider to accept a URL as a network. 2020-06-29 00:06:31 -04:00
Richard Moore
987b5354cc Make network an optional parameter to WebSocketProvider. 2020-06-29 00:04:45 -04:00
Richard Moore
1a4f7d1b53 Updated docs. 2020-06-17 23:38:59 -04:00
Richard Moore
f9e9347e69 Removed deprecated errors package. 2020-06-17 23:34:53 -04:00
Richard Moore
d00362eb70 Updated badges in docs. 2020-06-15 02:43:17 -04:00
Richard Moore
8ed67a5c19 Fixed typo in docs (#885). 2020-06-15 02:25:46 -04:00
Richard Moore
f99029b49a Merge branch 'master' of github.com:ethers-io/ethers.js 2020-06-13 21:39:55 -04:00
Richard Moore
88e68495b6 Create security policy.
Create security policy.
2020-06-13 17:21:50 -04:00
1690 changed files with 42781 additions and 34312 deletions

View File

@@ -6,29 +6,44 @@ on:
- master
jobs:
test-node:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [8.x, 10.x, 12.x, 13.x]
node-version: [ 8.x, 10.x, 12.x, 13.x ]
steps:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- uses: actions/checkout@v2
- run: npm ci
- run: npm run bootstrap
- run: npm run test-node
- name: Checkout repository
uses: actions/checkout@v2
- name: Install node-hid requirements
run: sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libudev-dev
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-node
test-browser:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
module: [ 'esm', 'umd' ]
@@ -36,8 +51,90 @@ jobs:
- uses: actions/setup-node@v1
with:
node-version: 12.x
- uses: actions/checkout@v2
- run: npm ci
- run: npm run bootstrap
- run: npm run test-browser-${{ matrix.module }}
- name: Checkout repository
uses: actions/checkout@v2
- name: Install node-hid requirements
run: sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libudev-dev
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-browser-${{ matrix.module }}
test-react-native:
runs-on: macos-latest
# Temporary for testing CI
continue-on-error: true
strategy:
fail-fast: false
steps:
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Checkout repository
uses: actions/checkout@v2
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-react
coverage:
name: Coverage
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Checkout repository
uses: actions/checkout@v2
- name: Install node-hid requirements
run: sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libudev-dev
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-coverage
- name: Upload coverage summary
uses: actions/upload-artifact@v2
with:
name: coverage-summary
path: ./output/summary.txt
- name: Tar files
run: tar -cvf ./output/coverage.tar ./output/lcov-report/
- name: Upload coverage
uses: actions/upload-artifact@v2
with:
name: coverage-complete
path: ./output/coverage.tar

7
.gitignore vendored
View File

@@ -1,4 +1,7 @@
node_modules/
packages/*/node_modules
packages/*/lib._esm
.package_node_modules/
obsolete/
.DS_Store
.tmp/
@@ -18,3 +21,7 @@ lerna-debug.log
packages/*/tsconfig.tsbuildinfo
packages/testcases/input/nameprep/**
.nyc_output/**
output/**

View File

@@ -1,7 +1,158 @@
Changelog
=========
This change log is managed by `scripts/cmds/update-versions` but may be manually updated.
This change log is managed by `admin/cmds/update-versions` but may be manually updated.
ethers/v5.0.20 (2020-11-17 20:32)
---------------------------------
- Fix browser ws alias for WebSockets. ([02546b9](https://github.com/ethers-io/ethers.js/commit/02546b9401d8066135b4453da917f7ef49c95ad8))
- Fixing React Native tests. ([f10977a](https://github.com/ethers-io/ethers.js/commit/f10977ab35f953c3148d99b61799788f47d2a5a2), [fff72ef](https://github.com/ethers-io/ethers.js/commit/fff72ef369f5420bf8283b0808e8fec71f26dd2b))
- Refactoring dist build process. ([4809325](https://github.com/ethers-io/ethers.js/commit/4809325bee9cbdd269b099d7b12b218f441ac840), [22bd0c7](https://github.com/ethers-io/ethers.js/commit/22bd0c76dddef7134618ec70ac1b084a054e616e), [8933467](https://github.com/ethers-io/ethers.js/commit/8933467c01b64ead547d7c136f22f3c05c85ca1f))
ethers/v5.0.19 (2020-10-22 21:55)
---------------------------------
- Allow 0x as a numeric value for 0 in Provider formatter. ([#1104](https://github.com/ethers-io/ethers.js/issues/1104); [fe17a29](https://github.com/ethers-io/ethers.js/commit/fe17a295816214d063f3d6bd4f3273e0ce0c3eac))
- Use POST for long requests in EtherscanProvider. ([#1093](https://github.com/ethers-io/ethers.js/issues/1093); [28f60d5](https://github.com/ethers-io/ethers.js/commit/28f60d5ef83665541c8c1b432f8e173d73cb8227))
- Added verifyTypedData for EIP-712 typed data. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [550ecf2](https://github.com/ethers-io/ethers.js/commit/550ecf2f25b90f6d8996583489a218dbf2306ebc), [a21202c](https://github.com/ethers-io/ethers.js/commit/a21202c66b392ec6f91296d66551dffca742cf0a))
ethers/v5.0.18 (2020-10-19 01:26)
---------------------------------
- Fix signTypedData call for JsonRpcSigner. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [15a90af](https://github.com/ethers-io/ethers.js/commit/15a90af5be75806e26f589f0a3f3687c0fb1c672))
- Added EIP-712 test cases. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [1589353](https://github.com/ethers-io/ethers.js/commit/15893537c3d9c92fe8748a3e9617d133d1d5d6a7))
- Initial Signer support for EIP-712 signed typed data. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [be4e216](https://github.com/ethers-io/ethers.js/commit/be4e2164e64dfa0697561763e8079120a485a566))
- Split hash library files up. ([3e676f2](https://github.com/ethers-io/ethers.js/commit/3e676f21b00931ed966f4561e4f28792a1f8f154))
- Added EIP-712 multi-dimensional array support. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [5a4dd5a](https://github.com/ethers-io/ethers.js/commit/5a4dd5a70377d3e86823d279d6ff466d03767644))
- Consolidated TypedDataEncoder methods. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [345a830](https://github.com/ethers-io/ethers.js/commit/345a830dc4bc869d5f3edfdc27465797e7663055))
- Initial EIP-712 utilities. ([#687](https://github.com/ethers-io/ethers.js/issues/687); [cfa6dec](https://github.com/ethers-io/ethers.js/commit/cfa6dec29314fe485df283974612d40550bc4179))
- Added initial PocketProvider. ([#1052](https://github.com/ethers-io/ethers.js/issues/1052); [a62d20d](https://github.com/ethers-io/ethers.js/commit/a62d20d86f2d545b9a7bcda5418993790b7db91c))
ethers/v5.0.17 (2020-10-07 20:08)
---------------------------------
- Better error message for parseUnits of non-strings. ([#981](https://github.com/ethers-io/ethers.js/issues/981); [5abc2f3](https://github.com/ethers-io/ethers.js/commit/5abc2f36e20eef79a935961f3dd8133b5528d9e5))
- Add gzip support to AlchemyProivder and InfuraProvider fetching. ([#1085](https://github.com/ethers-io/ethers.js/issues/1085); [38a068b](https://github.com/ethers-io/ethers.js/commit/38a068bcea3f251c8f3a349a90fcb077a39d23ad))
- Add gzip support to getUrl in node. ([#1085](https://github.com/ethers-io/ethers.js/issues/1085); [65772a8](https://github.com/ethers-io/ethers.js/commit/65772a8e1a55d663bdb67e3a2b160fecc9f986ef))
- Added CommunityResourcable to mark Providers as highly throttled. ([a022093](https://github.com/ethers-io/ethers.js/commit/a022093ce03f55db7ba2cac36e365d1af39ac45b))
- Added debug event info to WebSocketProvider. ([#1018](https://github.com/ethers-io/ethers.js/issues/1018); [8e682cc](https://github.com/ethers-io/ethers.js/commit/8e682cc8481c6051a6f8115b29d78f4996120ccd))
ethers/v5.0.16 (2020-10-05 15:44)
---------------------------------
- ABI encoding performance additions. ([#1012](https://github.com/ethers-io/ethers.js/issues/1012); [f3e5b0d](https://github.com/ethers-io/ethers.js/commit/f3e5b0ded1b227a377fd4799507653c95c76e353))
- Export hexConcat in utils. ([#1079](https://github.com/ethers-io/ethers.js/issues/1079); [3d051e4](https://github.com/ethers-io/ethers.js/commit/3d051e454db978f58c7b38ff4484096c3eb85b94))
- Cache chain ID for WebSocketProvider. ([#1054](https://github.com/ethers-io/ethers.js/issues/1054); [40264ff](https://github.com/ethers-io/ethers.js/commit/40264ff9006156ba8441e6101e5a7149a5cf03f6))
ethers/v5.0.15 (2020-09-26 03:22)
---------------------------------
- Add more accurate intrinsic gas cost to ABI calls with specified gas property. ([#1058](https://github.com/ethers-io/ethers.js/issues/1058); [f0a5869](https://github.com/ethers-io/ethers.js/commit/f0a5869c53475e55a5f47d8651f609fff45dc9a7))
- Better errors for unconfigured ENS names. ([#1066](https://github.com/ethers-io/ethers.js/issues/1066); [5cd1668](https://github.com/ethers-io/ethers.js/commit/5cd1668e0d29099c5b7ce1fdc1d0e8a41af1a249))
- Updated CLI solc to versin 0.7.1. ([4306b35](https://github.com/ethers-io/ethers.js/commit/4306b3563a171baa9d7bf4872475a13c3434f834))
ethers/v5.0.14 (2020-09-16 02:39)
---------------------------------
- More robust blockchain error detection ([#1047](https://github.com/ethers-io/ethers.js/issues/1047); [49f7157](https://github.com/ethers-io/ethers.js/commit/49f71574f4799d685a5ae8fd24fe1134f752d70a))
- Forward blockchain errors from Signer during gas estimation. ([#1047](https://github.com/ethers-io/ethers.js/issues/1047); [9ee685d](https://github.com/ethers-io/ethers.js/commit/9ee685df46753c46cbbde12d05d6ea04f2b5ea3f))
- Improve fetch errors with looser mime-type detection. ([#1047](https://github.com/ethers-io/ethers.js/issues/1047); [263bfe5](https://github.com/ethers-io/ethers.js/commit/263bfe5ce632790e0399d06a0ab660a501997998))
ethers/v5.0.13 (2020-09-11 02:10)
---------------------------------
- Force content-length in web fetching. ([be92339](https://github.com/ethers-io/ethers.js/commit/be923396962ea76bf0fb566dcf8801e58ccf0e7e))
- Better error forwarding from FallbackProvider. ([#1021](https://github.com/ethers-io/ethers.js/issues/1021); [bc3eeec](https://github.com/ethers-io/ethers.js/commit/bc3eeeca39adb734f24019d0e942eff2eac6ad4d))
- Add clamping functions to FixedNumber. ([#1037](https://github.com/ethers-io/ethers.js/issues/1037); [042b74e](https://github.com/ethers-io/ethers.js/commit/042b74e6ee648d4fa37bf674194273d8f4483bfb))
ethers/v5.0.12 (2020-09-07 19:54)
---------------------------------
- Allow events to use compact bytes ABI coded data for Solidity 0.4 external events. ([#891](https://github.com/ethers-io/ethers.js/issues/891), [#992](https://github.com/ethers-io/ethers.js/issues/992); [4e394fc](https://github.com/ethers-io/ethers.js/commit/4e394fc68019445ae4b4e201e41f95d6793dbe92))
ethers/v5.0.11 (2020-09-05 23:51)
---------------------------------
- Synced unorm in shims to most recent version. ([bdccf7b](https://github.com/ethers-io/ethers.js/commit/bdccf7b8d352ba400317266a0a37e6e290633e3c))
- Fixed LedgerSigner sendTransaction. ([#936](https://github.com/ethers-io/ethers.js/issues/936); [cadb28d](https://github.com/ethers-io/ethers.js/commit/cadb28d6b364e68e43a06f7a9b8a31797afbd920))
- Added BrainWallet to experimental exports. ([72385c2](https://github.com/ethers-io/ethers.js/commit/72385c228783a3158511b3cddc5cb4f9ce1dddae))
- More readable server errors. ([201e5ce](https://github.com/ethers-io/ethers.js/commit/201e5ced9c38da2de1dd7518ffbf24284d477e80))
ethers/v5.0.10 (2020-09-05 01:21)
---------------------------------
- Added retry logic to provider tests. ([0558bba](https://github.com/ethers-io/ethers.js/commit/0558bba8eb1b783ef50bb37bcf4c9bae1f86f1e1), [35b64b9](https://github.com/ethers-io/ethers.js/commit/35b64b9a65e2c09ecb63b0eca712b45a3092c204), [681f2a5](https://github.com/ethers-io/ethers.js/commit/681f2a50b26d7954795dba5aec55bede4740e494))
- Fixed link in docs. ([#1028](https://github.com/ethers-io/ethers.js/issues/1028); [2359a98](https://github.com/ethers-io/ethers.js/commit/2359a98641d99b26cf88ec892e3601a8a2c81c9c))
- Added memory-like support and new opcodes to asm. ([6fd3bb6](https://github.com/ethers-io/ethers.js/commit/6fd3bb62d10eab1563dc4ddbd88732b4f484ec7a))
- Added basic ENS resolver functions for contenthash, text and multi-coin addresses. ([#1003](https://github.com/ethers-io/ethers.js/issues/1003); [83db8a6](https://github.com/ethers-io/ethers.js/commit/83db8a6bd1364458dcfeea544de707df41890b4e))
- Added support for changing Reporter logging function. ([d01d0c8](https://github.com/ethers-io/ethers.js/commit/d01d0c8448df40de52253f9e92889ab7e75c6a97))
- Initial React Native test harness. ([#993](https://github.com/ethers-io/ethers.js/issues/993); [57eb5b7](https://github.com/ethers-io/ethers.js/commit/57eb5b777e2c67f1f8d74e41d3413e9f0564528d), [d3b473e](https://github.com/ethers-io/ethers.js/commit/d3b473e7c738fdfc65b6f1c8f80bcdacf9827d8a))
- Updating shims for constrained environments. ([#944](https://github.com/ethers-io/ethers.js/issues/944), [#993](https://github.com/ethers-io/ethers.js/issues/993); [8abdbbb](https://github.com/ethers-io/ethers.js/commit/8abdbbbf633f96fde2346c4ae70e538895fd7829), [240aac5](https://github.com/ethers-io/ethers.js/commit/240aac568303deff14cbb2366b94c8c89cacefc1))
ethers/v5.0.9 (2020-08-25 01:45)
--------------------------------
- Updated docs for all packages on npm pages. ([#1013](https://github.com/ethers-io/ethers.js/issues/1013); [cb8f4a3](https://github.com/ethers-io/ethers.js/commit/cb8f4a3a4e378a749c6bbbddf46d8d79d35722cc))
- Added JSON support to BigNumber. ([#1010](https://github.com/ethers-io/ethers.js/issues/1010); [8facc1a](https://github.com/ethers-io/ethers.js/commit/8facc1a5305b1f699aa3afc5a0a692abe7927652))
- Updated packages for security audit. ([5b5904e](https://github.com/ethers-io/ethers.js/commit/5b5904ea9977ecf8c079a57593b627553f0126a0))
- Fix emitted error for ABI code array count mismatch. ([#1004](https://github.com/ethers-io/ethers.js/issues/1004); [b0c082d](https://github.com/ethers-io/ethers.js/commit/b0c082d728dc66b0f2a5ec315da44d6295716284))
ethers/v5.0.8 (2020-08-04 20:55)
--------------------------------
- Abstract fetchJson for data. ([e2d6f28](https://github.com/ethers-io/ethers.js/commit/e2d6f281d5a2bd749bc72549a4e55f2c752a7bd8), [2c49a52](https://github.com/ethers-io/ethers.js/commit/2c49a52a41a30ae844376561de95f0c851d19f73), [e1bbb06](https://github.com/ethers-io/ethers.js/commit/e1bbb064a10d0b4bf5563e0a79396665d83935a1))
ethers/v5.0.7 (2020-07-20 02:22)
--------------------------------
- Fix Logger setLogLevel with enum case mismatch. ([#947](https://github.com/ethers-io/ethers.js/issues/947); [5443363](https://github.com/ethers-io/ethers.js/commit/5443363de43e92de712e72d55165c3f4d7f652e9), [af10705](https://github.com/ethers-io/ethers.js/commit/af10705632bc1f8203ea50ea7ed3120b01c67122))
- Removed UUID dependency from json-wallets. ([#966](https://github.com/ethers-io/ethers.js/issues/966); [e3f7426](https://github.com/ethers-io/ethers.js/commit/e3f7426af4d6d7e43db322700d768216b06433e0))
- Removed unnecessary dependency from BigNumber. ([#951](https://github.com/ethers-io/ethers.js/issues/951); [78b350b](https://github.com/ethers-io/ethers.js/commit/78b350bbc5ea73561bf47038743b9e51049496f7))
ethers/v5.0.6 (2020-07-16 05:54)
--------------------------------
- Removed unnecessary dependency from BigNumber. ([#951](https://github.com/ethers-io/ethers.js/issues/951); [78b350b](https://github.com/ethers-io/ethers.js/commit/78b350bbc5ea73561bf47038743b9e51049496f7))
- Longer Etherscan throttle slot interval. ([9f20258](https://github.com/ethers-io/ethers.js/commit/9f20258d5d39cd901d2078275323071eb0f3505b))
- Fixed ENS overrides for the default provider. ([#959](https://github.com/ethers-io/ethers.js/issues/959); [63dd3d4](https://github.com/ethers-io/ethers.js/commit/63dd3d4682b564445948988243fa9139c598587b))
- Added Retry-After support and adjustable slot interval to fetchJson. ([7d43545](https://github.com/ethers-io/ethers.js/commit/7d435453039f009b339d835ddee47e35a843711b))
- Added initial throttling support. ([#139](https://github.com/ethers-io/ethers.js/issues/139), [#904](https://github.com/ethers-io/ethers.js/issues/904), [#926](https://github.com/ethers-io/ethers.js/issues/926); [88c7eae](https://github.com/ethers-io/ethers.js/commit/88c7eaed061ae9a6798733a97e4e87011d36b8e7))
- Use status code 1000 on WebSocket hangup for compatibility. ([588f64c](https://github.com/ethers-io/ethers.js/commit/588f64c760ee49bfb5109bfbaafb4beafe41c52a))
- Updated WebSocketProvider to use web-style event listener API. ([57fd6f0](https://github.com/ethers-io/ethers.js/commit/57fd6f06047a1a2a3a46fe8b23ff585293a40062))
- Normalize formatUnits to simplified decimals. ([79b1da1](https://github.com/ethers-io/ethers.js/commit/79b1da130be50df80c7e5aeb221edc5669fc211e))
- Prevent zero-padding on Solidity type lengths. ([e128bfc](https://github.com/ethers-io/ethers.js/commit/e128bfcd10e006c920532151598700ca33a2127e))
- Set sensible defaults for INFURA and AlchemyAPI getWebSocketProvider methods. ([e3d3e60](https://github.com/ethers-io/ethers.js/commit/e3d3e604f299edbafe7d0721c0a3eff5f67c83f4))
- Added logger assert methods. ([619a888](https://github.com/ethers-io/ethers.js/commit/619a8888ebe08de9956f60c16703fb3543aeacc4))
- Added initial code coverage testing. ([0c1d55b](https://github.com/ethers-io/ethers.js/commit/0c1d55b6dc9c725c86e849d13b911c8bace9821d))
- Added destroy to WebSocketProvider. ([d0a79c6](https://github.com/ethers-io/ethers.js/commit/d0a79c6a1362e12f6f102e4af99adfef930092db))
- Updated packages (security updates). ([c660176](https://github.com/ethers-io/ethers.js/commit/c6601769ada64832b1ce392680a30cb145c3cab9))
ethers/v5.0.5 (2020-07-07 23:18)
--------------------------------
- Fixed splitSignature when recoveryParam is encoded directly. ([#893](https://github.com/ethers-io/ethers.js/issues/893), [#933](https://github.com/ethers-io/ethers.js/issues/933); [bf65ddb](https://github.com/ethers-io/ethers.js/commit/bf65ddbff0036f6eb8e99c145f30edff157687f5))
- Fixed BigNumber string validation. ([#935](https://github.com/ethers-io/ethers.js/issues/935); [7e56f3d](https://github.com/ethers-io/ethers.js/commit/7e56f3d392e52815c5c859772b99660e0fc38ef5))
ethers/v5.0.4 (2020-07-04 23:46)
--------------------------------
- Prevent negative exponents in BigNumber. ([#925](https://github.com/ethers-io/ethers.js/issues/925); [84e253f](https://github.com/ethers-io/ethers.js/commit/84e253f3f9674b52fa2a17b097644e91e6474021))
- Fixed StaticJsonRpcProvider when auto-detecting network. ([#901](https://github.com/ethers-io/ethers.js/issues/901); [0fd9aa5](https://github.com/ethers-io/ethers.js/commit/0fd9aa5cb6f4a3f9c1bea9b4eeee389700db01fa))
- Added WebSocket static method to Alchemy provider and updated Alchemy URLs. ([4838874](https://github.com/ethers-io/ethers.js/commit/48388741272df8569315637f21df7c6519f79e2e))
ethers/v5.0.3 (2020-06-29 00:50)
--------------------------------
- Fixed typo in error string. ([7fe702d](https://github.com/ethers-io/ethers.js/commit/7fe702d59b0b81d2812e407b99a1e98e0e18ba03))
- Updated elliptic package to address possible malleability issue; which should not affect Ethereum. ([9e14345](https://github.com/ethers-io/ethers.js/commit/9e1434503e2a0280e9918c4eadb4d972b062b3b0))
- Fixed FixedNumber unguarded constructor and added isZero. ([#898](https://github.com/ethers-io/ethers.js/issues/898); [08c74e9](https://github.com/ethers-io/ethers.js/commit/08c74e9a132f37ab8cc3fb5dab3bd1fd708ee702))
- Added StaticJsonRpcProvider for reducing calls to chainId in certain cases. ([#901](https://github.com/ethers-io/ethers.js/issues/901); [c53864d](https://github.com/ethers-io/ethers.js/commit/c53864de0af55dd8ec8ca5681e78da380d85250a))
- Allow getDefaultProvider to accept a URL as a network. ([8c1ff4c](https://github.com/ethers-io/ethers.js/commit/8c1ff4c862b8cecb04c98d71910870e0b73867a0))
- Make network an optional parameter to WebSocketProvider. ([987b535](https://github.com/ethers-io/ethers.js/commit/987b5354cc18ed41620c43910ac163f358d91b5d))
- Removed deprecated errors package. ([f9e9347](https://github.com/ethers-io/ethers.js/commit/f9e9347e69133354c3d65c1f47475ddac8a793cf))
- Updated badges in docs. ([d00362e](https://github.com/ethers-io/ethers.js/commit/d00362eb706cfbf9911611e8d934260061cfbbd2))
- Create security policy. Create security policy. ([88e6849](https://github.com/ethers-io/ethers.js/commit/88e68495b67d9268ee66362b08c9b691d03ab58a))
ethers/v5.0.2 (2020-06-13 21:36)
--------------------------------
@@ -20,4 +171,3 @@ ethers/v5.0.0 (2020-06-12 19:58)
- Preserve config canary string. ([7157816](https://github.com/ethers-io/ethers.js/commit/7157816fa53f660d750811b293e3b1d5a2f70bd4))
- Updated docs. ([9e4c7e6](https://github.com/ethers-io/ethers.js/commit/9e4c7e609d9eeb5f2a11d6a90bfa9d32ee696431))

View File

@@ -1,7 +1,7 @@
The Ethers Project
==================
[![npm (tag)](https://img.shields.io/npm/v/ethers/next)](https://www.npmjs.com/package/ethers/v/next)
[![npm (tag)](https://img.shields.io/npm/v/ethers)](https://www.npmjs.com/package/ethers)
[![Node.js CI](https://github.com/ethers-io/ethers.js/workflows/Node.js%20CI/badge.svg?branch=ethers-v5-beta)](https://github.com/ethers-io/ethers.js/actions?query=workflow%3A%22Node.js+CI%22)
A complete Ethereum wallet implementation and utilities in JavaScript (and TypeScript).
@@ -17,7 +17,7 @@ A complete Ethereum wallet implementation and utilities in JavaScript (and TypeS
- **Tiny** (~104kb compressed; 322kb uncompressed)
- **Modular** packages; include only what you need
- **Complete** functionality for all your Ethereum desires
- Extensive [documentation](https://docs.ethers.io/ethers.js/html/)
- Extensive [documentation](https://docs.ethers.io/v5/)
- Large collection of **test cases** which are maintained and added to
- Fully **TypeScript** ready, with definition files and full TypeScript source
- **MIT License** (including ALL dependencies); completely open source to do with as you please
@@ -27,7 +27,7 @@ Keep Updated
------------
For the latest news and advisories, please follow the [@ethersproject](https://twitter.com/ethersproject)
on Twitter (low-traffic, non-marketting, important information only) as well as watch this GitHub project.
on Twitter (low-traffic, non-marketing, important information only) as well as watch this GitHub project.
For the latest changes, see the [CHANGELOG](https://github.com/ethers-io/ethers.js/blob/master/CHANGELOG.md).
@@ -38,13 +38,13 @@ Installing
**node.js**
```
/home/ricmoo/some_project> npm install --save ethers@next
/home/ricmoo/some_project> npm install --save ethers
```
**browser (UMD)**
```
<script src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js" type="text/javasctipt">
<script src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js" type="text/javascript">
</script>
```
@@ -60,13 +60,13 @@ Installing
Documentation
-------------
Browse the documentation online:
Browse the [documentation](https://docs.ethers.io/v5/) online:
- [Getting Started](https://docs.ethers.io/)
- [Full API Documentation](https://docs.ethers.io/)
- [Getting Started](https://docs.ethers.io/v5/getting-started/)
- [Full API Documentation](https://docs.ethers.io/v5/api/)
- [Various Ethereum Articles](https://blog.ricmoo.com/)
Or browser the entire documentations as a [single page](https://docs.ethers.io/single-page/).
Or browse the entire documentation as a [single page](https://docs.ethers.io/v5/single-page/) to make searching easier.
Ancillary Packages
@@ -75,10 +75,10 @@ Ancillary Packages
These are a number of packages not included in the umbrella `ethers` npm package, and
additional packages are always being added. Often these packages are for specific
use-cases, so rather than adding them to the umbrella package, they are added as
ancillary packaged, which can be included by those who need them, while not bloating
ancillary packages, which can be included by those who need them, while not bloating
everyone else with packages they do not need.
We will keep a list of useful pacakges here.
We will keep a list of useful packages here.
- `@ethersproject/experimental` ([documentation](https://docs.ethers.io))
- `@ethersproject/cli` ([documentation](https://docs.ethers.io))

33
SECURITY.md Normal file
View File

@@ -0,0 +1,33 @@
# Security Policy
## Supported Versions
Maintaining multiple versions of the library is quite time consuming, so
the majority of the effort is focused on the latest major release.
If you do require a version outside of this chart updated with patch fix,
please [contact me](mailto:github@ricmoo.com).
| Version | Supported | Initial Release |
| ------- | ------------------------------------------ | ----------------- |
| 5.0.x | :white_check_mark: | 2020-06-12 |
| 4.0.x | :white_check_mark: (security patches only) | 2018-10-01 |
| 3.0.x | :x: | 2018-03-05 |
| 2.2.x | :x: | 2018-01-11 |
| 2.1.x | :x: | 2017-05-22 |
| 2.0.x | :x: | 2017-04-05 |
| 1.0.x | :x: | 2016-08-23 |
| 0.0.x | :x: | 2016-07-14 |
## Reporting a Vulnerability
If you identify a security vulnerability with this library (or any dependency),
please do not hesitate to contact [github@ricmoo.com](mailto:github@ricmoo.com)
immediately.
I try to respond within the same day and will address any concern as quickly
as possible (including code fixes and publishing to NPM).
Any vulnerability will also be published to this file, along with credits,
pertinent information and links to fixes.

View File

@@ -1,5 +1,10 @@
"use strict";
const { basename, resolve } = require("path");
const fs = require("fs");
const AWS = require('aws-sdk');
const config = require("../config");
const { ChangelogPath, latestChange } = require("../changelog");
@@ -33,6 +38,45 @@ if (process.argv.length > 2) {
dirnames = dirnames.filter((dirname) => (filter.indexOf(dirname) >= 0));
}
function putObject(s3, info) {
return new Promise(function(resolve, reject) {
s3.putObject(info, function(error, data) {
if (error) {
reject(error);
} else {
resolve({
name: info.Key,
hash: data.ETag.replace(/"/g, '')
});
}
});
});
}
function invalidate(cloudfront, distributionId) {
return new Promise((resolve, reject) => {
cloudfront.createInvalidation({
DistributionId: distributionId,
InvalidationBatch: {
CallerReference: `${ USER_AGENT }-${ parseInt(((new Date()).getTime()) / 1000) }`,
Paths: {
Quantity: "1",
Items: [
"/\*"
]
}
}
}, function(error, data) {
if (error) {
console.log(error);
return;
}
resolve(data.Invalidation.Id);
});
});
}
(async function() {
let token = null;
@@ -98,27 +142,69 @@ if (process.argv.length > 2) {
// Publish the GitHub release
const beta = false;
if (includeEthers) {
// Get the latest change from the changelog
const change = latestChange();
// Publish the release to GitHub
{
// The password above already succeeded
const username = await config.get("github-user");
const password = await config.get("github-release");
// Get the latest change from the changelog
const change = latestChange();
// Publish the release
const link = await createRelease(username, password, change.version, change.title, change.content, beta, gitCommit);
log(`<bold:Published Release:> ${ link }`);
}
/*
// Upload the scripts to the CDN and refresh the edge caches
{
const accessKey = await config.get("aws-upload-scripts-accesskey");
const secretKey = await config.get("aws-upload-scripts-secretkey");
const s3 =
}
*/
const awsAccessId = await config.get("aws-upload-scripts-accesskey");
const awsSecretKey = await config.get("aws-upload-scripts-secretkey");
const bucketName = await config.get("aws-upload-scripts-bucket");
const originRoot = await config.get("aws-upload-scripts-root");
const distributionId = await config.get("aws-upload-scripts-distribution-id");
const s3 = new AWS.S3({
apiVersion: '2006-03-01',
accessKeyId: awsAccessId,
secretAccessKey: awsSecretKey
});
// Upload the libs to ethers-v5.0 and ethers-5.0.x
const fileInfos = [
{ filename: "packages/ethers/dist/ethers.esm.min.js", key: `ethers-${ change.version.substring(1) }.esm.min.js` },
{ filename: "packages/ethers/dist/ethers.umd.min.js", key: `ethers-${ change.version.substring(1) }.umd.min.js` },
{ filename: "packages/ethers/dist/ethers.esm.min.js", key: `ethers-5.0.esm.min.js` },
{ filename: "packages/ethers/dist/ethers.umd.min.js", key: `ethers-5.0.umd.min.js` },
];
for (let i = 0; i < fileInfos.length; i++) {
const fileInfo = fileInfos[i];
const status = await putObject(s3, {
ACL: 'public-read',
Body: fs.readFileSync(resolve(__dirname, "../../", fileInfo.filename)),
Bucket: bucketName,
ContentType: "application/javascript; charset=utf-8",
Key: (originRoot + fileInfo.key)
});
log(`<bold:Uploaded :> https://cdn.ethers.io/lib/${ fileInfo.key }`);
}
// Flush the edge caches
{
const cloudfront = new AWS.CloudFront({
//apiVersion: '2006-03-01',
accessKeyId: awsAccessId,
secretAccessKey: awsSecretKey
});
const invalidationId = await invalidate(cloudfront, distributionId);
log(`<bold:Invalidated Cache :> ${ invalidationId }`);
}
}
}
})();

View File

@@ -1,5 +0,0 @@
"use strict";
const { setupBuild } = require("../build");
setupBuild(false);

100
admin/cmds/serve-docs.js Normal file
View File

@@ -0,0 +1,100 @@
const fs = require("fs");
const http = require("http");
const path = require("path");
function getMime(filename) {
const comps = filename.split('.');
const ext = comps[comps.length - 1];
switch (ext.toLowerCase()) {
case 'css': return 'text/css';
case 'doctree': return 'application/x-doctree';
case 'eot': return 'application/vnd.ms-fontobject';
case 'gif': return 'image/gif';
case 'html': return 'text/html';
case 'js': return 'application/javascript';
case 'jpg': return 'image/jpeg';
case 'jpeg': return 'image/jpeg';
case 'md': return 'text/markdown';
case 'pickle': return 'application/x-pickle';
case 'png': return 'image/png';
case 'svg': return 'image/svg+xml';
case 'ttf': return 'application/x-font-ttf';
case 'txt': return 'text/plain';
case 'woff': return 'application/font-woff';
}
console.log('NO MIME', filename);
return undefined;
}
function start(root, options) {
if (root == null) { throw new Error("root required"); }
if (options == null) { options = { }; }
if (options.port == null) { options.port = 8000; }
root = path.resolve(root);
const server = http.createServer((req, resp) => {
// Follow redirects in options
if (options.redirects && options.redirects[req.url]) {
resp.writeHead(301, { Location: options.redirects[req.url] });
resp.end();
return;
}
let filename = path.resolve(root, "." + req.url);
// Make sure we aren't crawling out of our sandbox
if (req.url[0] !== "/" || filename.substring(0, filename.length) !== filename) {
resp.writeHead(403);
resp.end();
return;
}
try {
const stat = fs.statSync(filename);
if (stat.isDirectory()) {
// Redirect bare directory to its path (i.e. "/foo" => "/foo/")
if (req.url[req.url.length - 1] !== "/") {
resp.writeHead(301, { Location: req.url + "/" });
resp.end();
return;
}
filename += "/index.html";
}
const content = fs.readFileSync(filename);
resp.writeHead(200, {
"Content-Length": content.length,
"Content-Type": getMime(filename)
});
resp.end(content);
return;
} catch (error) {
if (error.code === "ENOENT") {
resp.writeHead(404, { });
resp.end();
return;
}
resp.writeHead(500, { });
resp.end();
return;
}
});
server.listen(options.port, () => {
console.log(`Server running on: http://localhost:${ options.port }`);
});
return server;
}
start(path.resolve(__dirname, "../../docs"), {
redirects: {
"/": "/v5/"
}
});

View File

@@ -1,37 +0,0 @@
const { setupBuild } = require("../build");
const { loadPackage, savePackage } = require("../local");
const arg = process.argv[2];
(async function() {
process.argv.slice(2).forEach((arg) => {
console.log("Setting Option:", arg);
switch(arg) {
case "esm":
setupBuild(true);
break;
case "cjs":
setupBuild(false);
break;
// This will remove the browser field entirely, so make sure
// to set esm of cjs first as they will restore the browser
// field
case "browser-lang-all": {
const info = loadPackage("wordlists");
delete info.browser;
savePackage("wordlists", info);
break;
}
default:
console.log("Unknown option:", arg);
return 1;
}
});
return 0;
})().then((result) => {
process.exit(result);
});

View File

@@ -1,16 +0,0 @@
"use stricT";
const depgraph = require("../depgraph");
const { log } = require("../log");
const { loadJson, resolve, saveJson } = require("../utils");
(async function() {
log(`<bold:Updating dependency-graph build order (tsconfig.project.json)...>`);
let ordered = depgraph.getOrdered(true);
let path = resolve("tsconfig.project.json")
let projectConfig = loadJson(path);
projectConfig.references = ordered.map((name) => ({ path: ("./packages/" + name) }));
saveJson(path, projectConfig);
})();

View File

@@ -1,30 +0,0 @@
"use strict";
const fs = require("fs");
const { resolve } = require("path");
const sourceEthers = fs.readFileSync(resolve(__dirname, "../../packages/ethers/src.ts/ethers.ts")).toString();
const targets = sourceEthers.match(/export\s*{\s*((.|\s)*)}/)[1].trim();
const output = `"use strict";
// To modify this file, you must update ./admin/cmds/update-exports.js
import * as ethers from "./ethers";
try {
const anyGlobal = (window as any);
if (anyGlobal._ethers == null) {
anyGlobal._ethers = ethers;
}
} catch (error) { }
export { ethers };
export {
${ targets }
} from "./ethers";
`;
fs.writeFileSync(resolve(__dirname, "../../packages/ethers/src.ts/index.ts"), output);

View File

@@ -61,6 +61,7 @@ function getMime(filename) {
case 'js': return 'application/javascript';
case 'jpg': return 'image/jpeg';
case 'jpeg': return 'image/jpeg';
case 'json': return 'application/json';
case 'md': return 'text/markdown';
case 'pickle': return 'application/x-pickle';
case 'png': return 'image/png';

103
docs.wrm/api-keys.wrm Normal file
View File

@@ -0,0 +1,103 @@
_section: Provider API Keys @<api-keys>
//( **TL; DR** &ndash; sign up for your own API keys with the links below to improve your application performance )//
When using a [[Provider]] backed by an API service (such as [[link-alchemy]],
[[link-etherscan]] or [[link-infura]]), the service requires an API key,
which allows each service to track individual projects and their usage and
permissions.
The ethers library offers default API keys for each service, so that each
[[Provider]] works out-of-the-box.
These API keys are a provided as a community resource by the backend services
for low-traffic projects and for early prototyping.
Since these API keys are shared by all users (that have not acquired their
own API key), they are aggressively throttled which means retries occur more
frequently and the responses are slower.
It is **highly recommended** that you sign up for a free API key from each service for their
free tier, which (depending on the service) includes many advantages:
- a much **higher request rate** and concurrent request limit
- **faster** responses with fewer retries and timeouts
- useful **metric tracking** for performance tuning and to analyze your customer behaviour
- more **advanced APIs**, such as archive data or advanced log queries
_subsection: Etherscan @<api-keys--etherscan>
Etherscan is an Ethereum block explorer, which is possibly the most useful
developer tool for building and debugging Ethereum applications.
They offer an extensive collection of API endpoints which provide all the
operations required to interact with the Ethereum Blockchain.
[Sign up for a free API key on Etherscan](link-etherscan-signup)
**Benefits:**
- higher rate limit (since you are not using the [shared rate limit](link-etherscan-ratelimit))
- customer usage metrics
_subsection: INFURA @<api-keys--infura>
The INFURA service has been around for quite some time and is very robust
and reliable and highly recommend.
They offer a standard JSON-RPC interface and a WebSocket interface, which makes
interaction with standard tools versatile, simple and straight forward.
[Sign up for a free Project ID on INFURA](link-infura-signup)
**Benefits:**
- higher rate limit
- customer usage metrics
- access to archive data (requires paid upgrade)
_subsection: Alchemy @<api-keys--alchemy>
The Alchemy service has been around a few years and is also very robust
and reliable.
They offer a standard JSON-RPC interface and a WebSocket interface, as well
as a collection of advanced APIs for interacting with tokens and to assist
with debugging.
[Sign up for a free API key on Alchemy](link-alchemy-signup)
**Benefits:**
- higher rate limit
- customer usage metrics
- access to advanced token balance and metadata APIs
- access to advanced debugging trace and revert reason APIs
_subsection: Creating a Default Provider @<api-keys--getDefaultProvider>
The [default provider](providers-getDefaultProvider) connects to multiple
backends and verifies their results internally, making it simple to have
a high level of trust in third-party services.
A second optional parameter allows API keys to be specified to each
Provider created internally and any API key omitted will fallback onto
using the default API key for that service.
It is **highly recommended** that you provide an API for each service, to
maximize your applications performance.
_code: Passing API Keys into getDefaultProvider @lang<script>
// Use the mainnet
const network = "homestead";
// Specify your own API keys
// Each is optional, and if you omit it the default
// API key for that service will be used.
const provider = ethers.getDefaultProvider(network, {
etherscan: YOUR_ETHERSCAN_API_KEY,
infura: YOUR_INFURA_PROJECT_ID,
alchemy: YOUR_ALCHEMY_API_KEY
});

View File

@@ -4,7 +4,7 @@ _section: ContractFactory @<ContractFactory> @SRC<contracts:class.ContractFactor
_subsection: Creating Instances @<ContractFactory--creating>
_property: new ethers.ContractFactory(interface, bydecode [ , signer ]) @SRC<contracts:constructor.ContractFactory>
_property: new ethers.ContractFactory(interface, bytecode [ , signer ]) @SRC<contracts:constructor.ContractFactory>
_property: ContractFactory.fromSolidity(compilerOutput [ , signer ]) => [[ContractFactory]]
@@ -24,7 +24,7 @@ _subsection: Methods @<ContractFactory--methods>
_property: contractFactory.attach(address) => [[Contract]] @<ContractFactory-attach>
Return an instance of a [[Contract]] attched to //address//. This is the
Return an instance of a [[Contract]] attached to //address//. This is the
same as using the [Contract constructor](Contract--creating) with
//address// and this the the //interface// and //signerOrProvider// passed
in when creating the ContractFactory.
@@ -36,11 +36,11 @@ to the Contract's constructor.
_property: contractFactory.deploy(...args) => Promise<[[Contract]]> @<ContractFactory-deploy>
Uses the signer to deploy the Contract with //args// passed into tgee constructor and
retruns a Contract which is attached to the address where this contract **will** be
deployed once the transction is mined.
Uses the signer to deploy the Contract with //args// passed into the constructor and
returns a Contract which is attached to the address where this contract **will** be
deployed once the transaction is mined.
The transction can be found at ``contract.deployTransaction``, and no interactions
The transaction can be found at ``contract.deployTransaction``, and no interactions
should be made until the transaction is mined.
_code: Deploying a Contract
@@ -73,6 +73,6 @@ contract.deployTransaction
contract.deployTransaction.wait()
//!
// Now the contract is safe to ineract with
// Now the contract is safe to interact with
contract.value()
//!

View File

@@ -19,7 +19,7 @@ Returns a new instance of the Contract, but connected to
By passing in a [[Provider]], this will return a downgraded
**Contract** which only has read-only access (i.e. constant calls).
By passing in a [[Signer]]. the will return a **Contract** which
By passing in a [[Signer]]. this will return a **Contract** which
will act on behalf of that signer.
@@ -107,7 +107,7 @@ For values that have a simple meaning in JavaScript, the types are fairly
straight forward; strings and booleans are returned as JavaScript strings
and booleans.
For numbers, if the **type** is in the JavaSsript safe range (i.e. less
For numbers, if the **type** is in the JavaScript safe range (i.e. less
than 53 bits, such as an ``int24`` or ``uint48``) a normal JavaScript
number is used. Otherwise a [[BigNumber]] is returned.
@@ -150,7 +150,7 @@ signer.
_heading: Write Methods Analysis @<Contract--check>
There are secveral options to analyze properties and results of a
There are several options to analyze properties and results of a
write method without actually executing it.
_property: contract.estimateGas.METHOD_NAME(...args [ , overrides ]) => Promise<[[BigNumber]]> @<contract-estimateGas>
@@ -162,12 +162,12 @@ Returns an [[UnsignedTransaction]] which represents the transaction
that would need to be signed and submitted to the network to execute
//METHOD_NAME// with //args// and //overrides//.
_property: contract.staticCall.METHOD_NAME(...args [ , overrides ]) => Promise<any> @<contract-staticCall>
_property: contract.callStatic.METHOD_NAME(...args [ , overrides ]) => Promise<any> @<contract-callStatic>
Rather than executing the state-change of a transaction, it is possible
to ask a node to //pretend// that a call is not state-changing and
return the result.
This does not actually chagne any state, but is free. This in some cases
This does not actually change any state, but is free. This in some cases
can be used to determine if a transaction will fail or succeed.
This otherwise functions the same as a [Read-Only Method](Contract--readonly).

View File

@@ -91,7 +91,7 @@ Returns a new instance of the Contract, but connected to
By passing in a [[Provider]], this will return a downgraded
**Contract** which only has read-only access (i.e. constant calls).
By passing in a [[Signer]]. the will return a **Contract** which
By passing in a [[Signer]]. this will return a **Contract** which
will act on behalf of that signer.
_property: erc20.deployed() => Promise<Contract>
@@ -178,7 +178,7 @@ _subsection: Meta-Class Filters @NOTE<(added at Runtime)>
Since the Contract is a Meta-Class, the methods available here depend
on the ABI which was passed into the **Contract**.
_property: erc20.filters.Transafer([ fromAddress [ , toAddress ] ]) => Filter
_property: erc20.filters.Transfer([ fromAddress [ , toAddress ] ]) => Filter
Returns a new Filter which can be used to [query](erc20-queryfilter) or
to [subscribe/unsubscribe to events](erc20-events).

View File

@@ -2,10 +2,10 @@ _section: Contract Interaction @<contracts>
A **Contract** object is an abstraction of a contract (EVM bytecode)
deployed on the Ethereum network. It allows for a simple way to
serialize calls and transaxtions to an on-chain contract and
serialize calls and transactions to an on-chain contract and
deserialize their results and emitted logs.
A **ContractFactory** is an abstraction a contract's //bytecode//
A **ContractFactory** is an abstraction of a contract's //bytecode//
and facilitates deploying a contract.
_toc:

View File

@@ -17,7 +17,7 @@ Generates a brain wallet, with a slightly improved experience, in which
the generated wallet has a mnemonic.
_property: BrainWallet.generateLegacy(username, password [ , progressCallback ]) => [[experimental-brainwallet]]
Generate a brain wallet which is compatibile with the ethers v3 and earlier.
Generate a brain wallet which is compatible with the ethers v3 and earlier.
_subsection: EIP1193Bridge @<experimental-eip1193bridge> @INHERIT<[[link-npm-events]]>

View File

@@ -4,9 +4,9 @@ An Application Programming Interface (API) is the formal
specification of the library.
_toc:
contract
signer
providers
signer
contract
utils
other
experimental

View File

@@ -26,7 +26,7 @@ Create a formatted output of an array of [[asm-operation]].
_heading: Bytecode @<asm-bytecode> @INHERIT<Array\<[[asm-operation]]\>>
Each arary index represents an operation, collapsing multi-byte operations
Each array index represents an operation, collapsing multi-byte operations
(i.e. ``PUSH``) into a single operation.
_property: bytecode.getOperation(offset) => [[asm-operation]]
@@ -52,7 +52,7 @@ If the opcode is a ``PUSH``, this is the value of that push
_subsection: Opcode @<asm-opcode> @SRC<asm/opcodes:class.Opcode>
_property: asm.Opcode.from(valueOrMnemonic) => [[asm-opcode]]
Create a new instnace of an Opcode for a given numeric value
Create a new instance of an Opcode for a given numeric value
(e.g. 0x60 is PUSH1) or mnemonic string (e.g. "PUSH1").
_heading: Properties

View File

@@ -49,7 +49,7 @@ string of a decimal number.
_property: literalNode.verbatim => boolean
This is true in a [[asm-datanode]] context, since in that case the
value should be taken verbatim and no ``PUSH`` operation shoud be
value should be taken verbatim and no ``PUSH`` operation should be
added, otherwise false.
@@ -96,7 +96,7 @@ any output assembly, using the ``{{! code here }}`` syntax.
_property: literalNode.verbatim => boolean
This is true in a [[asm-datanode]] context, since in that case the
value should be taken verbatim and no ``PUSH`` operation shoud be
value should be taken verbatim and no ``PUSH`` operation should be
added, otherwise false.
_property: evaluationNode.script => string

View File

@@ -1,9 +1,9 @@
_section: Ethers ASM Dialect @<asm-dialect>
This provides a quick, high-level overcview of the **Ethers ASM Dialect**
This provides a quick, high-level overview of the **Ethers ASM Dialect**
for EVM, which is defined by the [Ethers ASM Dialect Grammar](link-ethers-asm-grammar)
Once a program is compiled by a higher level langauge into ASM (assembly),
Once a program is compiled by a higher level language into ASM (assembly),
or hand-coded directly in ASM, it needs to be assembled into bytecode.
The assembly process performs a very small set of operations and is
@@ -34,7 +34,7 @@ A **Label** is a position in the program which can be jumped to. A
``JUMPDEST`` is automatically added to this point in the assembled
output.
@TODO: Exmaples
@TODO: Examples
_subsection: Literals @<asm-dialect-literal>
@@ -45,7 +45,7 @@ operation.
A **Literal** can be provided using a [[DataHexString]] or a decimal
byte value.
@TODO: exmples
@TODO: examples
_subsection: Comments @<asm-dialect-comment>
@@ -64,7 +64,7 @@ within a **deployment bytecode**, which can be used as **init code**.
When deploying a program to Ethereum, an **init transaction** is used. An
//init transaction// has a null ``to`` address and contains bytecode in
the ``data``. This ``data`` bytecode is a program, that when executed
returns some other bytecode as a result, this restul is the bytecode
returns some other bytecode as a result, this result is the bytecode
to be installed.
Therefore it is important that embedded code uses jumps relative to itself,
@@ -84,7 +84,7 @@ _subsection: Data Segment @<asm-dialect-datasegment>
A **Data Segment** allows arbitrary data to be embedded into a program,
which can be useful for lookup tables or deploy-time constants.
An emtpty **Data Segment** can also be used when a labelled location is
An empty **Data Segment** can also be used when a labelled location is
required, but without the ``JUMPDEST`` which a [[asm-dialect-label]] adds.
@TODO: Example
@@ -111,5 +111,5 @@ _subsection: Stack Placeholders @<asm-dialect-placeholder>
@TODO: exampl
_subsection: Evaluation and Excution @<asm-dialect-scripting>
_subsection: Evaluation and Execution @<asm-dialect-scripting>

View File

@@ -82,7 +82,7 @@ _subsection: InfuraProvider @<InfuraProvider> @INHERIT<[[UrlJsonRpcProvider]]> @
The **InfuraProvider** is backed by the popular [INFURA](link-infura)
Ethereum service.
_property: new ethers.providers.InfuraProvider([ network = "homestead", [ apiKey ] ])
_property: new ethers.providers.InfuraProvider([ network = "homestead", [ apiKey ] ]) @SRC<providers>
Create a new **InfuraProvider** connected to //network// with
the optional //apiKey//.
@@ -96,6 +96,12 @@ specify a [Project Secret](link-infura-secret) which can be used
on non-public sources (like on a server) to further secure your
API access and quotas.
_property: InfuraProvider.getWebSocketProvider([ network [ , apiKey ] ]) => [[WebSocketProvider]] @<InfuraProvider-getWebSocketProvider> @SRC<providers:InfuraProvider.getWebSocketProvider>
Create a new [[WebSocketProvider]] using the INFURA web-socket endpoint
to connect to //network// with the optional //apiKey//.
The //network// and //apiKey// are specified the same as [the constructor](InfuraProvider).
_note: Note: Default API keys
If no //apiKey// is provided, a shared API key will be used,
which may result in reduced performance and throttled requests.
@@ -136,6 +142,12 @@ provider = new InfuraProvider("homestead", {
projectSecret: projectSecret
});
// Connect to the INFURA WebSocket endpoints with a WebSocketProvider
provider = InfuraProvider.getWebSocketProvider()
// <hide>
provider.destroy();
// </hide>
_subsection: AlchemyProvider @<AlchemyProvider> @inherit<[[UrlJsonRpcProvider]]> @src<providers:class.AlchemyProvider>
@@ -182,6 +194,12 @@ provider = new AlchemyProvider("ropsten");
provider = new AlchemyProvider(null, apiKey);
provider = new AlchemyProvider("homestead", apiKey);
// Connect to the Alchemy WebSocket endpoints with a WebSocketProvider
provider = AlchemyProvider.getWebSocketProvider()
// <hide>
provider.destroy();
// </hide>
_subsection: CloudflareProvider @<CloudflareProvider> @inherit<[[UrlJsonRpcProvider]]> @src<providers:class.CloudflareProvider>

View File

@@ -9,7 +9,7 @@ cover the vast majority of use-cases, but also includes the
necessary functions and classes for sub-classing if a more
custom configuration is necessary.
Most users should be able to simply use the [[providers-getDefaultProvider]].
Most users should use the [[providers-getDefaultProvider]].
_subsection: Default Provider @<providers-getDefaultProvider>
@@ -34,6 +34,9 @@ Returns a new Provider, backed by multiple services, connected
to //network//. Is no //network// is provided, **homestead**
(i.e. mainnet) is used.
The //network// may also be a URL to connect to, such as ``http:/\/localhost:8545``
or ``wss:/\/example.com``.
The //options// is an object, with the following properties:
_table: Option Properties
@@ -55,18 +58,41 @@ _note: Note: API Keys
It is highly recommended for production services that to acquire
and specify an API Key for each sercice.
The deafult API Keys used by ethers are shared across all users,
The default API Keys used by ethers are shared across all users,
so services may throttle all services that are using the default
API Keys during periods of load without realizing it.
Many services also have monitoring and usage metrics, which are
only available if an API Key is specifie. This allows tracking
only available if an API Key is specified. This allows tracking
how many requests are being sent and which methods are being
used the most.
Some services also provide additional paid features, whichare only
Some services also provide additional paid features, which are only
available when specifying an API Key.
_subsection: Networks
There are several official common Ethereum networks as well as custom
networks and other compatible projects.
Any API that accept a [[providers-Networkish]] can be passed a common name (such as
``"mainnet"`` or ``"ropsten"``) to use that network definition or may specify
custom parameters.
_heading: Custom ENS Contract
One common reason to specify custom properties for a [[providers-Network]] is to override
the address of the root ENS registry, either on a common network to intercept
the [ENS Methods](Provider--ens-methods) or to specify the ENS registry on a
dev network (on most dev networks you must deploy the ENS contracts manually).
_code: Example: Override the ENS registry @lang<script>
const network = {
name: "dev",
chianId: 1337,
ensAddress: customEnsAddress
};
_subsection: Provider Documentation

View File

@@ -1,6 +1,6 @@
_section: JsonRpcProvider @<JsonRpcProvider> @INHERIT<[[Provider]]> @SRC<providers:class.JsonRpcProvider>
The [JSON-RPC API](link-jsonrpc) is a very popular method for interacting
The [JSON-RPC API](link-jsonrpc) is a popular method for interacting
with Ethereum and is available in all major Ethereum node implementations
(e.g. [[link-geth]] and [[link-parity]]) as well as many
third-party web services (e.g. [[link-infura]])
@@ -14,7 +14,7 @@ querying the node.
_note: Note: Connecting to a Local Node
Each node implementation is slightly different and may require specific
command-line flags, configuration or settings in their UI to enable
JSON-RPC, unlock accounrs or expose specific APIs. Please consult
JSON-RPC, unlock accounts or expose specific APIs. Please consult
their documentation.
_property: jsonRpcProvider.getSigner([ addressOrIndex ]) => [[JsonRpcSigner]] @<JsonRpcProvider-getSigner> @SRC<providers/json-rpc-provider>
@@ -42,12 +42,12 @@ _property: signer.provider => [[JsonRpcProvider]]
The provider this signer was established from.
_property: signer.connectUnchecked() => [[UncheckedJsonRpcSigner]] @<JsonRpcSigner-connectUnchecked> @SRC<providers>
Returns a new Signer object which does not perform addtional checks when
Returns a new Signer object which does not perform additional checks when
sending a transaction. See [getUncheckedSigner](JsonRpcProvider-getUncheckedSigner) for more details.
_property: signer.sendUncheckedTransaction(transaction) => Promise<string<[[DataHexString]]\<32>\>> @<JsonRpcSigner-sendUncheckedTransaction> @SRC<providers>
Sends the //transaction// and returns a Promise which resolves to the
opacque transaction hash.
opaque transaction hash.
_property: signer.unlock(password) => Promise<boolean> @<JsonRpcSigner-unlock> @SRC<providers>
Request the node unlock the account (if locked) using //password//.
@@ -60,7 +60,7 @@ of a transaction before returning it. For example, the gas price and gas limit
may be adjusted by the node or the nonce automatically included, in which case
the opaque transaction hash has discarded this.
To remedy this, the [[JsonRpcSigner]] immeidately queries the provider for
To remedy this, the [[JsonRpcSigner]] immediately queries the provider for
the details using the returned transaction hash to populate the [[providers-TransactionResponse]]
object.
@@ -85,7 +85,7 @@ The [jsonRpcProvider.send](JsonRpcProvider-send) method can be used to access th
- [All JSON-RPC methods](link-json-rpc) (including the less common methods) which most
Ethereum Nodes support.
- [Parity's Trace Module](link-parity-trace) can be used to trace and debug EVM
execcution of a transaction (requires custom configuration)
execution of a transaction (requires custom configuration)
- [Geth's Debug Module](link-geth-debug) can be used to debug transactions and
internal cache state, etc.
- [Additional Geth Methods](link-geth-rpc)

View File

@@ -11,7 +11,7 @@ It uses a quorum and connects to multiple [Providers](Provider) as backends,
each configured with a //priority// and a //weight// .
When a request is made, the request is dispatched to multiple backends, randomly
choosen (higher prioirty backends are always selected first) and the results from
chosen (higher priority backends are always selected first) and the results from
each are compared against the others. Only once the quorum has been reached will that
result be accepted and returned to the caller.
@@ -41,7 +41,7 @@ The provider for this configuration.
_property: fallbackProviderConfig.priority => number
The priority used for the provider. Higher priorities are favoured over lower
priorities. If multiple providers share the same prioirty, they are choosen
priorities. If multiple providers share the same prioirty, they are chosen
at random.
_property: fallbackProviderConfig.stallTimeout => number
@@ -93,10 +93,10 @@ The URL to use for the JsonRpcProvider instance.
_subsection: Web3Provider @<Web3Provider> @INHERIT<[[JsonRpcProvider]]>
_subsection: Web3Provider @<Web3Provider> @INHERIT<[[JsonRpcProvider]]> @SRC<providers:class.Web3Provider>
The Web3Provider is meant to ease moving from a [web3.js based](link-web3)
application to ethers by wraping an existing Web3-compatible (such as a
application to ethers by wrapping an existing Web3-compatible (such as a
[Web3HttpProvider](link-web3-http), [Web3IpcProvider](link-web3-ipc) or
[Web3WsProvider](link-web3-ws)) and exposing it as an ethers.js [[Provider]]
which can then be used with the rest of the library.
@@ -144,3 +144,20 @@ This is identical to ``sendAsync``. Historically, this used a synchronous
web request, but no current browsers support this, so its use this way
was deprecated quite a long time ago
_subsection: WebSocketProvider @<WebSocketProvider> @INHERIT<[[JsonRpcProvider]]> @SRC<providers:class.WebSocketProvider>
The **WebSocketProvider** connects to a JSON-RPC WebSocket-compatible backend
which allows for a persistent connection, multiplexing requests and pub-sub
events for a more immediate event dispatching.
The WebSocket API is newer, and if running your own infrastructure, note that
WebSockets are much more intensive on your server resourses, as they must manage
and maintain the state for each client. For this reason, many services may also
charge additional fees for using their WebSocket endpoints.
_property: new ethers.provider.WebSocketProvider([ url [ , network ] ])
Returns a new [[WebSocketProvider]] connected to //url// as the //network//.
If //url// is unspecified, the default ``"ws:/\/localhost:8546"`` will be used.
If //network// is unspecified, it will be queried from the network.

View File

@@ -60,7 +60,7 @@ provider.getBlockWithTransactions(100004)
_subsection: Ethereum Naming Service (ENS) Methods @<Provider--ens-methods>
The [Ethereum Naming Service](link-ens) (ENS) allows a short and
easy-to-remember ENS Name to be atached to any set of keys
easy-to-remember ENS Name to be attached to any set of keys
and values.
One of the most common uses for this is to use a simple name to
@@ -282,7 +282,7 @@ provider.once(txHash, (transaction) => {
filter = {
address: "dai.tokens.ethers.eth",
topics: [
utils.id("Transfer(address,address,uint256")
utils.id("Transfer(address,address,uint256)")
]
}
provider.on(filter, (log, event) => {
@@ -293,7 +293,7 @@ provider.on(filter, (log, event) => {
// Notice this is an array of topic-sets and is identical to
// using a filter with no address (i.e. match any address)
topicSets = [
utils.id("Transfer(address,address,uint256"),
utils.id("Transfer(address,address,uint256)"),
null,
[
myAddress,

View File

@@ -19,8 +19,17 @@ And **EventType** can be any of the following.
- **//[[providers-EventFilter]]//** -- TODO...
_subsection: Networkish @<providers-Networkish>
A **Networkish** may be any of the following:
- a [[providers-Network]] object
- the name of a common network as a string (e.g. ``"homestead"``)
- the chain ID a network as a number; if the chain ID is that of a
common network, the ``name`` and ``ensAddress`` will be populated, otherwise,
the default name ``"unknown"`` and no ``ensAddress`` is used
_subsection: Network @<providers-Network>
A **Network** represents an Etherem network.
A **Network** represents an Ethereum network.
_property: network.name => string
The human-readable name of the network, such as ``homestead``. If the network
@@ -264,7 +273,7 @@ The amount of gas actually used by this transaction.
_property: receipt.logsBloom => string<[[DataHexString]]>
A [bloom-filter](link-wiki-bloomfilter), which
incldues all the addresses and topics included in any log in this
includes all the addresses and topics included in any log in this
transaction.
_property: receipt.blockHash => string<[[DataHexString]]<32>>

View File

@@ -47,7 +47,7 @@ _property: signer.getBalance([ blockTag = "latest" ]) => Promise<[[BigNumber]]>
Returns the balance of this wallet at //blockTag//.
_property: signer.getChainId() => Promise<number> @<Signer-getChainId> @SRC<abstract-signer>
Returns ths chain ID this wallet is connected to.
Returns the chain ID this wallet is connected to.
_property: signer.getGasPrice() => Promise<[[BigNumber]]> @<Signer-getGasPrice> @SRC<abstract-signer>
Returns the current gas price.
@@ -121,7 +121,7 @@ properties such as the //provider// and //address// static throughout the
life-cycle of the Signer helps prevent serious issues and many other classes
and libraries make this assumption.
A sub-class **must** extend Sigenr and **must** call ``super()``.
A sub-class **must** extend Signer and **must** call ``super()``.
_property: signer.checkTransaction(transactionRequest) => [[providers-TransactionRequest]] @<Signer-checkTransaction> @SRC<abstract-signer>
This is generally not required to be overridden, but may needed to provide
@@ -197,7 +197,7 @@ The provider this wallet is connected to, which will ge used for any [[Signer--b
methods. This can be null.
_note: Note
A **Wallet** instance is immuatable, so if you wish to change the Provider, you
A **Wallet** instance is immutable, so if you wish to change the Provider, you
may use the [connect](Signer-connect) method to create a new instance connected
to the desired provider.

View File

@@ -12,7 +12,7 @@ _subsection: Creating Instance @<AbiCoder--creating>
For the most part, there should never be a need to manually create
an instance of an [[AbiCoder]], since one is created with the
default coersion function when the library is loaded which can
default coercion function when the library is loaded which can
be used universally.
This is likely only needed by those with specific needs to override

View File

@@ -12,12 +12,12 @@ The **JSON ABI Format** is the format that is
A JSON serialized object is always a string, which represents an Array
of Objects, where each Object has various properties describing the [[Fragment]] of the ABI.
The deserialied JSON string (which is a normal JavaScript Object) may
The deserialized JSON string (which is a normal JavaScript Object) may
also be passed into any function which accepts a JSON String ABI.
_heading: Humanb-Readable ABI
The Human-Readable ABI was
The Human-Readable ABI was @TODO
[article](link-ricmoo-humanreadableabi)
@@ -212,7 +212,7 @@ to parameters which are part of an [[EventFragment]].
_property: paramType.arrayChildren => [[ParamType]] @<ParamType-arrayChildren>
The type of children of the array. This is null for for any parameter
wjhich is not an array.
which is not an array.
_property: paramType.arrayLength => number @<ParamType-arrayLength>

View File

@@ -4,7 +4,7 @@ The **Interface** Class abstracts the encoding and decoding required
to interact with contracts on the Ethereum network.
Many of the standards organically evolved along side the [[link-solidity]]
language, which other languages have adopted to remain compatibile with
language, which other languages have adopted to remain compatible with
existing deployed contracts.
The EVM itself does not understand what the ABI is. It is simply an agreed

View File

@@ -45,7 +45,7 @@ _property: ethers.utils.getAddress(address) => string<[[address]]> @<utils-getA
Returns //address// as a Checksum Address.
If //address// is an invalid 40-nibble [[HexString]] or if it contains mixed case and
the checksum is invalid, an InvalidArgument Error is throw.
the checksum is invalid, an InvalidArgument Error is thrown.
The value of //address// may be any supported address format.

View File

@@ -17,7 +17,7 @@ _heading: BigNumberish @<BigNumberish>
Many functions and methods in this library take in values which
can be non-ambiguously and safely converted to a BigNumber. These
values can be sepcified as:
values can be specified as:
_definition: **//string//**
A [[HexString]] or a decimal string, either of which may
@@ -122,18 +122,18 @@ Returns a BigNumber with the value of //BigNumber// with bits beyond
the //bitcount// least significant bits set to zero.
_heading: Two's Compliment
_heading: Two's Complement
[Two's Complicment](link-wiki-twoscomplement)
[Two's Complement](link-wiki-twoscomplement)
is an elegant method used to encode and decode fixed-width signed values
while efficiently preserving mathematic operations.
Most users will not need to interact with these.
_property: BigNumber.fromTwos(bitwidth) => [[BigNumber]] @SRC<bignumber>
Returns a BigNumber with the value of //BigNumber// converted from twos-compliment with //bitwidth//.
Returns a BigNumber with the value of //BigNumber// converted from twos-complement with //bitwidth//.
_property: BigNumber.toTwos(bitwidth) => [[BigNumber]] @SRC<bignumber>
Returns a BigNumber with the value of //BigNumber// converted to twos-compliment with //bitwidth//.
Returns a BigNumber with the value of //BigNumber// converted to twos-complement with //bitwidth//.
_heading: Comparison and Equivalence
@@ -153,7 +153,7 @@ Returns true if and only if the value of //BigNumber// **>** //otherValue//.
_property: BigNumber.gte(otherValue) => boolean @SRC<bignumber>
Returns true if and only if the value of //BigNumber// **&ge;** //otherValue//.
_property: BigNumber.isZero() => boolean @SRC<bignumber>
_property: BigNumber.isZero() => boolean @SRC<bignumber:BigNumber.isZero>
Returns true if and only if the value of //BigNumber// is zero.
@@ -232,7 +232,7 @@ mathematical operations handled safely.
_heading: Why not BigNumber.js, BN.js, BigDecimal, etc?
Everyone has their own favourite Big Number library, and once someone
has choosen one, it becomes part of their identity, like their editor,
has chosen one, it becomes part of their identity, like their editor,
vi vs emacs. There are over 100 Big Number libraries on [npm](link-npm-query-bignumber).
One of the biggest differences between the Ethers [[BigNumber]] object and
@@ -246,7 +246,7 @@ low-level library's objects which supports myriad in-place operations.
Second, the Ethers [[BigNumber]] provides all the functionality required
internally and should generally be sufficient for most developers while
not exposing some of the more advanced and rare functionality. So it will
be eaiser to swap out the underlying library without impacting consumers.
be easier to swap out the underlying library without impacting consumers.
For example, if [[link-npm-bnjs]] was exposed, someone may use the
greatest-common-denominator functions, which would then be functionality

View File

@@ -25,7 +25,7 @@ binary data as a string.
_heading: HexString @<HexString>
A **Hexstring** is a string which has a ``0x`` prefix followed by any
number of nibbles (i.e. case-insensitive hexidecumal characters, ``0-9`` and ``a-f``).
number of nibbles (i.e. case-insensitive hexadecimal characters, ``0-9`` and ``a-f``).
_heading: Signature @<Signature>
@@ -37,7 +37,7 @@ _heading: Signature @<Signature>
_heading: Raw Signature @<signature-raw> @inherit<string\<[[DataHexString]]\<65\>\>>
A **Raw Signature** is a common Signature format where the r, s and v are
concanenated into a 65 byte (130 nibble) [[DataHexString]].
concatenated into a 65 byte (130 nibble) [[DataHexString]].
_heading: SignatureLike @<SignatureLike>
@@ -112,7 +112,7 @@ _property: ethers.utils.stripZeros(aBytesLike) => Uint8Array @<utils-stripZeros
Returns a Uint8Array with all leading ``0`` bytes of //aBtyesLike// removed.
_property: ethers.utils.zeroPad(aBytesLike, length) => Uint8Array @<utils-zeroPad> @SRC<bytes>
Retutns a Uint8Array of the data in //aBytesLike// with ``0`` bytes prepended to
Returns a Uint8Array of the data in //aBytesLike// with ``0`` bytes prepended to
//length// bytes long.
If //aBytesLike// is already longer than //length// bytes long, an InvalidArgument

View File

@@ -49,6 +49,12 @@ _property: fixednumber.round([ decimals = 0 ]) => [[FixedNumber]] @SRC<bignumbe
Returns a new FixedNumber with the value of //fixedvalue// rounded to //decimals//.
_heading: Comparison and Equivalence
_property: FixedNumber.isZero() => boolean @SRC<bignumber/fixednumber:FixedNumber.isZero>
Returns true if and only if the value of //FixedNumber// is zero.
_heading: Conversion
_property: fixednumber.toFormat(format) => [[FixedNumber]] @SRC<bignumber/fixednumber>
@@ -87,7 +93,7 @@ A signed format string begins with ``fixed``, which an unsigned format
string begins with ``ufixed``, followed by the width (in bits) and the
number of decimals.
The width must be conguent to 0 mod 8 (i.e. ``(width % 8) == 0``) and no
The width must be congruent to 0 mod 8 (i.e. ``(width % 8) == 0``) and no
larger than 256 bits and the number of decimals must be no larger than 80.
For example:

View File

@@ -9,7 +9,7 @@ The [Cryptographic Hash Functions](link-wiki-cryptographichash)
are a specific family of hash functions.
_property: ethers.utils.id(text) => string<[[DataHexString]]<32>> @<utils-id> @SRC<hash>
The Ethereum Identity function computs the [KECCAK256](link-wiki-sha3) hash of the //text// bytes.
The Ethereum Identity function computes the [KECCAK256](link-wiki-sha3) hash of the //text// bytes.
_property: ethers.utils.keccak256(aBytesLike) => string<[[DataHexString]]<32>> @<utils-keccak256> @SRC<keccak256>
Returns the [KECCAK256](link-wiki-sha3) digest //aBytesLike//.
@@ -163,7 +163,7 @@ the tightly packing algorithm.
_property: ethers.utils.solidityPack(types, values) => string<[[DataHexString]]> @<utils-solidityPack> @SRC<solidity:pack>
Returns the non-standard encoded //values// packed according to
their respecive type in //types//.
their respective type in //types//.
_property: ethers.utils.solidityKeccak256(types, values) => string<[[DataHexString]]<32>> @<utils-solidityKeccak256> @SRC<solidity:keccak256>
Returns the [KECCAK256](link-wiki-sha3) of the non-standard encoded //values// packed

View File

@@ -101,7 +101,7 @@ _heading: Methods @<HDNode--methods>
_property: hdNode.neuter() => [[HDNode]] @<HDNode-neuter> @SRC<hdnode>
Return a new instance of //hdNode// with its private key removed
but all otehr properties preserved. This ensures that the key
but all other properties preserved. This ensures that the key
can not leak the private key of itself or any derived children,
but may still be used to compute the addresses of itself and
any non-hardened children.

View File

@@ -56,11 +56,11 @@ _heading: Usage Validation
There can be used to ensure various properties and actions are safe.
_property: logger.checkAbstract(target, kind) => void @SRC<logger>
Checks that //target// is not //kind// and performs the same operatons
Checks that //target// is not //kind// and performs the same operations
as ``checkNew``. This is useful for ensuring abstract classes are not
being instantiated.
_property: logger.checkArgumentCount(count, expectedCound [ , message) => void @SRC<logger>
_property: logger.checkArgumentCount(count, expectedCount [ , message) => void @SRC<logger>
If //count// is not equal to //expectedCount//, throws a [MISSING_ARGUMENT](errors-MissingArgument)
or [UNEXPECTED_ARGUMENT](errors-UnexpectedArgument) error.

View File

@@ -8,11 +8,11 @@ The private key for this Signing Key.
_property: signingKey.publicKey => string<[[DataHexString]]<65>>
The uncompressed public key for this Signing Key. It will always be
65 bytes (130 nibbles) and begine with ``0x04``.
65 bytes (130 nibbles) and begins with ``0x04``.
_property: signingKey.compressedPublicKey => string<[[DataHexString]]<33>>
The compressed public key for this Signing Key. It will always be
33 bytes (66 nibbles) and begine with either ``0x02`` or ``0x03``.
33 bytes (66 nibbles) and begins with either ``0x02`` or ``0x03``.
_property: signingKey.signDigest(digest) => [[Signature]]
Sign the //digest// and return the signature.

View File

@@ -40,7 +40,7 @@ Returns the Array of codepoints of //text//, optionally normalized using the
_note: Note
This function correctly splits each **user-perceived character** into
its codepoint, accounting for surrogate pairs. This should not be confused with
``string.split("")``, which destroys surrogate pairs, spliting between each UTF-16
``string.split("")``, which destroys surrogate pairs, splitting between each UTF-16
codeunit instead.
_property: ethers.utils.toUtf8String(aBytesLike [ , onError = error ] ) => string @<utils-toUtf8String> @SRC<strings>
@@ -88,7 +88,7 @@ See NFKC for more an example.
_note: Note
Only certain specified characters are folded in Canonical Equivalence, and thus
it should **not** be considered a method to acheive //any// level of security from
it should **not** be considered a method to achieve //any// level of security from
[homoglyph attacks](link-wiki-homoglyph).

View File

@@ -54,7 +54,7 @@ _property: transaction.gasLimit => [[BigNumber]]
The gas limit for //transaction//. An account must have enough ether to
cover the gas (at the specified **gasPrice**). Any unused gas is
refunded at the end of the transaction, and if there is insufficient gas
to complete execution, the effects of the trasaction are reverted, but
to complete execution, the effects of the transaction are reverted, but
the gas is **fully consumed** and an out-of-gas error occurs.
_property: transaction.gasPrice => [[BigNumber]]

View File

@@ -37,7 +37,7 @@ Additional headers to include in the connection.
_heading: PollOptions @<PollOptions>
_property: options.timeout => number
The amount of time allowed to ellapse before triggering a timeout
The amount of time allowed to elapse before triggering a timeout
error.
_property: options.floor => number

View File

@@ -30,8 +30,8 @@ the registered //name//.
_subsection: Languages @<wordlists--languages>
The [official wordlists](link-bip39-wordlists) availalbe in at
`ethers.wordlists`. In the browser, only the english langauge is
The [official wordlists](link-bip39-wordlists) available in at
`ethers.wordlists`. In the browser, only the english language is
available by default; to include the others (which increases the
size of the library), see the dist files in the `ethers` package.

View File

@@ -2,7 +2,7 @@ _section: Assembler @<cli-asm>
The assembler Command-Line utility allows you to assemble the
[Ethers ASM Dialect](asm-dialect) into deployable EVM bytecode
and disassemle EVM bytecode into human-readable mnemonics.
and disassemble EVM bytecode into human-readable mnemonics.
_subsection: Help
@@ -31,7 +31,7 @@ _code: SimpleStore.asm @lang<asm>
; SimpleStore (uint)
; Set the inital value of 42
; Set the initial value of 42
sstore(0, 42)
; Init code to deploy myContract
@@ -144,7 +144,7 @@ Byt specifying the **Position Independent Code** flag, code
will be generated in a way such that all offsets are relative, allowing
the program to be moved without any impact to its logic.
This does incur an additional gsas cost of 8 gas per offset access though.
This does incur an additional gas cost of 8 gas per offset access though.
_definition: **-\-target LABEL**
All programs have a root scope named ``_`` which is by default

View File

@@ -62,7 +62,7 @@ TRANSACTION OPTIONS (default: query network)
--gasPrice GWEI Default gas price for transactions(in wei)
--gasLimit GAS Default gas limit for transactions
--nonce NONCE Initial nonce for the first transaction
--yes Always accept Siging and Sending
--yes Always accept Signing and Sending
OTHER OPTIONS
--wait Wait until transactions are mined

View File

@@ -1,7 +1,7 @@
_section: Sandbox Utility
The sandbox utility provides a simple way to use the most common
ethers utilities required during learning, debuging and managing
ethers utilities required during learning, debugging and managing
interactions with the Ethereum network.
If no command is given, it will enter a REPL interface with many
@@ -64,7 +64,7 @@ TRANSACTION OPTIONS (default: query network)
--gasPrice GWEI Default gas price for transactions(in wei)
--gasLimit GAS Default gas limit for transactions
--nonce NONCE Initial nonce for the first transaction
--yes Always accept Siging and Sending
--yes Always accept Signing and Sending
OTHER OPTIONS
--wait Wait until transactions are mined

View File

@@ -21,7 +21,7 @@ associated plugin class will be instantiated and run.
_property: setPlugin(pluginClass) => void @<cli-setplugin> @SRC<cli/cli>
Set a dedicated [[cli-plugin]] class which will handle all input. This
may not be used in conjuction with addPlugin and will not automatically
may not be used in conjunction with addPlugin and will not automatically
accept a command from the arguments.
_property: showUsage([ message = "" [ , status = 0 ] ]) => never @<cli-showusage> @SRC<cli/cli>
@@ -36,7 +36,7 @@ _subsection: Plugin @<cli-plugin> @SRC<cli:class.Plugin>
Each **Plugin** manages each command of a CLI and is executed in phases.
If the usage (i.e. help) of a CLI is requested, the static methods ``getHelp``
and ``getOptionHelp`` are used to geneate the help screen.
and ``getOptionHelp`` are used to generate the help screen.
Otherwise, a plugin is instantiated and the ``prepareOptions`` is called. Each
plugin **must** call ``super.prepareOptions``, otherwise the basic options are
@@ -83,7 +83,7 @@ _property: plugin.prepareArgs(args) => Promise<void> @<plugin-prepareargs> @SR
_property: plugin.run() => Promise<void> @<plugin-run> @SRC<cli/cli:Plugin.run>
_property: plugin.getAddress(addressOrName [ , message = "", [ allowZero = false ] ]) => Promise<string> @<plugin-getaddress> @SRC<cli/cli:Plugin.getAddress>
A plugin should use this method to resolve an address. If the resovled address is
A plugin should use this method to resolve an address. If the resolved address is
the zero address and //allowZero// is not true, an error is raised.
_property: plugin.dump(header, info) => void @<plugin-dump> @SRC<cli/cli:Plugin.dump>
@@ -92,7 +92,7 @@ formatted style. In the future, plugins may support a JSON output format
which will automatically work with this method.
_property: plugin.throwUsageError([ message = "" ]) => never @<plugin-throwusageerror> @SRC<cli/cli>
Stops exectuion of the plugin and shows the help screen of the plugin with
Stops execution of the plugin and shows the help screen of the plugin with
the optional //message//.
_property: plugin.throwError(message) => never @<plugin-throwerror> @SRC<cli/cli>
@@ -133,7 +133,7 @@ Flags are simple binary options (such as the ``--yes``), which are true if prese
otherwise false.
Options require a single parameter follow them on the command line
(such as ``--account wallet.json``, which nhas the name ``account`` and the value
(such as ``--account wallet.json``, which has the name ``account`` and the value
``wallet.json``)
Arguments are all other values on the command line, and are not accessed through

View File

@@ -20,7 +20,7 @@ refresh the page. This should cause all your UI components to
reset to a known-safe state, including any banners and warnings
to your users if they are on an unsupported network.
This can be acomplished by using the following function:
This can be accomplished by using the following function:
_code: Automatically Refresh on Network Change @lang<script>

View File

@@ -27,7 +27,7 @@ If a topic-set is a single topic, a log topic in that position must match
**that topic**.
If a topic-set is an array of topics, a log topic in that position must
match any **one** of topics (i.e. the topic in thie position are ``OR``-ed).
match any **one** of the topics (i.e. the topic in this position are ``OR``-ed).
_table: Example Log Matching @style<full>

View File

@@ -1,10 +1,10 @@
_section: Ethereum Basics
This is a very breif overview of some aspects of //Ethereum//
This is a brief overview of some aspects of //Ethereum//
and blockchains which developers can make use of or should
be aware of.
This section is fairly sparse at the moment, but will be expanded
This section is sparse at the moment, but will be expanded
as time goes on.
_toc:

View File

@@ -12,7 +12,7 @@ much stronger security.
The algorithm usually used for this process is [scrypt](link-wiki-scrypt),
which is a memory and CPU intensive algorithm which computes
a key (fixed-length psudo-random series of bytes) for a given
a key (fixed-length pseudo-random series of bytes) for a given
password.
@@ -21,7 +21,7 @@ _heading: Why does it take so long?
The goal is to use as much CPU and memory as possible during
this algorithm, so that a single computer can only compute a
very small number of results for some fixed amount of time. To
scale up an attack, the attacker requires additional compuers,
scale up an attack, the attacker requires additional computers,
increasing the cost to [brute-force attack](link-wiki-bruteforce)
to guess the password.
@@ -50,7 +50,7 @@ progress callback which will be periodically called with a number between
In general a progress bar makes the experience feel faster, as well as
more comfortable since there is a clear indication how much (relative) time
is remaining. Additionally, using language like //"decrpyting..."// in
is remaining. Additionally, using language like //"decrypting..."// in
a progress bar makes a user feel like there time is not being //needlessly//
wasted.

View File

@@ -54,7 +54,7 @@ function getDefinitions(source) {
const getSourceUrl = (function(path, include, exclude) {
console.log("Scanning TypeScript Sources...");
const Link = "https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages$FILENAME#L$LINE";
const Link = "https://github.com/ethers-io/ethers.js/blob/master/packages$FILENAME#L$LINE";
const Root = resolve(__dirname, path);
const readdir = function(path) {
@@ -151,16 +151,16 @@ function codeContextify(context) {
module.exports = {
title: "ethers",
subtitle: "v5.0-beta",
subtitle: "v5.0",
logo: "logo.svg",
prefix: "/v5",
link: "https:/\/docs-beta.ethers.io",
link: "https:/\/docs.ethers.io",
copyright: "The content of this site is licensed under the [Creative Commons License](https:/\/choosealicense.com/licenses/cc-by-4.0/). Generated on &$now;.",
markdown: {
"banner": "-----\n\nDocumentation: [html](https://docs-beta.ethers.io/)\n\n-----\n\n"
"banner": "-----\n\nDocumentation: [html](https://docs.ethers.io/)\n\n-----\n\n"
},
codeContextify: codeContextify,
@@ -175,18 +175,27 @@ module.exports = {
"link-ens": { name: "ENS", url: "https:/\/ens.domains/" },
"link-ethereum": { name: "Ethereum", url: "https:/\/ethereumorg" },
"link-etherscan": { name: "Etherscan", url: "https:/\/etherscan.io" },
"link-expo": { name: "Expo", url: "https:/\/expo.io" },
"link-etherscan-api": "https:/\/etherscan.io/apis",
"link-flatworm": { name: "Flatworm", url: "https:/\/github.com/ricmoo/flatworm" },
"link-geth": { name: "Geth", url: "https:/\/geth.ethereum.org" },
"link-infura": { name: "INFURA", url: "https:/\/infura.io" },
"link-javascriptcore": { name: "JavaScriptCore", url: "https:/\/developer.apple.com/documentation/javascriptcore?language=objc" },
"link-ledger": "https:/\/www.ledger.com",
"link-metamask": { name: "Metamask", url: "https:/\/metamask.io/" },
"link-otto": "https:/\/github.com/robertkrimen/otto",
"link-parity": { name: "Parity", url: "https:/\/www.parity.io" },
"link-react-native": { name: "React Native", url: "https:/\/reactnative.dev" },
"link-rtd": "https:/\/github.com/readthedocs/sphinx_rtd_theme",
"link-semver": { name: "semver", url: "https:/\/semver.org" },
"link-solidity": { name: "Solidity" , url: "https:/\/solidity.readthedocs.io/en/v0.6.2/" },
"link-sphinx": { name: "Sphinx", url: "https:/\/www.sphinx-doc.org/" },
"link-alchemy-signup": "https:/\/dashboard.alchemyapi.io/signup?referral=55a35117-028e-4b7c-9e47-e275ad0acc6d",
"link-etherscan-signup": "https:/\/etherscan.io/apis",
"link-etherscan-ratelimit": "https:/\/info.etherscan.com/api-return-errors/",
"link-infura-signup": "https:/\/infura.io/register",
"link-json-rpc": "https:/\/github.com/ethereum/wiki/wiki/JSON-RPC",
"link-web3-send": "https:/\/github.com/ethereum/web3.js/blob/1.x/packages/web3-providers-http/types/index.d.ts#L57",
"link-parity-trace": "https:/\/openethereum.github.io/wiki/JSONRPC-trace-module",
@@ -197,6 +206,11 @@ module.exports = {
"link-legacy-docs3": "https:/\/docs.ethers.io/v3/",
"link-legacy-docs4": "https:/\/docs.ethers.io/v4/",
"link-github-ci": "https:/\/github.com/ethers-io/ethers.js/actions/runs/158006903",
"link-github-issues": "https:/\/github.com/ethers-io/ethers.js/issues",
"link-issue-407": "https:/\/github.com/ethers-io/ethers.js/issues/407",
"link-infura-secret": "https:/\/infura.io/docs/gettingStarted/authentication",
"link-web3": "https:/\/github.com/ethereum/web3.js",
@@ -217,7 +231,7 @@ module.exports = {
"link-ethers-docs": "https:/\/docs.ethers.io/",
"link-ethers-js": "https:/\/cdn.ethers.io/lib/ethers-5.0.esm.min.js",
"link-ethers-npm": "https:/\/www.npmjs.com/search?q=%40ethersproject%2F",
"link-ethers-asm-grammar": "https:/\/github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/asm/grammar.jison",
"link-ethers-asm-grammar": "https:/\/github.com/ethers-io/ethers.js/blob/master/packages/asm/grammar.jison",
"link-eip-155": { name: "EIP-155", url: "https:/\/eips.ethereum.org/EIPS/eip-155" },
"link-eip-191": { name: "EIP-191", url: "https:/\/eips.ethereum.org/EIPS/eip-191" },
@@ -229,14 +243,17 @@ module.exports = {
"link-bip-32": { name: "BIP-32", url: "https:/\/github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" },
"link-npm-elliptic": { name: "elliptic", url: "https:/\/www.npmjs.com/package/elliptic" },
"link-npm-ethersproject-shims": { name: "Shims", url: "https:/\/www.npmjs.com/package/@ethersproject/shims" },
"link-npm-events": { name: "EventEmitter", url: "https:/\/nodejs.org/dist/latest-v13.x/docs/api/events.html#events_class_eventemitter" },
"link-npm-bnjs": { name: "BN.js", url: "https:/\/www.npmjs.com/package/bn.js" },
"link-npm-query-bignumber": "https:/\/www.npmjs.com/search?q=bignumber",
"link-npm-react-native-crypto": { name: "React Native Crypto", url: "https:/\/www.npmjs.com/package/react-native-crypto" },
"link-js-array": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
"link-js-bigint": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt",
"link-js-normalize": { name: "String.normalize", url: "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize" },
"link-js-maxsafe": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER#Description",
"link-js-proxy": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
"link-js-typedarray": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray",
"link-ricmoo-humanreadableabi": "https:/\/blog.ricmoo.com/human-readable-contract-abis-in-ethers-js-141902f4d917",

View File

@@ -1,4 +1,4 @@
_section: Contributing and Hacking
_section: Contributing and Hacking @<contributing>
The ethers.js library is something that I've written out of necessity,
and has grown somewhat organically over time.
@@ -25,14 +25,19 @@ have a public discussion and figure out the best way to address to problem/featu
**:)**
_subsection: Building
_subsection: Building @<contributing--building>
If you wish to modify the source code, there are a few steps involved in setting up
your environment.
If you wish to modify the source code, there are a few steps involved in
setting up your environment.
_code: Preparing the Package @lang<shell>
Since the library uses a monorepo, you must install an initial required
set of libraries, which can then be used to install the remaining libraries
used within each package, as well as link all the packages within the repo
with each other.
# Clone the REPO
_code: Preparing for builds @lang<shell>
# Clone the repository
/home/ricmoo> git clone git@github.com:ethers-io/ethers.js.git
/home/ricmoo> cd ethers.js
@@ -44,6 +49,10 @@ _code: Preparing the Package @lang<shell>
/home/ricmoo/ethers.js> npm run bootstrap
_subsection: Making your changes @<contributing--updating>
TODO: Add more information here.
_code: Watching and Building @lang<shell>
# Begin watching the files and re-building whenever they change
@@ -72,3 +81,65 @@ _code: Preparing the Distribution @lang<shell>
/home/ricmoo/ethers.js> npm run update-version
_subsection: Documentation @<contributing--documentation>
The documents are generated using [Flatworm](flatworm) documentation
generation tool, which was written for the purpose of writing the documentation
for ethers.
Style Guide (this section will have much more coming):
- Try to keep lines no longer than //around// 80 characters
- Avoid inline links in the source; use the ``externalLinks`` field in the config.js
- Prefix external links with ``link-``
- Changing an anchor name must be well justified, as it will break all existing links
to that section; flatworm will support symlinks in the future
- In general, I aim for xonsistency; look to similar situations throughout the documentation
_heading: Building
To build the documentation, you should first follow the
[above steps](contributing--building) to build the ethers library.
Building the docs will generate several types of output:
- A full set of HTML pages, linking across each other
- A single one-page HTML page with all pages linking to local anchors
- A full set of README.md pages organized to be browsable and linkable in GitHub
- A metadata dump for tool ingestion (still needs more work)
- (@TODO; only half done) The documentation as a LaTeX and generated PDF
_code: Building the Documentations @lang<shell>
/home/ricmoo/ethers.js> npm run build-docs
_heading: Evaluation
When building the documentation, all code samples are run through a JavaScript
VM to ensure there are no typos in the example code, as well the exact output
of results are injected into the output, so there is no need to keep the results
and code in-sync.
However, this can be a bit of a headache when making many small changes, so to
build the documentation faster, you can skip the evaluation step, which will
inject the code directly.
_code: Build docs skipping evaluation @lang<shell>
/home/ricmoo/ethers.js> npm run build-docs -- --skip-eval
_heading: Previewing Changes
To preview the changes locally, you can use any standard web server and run
from the ``/docs/`` folder, or use the built-in web server.
The same caveats as normal web development apply, such flushing browser
caches after changing (and re-building) the docs.
_code: Running a webserver @lang<shell>
/home/ricmoo/ethers.js> npm run serve-docs

View File

@@ -1,5 +1,9 @@
_section: Cookbook
Cooking...
A collection (that will grow over time) of common, simple
snippets of code that are in general useful.
_toc:
react-native

View File

@@ -0,0 +1,47 @@
_section: React Native (and ilk) @<cookbook-reactnative>
The [[link-react-native]] framework has become quite popular and
has many popular forks, such as [[link-expo]].
React Native is based on [[link-javascriptcore]] (part of WebKit) and
does not use Node.js or the common Web and DOM APIs. As such,
there are many operations missing that a normal web environment
or Node.js instance would provide.
For this reason, there is a [[link-npm-ethersproject-shims]] module
provided to fill in the holes.
_subsection: Installing @<cookbook-reactnative-shims>
To use ethers in React Native, you must either provide shims for the needed
missing functionality, or use the ethers.js shim.
It is **HIGHLY RECOMMENDED** you check out the [security section](cookbook-reactnative-security>
below for instructions on installing packages which can affect the security
of your application.
After installing packages, you may need to restart your packager and company.
_code: Installing @lang<shell>
/home/ricmoo/my-react-project> npm install @ethersproject/shims --save
_code: Importing @lang<script>
// Pull in the shims (BEFORE importing ethers)
import "@ethersproject/shims"
// Import the ethers library
import { ethers } from "ethers";
_subsection: Security @<cookbook-reactnative-security>
The React Native environment does not contain a secure random source, which
is used when computing random private keys. This could result in private
keys that others could guess, allowing the funds to be stolen.
For this reason, it is **HIGHLY RECOMMENDED** to get either the
[[link-npm-react-native-crypto]] module working or some equivalent.

View File

@@ -1,4 +1,4 @@
_section: Flatworm Docs
_section: Flatworm Docs @<flatworm>
The //Flatworm Docs// rendering engine is designed to be **very**
simple, but provide enough formatting necessary for documenting
@@ -102,7 +102,7 @@ _definition: **_table:** //FOOTER//
Creates a [Table](flatworm--table) structured according to the body.
Each cell support and variables support markdown.
Each cell contents supports markdown and variables supports markdown.
**Extensions:** [@style](flatworm--ext-style)
@@ -173,7 +173,8 @@ This is placed in an orange box.
\_null:
This breaks out of a directive. For example, to end a
This breaks out of a directive. For example, to end
a ``_note:`` or ``_code:``.
_subsection: Markdown @<flatworm-markdown>
@@ -279,7 +280,7 @@ The language can be specified using the [@lang extension](flatworm--ext-lang).
_table:
| **Language** | **Notes** |
| javascript | Syntax highlights and [evaluates](flatworm--code-eval) the JavaScipt |
| javascript | Syntax highlights and [evaluates](flatworm--code-eval) the JavaScript |
| script | Same as ``javascript``, but does not evaluate the results |
| shell | Shell scripts or command-line |
| text | Plain text with no syntax highlighting |
@@ -378,7 +379,7 @@ _heading: Variables @<flatworm--table-variable>
Often the layout of a table is easier to express and maintain without
uneven or changing content within it. So the content can be defined
separately within a table directive using **variables**. A varaible
separately within a table directive using **variables**. A variable
name must being with a letter and must only contain letters and numbers.
Variables are also useful when content is repeated throughout a table.

View File

@@ -3,14 +3,14 @@ _section: Getting Started @<getting-started>
_subsection: Installing @<installing>
The various Classes and Functions are available to be imported
Ethers' various Classes and Functions are available to import
manually from sub-packages under the [@ethersproject](link-ethers-npm)
organization but for most projects, the umbrella package is the
easiest way to get started.
_code: @lang<shell>
/home/ricmoo> npm install --save ethers@next
/home/ricmoo> npm install --save ethers
_subsection: Importing @<importing>
@@ -32,20 +32,22 @@ It is generally better practice (for security reasons) to copy the
[ethers library](link-ethers-js) to your own webserver and serve it
yourself.
For quick demos or prototyping though, it can be loaded in your
For quick demos or prototyping though, you can load it in your
Web Applications from our CDN.
_code: ES6 in the Browser @lang<html>
<script src="https://cdn.ethers.io/lib/ethers-5.0.esm.min.js"
type="application/javascipt"></script>
<script type="module">
import { ethers } from "https://cdn.ethers.io/lib/ethers-5.0.esm.min.js";
// Your code here...
</script>
_code: ES3 (UMD) in the Browser @lang<html>
<script src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"
type="application/javascipt"></script>
type="application/javascript"></script>
_subsection: Common Terminology @<getting-started--glossary>
@@ -62,8 +64,8 @@ $Signer: A Signer is a class which (usually) in some way directly or
and transactions to authorize the network to charge your account
ether to perform operations.
$Contract: A Contract is an abstraction which represents a connection to a
specific contract on the Ethereum Network, so that it can be
used like a normal JavaScipt object.
specific contract on the Ethereum Network, so that applications
can use it like a normal JavaScript object.
| **Provider** | $Provider |
@@ -78,7 +80,7 @@ Ethereum is to use [[link-metamask]], which is a browser extension
that provides:
- A connection to the Ethereum network (a [[Provider]])
- Holds your private key and can sign thing (a [[Signer]])
- Holds your private key and can sign things (a [[Signer]])
_code: Connecting to Metamask @lang<script>
@@ -88,14 +90,34 @@ const provider = new ethers.providers.Web3Provider(window.ethereum)
// The Metamask plugin also allows signing transactions to
// send ether and pay to change state within the blockchain.
// For this, we need the account signer...
// For this, you need the account signer...
const signer = provider.getSigner()
_subsection: Connecting to Ethereum: RPC @<getting-started--connecting-rpc>
The [JSON-RPC API](link-jsonrpc) is another popular method for interacting
with Ethereum and is available in all major Ethereum node implementations
(e.g. [[link-geth]] and [[link-parity]]) as well as many
third-party web services (e.g. [[link-infura]]). It typically provides:
- A connection to the Ethereum network (a [[Provider]])
- Holds your private key and can sign thing (a [[Signer]])
_code: Connecting to an RPC client @lang<script>
// If you don't specify a //url//, Ethers connects to the default
// (i.e. ``http:/\/localhost:8545``)
const provider = new ethers.providers.JsonRpcProvider();
// The provider also allows signing transactions to
// send ether and pay to change state within the blockchain.
// For this, we need the account signer...
const signer = provider.getSigner()
_heading: Querying the Blockchain @<getting-started--querying>
Once you have a [[Provider]], you have a read-only connection to the
blockchain, which can be used to query the current state, fetch historic
blockchain, which you can use to query the current state, fetch historic
logs, look up deployed code and so on.
_code: Basic Queries @lang<javascript>
@@ -104,16 +126,16 @@ _code: Basic Queries @lang<javascript>
provider.getBlockNumber()
//!
// Get the balance of an account (by address or ENS name)
// Get the balance of an account (by address or ENS name, if supported by network)
balance = await provider.getBalance("ethers.eth")
//! async balance
// Often you will need to format the output for the user
// which prefer to see values in ether (instead of wei)
// Often you need to format the output to something more user-friendly,
// such as in ether (instead of wei)
ethers.utils.formatEther(balance)
//!
// Or if a user enters a string in an input field, you may need
// If a user enters a string in an input field, you may need
// to convert it from ether (as a string) to wei (as a BigNumber)
ethers.utils.parseEther("1.0")
//!
@@ -136,37 +158,36 @@ A Contract is an abstraction of program code which lives on the
Ethereum blockchain.
The [[Contract]] object makes it easier to use an on-chain
Contract as a normal JavaScript object, with the method all
Contract as a normal JavaScript object, with the methods
mapped to encoding and decoding data for you.
If you are familiar with Databases, this is similar to ORM.
If you are familiar with Databases, this is similar to an //Object Relational Mapper// (ORM).
In order to communicate with the Contract on-chain, this class
needs to know what methods are available and how to encode and
decode the data, which is what the //Application Binary Interface// (API)
provides.
This class is a meta-class, which means its methods are constructed
at runtime, when you pass in the ABI to the constructor it uses that
This class is a //meta-class//, which means its methods are constructed
at runtime, and when you pass in the ABI to the constructor it uses it
to determine which methods to add.
While a on-chain Contract may have many methods available, you can safely ignore
While an on-chain Contract may have many methods available, you can safely ignore
any methods you don't need or use, providing a smaller subset of the ABI to
the contract.
An ABI often comes from the Solidity or Vyper compiler, but may also be
placed in the code easily using the Human-Readable ABI, which the following
examples use.
An ABI often comes from the Solidity or Vyper compiler, but you can use the
Human-Readable ABI in code, which the following examples use.
_code: Connecting to the DAI Contract @lang<javascript>
// We can use an ENS name for the contract address
// You can also use an ENS name for the contract address
const daiAddress = "dai.tokens.ethers.eth";
// The ERC-20 Contract ABI, which is a common contract interface
// for tokens (this is the Human-Readable ABI format)
const daiAbi = [
// Some simple details about the token
// Some details about the token
"function name() view returns (string)",
"function symbol() view returns (string)",
@@ -204,7 +225,7 @@ const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provide
daiContract.name()
//!
// Get the ERC-20 token synbol (for tickers and UIs)
// Get the ERC-20 token symbol (for tickers and UIs)
daiContract.symbol()
//!
@@ -222,8 +243,8 @@ _heading: State Changing Methods @<getting-started--writing>
_code: Sending DAI @lang<script>
// The DAI Contract is currently connected to the Provider,
// which is read-only. We need to connect to a Signer, so
// that we can pay to send state-changing transactions.
// which is read-only. You need to connect to a Signer, so
// that you can pay to send state-changing transactions.
const daiWithSigner = contract.connect(signer);
// Each DAI has 18 decimal places
@@ -313,7 +334,7 @@ daiContract.queryFilter(filterFrom, 9843470, 9843480)
// number of entries; but they provide some useful examples
//
// List all transfers I sent in the last 10,000 blocks
// List all transfers sent in the last 10,000 blocks
daiContract.queryFilter(filterFrom, -10000)
// List all transfers ever sent to me
@@ -329,8 +350,8 @@ const signer = ethers.Wallet.createRandom();
//!
// </hide>
// To sign a simple string, which can often be used for
// logging into a service, such as CryptoKitties simply
// To sign a simple string, which are used for
// logging into a service, such as CryptoKitties,
// pass the string in.
signature = await signer.signMessage("Hello World");
//! async signature
@@ -341,7 +362,7 @@ signature = await signer.signMessage("Hello World");
// data it MUST be an Array (or TypedArray)
//
// This string is 66 chacacters long
// This string is 66 characters long
message = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
// This array representation is 32 bytes long

View File

@@ -5,7 +5,7 @@ _subsection: What is Ethers? @<preamble>
The ethers.js library aims to be a complete and compact library for
interacting with the Ethereum Blockchain and its ecosystem. It was
originally designed for use with [ethers.io](link-ethersio) and
has since expanded into a much more general-purpose library.
has since expanded into a more general-purpose library.
_subsection: Features @<features>
@@ -38,6 +38,7 @@ _toc:
getting-started
concepts
api-keys
api
cli
cookbook

View File

@@ -1,5 +1,16 @@
_section: Migration: From Ethers v4 @<migration-v4>
This document only covers the features present in v4 which have changed
in some important way in v5.
It does not cover all the new additional features that have been added and
mainly aims to help those updating their older scripts and applications to
retain functional parity.
If you encounter any missing changes, please let me know and I'll update this
guide.
_subsection: BigNumber
_heading: Namespace
@@ -18,6 +29,7 @@ ethers.BigNumberish
_heading: Creating Instances
The ``bigNumberify`` method was always preferred over the constructor
since it could short-circuit an object instantiation for [[BigNumber]
objects (since they are immutable). This has been moved to a static
@@ -37,9 +49,99 @@ ethers.BigNumber.from(someValue)
_subsection: Contracts
_code: @lang<script>
_heading: ENS Name Resolution
// @TODO
The name of the resolved address has changed. If the address passed into the
constructor was an ENS name, the address will be resolved before any calls
are made to the contract.
The name of the property where the resolved address has changed from ``addressPromise``
to ``resolvedAddress``.
_code: Resolved ENS Names @lang<script>
// v4
contract.addressPromise
// v5
contract.resolvedAddress
_heading: Gas Estimation
The only difference in gas estimation is that the bucket has changed
its name from ``estimate`` to ``estimateGas``.
_code: Gas Estimation @lang<script>
// v4
contract.estimate.transfer(toAddress, amount)
// v5
contract.estimateGas.transfer(toAddress, amount)
_heading: Functions
In a contract in ethers, there is a ``functions`` bucket, which exposes
all the methods of a contract.
All these functions are available on the root contract itself as well
and historically there was no difference between ``contact.foo`` and
``contract.functions.foo``. The original reason for the ``functions`` bucket
was to help when there were method names that collided with other buckets,
which is rare.
In v5, the ``functions`` bucket is now intended to help with frameworks and
for the new error recovery API, so most users should use the methods on the
root contract.
The main difference will occur when a contract method only returns a single
item. The root method will dereference this automatically while the ``functions``
bucket will preserve it as an [[Result]].
If a method returns multiple items, there is no difference.
This helps when creating a framework, since the result will always be known to
have the same number of components as the [[Fragment]] outputs, without having
to handle the special case of a single return value.
_code: Functions Bucket @lang<script>
const abi = [
// Returns a single value
"function single() view returns (uint8)",
// Returns two values
"function double() view returns (uint8, uint8)",
];
// v4
await contract.single()
// 123
await contract.functions.single()
// 123
// v5 (notice the change in the .function variant)
await contract.single()
// 123
await contract.functions.single()
// [ 123 ]
// v4
await contract.double()
// [ 123, 5 ]
await contract.functions.double()
// [ 123, 5 ]
// v5 (no difference from v4)
await contract.double()
// [ 123, 5 ]
await contract.functions.double()
// [ 123, 5 ]
_subsection: Errors
@@ -49,7 +151,7 @@ All errors now belong to the [[Logger]] class and the related functions
have been moved to [[Logger]] instances, which can include a per-package
version string.
Global error fucntions have been moved [[Logger]] class methods.
Global error functions have been moved [[Logger]] class methods.
_code: @lang<script>
@@ -84,6 +186,7 @@ logger.info(...)
_subsection: Interface
The [[Interface]] object has undergone the most dramatic changes.
It is no longer a meta-class and now has methods that simplify handling
@@ -99,14 +202,14 @@ interface.functions.transfer.encode(to, amount)
interface.functions.transfer.decode(callData)
// v5
interface.encodeData("transfer", [ to, amount ])
interface.decodeResult("transfer", data)
interface.encodeFunctionData("transfer", [ to, amount ])
interface.decodeFunctionResult("transfer", data)
// Or you can use any compatible signature or Fragment objects.
// Notice that signature normalization is performed for you,
// e.g. "uint" and "uint256" will be automatically converted
interface.encodeData("transfer(address,uint)", [ to, amount ])
interface.decodeResult("transfer(address to, uint256 amount)", data)
interface.encodeFunctionData("transfer(address,uint)", [ to, amount ])
interface.decodeFunctionResult("transfer(address to, uint256 amount)", data)
_heading: Events
@@ -119,7 +222,7 @@ interface.events.Transfer.decode(data, topics)
// v5
interface.encodeFilterTopics("Transfer", values)
interface.encodeEventLog("Transfer", data, topics)
interface.decodeEventLog("Transfer", data, topics)
_heading: Inspection
@@ -178,14 +281,6 @@ const eventSig = eventFragment.format()
const topic = interface.getTopic(eventFragment)
_subsection: Utilities
_heading: Renaming
_code: @lang<script>
// @TODO
_subsection: Wallet
_heading: Mnemonic Phrases

View File

@@ -1,13 +1,198 @@
_section: Migration: From Web3.js
TODO
_subsection: Contracts
This migration guide focuses on migrating web3.js version 1.2.9 to ethers.js v5.
_subsection: Providers
In ethers, a provider provides an abstraction for a connection to the Ethereum Network. It can be used to issue read only queries and send signed state changing transactions to the Ethereum Network.
_heading: Connecting to Ethereum
_code: @lang<script>
// web3
var Web3 = require('web3');
var web3 = new Web3('http://localhost:8545');
// ethers
var ethers = require('ethers');
const url = "http://127.0.0.1:8545";
const provider = new ethers.providers.JsonRpcProvider(url);
_heading: Connecting to Ethereum: Metamask
_code: @lang<script>
// web3
const web3 = new Web3(Web3.givenProvider);
// ethers
const provider = new ethers.providers.Web3Provider(window.ethereum);
_subsection: Signers
In ethers, a **signer** is an abstraction of an Ethereum Account. It can be used to sign messages and transactions and send signed transactions to the Ethereum Network.
In web3, an account can be used to sign messages and transactions.
_heading: Creating signer
_code: @lang<script>
// web3
const account = web3.eth.accounts.create();
// ethers (create random new account)
const signer = ethers.Wallet.createRandom();
// ethers (connect to JSON-RPC accounts)
const signer = provider.getSigner();
_heading: Signing a message
_code: @lang<script>
// web3 (using a private key)
signature = web3.eth.accounts.sign('Some data', privateKey)
// web3 (using a JSON-RPC account)
// @TODO
// ethers
signature = await signer.signMessage('Some data')
_subsection: Contracts
A contract object is an abstraction of a smart contract on the Ethereum Network. It allows for easy interaction with the smart contact.
_heading: Deploying a Contract
_code: @lang<script>
// web3
const contract = new web3.eth.Contract(abi);
contract.deploy({
data: bytecode,
arguments: ["my string"]
})
.send({
from: "0x12598d2Fd88B420ED571beFDA8dD112624B5E730",
gas: 150000,
gasPrice: "30000000000000"
}), function(error, transactionHash){ ... })
.then(function(newContract){
console.log('new contract', newContract.options.address)
});
// ethers
const signer = provider.getSigner();
const factory = new ethers.ContractFactory(abi, bytecode, signer);
const contract = await factory.deploy("hello world");
console.log('contract address', contract.address);
// wait for contract creation transaction to be mined
await contract.deployTransaction.wait();
_heading: Interacting with a Contract
_code: @lang<script>
// web3
const contract = new web3.eth.Contract(abi, contractAddress);
// read only query
contract.methods.getValue().call();
// state changing operation
contract.methods.changeValue(42).send({from: ....})
.on('receipt', function(){
...
});
// ethers
// pass a provider when initiating a contract for read only queries
const contract = new ethers.Contract(contractAddress, abi, provider);
const value = await contract.getValue();
// pass a signer to create a contract instance for state changing operations
const contract = new ethers.Contract(contractAddress, abi, signer);
const tx = await contract.changeValue(33);
// wait for the transaction to be mined
const receipt = await tx.wait();
_heading: Overloaded Functions
Overloaded functions are functions that have the same name but different parameter
types.
In ethers, the syntax to call an overloaded contract function is different
from the non-overloaded function. This section shows the differences between web3
and ethers when calling overloaded functions.
See [issue #407](link-issue-407) for more details.
_code: @lang<script>
// web3
message = await contract.methods.getMessage('nice').call();
// ethers
const abi = [
"function getMessage(string) public view returns (string)",
"function getMessage() public view returns (string)"
]
const contract = new ethers.Contract(address, abi, signer);
// for ambiguous functions (two functions with the same
// name), the signature must also be specified
message = await contract['getMessage(string)']('nice');
_subsection: Numbers
_heading: BigNumber
Convert to BigNumber:
_code: @lang<script>
// web3
web3.utils.toBN('123456');
// ethers (from a number; must be within safe range)
ethers.BigNumber.from(123456)
// ethers (from base-10 string)
ethers.BigNumber.from("123456")
// ethers (from hex string)
ethers.BigNumber.from("0x1e240")
_subsection: Utilities
_heading: Hash
Computing Keccak256 hash of a UTF-8 string in web3 and ethers:
_code: @lang<script>
// web3
web3.utils.sha3('hello world');
web3.utils.keccak256('hello world');
// ethers (hash of a string)
ethers.utils.id('hello world')
// ethers (hash of binary data)
ethers.utils.keccak256('0x4242')

View File

@@ -1,3 +1,385 @@
_section: Testing
Here goes info about testing
Testing is a critical part of any library which wishes to remain secure, safe
and reliable.
Ethers currently has **over 23k tests** among its test suites, which are all
made available for other projects to use as simple exported GZIP-JSON files.
The tests are run on every check-in and the results can been seen on the
[GitHub CI Action](link-github-ci).
We also strive to constantly add new test cases, especially when issues
arise to ensure the issue is present prior to the fix, corrected after the
fix and included to prevent future changes from causing a regression.
A large number of the test cases were created procedurally by using
known correct implementations from various sources (such as Geth) and
written in different languages and verified with multiple libraries.
For example, the ABI test suites were generated by procedurally generating
a list of types, for each type choosing a random (valid) value, which then
was converted into a Solidity source file, compiled using ``solc`` and
deployed to a running Parity node and executed, with its outputs being
captured. Similar to the how many of the hashing, event and selector test
cases were created.
_subsection: Supported Platforms @<testing-supported>
While web technologies move quite fast, especially in the Web3 universe, we try
to keep ethers as accessible as possible.
Currently ethers should work on almost any ES3 or better environment and tests
are run against:
- node.js 8.x
- node.js 10.x
- node.js 12.x
- node.js 13.x
- Web Browsers (using UMD)
- Web Browsers (using ES modules)
If there is an environment you feel has been overlooked or have suggestions, please feel
free to reach out by opening an [issue on Github](link-github-issues).
We would like to add a test build for Expo and React as those developers often seem
to encounter pain points when using ethers, so if you have experience or ideas on this,
[bug us](link-github-issues).
The next Major version (probably summer 2021) will likely drop support for node 8.x
and will require ES2015 for [Proxy](link-js-proxy).
Certain features in JavaScript are also avoided, such as look-behind tokens in regular
expressions, since these have caused conflicts (at import time) with certain JavaScript
environments such as [Otto](link-otto).
Basically, the moral of the story is "be inclusive and don't drop people needlessly".
_subsection: Test Suites @<testing-suites>
The test suites are available as gzipped JSON files in the
``@ethersproject/testcases``, which makes it easy to install and import
(both GZIP and JSON are quite easy to consume from most langauges). Each
test suite also has its schema available in this package.
_table: Test Suites @style<full>
$Account: Private Keys and addresses in checksum and ICAP formats
$ContractEvents: Compiled Solidity, ABI interfaces, input types/values with the
output types/values for emitted events; all tests were
executed against real Ethereum nodes
$ContractAbi: Compiled Solidity, ABI interfaces, input types/values with the
output types/values, encoded and decoded binary data and normalized
values for function calls executed against real Ethereum nodes.
$ContractAbi2: Identical to ``contract-interface``, except with emphasis on
the ABIv2 coder which supports nested dynami types and structured
data
$ContractSignatures: Contract signatures and matching selectors
$Hashes: Data and respective hashes against a variety of hash functions
$HDNode: HDNodes (BIP-32) with mnemonics, entropy, seed and computed nodes
with pathes and addresses
$Namehash: ENS names along with computed [namehashes](link-namehash
$Nameprep: IDNA and Nameprep representations including official vectors
$RLP: Recursive-Length Prefix (RLP) data and encodings
$SoliditiyHashes: Hashes based on the Solidity non-standard packed form
$Transactions: Signed and unsigned transactions with their serialized formats
including both with and without EIP-155 replay protection
$Units: Values converted between various units
$Wallet: Keystore JSON format wallets, passwords and decrypted values
$Wordlist: Fully decompressed BIP-39 official wordlists
| **Filename** | **Test Cases** <|
| accounts.json.gz | $Account <|
| contract-events.json.gz | $ContractEvents <|
| contract-interface.json.gz | $ContractAbi <|
| contract-interface-abi2.json.gz | $ContractAbi2 <|
| contract-signatures.json.gz | $ContractSignatures <|
| hashes.json.gz | $Hashes <|
| hdnode.json.gz | $HDNode <|
| namehash.json.gz | $Namehash <|
| nameprep.json.gz | $Nameprep <|
| rlp-coder.json.gz | $RLP <|
| solidity-hashes.json.gz | $SoliditiyHashes <|
| transactions.json.gz | $Transactions <|
| units.json.gz | $Units <|
| wallets.json.gz | $Wallet <|
| wordlists.json.gz | $Wordlist <|
_subsection: Test Suite API @<testing-api>
There are also convenience functions for those developing directly in TypeScript.
_property: testcases.loadTests(tag) => Array<TestCase>
Load all the given testcases for the //tag//.
A tag is the string in the above list of test case names not including
any extension (e.g. ``"solidity-hashes"``)
_property: testcases.TestCase.TEST_NAME
Most testcases have its schema available as a TypeScript type to make testing
each property easier.
_heading: Deterministic Random Numbers (DRNG)
When creating test cases, often we want want random data from the perspective
we do not case what values are used, however we want the values to be consistent
accross runs. Otherwise it becomes difficult to reproduce an issue.
In each of the following the seed is used to control the random value returned. Be
sure to tweak the seed properly, for example on each iteration change the value and
in recursive functions, concatenate to the seed.
_property: testcases.randomBytes(seed, lower [, upper ]) => Uint8Array
Return at least //lower// random bytes, up to //upper// (exclusive) if specified,
given //seed//. If //upper// is omitted, exactly ///lower// bytes are returned.
_property: testcases.randomHexString(seed, lower [, upper ]) => string<[[DataHexString]]>
Identical to randomBytes, except returns the value as a [[DataHexString]] instead of a
Uint8Array.
_property: testcases.randomNumber(seed, lower, upper) => number
Returns a random number of at least //lower// and less than //upper//
given //seed//.
_subsection: Schemas @<testing-schemas>
This section is still a work in progress, but will outline some of the more nuanced
aspects of the test cases and their values.
There will likely be an overhaul of the test cases in the next major version, to
make code coverage testing more straight forward and to collapse some of the redundancy.
For example, there is no longer a need to separate the ABI and ABIv2 test case and the
accounts and transactions suites can be merged into one large collection.
_heading: Accounts
Basic account information using a private key and computing various address forms.
Tests were verified against [EthereumJS](https:/\/github.com/ethereumjs) and custom
scripts created to directly interact with Geth and cpp implementations.
//See: ``accounts.json.gz``//
_table: Properties
| **Property** | **Meaning** |
| name | The testcase name |
| privateKey | The private key |
| address | The address (lowercase) |
| checksumAddress | The address with checksum-adjusted case |
| icapAddress | The ICAP address |
_code: Example @lang<script>
{
"name": "random-1023",
"address": "0x53bff74b9af2e3853f758a8d2bd61cd115d27782",
"privateKey": "0x8ab0e165c2ea461b01cdd49aec882d179dccdbdb5c85c3f9c94c448aa65c5ace",
"checksumAddress": "0x53bFf74b9Af2E3853f758A8D2Bd61CD115d27782",
"icapAddress": "XE709S6NUSJR6SXQERCMYENAYYOZ2Y91M6A"
}
_heading: Contract Interface
Procedurally generated test cases to test ABI coding.
_code: Example @lang<script>
{
"name": "random-1999",
"source": "contract Test {\n function test() constant returns (address, bool, bytes14[1]) {\n address a = address(0x061C7F399Ee738c97C7b7cD840892B281bf772B5);\n bool b = bool(true);\n bytes14[1] memory c;\n c[0] = bytes14(0x327621c4abe12d4f21804ed40455);\n return (a, b, c);\n }\n}\n",
"types": "[\"address\",\"bool\",\"bytes14[1]\"]",
"interface": "[{\"constant\":true,\"inputs\":[],\"name\":\"test\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes14[1]\"}],\"type\":\"function\"}]\n",
"bytecode": "0x6060604052610175806100126000396000f360606040526000357c010000000000000000000000000000000000000000000000000000000090048063f8a8fd6d1461003957610037565b005b610046600480505061009d565b604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018315158152602001826001602002808383829060006004602084601f0104600f02600301f150905001935050505060405180910390f35b600060006020604051908101604052806001905b60008152602001906001900390816100b157905050600060006020604051908101604052806001905b60008152602001906001900390816100da5790505073061c7f399ee738c97c7b7cd840892b281bf772b59250600191506d327621c4abe12d4f21804ed404557201000000000000000000000000000000000000028160006001811015610002579090602002019071ffffffffffffffffffffffffffffffffffff191690818152602001505082828295509550955061016d565b50505090919256",
"result": "0x000000000000000000000000061c7f399ee738c97c7b7cd840892b281bf772b50000000000000000000000000000000000000000000000000000000000000001327621c4abe12d4f21804ed40455000000000000000000000000000000000000",
"values": "[{\"type\":\"string\",\"value\":\"0x061C7F399Ee738c97C7b7cD840892B281bf772B5\"},{\"type\":\"boolean\",\"value\":true},[{\"type\":\"buffer\",\"value\":\"0x327621c4abe12d4f21804ed40455\"}]]",
"normalizedValues": "[{\"type\":\"string\",\"value\":\"0x061C7F399Ee738c97C7b7cD840892B281bf772B5\"},{\"type\":\"boolean\",\"value\":true},[{\"type\":\"buffer\",\"value\":\"0x327621c4abe12d4f21804ed40455\"}]]",
"runtimeBytecode": "0x60606040526000357c010000000000000000000000000000000000000000000000000000000090048063f8a8fd6d1461003957610037565b005b610046600480505061009d565b604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018315158152602001826001602002808383829060006004602084601f0104600f02600301f150905001935050505060405180910390f35b600060006020604051908101604052806001905b60008152602001906001900390816100b157905050600060006020604051908101604052806001905b60008152602001906001900390816100da5790505073061c7f399ee738c97c7b7cd840892b281bf772b59250600191506d327621c4abe12d4f21804ed404557201000000000000000000000000000000000000028160006001811015610002579090602002019071ffffffffffffffffffffffffffffffffffff191690818152602001505082828295509550955061016d565b50505090919256"
}
_heading: Contract Signatures
Computed ABI signatures and the selector hash.
_code: Example @lang<script>
{
"name": "random-1999",
"sigHash": "0xf51e9244",
"abi": "[{\"constant\":false,\"inputs\":[{\"name\":\"r0\",\"type\":\"string[2]\"},{\"name\":\"r1\",\"type\":\"uint128\"},{\"components\":[{\"name\":\"a\",\"type\":\"bytes\"},{\"name\":\"b\",\"type\":\"bytes\"},{\"name\":\"c\",\"type\":\"bytes\"}],\"name\":\"r2\",\"type\":\"tuple\"},{\"name\":\"r3\",\"type\":\"bytes\"}],\"name\":\"testSig\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"test\",\"outputs\":[{\"name\":\"r0\",\"type\":\"string[2]\"},{\"name\":\"r1\",\"type\":\"uint128\"},{\"components\":[{\"name\":\"a\",\"type\":\"bytes\"},{\"name\":\"b\",\"type\":\"bytes\"},{\"name\":\"c\",\"type\":\"bytes\"}],\"name\":\"r2\",\"type\":\"tuple\"},{\"name\":\"r3\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}]",
"signature": "testSig(string[2],uint128,(bytes,bytes,bytes),bytes)"
}
_heading: Hashes
_code: Examples @lang<script>
{
"data": "0x3718a88ceb214c1480c32a9d",
"keccak256": "0x82d7d2dc3d384ddb289f41917b8280675bb1283f4fe2b601ac7c8f0a2c2824fa",
"sha512": "0xe93462bb1de62ba3e6a980c3cb0b61728d3f771cea9680b0fa947b6f8fb2198a2690a3a837495c753b57f936401258dfe333a819e85f958b7d786fb9ab2b066c",
"sha256": "0xe761d897e667aa72141dd729264c393c4ddda5c62312bbd21b0f4d954eba1a8d"
}
_heading: Hierarchal Deterministic Node (BIP-32)
Tests for [BIP-32](link-bip-32) HD Wallets.
_code: Example @lang<script>
{
"name": "trezor-23",
"entropy": "0xf585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f",
"mnemonic": "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold",
"locale": "en",
"password": "TREZOR",
"hdnodes": [
{
"path": "m",
"address": "0xfd8eb95169ce57eab52fb69bc6922e9b6454d9aa",
"privateKey": "0x679bf92c04cf16307053cbed33784f3c4266b362bf5f3d7ee13bed6f2719743c"
},
{
"address": "0xada964e9f10c4fc9787f9e17f00c63fe188722b0",
"privateKey": "0xdcbcb48a2b11eef0aab93a8f88d83f60a3aaabb34f9ffdbe939b8f059b30f2b7",
"path": "m/8'/8'/2/3/4"
},
{
"privateKey": "0x10fd3776145dbeccb3d6925e4fdc0d58b452fce40cb8760b12f8b4223fafdfa6",
"address": "0xf3f6b1ef343d5f5f231a2287e801a46add43eb06",
"path": "m/1'/3'"
},
{
"address": "0xb7b0fdb6e0f79f0529e95400903321e8a601b411",
"privateKey": "0x093a8ff506c95a2b79d397aed59703f6212ff3084731c2f03089b069ae76e69d",
"path": "m/8'/4'/7'"
},
{
"path": "m/7'/5'/11",
"privateKey": "0x6bd79da4dfa7dd0abf566a011bdb7cba0d28bba9ca249ba25880d5dabf861b42",
"address": "0x1b3ad5fa50ae32875748107f4b2160829cc10536"
},
{
"path": "m/9'/6'/2'/7'/3'",
"address": "0x42eb4bed59f3291d02387cf0fb23098c55d82611",
"privateKey": "0xfc173acba7bc8bb2c434965d9e99f5a221f81add421bae96a891d08d60be11dd"
}
],
"seed": "0x01f5bced59dec48e362f2c45b5de68b9fd6c92c6634f44d6d40aab69056506f0e35524a518034ddc1192e1dacd32c1ed3eaa3c3b131c88ed8e7e54c49a5d0998"
}
_heading: ENS Namehash
Test cases for the [ENS Namehash Algorithm](link-namehash).
_code: Examples
{
"expected": "0x33868cc5c3fd3a9cd3adbc1e868ea133d2218f60dc2660c3bc48d8b1f4961384",
"name": "ViTalIk.WALlet.Eth",
"test": "mixed case"
}
_heading: RLP Coder
_code: Examples @lang<script>
{
"name": "arrayWithNullString3",
"encoded": "0xc3808080",
"decoded": [ "0x", "0x", "0x" ]
}
_heading: Solidity Hashes
Tests for the non-standard packed form of the Solidity hash functions.
These tests were created by procedurally generating random signatures and
values that match those signatures, constructing the equivalent Soldity,
compiling it and deploying it to a Parity node then evaluating the response.
_code: Example @lang<script>
{
"name": "random-1999",
"keccak256": "0x7d98f1144a0cd689f720aa2f11f0a73bd52a2da1117175bc4bacd93c130966a1",
"ripemd160": "0x59384617f8a06efd57ab106c9e0c20c3e64137ac000000000000000000000000",
"sha256": "0xf9aeea729ff39f8d372d8552bca81eb2a3c5d433dc8f98140040a03b7d81ac92",
"values": [
"0xcdffcb5242e6",
"0xc1e101b60ebe4688",
"0x5819f0ef5537796e43bdcd48309f717d6f7ccffa",
"0xec3f3f9f",
false,
true
],
"types": [
"int184",
"int176",
"address",
"int64",
"bool",
"bool"
]
}
_heading: Transactions
Serialized signed and unsigned transactions with both EIP-155 enabled and
disabled.
_code: Examples @lang<script>
{
"name": "random-998",
"privateKey": "0xd16c8076a15f7fb583f05dc12686fe526bc59d298f1eb7b9a237b458133d1dec",
"signedTransactionChainId5": "0xf8708391d450848517cfba8736fcf36da03ee4949577303fd4e0acbe72c6c116acab5bf63f0b1e9c8365fdc7827dc82ea059891894eb180cb7c6c45a52f62d2103420d3ad0bc3ba518d0a25ed910842522a0155c0ea2aee2ea82e75843aab297420bad907d46809d046b13d692928f4d78aa",
"gasLimit": "0x36fcf36da03ee4",
"to": "0x9577303fd4e0acbe72c6c116acab5bf63f0b1e9c",
"data": "0x7dc8",
"accountAddress": "0x6d4a6aff30ca5ca4b8422eea0ebcb669c7d79859",
"unsignedTransaction": "0xed8391d450848517cfba8736fcf36da03ee4949577303fd4e0acbe72c6c116acab5bf63f0b1e9c8365fdc7827dc8",
"nonce": "0x91d450",
"gasPrice": "0x8517cfba",
"signedTransaction": "0xf8708391d450848517cfba8736fcf36da03ee4949577303fd4e0acbe72c6c116acab5bf63f0b1e9c8365fdc7827dc81ba05030832331e6be48c95e1569a1ca9505c495486f72d6009b3a30fadfa05d9686a05cd3116b416d2362da1e9b0ca7fb1856c4e591cc22e63b395bd881ce2d3735e6",
"unsignedTransactionChainId5": "0xf08391d450848517cfba8736fcf36da03ee4949577303fd4e0acbe72c6c116acab5bf63f0b1e9c8365fdc7827dc8058080",
"value": "0x65fdc7"
}
_heading: Units
Unit conversion.
_code: Example @lang<script>
{
"name": "one-two-three-3",
"gwei_format": "-1234567890123456.789012345",
"ether_format": "-1234567.890123456789012345",
"gwei": "-1234567890123456.789012345",
"ether": "-1234567.890123456789012345",
"finney": "-1234567890.123456789012345",
"wei": "-1234567890123456789012345",
"finney_format": "-1234567890.123456789012345"
}
_heading: Wallets
Tests for the JSON keystore format.
_code: Example @lang<script>
{
"mnemonic": null,
"name": "secretstorage_password",
"type": "secret-storage",
"password": "foo",
"privateKey": "0xf03e581353c794928373fb0893bc731aefc4c4e234e643f3a46998b03cd4d7c5",
"hasAddress": true,
"json": "{\"address\":\"88a5c2d9919e46f883eb62f7b8dd9d0cc45bc290\",\"Crypto\":{\"cipher\":\"aes-128-ctr\",\"ciphertext\":\"10adcc8bcaf49474c6710460e0dc974331f71ee4c7baa7314b4a23d25fd6c406\",\"cipherparams\":{\"iv\":\"1dcdf13e49cea706994ed38804f6d171\"},\"kdf\":\"scrypt\",\"kdfparams\":{\"dklen\":32,\"n\":262144,\"p\":1,\"r\":8,\"salt\":\"bbfa53547e3e3bfcc9786a2cbef8504a5031d82734ecef02153e29daeed658fd\"},\"mac\":\"1cf53b5ae8d75f8c037b453e7c3c61b010225d916768a6b145adf5cf9cb3a703\"},\"id\":\"fb1280c0-d646-4e40-9550-7026b1be504a\",\"version\":3}\n",
"address": "0x88a5c2d9919e46f883eb62f7b8dd9d0cc45bc290"
}

8
docs/api-keys/index.html Normal file
View File

@@ -0,0 +1,8 @@
<html>
<head>
<title>API Keys - ethers</title>
</head>
<body>
Redirect to /v5/api-keys.
</body>
</html>

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -21,6 +21,7 @@ Developer Documentation
* [Importing](getting-started)
* [Common Terminology](getting-started)
* [Connecting to Ethereum: Metamask](getting-started)
* [Connecting to Ethereum: RPC](getting-started)
* [Contracts](getting-started)
* [Signing Messages](getting-started)
* [Ethereum Basics](concepts)
@@ -32,30 +33,12 @@ Developer Documentation
* [Gas Limit](concepts/gas)
* [Security](concepts/security)
* [Key Derivation Functions](concepts/security)
* [Provider API Keys](api-keys)
* [Etherscan](api-keys)
* [INFURA](api-keys)
* [Alchemy](api-keys)
* [Creating a Default Provider](api-keys)
* [Application Programming Interface](api)
* [Contract Interaction](api/contract)
* [Contract](api/contract/contract)
* [Creating Instances](api/contract/contract)
* [Properties](api/contract/contract)
* [Methods](api/contract/contract)
* [Events](api/contract/contract)
* [Meta-Class](api/contract/contract)
* [ContractFactory](api/contract/contract-factory)
* [Creating Instances](api/contract/contract-factory)
* [Properties](api/contract/contract-factory)
* [Methods](api/contract/contract-factory)
* [Example: ERC-20 Contract](api/contract/example)
* [Connecting to a Contract](api/contract/example)
* [Properties](api/contract/example)
* [Methods](api/contract/example)
* [Events](api/contract/example)
* [Meta-Class Methods](api/contract/example)
* [Meta-Class Filters](api/contract/example)
* [Signers](api/signer)
* [Signer](api/signer)
* [Wallet](api/signer)
* [VoidSigner](api/signer)
* [ExternallyOwnedAccount](api/signer)
* [Providers](api/providers)
* [Provider](api/providers/provider)
* [Accounts Methods](api/providers/provider)
@@ -80,12 +63,37 @@ Developer Documentation
* [IpcProvider](api/providers/other)
* [UrlJsonRpcProvider](api/providers/other)
* [Web3Provider](api/providers/other)
* [WebSocketProvider](api/providers/other)
* [Types](api/providers/types)
* [BlockTag](api/providers/types)
* [Networkish](api/providers/types)
* [Network](api/providers/types)
* [Block](api/providers/types)
* [Events and Logs](api/providers/types)
* [Transactions](api/providers/types)
* [Signers](api/signer)
* [Signer](api/signer)
* [Wallet](api/signer)
* [VoidSigner](api/signer)
* [ExternallyOwnedAccount](api/signer)
* [Contract Interaction](api/contract)
* [Contract](api/contract/contract)
* [Creating Instances](api/contract/contract)
* [Properties](api/contract/contract)
* [Methods](api/contract/contract)
* [Events](api/contract/contract)
* [Meta-Class](api/contract/contract)
* [ContractFactory](api/contract/contract-factory)
* [Creating Instances](api/contract/contract-factory)
* [Properties](api/contract/contract-factory)
* [Methods](api/contract/contract-factory)
* [Example: ERC-20 Contract](api/contract/example)
* [Connecting to a Contract](api/contract/example)
* [Properties](api/contract/example)
* [Methods](api/contract/example)
* [Events](api/contract/example)
* [Meta-Class Methods](api/contract/example)
* [Meta-Class Filters](api/contract/example)
* [Utilities](api/utils)
* [Application Binary Interface](api/utils/abi)
* [AbiCoder](api/utils/abi/coder)
@@ -219,10 +227,14 @@ Developer Documentation
* [Plugin](cli/plugin)
* [ArgParser](cli/plugin)
* [Cookbook](cookbook)
* [React Native (and ilk)](cookbook/react-native)
* [Installing](cookbook/react-native)
* [Security](cookbook/react-native)
* [Migration Guide](migration)
* [Migration: From Web3.js](migration/web3)
* [Contracts](migration/web3)
* [Providers](migration/web3)
* [Signers](migration/web3)
* [Contracts](migration/web3)
* [Numbers](migration/web3)
* [Utilities](migration/web3)
* [Migration: From Ethers v4](migration/ethers-v4)
@@ -230,11 +242,16 @@ Developer Documentation
* [Contracts](migration/ethers-v4)
* [Errors](migration/ethers-v4)
* [Interface](migration/ethers-v4)
* [Utilities](migration/ethers-v4)
* [Wallet](migration/ethers-v4)
* [Testing](testing)
* [Supported Platforms](testing)
* [Test Suites](testing)
* [Test Suite API](testing)
* [Schemas](testing)
* [Contributing and Hacking](contributing)
* [Building](contributing)
* [Making your changes](contributing)
* [Documentation](contributing)
* [Flatworm Docs](documentation)
* [Fragments](documentation)
* [Markdown](documentation)

View File

@@ -0,0 +1,35 @@
-----
Documentation: [html](https://docs.ethers.io/)
-----
Provider API Keys
=================
Etherscan
---------
INFURA
------
Alchemy
-------
Creating a Default Provider
---------------------------
```
// Use the mainnet
const network = "homestead";
// Specify your own API keys
// Each is optional, and if you omit it the default
// API key for that service will be used.
const provider = ethers.getDefaultProvider(network, {
etherscan: YOUR_ETHERSCAN_API_KEY,
infura: YOUR_INFURA_PROJECT_ID,
alchemy: YOUR_ALCHEMY_API_KEY
});
```

File diff suppressed because one or more lines are too long

View File

@@ -1,35 +1,12 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
Application Programming Interface
=================================
* [Contract Interaction](contract)
* [Contract](contract/contract)
* [Creating Instances](contract/contract)
* [Properties](contract/contract)
* [Methods](contract/contract)
* [Events](contract/contract)
* [Meta-Class](contract/contract)
* [ContractFactory](contract/contract-factory)
* [Creating Instances](contract/contract-factory)
* [Properties](contract/contract-factory)
* [Methods](contract/contract-factory)
* [Example: ERC-20 Contract](contract/example)
* [Connecting to a Contract](contract/example)
* [Properties](contract/example)
* [Methods](contract/example)
* [Events](contract/example)
* [Meta-Class Methods](contract/example)
* [Meta-Class Filters](contract/example)
* [Signers](signer)
* [Signer](signer)
* [Wallet](signer)
* [VoidSigner](signer)
* [ExternallyOwnedAccount](signer)
* [Providers](providers)
* [Provider](providers/provider)
* [Accounts Methods](providers/provider)
@@ -54,12 +31,37 @@ Application Programming Interface
* [IpcProvider](providers/other)
* [UrlJsonRpcProvider](providers/other)
* [Web3Provider](providers/other)
* [WebSocketProvider](providers/other)
* [Types](providers/types)
* [BlockTag](providers/types)
* [Networkish](providers/types)
* [Network](providers/types)
* [Block](providers/types)
* [Events and Logs](providers/types)
* [Transactions](providers/types)
* [Signers](signer)
* [Signer](signer)
* [Wallet](signer)
* [VoidSigner](signer)
* [ExternallyOwnedAccount](signer)
* [Contract Interaction](contract)
* [Contract](contract/contract)
* [Creating Instances](contract/contract)
* [Properties](contract/contract)
* [Methods](contract/contract)
* [Events](contract/contract)
* [Meta-Class](contract/contract)
* [ContractFactory](contract/contract-factory)
* [Creating Instances](contract/contract-factory)
* [Properties](contract/contract-factory)
* [Methods](contract/contract-factory)
* [Example: ERC-20 Contract](contract/example)
* [Connecting to a Contract](contract/example)
* [Properties](contract/example)
* [Methods](contract/example)
* [Events](contract/example)
* [Meta-Class Methods](contract/example)
* [Meta-Class Filters](contract/example)
* [Utilities](utils)
* [Application Binary Interface](utils/abi)
* [AbiCoder](utils/abi/coder)

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -10,7 +10,7 @@ ContractFactory
Creating Instances
------------------
#### **new ***ethers* . **ContractFactory**( interface , bydecode [ , signer ] )
#### **new ***ethers* . **ContractFactory**( interface , bytecode [ , signer ] )
@@ -52,9 +52,9 @@ Returns the unsigned transaction which would deploy this Contract with *args* pa
#### *contractFactory* . **deploy**( ...args ) => *Promise< [Contract](/v5/api/contract/contract/) >*
Uses the signer to deploy the Contract with *args* passed into tgee constructor and retruns a Contract which is attached to the address where this contract **will** be deployed once the transction is mined.
Uses the signer to deploy the Contract with *args* passed into the constructor and retruns a Contract which is attached to the address where this contract **will** be deployed once the transaction is mined.
The transction can be found at `contract.deployTransaction`, and no interactions should be made until the transaction is mined.
The transaction can be found at `contract.deployTransaction`, and no interactions should be made until the transaction is mined.
```
@@ -86,7 +86,7 @@ contract.deployTransaction
contract.deployTransaction.wait()
//!
// Now the contract is safe to ineract with
// Now the contract is safe to interact with
contract.value()
//!
```

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -25,7 +25,7 @@ Returns a new instance of the Contract, but connected to *providerOrSigner*.
By passing in a [Provider](/v5/api/providers/provider/), this will return a downgraded **Contract** which only has read-only access (i.e. constant calls).
By passing in a [Signer](/v5/api/signer/#Signer). the will return a **Contract** which will act on behalf of that signer.
By passing in a [Signer](/v5/api/signer/#Signer). this will return a **Contract** which will act on behalf of that signer.
Properties
@@ -121,7 +121,7 @@ The type of the result depends on the ABI.
For values that have a simple meaning in JavaScript, the types are fairly straight forward; strings and booleans are returned as JavaScript strings and booleans.
For numbers, if the **type** is in the JavaSsript safe range (i.e. less than 53 bits, such as an `int24` or `uint48`) a normal JavaScript number is used. Otherwise a [BigNumber](/v5/api/utils/bignumber/) is returned.
For numbers, if the **type** is in the JavaScript safe range (i.e. less than 53 bits, such as an `int24` or `uint48`) a normal JavaScript number is used. Otherwise a [BigNumber](/v5/api/utils/bignumber/) is returned.
For bytes (both fixed length and dynamic), a [DataHexString](/v5/api/utils/bytes/#DataHexString) is returned.
@@ -156,11 +156,11 @@ Returns the estimate units of gas that would be required to execute the *METHOD_
Returns an [UnsignedTransaction](/v5/api/utils/transactions/#UnsignedTransaction) which represents the transaction that would need to be signed and submitted to the network to execute *METHOD_NAME* with *args* and *overrides*.
#### *contract* . *staticCall* . **METHOD_NAME**( ...args [ , overrides ] ) => *Promise< any >*
#### *contract* . *callStatic* . **METHOD_NAME**( ...args [ , overrides ] ) => *Promise< any >*
Rather than executing the state-change of a transaction, it is possible to ask a node to *pretend* that a call is not state-changing and return the result.
This does not actually chagne any state, but is free. This in some cases can be used to determine if a transaction will fail or succeed.
This does not actually change any state, but is free. This in some cases can be used to determine if a transaction will fail or succeed.
This otherwise functions the same as a [Read-Only Method](/v5/api/contract/contract/#Contract--readonly).

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -102,7 +102,7 @@ Returns a new instance of the Contract, but connected to *providerOrSigner*.
By passing in a [Provider](/v5/api/providers/provider/), this will return a downgraded **Contract** which only has read-only access (i.e. constant calls).
By passing in a [Signer](/v5/api/signer/#Signer). the will return a **Contract** which will act on behalf of that signer.
By passing in a [Signer](/v5/api/signer/#Signer). this will return a **Contract** which will act on behalf of that signer.
#### *erc20* . **deployed**( ) => *Promise< Contract >*
@@ -199,7 +199,7 @@ When you perform a static call, the current state is taken into account as best
Meta-Class Filters
------------------
#### *erc20* . *filters* . **Transafer**( [ fromAddress [ , toAddress ] ] ) => *Filter*
#### *erc20* . *filters* . **Transfer**( [ fromAddress [ , toAddress ] ] ) => *Filter*
Returns a new Filter which can be used to [query](/v5/api/contract/example/#erc20-queryfilter) or to [subscribe/unsubscribe to events](/v5/api/contract/example/#erc20-events).

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -14,6 +14,8 @@ Default Provider
Returns a new Provider, backed by multiple services, connected to *network*. Is no *network* is provided, **homestead** (i.e. mainnet) is used.
The *network* may also be a URL to connect to, such as `http://localhost:8545` or `wss://example.com`.
The *options* is an object, with the following properties:
@@ -25,13 +27,26 @@ Option Properties
It is highly recommended for production services that to acquire and specify an API Key for each sercice.
The deafult API Keys used by ethers are shared across all users, so services may throttle all services that are using the default API Keys during periods of load without realizing it.
The default API Keys used by ethers are shared across all users, so services may throttle all services that are using the default API Keys during periods of load without realizing it.
Many services also have monitoring and usage metrics, which are only available if an API Key is specifie. This allows tracking how many requests are being sent and which methods are being used the most.
Many services also have monitoring and usage metrics, which are only available if an API Key is specified. This allows tracking how many requests are being sent and which methods are being used the most.
Some services also provide additional paid features, whichare only available when specifying an API Key.
Some services also provide additional paid features, which are only available when specifying an API Key.
Networks
--------
### Custom ENS Contract
```
const network = {
name: "dev",
chianId: 1337,
ensAddress: customEnsAddress
};
```
Provider Documentation
----------------------
@@ -58,8 +73,10 @@ Provider Documentation
* [IpcProvider](other)
* [UrlJsonRpcProvider](other)
* [Web3Provider](other)
* [WebSocketProvider](other)
* [Types](types)
* [BlockTag](types)
* [Networkish](types)
* [Network](types)
* [Block](types)
* [Events and Logs](types)

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -76,6 +76,13 @@ The *network* may be specified as **string** for a common network name, a **numb
The *apiKey* can be a **string** Project ID or an **object** with the properties `projectId` and `projectSecret` to specify a [Project Secret](https://infura.io/docs/gettingStarted/authentication) which can be used on non-public sources (like on a server) to further secure your API access and quotas.
#### *InfuraProvider* . **getWebSocketProvider**( [ network [ , apiKey ] ] ) => *[WebSocketProvider](/v5/api/providers/other/#WebSocketProvider)*
Create a new [WebSocketProvider](/v5/api/providers/other/#WebSocketProvider) using the INFURA web-socket endpoint to connect to *network* with the optional *apiKey*.
The *network* and *apiKey* are specified the same as [the constructor](/v5/api/providers/api-providers/#InfuraProvider).
#### Note: Default API keys
If no *apiKey* is provided, a shared API key will be used, which may result in reduced performance and throttled requests.
@@ -111,6 +118,9 @@ provider = new InfuraProvider("homestead", {
projectId: projectId,
projectSecret: projectSecret
});
// Connect to the INFURA WebSocket endpoints with a WebSocketProvider
provider = InfuraProvider.getWebSocketProvider()
```
AlchemyProvider
@@ -152,6 +162,9 @@ provider = new AlchemyProvider("ropsten");
// Connect to mainnet with an API key (these are equivalent)
provider = new AlchemyProvider(null, apiKey);
provider = new AlchemyProvider("homestead", apiKey);
// Connect to the Alchemy WebSocket endpoints with a WebSocketProvider
provider = AlchemyProvider.getWebSocketProvider()
```
CloudflareProvider

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -14,7 +14,7 @@ Connect to a JSON-RPC API located at *url* using the *aNetworkish* network. If *
#### Note: Connecting to a Local Node
Each node implementation is slightly different and may require specific command-line flags, configuration or settings in their UI to enable JSON-RPC, unlock accounrs or expose specific APIs. Please consult their documentation.
Each node implementation is slightly different and may require specific command-line flags, configuration or settings in their UI to enable JSON-RPC, unlock accounts or expose specific APIs. Please consult their documentation.
#### *jsonRpcProvider* . **getSigner**( [ addressOrIndex ] ) => *[JsonRpcSigner](/v5/api/providers/jsonrpc-provider/#JsonRpcSigner)*
@@ -48,12 +48,12 @@ The provider this signer was established from.
#### *signer* . **connectUnchecked**( ) => *[JsonRpcUncheckedSigner](/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner)*
Returns a new Signer object which does not perform addtional checks when sending a transaction. See [getUncheckedSigner](/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getUncheckedSigner) for more details.
Returns a new Signer object which does not perform additional checks when sending a transaction. See [getUncheckedSigner](/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getUncheckedSigner) for more details.
#### *signer* . **sendUncheckedTransaction**( transaction ) => *Promise< string< [DataHexString](/v5/api/utils/bytes/#DataHexString)< 32 > > >*
Sends the *transaction* and returns a Promise which resolves to the opacque transaction hash.
Sends the *transaction* and returns a Promise which resolves to the opaque transaction hash.
#### *signer* . **unlock**( password ) => *Promise< boolean >*

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -120,3 +120,13 @@ The *callback* should use the error-first calling semantics, so `(error, result)
This is identical to `sendAsync`. Historically, this used a synchronous web request, but no current browsers support this, so its use this way was deprecated quite a long time ago
WebSocketProvider
-----------------
#### **new ***ethers* . *provider* . **WebSocketProvider**( [ url [ , network ] ] )
Returns a new [WebSocketProvider](/v5/api/providers/other/#WebSocketProvider) connected to *url* as the *network*.
If *url* is unspecified, the default `"ws://localhost:8546"` will be used. If *network* is unspecified, it will be queried from the network.

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -33,7 +33,7 @@ Returns the number of transactions *address* has ever **sent**, as of *blockTag*
```javascript
// Get the balance for an account...
provider.getBalance("ricmoo.firefly.eth");
// { Promise: { BigNumber: "955864037352077165" } }
// { Promise: { BigNumber: "1492974808274631213" } }
// Get the code for a contract...
provider.getCode("registrar.firefly.eth");
@@ -45,7 +45,7 @@ provider.getStorageAt("registrar.firefly.eth", 0)
// Get transaction count of an account...
provider.getTransactionCount("ricmoo.firefly.eth");
// { Promise: 668 }
// { Promise: 679 }
```
Blocks Methods
@@ -96,7 +96,7 @@ provider.getBlockWithTransactions(100004)
// blockHash: '0xf93283571ae16dcecbe1816adc126954a739350cd1523a1559eabeae155fbb63',
// blockNumber: 100004,
// chainId: 0,
// confirmations: 10153796,
// confirmations: 10719007,
// creates: null,
// data: '0x',
// from: '0xcf00A85f3826941e7A25BFcF9Aac575d40410852',
@@ -177,16 +177,16 @@ provider.getNetwork()
// The current block number
provider.getBlockNumber()
// { Promise: 10253799 }
// { Promise: 10819010 }
// Get the current suggested gas price (in wei)...
gasPrice = await provider.getGasPrice()
// { BigNumber: "19470000000" }
// { BigNumber: "69000000000" }
// ...often this gas price is easier to understand or
// display to the user in gwei (giga-wei, or 1e9 wei)
utils.formatUnits(gasPrice, "gwei")
// '19.47'
// '69.0'
```
Transactions Methods
@@ -302,7 +302,7 @@ provider.once(txHash, (transaction) => {
filter = {
address: "dai.tokens.ethers.eth",
topics: [
utils.id("Transfer(address,address,uint256")
utils.id("Transfer(address,address,uint256)")
]
}
provider.on(filter, (log, event) => {
@@ -313,7 +313,7 @@ provider.on(filter, (log, event) => {
// Notice this is an array of topic-sets and is identical to
// using a filter with no address (i.e. match any address)
topicSets = [
utils.id("Transfer(address,address,uint256"),
utils.id("Transfer(address,address,uint256)"),
null,
[
myAddress,

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More