Compare commits

...

59 Commits

Author SHA1 Message Date
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
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
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
1071 changed files with 16661 additions and 4074 deletions

View File

@@ -6,13 +6,15 @@ 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 }}
@@ -22,13 +24,16 @@ jobs:
- uses: actions/checkout@v2
- run: npm ci
- run: npm run bootstrap
- run: npm run build-all
- run: npm run test-node
test-browser:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
module: [ 'esm', 'umd' ]
@@ -39,5 +44,24 @@ jobs:
- uses: actions/checkout@v2
- run: npm ci
- run: npm run bootstrap
- run: npm run build-all
- run: npm run test-browser-${{ matrix.module }}
coverage:
name: Coverage
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/setup-node@v1
with:
node-version: 12.x
- uses: actions/checkout@v2
- run: npm ci
- run: npm run bootstrap
- run: npm run build-all
- run: npm run test-coverage

2
.gitignore vendored
View File

@@ -18,3 +18,5 @@ lerna-debug.log
packages/*/tsconfig.tsbuildinfo
packages/testcases/input/nameprep/**
.nyc_output/**

View File

@@ -3,6 +3,49 @@ Changelog
This change log is managed by `scripts/cmds/update-versions` but may be manually updated.
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)
--------------------------------

View File

@@ -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).
@@ -66,7 +66,7 @@ Browse the [documentation](https://docs.ethers.io/v5/) online:
- [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/) to make searching easier.
Or browse the entire documentation as a [single page](https://docs.ethers.io/v5/single-page/) to make searching easier.
Ancillary Packages
@@ -78,7 +78,7 @@ 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
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))

View File

@@ -16,8 +16,8 @@ decrypt decrypted decrypting deployed deploying deprecated detected
discontinued earliest email enabled encoded encoding encrypt
encrypted encrypting entries euro exceeded existing expected
expired failed fetches formatted formatting funding generated
has ignoring implemented implementer imported including instantiate
keyword labelled larger lookup matches mined modified modifies multi
hardened has ignoring implemented implementer imported including instantiate
joined keyword labelled larger lookup matches mined modified modifies multi
named needed nested neutered numeric offline optimizer overriding owned packed
padded parsed parsing passed placeholder processing properties reached
recommended recovered redacted remaining replaced required
@@ -43,14 +43,14 @@ ABIEncoder testcase numberish Wordlist
// Common Code Strings
abi addr api app arg arrayify asm basex bigint bignumber bn byte
bytecode callback calldata checksum ciphertext cli codepoint config
bytecode callback calldata checksum ciphertext cli codepoint commify config
contenthash ctr ctrl debug dd dklen eexist encseed eof ethaddr
ethseed ethers eval exec filename func gz hid http https hw iv
info init ipc json kdf kdfparams labelhash lang lib mm multihash nfc
nfkc nfd nfkd nodehash nullish oob opcode pbkdf pc plugin pragma pre prf
repl rpc sighash topichash solc stdin stdout subclasses subnode
timeout todo txt ufixed utc utf util url uuid vm vs websocket
wikipedia wx xe yyyy zlib
wikipedia wx xe xpriv xpub xx yyyy zlib
// AbiV2
abiv
@@ -58,9 +58,10 @@ abiv
// Query parameters
apikey asc endblock startblock
Cloudflare Etherscan INFURA IPFS MetaMask Nodesmith Trezor ledgerhq
axic bitcoinjs browserify easyseed ethereumjs
goerli homestead kotti kovan mainnet morden mordor rinkeby ropsten testnet
alchemyapi Cloudflare Etherscan INFURA IPFS MetaMask Nodesmith
Trezor ledgerhq axic bitcoinjs browserify easyseed ethereumjs
goerli homestead kotti kovan mainnet morden mordor rinkeby
ropsten testnet
// Demo words
args foo eth foo foobar ll localhost passwd ricmoo tx xxx yna

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 reties 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

@@ -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
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 transction is mined.
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>

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

@@ -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

@@ -96,7 +96,7 @@ 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>
_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//.
@@ -145,9 +145,7 @@ provider = new InfuraProvider("homestead", {
// Connect to the INFURA WebSocket endpoints with a WebSocketProvider
provider = InfuraProvider.getWebSocketProvider()
// <hide>
provider._websocket.onopen = function(){
provider._websocket.close();
};
provider.destroy();
// </hide>
@@ -196,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

@@ -55,16 +55,16 @@ _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.

View File

@@ -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

@@ -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

@@ -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,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)

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

@@ -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.

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>

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

@@ -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.
@@ -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,
@@ -181,12 +181,18 @@ module.exports = {
"link-infura": { name: "INFURA", url: "https:/\/infura.io" },
"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-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:/\/alchemyapi.io/signup",
"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 +203,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 +228,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" },
@@ -237,6 +248,7 @@ module.exports = {
"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

@@ -38,8 +38,10 @@ 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>
@@ -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>

View File

@@ -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 featuers 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 resovled 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
@@ -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 critcial 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 verifyied 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
environmants 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 avaialble a 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 binrary 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 strutured
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 offcial 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 extenstion (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 eaxmple on each iteration change the value and
in recursive functions, concatentate 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 addrss forms.
Tests were verfified 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"
}

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -80,6 +80,7 @@ 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)
* [Network](api/providers/types)
@@ -235,6 +236,8 @@ Developer Documentation
* [Testing](testing)
* [Contributing and Hacking](contributing)
* [Building](contributing)
* [Making your changes](contributing)
* [Documentation](contributing)
* [Flatworm Docs](documentation)
* [Fragments](documentation)
* [Markdown](documentation)

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -54,6 +54,7 @@ Application Programming Interface
* [IpcProvider](providers/other)
* [UrlJsonRpcProvider](providers/other)
* [Web3Provider](providers/other)
* [WebSocketProvider](providers/other)
* [Types](providers/types)
* [BlockTag](providers/types)
* [Network](providers/types)

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/)
-----
@@ -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 >*

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/)
-----
@@ -25,11 +25,11 @@ 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.
Provider Documentation
@@ -58,6 +58,7 @@ Provider Documentation
* [IpcProvider](other)
* [UrlJsonRpcProvider](other)
* [Web3Provider](other)
* [WebSocketProvider](other)
* [Types](types)
* [BlockTag](types)
* [Network](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

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* . **WebSockerProvider**( [ 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: "1578527309436018765" } }
// 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: 673 }
```
Blocks Methods
@@ -96,7 +96,7 @@ provider.getBlockWithTransactions(100004)
// blockHash: '0xf93283571ae16dcecbe1816adc126954a739350cd1523a1559eabeae155fbb63',
// blockNumber: 100004,
// chainId: 0,
// confirmations: 10153796,
// confirmations: 10297123,
// creates: null,
// data: '0x',
// from: '0xcf00A85f3826941e7A25BFcF9Aac575d40410852',
@@ -177,16 +177,16 @@ provider.getNetwork()
// The current block number
provider.getBlockNumber()
// { Promise: 10253799 }
// { Promise: 10397126 }
// Get the current suggested gas price (in wei)...
gasPrice = await provider.getGasPrice()
// { BigNumber: "19470000000" }
// { BigNumber: "19000001123" }
// ...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'
// '19.000001123'
```
Transactions Methods

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/)
-----
@@ -38,7 +38,7 @@ Returns the balance of this wallet at *blockTag*.
#### *signer* . **getChainId**( ) => *Promise< number >*
Returns ths chain ID this wallet is connected to.
Returns the chain ID this wallet is connected to.
#### *signer* . **getGasPrice**( ) => *Promise< [BigNumber](/v5/api/utils/bignumber/) >*
@@ -177,7 +177,7 @@ The provider this wallet is connected to, which will ge used for any [Blockchain
#### Note
A **Wallet** instance is immuatable, so if you wish to change the Provider, you may use the [connect](/v5/api/signer/#Signer-connect) method to create a new instance connected to the desired provider.
A **Wallet** instance is immutable, so if you wish to change the Provider, you may use the [connect](/v5/api/signer/#Signer-connect) method to create a new instance connected to the desired provider.
#### *wallet* . **publicKey** => *string< [DataHexString](/v5/api/utils/bytes/#DataHexString)< 65 > >*
@@ -285,7 +285,7 @@ contract = new ethers.Contract("dai.tokens.ethers.eth", abi, signer)
// Get the number of tokens for this account
tokens = await contract.balanceOf(signer.getAddress())
// { BigNumber: "7712595125722568213383" }
// { BigNumber: "9709905125722568213383" }
//
// Pre-flight (check for revert) on DAI from the signer
@@ -302,7 +302,7 @@ contract.callStatic.transfer("donations.ethers.eth", tokens)
// This will fail since it is greater than the token balance
contract.callStatic.transfer("donations.ethers.eth", tokens.add(1))
// Error: call revert exception (method="transfer(address,uint256)", errorSignature="Error(string)", errorArgs=["Dai/insufficient-balance"], reason="Dai/insufficient-balance", code=CALL_EXCEPTION, version=abi/5.0.0-beta.156)
// Error: call revert exception (method="transfer(address,uint256)", errorSignature="Error(string)", errorArgs=["Dai/insufficient-balance"], reason="Dai/insufficient-balance", code=CALL_EXCEPTION, version=abi/5.0.1)
```
ExternallyOwnedAccount

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

View File

@@ -1,6 +1,6 @@
-----
Documentation: [html](https://docs-beta.ethers.io/)
Documentation: [html](https://docs.ethers.io/)
-----
@@ -21,7 +21,7 @@ Converting and Verifying
Returns *address* as a Checksum Address.
If *address* is an invalid 40-nibble [HexString](/v5/api/utils/bytes/#HexString) or if it contains mixed case and the checksum is invalid, an InvalidArgument Error is throw.
If *address* is an invalid 40-nibble [HexString](/v5/api/utils/bytes/#HexString) or if it contains mixed case and the checksum is invalid, an InvalidArgument Error is thrown.
The value of *address* may be any supported address format.

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/)
-----
@@ -85,7 +85,7 @@ BigNumber.from(42n)
// Numbers outside the safe range fail:
BigNumber.from(Number.MAX_SAFE_INTEGER);
// Error: overflow (fault="overflow", operation="BigNumber.from", value=9007199254740991, code=NUMERIC_FAULT, version=bignumber/5.0.0-beta.139)
// Error: overflow (fault="overflow", operation="BigNumber.from", value=9007199254740991, code=NUMERIC_FAULT, version=bignumber/5.0.3)
```
Methods

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/)
-----
@@ -164,20 +164,20 @@ Return a copy of *array* shuffled using [Fisher-Yates Shuffle](https://en.wikipe
```javascript
utils.randomBytes(8)
// Uint8Array [ 131, 252, 210, 50, 128, 120, 18, 68 ]
// Uint8Array [ 158, 14, 185, 6, 8, 37, 214, 172 ]
const data = [ 1, 2, 3, 4, 5, 6, 7 ];
// Returns a new Array
utils.shuffled(data);
// [
// 7,
// 6,
// 4,
// 2,
// 3,
// 1,
// 5
// 3,
// 4,
// 7,
// 2,
// 5,
// 6
// ]
// The Original is unscathed...

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

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/)
-----
@@ -68,6 +68,13 @@ Returns a new FixedNumber with the value of *fixedvalue* **/** *otherValue*.
Returns a new FixedNumber with the value of *fixedvalue* rounded to *decimals*.
### Comparison and Equivalence
#### *FixedNumber* . **isZero**( ) => *boolean*
Returns true if and only if the value of *FixedNumber* is zero.
### Conversion
#### *fixednumber* . **toFormat**( format ) => *[FixedNumber](/v5/api/utils/fixednumber/)*

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/)
-----
@@ -52,7 +52,7 @@ utils.keccak256("0x1234")
// Do NOT use UTF-8 strings that are not a DataHexstring
utils.keccak256("hello world")
// Error: invalid arrayify value (argument="value", value="hello world", code=INVALID_ARGUMENT, version=bytes/5.0.0-beta.138)
// Error: invalid arrayify value (argument="value", value="hello world", code=INVALID_ARGUMENT, version=bytes/5.0.1)
// If needed, convert strings to bytes first:
utils.keccak256(utils.toUtf8Bytes("hello world"))

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

View File

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

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