Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f34be4e2c2 | ||
|
|
84e253f3f9 | ||
|
|
0fd9aa5cb6 | ||
|
|
2a73b6ed34 | ||
|
|
0838135d4a | ||
|
|
a144ed8a71 | ||
|
|
c646a0c881 | ||
|
|
0059b7e468 | ||
|
|
4838874127 | ||
|
|
96cb44025b | ||
|
|
7fe702d59b | ||
|
|
9e1434503e | ||
|
|
08c74e9a13 | ||
|
|
c53864de0a | ||
|
|
8c1ff4c862 | ||
|
|
987b5354cc | ||
|
|
1a4f7d1b53 | ||
|
|
f9e9347e69 | ||
|
|
d00362eb70 | ||
|
|
8ed67a5c19 | ||
|
|
f99029b49a | ||
|
|
88e68495b6 |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -3,6 +3,26 @@ Changelog
|
||||
|
||||
This change log is managed by `scripts/cmds/update-versions` but may be manually updated.
|
||||
|
||||
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)
|
||||
--------------------------------
|
||||
|
||||
|
||||
18
README.md
18
README.md
@@ -1,7 +1,7 @@
|
||||
The Ethers Project
|
||||
==================
|
||||
|
||||
[](https://www.npmjs.com/package/ethers/v/next)
|
||||
[](https://www.npmjs.com/package/ethers)
|
||||
[](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).
|
||||
@@ -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/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))
|
||||
|
||||
33
SECURITY.md
Normal file
33
SECURITY.md
Normal 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.
|
||||
100
admin/cmds/serve-docs.js
Normal file
100
admin/cmds/serve-docs.js
Normal 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(`Listening on port: ${ options.port }`);
|
||||
});
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
start(path.resolve(__dirname, "../../docs"), {
|
||||
redirects: {
|
||||
"/": "/v5/"
|
||||
}
|
||||
});
|
||||
@@ -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()
|
||||
//!
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,14 @@ provider = new InfuraProvider("homestead", {
|
||||
projectSecret: projectSecret
|
||||
});
|
||||
|
||||
// Connect to the INFURA WebSocket endpoints with a WebSocketProvider
|
||||
provider = InfuraProvider.getWebSocketProvider()
|
||||
// <hide>
|
||||
provider._websocket.onopen = function(){
|
||||
provider._websocket.close();
|
||||
};
|
||||
// </hide>
|
||||
|
||||
|
||||
_subsection: AlchemyProvider @<AlchemyProvider> @inherit<[[UrlJsonRpcProvider]]> @src<providers:class.AlchemyProvider>
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -93,7 +93,7 @@ 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
|
||||
@@ -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.WebSockerProvider([ 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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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// **≥** //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.
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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,
|
||||
@@ -217,7 +217,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" },
|
||||
|
||||
@@ -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 symblinks 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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -99,14 +99,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 +119,7 @@ interface.events.Transfer.decode(data, topics)
|
||||
|
||||
// v5
|
||||
interface.encodeFilterTopics("Transfer", values)
|
||||
interface.encodeEventLog("Transfer", data, topics)
|
||||
interface.decodeEventLog("Transfer", data, topics)
|
||||
|
||||
|
||||
_heading: Inspection
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-----
|
||||
|
||||
Documentation: [html](https://docs-beta.ethers.io/)
|
||||
Documentation: [html](https://docs.ethers.io/)
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,6 +1,6 @@
|
||||
-----
|
||||
|
||||
Documentation: [html](https://docs-beta.ethers.io/)
|
||||
Documentation: [html](https://docs.ethers.io/)
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-----
|
||||
|
||||
Documentation: [html](https://docs-beta.ethers.io/)
|
||||
Documentation: [html](https://docs.ethers.io/)
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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: "1585454034436018765" } }
|
||||
|
||||
// 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: 670 }
|
||||
```
|
||||
|
||||
Blocks Methods
|
||||
@@ -96,7 +96,7 @@ provider.getBlockWithTransactions(100004)
|
||||
// blockHash: '0xf93283571ae16dcecbe1816adc126954a739350cd1523a1559eabeae155fbb63',
|
||||
// blockNumber: 100004,
|
||||
// chainId: 0,
|
||||
// confirmations: 10153796,
|
||||
// confirmations: 10284646,
|
||||
// creates: null,
|
||||
// data: '0x',
|
||||
// from: '0xcf00A85f3826941e7A25BFcF9Aac575d40410852',
|
||||
@@ -177,16 +177,16 @@ provider.getNetwork()
|
||||
|
||||
// The current block number
|
||||
provider.getBlockNumber()
|
||||
// { Promise: 10253799 }
|
||||
// { Promise: 10384649 }
|
||||
|
||||
// Get the current suggested gas price (in wei)...
|
||||
gasPrice = await provider.getGasPrice()
|
||||
// { BigNumber: "19470000000" }
|
||||
// { BigNumber: "41000000000" }
|
||||
|
||||
// ...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'
|
||||
// '41.0'
|
||||
```
|
||||
|
||||
Transactions Methods
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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
@@ -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: "8814410125722568213383" }
|
||||
|
||||
//
|
||||
// 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
@@ -1,6 +1,6 @@
|
||||
-----
|
||||
|
||||
Documentation: [html](https://docs-beta.ethers.io/)
|
||||
Documentation: [html](https://docs.ethers.io/)
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-----
|
||||
|
||||
Documentation: [html](https://docs-beta.ethers.io/)
|
||||
Documentation: [html](https://docs.ethers.io/)
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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.2)
|
||||
```
|
||||
|
||||
Methods
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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 [ 95, 9, 0, 81, 176, 49, 211, 225 ]
|
||||
|
||||
const data = [ 1, 2, 3, 4, 5, 6, 7 ];
|
||||
|
||||
// Returns a new Array
|
||||
utils.shuffled(data);
|
||||
// [
|
||||
// 7,
|
||||
// 6,
|
||||
// 7,
|
||||
// 4,
|
||||
// 2,
|
||||
// 3,
|
||||
// 5,
|
||||
// 1,
|
||||
// 5
|
||||
// 2
|
||||
// ]
|
||||
|
||||
// The Original is unscathed...
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user