Updated docs.

This commit is contained in:
Richard Moore 2020-06-12 19:21:37 -04:00
parent e1dce87525
commit 9e4c7e609d
No known key found for this signature in database
GPG Key ID: 665176BE8E9DC651
78 changed files with 2106 additions and 1732 deletions

@ -1,17 +1,35 @@
The Ethers Project
==================
**EXPERIMENTAL**
[![npm (tag)](https://img.shields.io/npm/v/ethers/next)](https://www.npmjs.com/package/ethers/v/next)
[![Node.js CI](https://github.com/ethers-io/ethers.js/workflows/Node.js%20CI/badge.svg?branch=ethers-v5-beta)](https://github.com/ethers-io/ethers.js/actions?query=workflow%3A%22Node.js+CI%22)
This branch is the next release of ethers.js, which should
be promoted to the official release shortly.
A complete Ethereum wallet implementation and utilities in JavaScript (and TypeScript).
I would recommend it for most new projects and personally use
it for my own projects.
**Features:**
The [new documentation](https://docs-beta.ethers.io) is still a
bit sparse, but is coming along as well and will be complete
before the promotion to master.
- Keep your private keys in your client, **safe** and sound
- Import and export **JSON wallets** (Geth, Parity and crowdsale)
- Import and export BIP 39 **mnemonic phrases** (12 word backup phrases) and **HD Wallets** (English as well as Czech, French, Italian, Japanese, Korean, Simplified Chinese, Spanish, Traditional Chinese)
- Meta-classes create JavaScript objects from any contract ABI, including **ABIv2** and **Human-Readable ABI**
- Connect to Ethereum nodes over [JSON-RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC), [INFURA](https://infura.io), [Etherscan](https://etherscan.io), [Alchemy](https://alchemyapi.io) or [MetaMask](https://metamask.io)
- **ENS names** are first-class citizens; they can be used anywhere an Ethereum addresses can be used
- **Tiny** (~104kb compressed; 322kb uncompressed)
- **Modular** packages; include only what you need
- **Complete** functionality for all your Ethereum desires
- Extensive [documentation](https://docs.ethers.io/ethers.js/html/)
- Large collection of **test cases** which are maintained and added to
- Fully **TypeScript** ready, with definition files and full TypeScript source
- **MIT License** (including ALL dependencies); completely open source to do with as you please
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.
For the latest changes, see the [CHANGELOG](https://github.com/ethers-io/ethers.js/blob/master/CHANGELOG.md).
Installing
@ -39,10 +57,22 @@ Installing
```
Documentation
-------------
Browse the documentation online:
- [Getting Started](https://docs.ethers.io/)
- [Full API Documentation](https://docs.ethers.io/)
- [Various Ethereum Articles](https://blog.ricmoo.com/)
Or browser the entire documentations as a [single page](https://docs.ethers.io/single-page/).
Ancillary Packages
------------------
These are a number of packages not included in the umbrella `ethers ` npm package, and
These are a number of packages not included in the umbrella `ethers` npm package, and
additional packages are always being added. Often these packages are for specific
use-cases, so rather than adding them to the umbrella package, they are added as
ancillary packaged, which can be included by those who need them, while not bloating
@ -50,46 +80,9 @@ everyone else with packages they do not need.
We will keep a list of useful pacakges here.
- `@ethersproject/experimental`
- `@ethersproject/cli`
- `@ethersproject/ens`
- `@ethersproject/ledger`
- `@ethersproject/trezor`
Hacking
-------
This project uses a combination of Lerna and the ./admin scripts to manage
itself as a package of packages.
The umbrella package can be found in `packages/ethers`, and all packages in general
can be found in the `packages/` folder.
If you add new dependencies to any package (incuding internal dependencies), you will
need to re-create the internal links and re-build teh dependency graph::
```
/home/ethers> npm run bootstrap
```
To run a continuous build (with incremental TypeScript compilation):
```
/home/ethers> npm run auto-build
```
Finally, once you have made all your changes, you will need to bump the version
of packages that changed their NPM tarballs, as well as update the _version.*
and distribution builds (which is what we host on the CDN for browser-based
apps). To do this, run:
```
/home/ethers> npm run update-versions
```
Which will also list all packages that have changed along with the specifc files.
- `@ethersproject/experimental` ([documentation](https://docs.ethers.io))
- `@ethersproject/cli` ([documentation](https://docs.ethers.io))
- `@ethersproject/hardware-wallets` ([documentation](https://docs.ethers.io))
License

@ -263,7 +263,4 @@ module.exports = {
"link-wiki-overflow": { name: "overflow", url: "https:/\/en.wikipedia.org/wiki/Integer_overflow" },
"link-wiki-underflow": { name: "arithmetic underflow", url: "https:/\/en.wikipedia.org/wiki/Arithmetic_underflow" },
},
redirectLinks: JSON.parse(fs.readFileSync(resolve(__dirname, "redirects.json"))),
};

@ -0,0 +1,113 @@
const fs = require("fs");
const { resolve } = require("path");
const Content = `
<html>
<head>
<title>ethers.js - Legacy Documentation</title>
<style type="text/css">
html {
font-family: sans-serif;
}
h1 {
opacity: 0.8;
}
.content {
border: 2px solid #000;
border-radius: 7px;
box-shadow: 5px 5px 10px #aaa;
left: 50%;
padding: 20px;
position: absolute;
text-align: center;
transform: translate(-50%, 30px);
width: 700px;
}
.hr {
border-top: 1px solid black;
margin: 4px 10px 40px;
}
span.v5 {
font-size: 24px;
margin-bottom: 40px;
}
span.v4 {
opacity: 0.7;
}
</style>
</head>
<body>
<div class="content">
<h1>This link is out-of-date <i>and</i> has moved.</h1>
<div class="hr"></div>
<span class="v5">Click <a id="link-v5" href="%%DEFAULT%%">here</a> to visit the updated documentation</span>
<br />
<br />
<br />
<span class="v4">or continue to the historic <a id="link-v4" href="%%LEGACY%%">legacy documentation</a>.</span>
</div>
<script type="text/javascript">
var redirects = %%REDIRECTS%%;
var hash = location.hash;
if (hash && hash !== "#") {
hash = hash.substring(1);
var v4 = document.getElementById("link-v4");
v4.setAttribute("href", v4.getAttribute("href").split("#")[0] + "#" + hash);
var target = redirects[hash];
if (target) {
var v5 = document.getElementById("link-v5");
v5.setAttribute("href", target);
}
}
</script>
</body>
</html>`
const redirects = require("./redirects.json");
const links = require("../docs/v5/metadata.json").links;
const result = { };
const prefix = "ethers.js/html/";
Object.keys(redirects).forEach((uri) => {
if (uri.substring(0, prefix.length) !== prefix) { return; }
const comps = uri.substring(prefix.length).split("#");
const filename = comps[0];
const hash = comps[1] || "_";
const tag = redirects[uri];
let path = null;
if (tag.path) {
path = tag.path;
} else if (tag.tag) {
path = links[tag.tag] || null;
} else {
console.log("Missing tag:", uri);
return;
}
if (!path) {
console.log("Missing path:", uri);
return;
}
if (!result[filename]) { result[filename] = {
"_legacy": `/v4/${ filename }`
}; }
result[filename][hash] = path;
});
function generateOutput(filename) {
const page = result[filename];
return Content.replace("%%DEFAULT%%", page._ || "/v5/")
.replace("%%LEGACY%%", page._legacy || "/v4/")
.replace("%%REDIRECTS%%", JSON.stringify(page));
}
Object.keys(result).forEach((filename) => {
const output = generateOutput(filename);
const path = resolve(__dirname, "../docs/ethers.js/html", filename);
fs.writeFileSync(path, output);
});

@ -414,7 +414,7 @@
"ethers.js/html/migration.html#waiting-for-transactions":
{ "tag": "" },
"ethers.js/html/notes.html":
{ "tag": "/v5/" },
{ "path": "/v5/" },
"ethers.js/html/notes.html#checksum-address":
{ "tag": "address-formats" },
"ethers.js/html/notes.html#contributing":

@ -44,7 +44,7 @@
<span class="v4">or continue to the historic <a id="link-v4" href="/v4/notes.html">legacy documentation</a>.</span>
</div>
<script type="text/javascript">
var redirects = {"_legacy":"/v4/notes.html","checksum-address":"/v5/api/utils/address/#address-formats","contributing":"/v5/contributing/","icap-address":"/v5/api/utils/address/#address-formats","ieee754":"/v5/api/utils/bignumber/#BigNumber--notes-safenumbers","memory-hard-brute-force-encrpyting":"/v5/concepts/security/#security--pbkdf","responsible-disclosure":"/v5/contributing/","security":"/v5/concepts/security/","why-can-t-i-just-use-numbers":"/v5/api/utils/bignumber/#BigNumber--notes-safenumbers"};
var redirects = {"_legacy":"/v4/notes.html","_":"/v5/","checksum-address":"/v5/api/utils/address/#address-formats","contributing":"/v5/contributing/","icap-address":"/v5/api/utils/address/#address-formats","ieee754":"/v5/api/utils/bignumber/#BigNumber--notes-safenumbers","memory-hard-brute-force-encrpyting":"/v5/concepts/security/#security--pbkdf","responsible-disclosure":"/v5/contributing/","security":"/v5/concepts/security/","why-can-t-i-just-use-numbers":"/v5/api/utils/bignumber/#BigNumber--notes-safenumbers"};
var hash = location.hash;
if (hash && hash !== "#") {
hash = hash.substring(1);

@ -71,7 +71,7 @@ contract.value()
<div class="nav previous"><a href="/v5/api/contract/contract/"><span class="arrow">&larr;</span>Contract</a></div>
<div class="nav next"><a href="/v5/api/contract/example/">Example: ERC-20 Contract<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -109,7 +109,7 @@
<div class="nav previous"><a href="/v5/api/contract/"><span class="arrow">&larr;</span>Contract Interaction</a></div>
<div class="nav next"><a href="/v5/api/contract/contract-factory/">ContractFactory<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -18,41 +18,42 @@
<a name="example-erc-20-contract"></a><h1 class="show-anchors"><div>Example: ERC-20 Contract<div class="anchors"><a class="self" href="/v5/api/contract/example/#example-erc-20-contract"></a></div></div></h1>
<a name="example-erc-20-contract--connecting-to-a-contract"></a><h2 class="show-anchors"><div>Connecting to a Contract<div class="anchors"><a class="self" href="/v5/api/contract/example/#example-erc-20-contract--connecting-to-a-contract"></a></div></div></h2>
<div class="code-title"><div>A simple ERC-20 contract</div></div><div class="code">// A Human-Readable ABI; any supported ABI format could be used
const abi = [
// Read-Only Functions
"function balanceOf(address owner) view returns (uint256)",
<div class="code-title"><div>A simple ERC-20 contract</div></div><div class="code"><span class="comment">// A Human-Readable ABI; any supported ABI format could be used
</span>const abi = [
<span class="comment"> // Read-Only Functions
</span> "function balanceOf(address owner) view returns (uint256)",
"function decimals() view returns (uint8)",
"function symbol() view returns (string)",
// Authenticated Functions
"function transfer(address to, uint amount) returns (boolean)",
<span class="comment"> // Authenticated Functions
</span> "function transfer(address to, uint amount) returns (boolean)",
// Events
"event Transfer(address indexed from, address indexed to, uint amount)"
<span class="comment"> // Events
</span> "event Transfer(address indexed from, address indexed to, uint amount)"
];
// This can be an address or an ENS name
const address = "dai.tokens.ethers.eth";
<span class="comment">// This can be an address or an ENS name
</span>const address = "dai.tokens.ethers.eth";
// An example Provider
const provider = ethers.getDefaultProvider();
<span class="comment">// An example Provider
</span>const provider = ethers.getDefaultProvider();
// An example Signer
const signer = ethers.Wallet.createRandom().connect(provider);
<span class="comment">// An example Signer
</span>const signer = ethers.Wallet.createRandom().connect(provider);
// Read-Only; By connecting to a Provider, allows:
// - Any constant function
// - Querying Filters
// - Populating Unsigned Transactions for non-constant methods
// - Estimating Gas for non-constant (as an anonymous sender)
// - Static Calling non-constant methods (as anonymous sender)
const erc20 = new ethers.Contract(address, abi, provider);
<span class="comment">// Read-Only; By connecting to a Provider, allows:
</span><span class="comment">// - Any constant function
</span><span class="comment">// - Querying Filters
</span><span class="comment">// - Populating Unsigned Transactions for non-constant methods
</span><span class="comment">// - Estimating Gas for non-constant (as an anonymous sender)
</span><span class="comment">// - Static Calling non-constant methods (as anonymous sender)
</span>const erc20 = new ethers.Contract(address, abi, provider);
// Read-Write; By connecting to a Signer, allows:
// - Everything from Read-Only (except as Signer, not anonymous)
// - Sending transactions for non-constant functions
const erc20_rw = new ethers.Contract(address, abi, signer)</div><a name="example-erc-20-contract--connecting-to-a-contract--erc20contract"></a><h3 class="show-anchors"><div>ERC20Contract<span class="inherits"> inherits <a href="/v5/api/contract/contract/">Contract</a></span><div class="anchors"><a class="self" href="/v5/api/contract/example/#example-erc-20-contract--connecting-to-a-contract--erc20contract"></a></div></div></h3>
<span class="comment">// Read-Write; By connecting to a Signer, allows:
</span><span class="comment">// - Everything from Read-Only (except as Signer, not anonymous)
</span><span class="comment">// - Sending transactions for non-constant functions
</span>const erc20_rw = new ethers.Contract(address, abi, signer)
</div><a name="example-erc-20-contract--connecting-to-a-contract--erc20contract"></a><h3 class="show-anchors"><div>ERC20Contract<span class="inherits"> inherits <a href="/v5/api/contract/contract/">Contract</a></span><div class="anchors"><a class="self" href="/v5/api/contract/example/#example-erc-20-contract--connecting-to-a-contract--erc20contract"></a></div></div></h3>
<div class="property show-anchors"><div class="signature"><span class="modifier">new </span><span class="path">ethers</span><span class="symbol">.</span><span class="method">Contract</span><span class="symbol">(</span> <span class="param">address</span> <span class="symbol">,</span> <span class="param">abi</span> <span class="symbol">,</span> <span class="param">providerOrSigner</span> <span class="symbol">)</span><div class="anchors"></div></div><div class="body"><p>See the above code example for creating an Instance which will (in addition to the Contact methods and properties) automatically add the additional properties defined in <i>abi</i> to a <b>Contract</b> connected to <i>address</i> using the <i>providerOrSigner</i>.</p>
</div></div><a name="example-erc-20-contract--properties"></a><h2 class="show-anchors"><div>Properties<span class="inherits">(inheritted from <a href="/v5/api/contract/contract/">Contract</a>)</span><div class="anchors"><a class="self" href="/v5/api/contract/example/#example-erc-20-contract--properties"></a></div></div></h2>
@ -126,7 +127,7 @@ const erc20_rw = new ethers.Contract(address, abi, signer)</div><a name="example
<div class="nav previous"><a href="/v5/api/contract/contract-factory/"><span class="arrow">&larr;</span>ContractFactory</a></div>
<div class="nav next"><a href="/v5/api/signer/">Signers<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -26,7 +26,7 @@
<div class="nav previous"><a href="/v5/api/"><span class="arrow">&larr;</span>Application Programming Interface</a></div>
<div class="nav next"><a href="/v5/api/contract/contract/">Contract<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -54,7 +54,7 @@
<div class="nav previous"><a href="/v5/api/other/hardware/"><span class="arrow">&larr;</span>Hardware Wallets</a></div>
<div class="nav next"><a href="/v5/cli/">Command Line Interfaces<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/concepts/security/"><span class="arrow">&larr;</span>Security</a></div>
<div class="nav next"><a href="/v5/api/contract/">Contract Interaction<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -69,7 +69,7 @@
<div class="nav previous"><a href="/v5/api/other/assembly/dialect/"><span class="arrow">&larr;</span>Ethers ASM Dialect</a></div>
<div class="nav next"><a href="/v5/api/other/assembly/ast/">Abstract Syntax Tree<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -87,7 +87,7 @@
<div class="nav previous"><a href="/v5/api/other/assembly/api/"><span class="arrow">&larr;</span>Utilities</a></div>
<div class="nav next"><a href="/v5/api/other/hardware/">Hardware Wallets<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -77,7 +77,7 @@
<div class="nav previous"><a href="/v5/api/other/assembly/"><span class="arrow">&larr;</span>Assembly</a></div>
<div class="nav next"><a href="/v5/api/other/assembly/api/">Utilities<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/api/other/"><span class="arrow">&larr;</span>Other Libraries</a></div>
<div class="nav next"><a href="/v5/api/other/assembly/dialect/">Ethers ASM Dialect<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -19,7 +19,8 @@
<a name="hardware-wallets"></a><h1 class="show-anchors"><div>Hardware Wallets<div class="anchors"><a class="self" href="/v5/api/other/hardware/#hardware-wallets"></a></div></div></h1>
<a name="hw-ledger"></a><a name="hardware-wallets--hw-ledger"></a><h2 class="show-anchors"><div>LedgerSigner<span class="inherits"> inherits <a href="/v5/api/signer/#Signer">Signer</a></span><div class="anchors"><a class="self" href="/v5/api/other/hardware/#hw-ledger"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/hardware-wallets/src.ts/ledger.ts#L23">source</a></div></div></h2><p>The <a href="https://www.ledger.com">Ledger Hardware Wallets</a> are a fairly popular brand.</p>
<div class="code-title"><div>Importing in ES6 or TypeScript</div></div><div class="code">import { LedgerSigner } from "@ethersproject/hardware-wallets";</div><a name="hardware-wallets--hw-ledger--api"></a><h3 class="show-anchors"><div>API<div class="anchors"><a class="self" href="/v5/api/other/hardware/#hardware-wallets--hw-ledger--api"></a></div></div></h3>
<div class="code-title"><div>Importing in ES6 or TypeScript</div></div><div class="code">import { LedgerSigner } from "@ethersproject/hardware-wallets";
</div><a name="hardware-wallets--hw-ledger--api"></a><h3 class="show-anchors"><div>API<div class="anchors"><a class="self" href="/v5/api/other/hardware/#hardware-wallets--hw-ledger--api"></a></div></div></h3>
<div class="property show-anchors"><div class="signature"><span class="modifier">new </span><span class="method">LedgerSigner</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">provider</span> <span class="symbol">[</span> <span class="symbol">,</span> <span class="param">type</span> <span class="symbol">[</span> <span class="symbol">,</span> <span class="param">path</span> <span class="symbol">]</span> <span class="symbol">]</span> <span class="symbol">]</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/other/hardware/#hw-ledger">LedgerSigner</a></span><div class="anchors"></div></div><div class="body"><p>Connects to a Ledger Hardware Wallet. The <i>type</i> if left unspecified is determined by the environment; in node the default is "hid" and in the browser "u2f" is the default. The default Ethereum path is used if <i>path</i> is left unspecified.</p>
</div></div>
@ -28,7 +29,7 @@
<div class="nav previous"><a href="/v5/api/other/assembly/ast/"><span class="arrow">&larr;</span>Abstract Syntax Tree</a></div>
<div class="nav next"><a href="/v5/api/experimental/">Experimental<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/api/utils/wordlists/"><span class="arrow">&larr;</span>Wordlists</a></div>
<div class="nav next"><a href="/v5/api/other/assembly/">Assembly<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -38,11 +38,6 @@ It is highly recommended for production, you register with [Etherscan](https://e
```javascript
// <hide>
const EtherscanProvider = ethers.providers.EtherscanProvider;
const apiKey = "...";
// </hide>
// Connect to mainnet (homestead)
provider = new EtherscanProvider();
@ -51,11 +46,11 @@ provider = new EtherscanProvider("rinkeby");
provider = new EtherscanProvider(4);
const network = ethers.providers.getNetwork("rinkeby");
// <hide>
delete network._defaultProvider;
network
// </hide>
//!
// {
// chainId: 4,
// ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',
// name: 'rinkeby'
// }
provider = new EtherscanProvider(network);
@ -100,12 +95,6 @@ It is highly recommended for production, you register with [INFURA](https://infu
```javascript
// <hide>
const InfuraProvider = ethers.providers.InfuraProvider;
const projectId = "...";
const projectSecret = "...";
// </hide>
// Connect to mainnet (homestead)
provider = new InfuraProvider();
@ -153,11 +142,6 @@ It is highly recommended for production, you register with [Alchemy](https://alc
```javascript
// <hide>
const AlchemyProvider = ethers.providers.AlchemyProvider;
const apiKey = "...";
// </hide>
// Connect to mainnet (homestead)
provider = new AlchemyProvider();
@ -186,10 +170,6 @@ Create a new **CloudflareProvider** connected to mainnet (i.e. "homestead").
```javascript
// <hide>
const CloudflareProvider = ethers.providers.CloudflareProvider;
// </hide>
// Connect to mainnet (homestead)
provider = new CloudflareProvider();
```

@ -34,30 +34,26 @@
</div></div><div class="definition"><div class="term"><b>Supported Networks</b></div><div class="body"><p><ul><li>Homestead (Mainnet) </li><li>Ropsten (proof-of-work testnet) </li><li>Rinkeby (proof-of-authority testnet) </li><li>G&ouml;rli (clique testnet) </li><li>Kovan (proof-of-authority testnet) </li></ul></p>
</div></div><div class="code-title"><div>Etherscan Examples</div></div><div class="code">// &lt;hide&gt;
const EtherscanProvider = ethers.providers.EtherscanProvider;
const apiKey = "...";
// &lt;/hide&gt;
</div></div><div class="code-title"><div>Etherscan Examples</div></div><div class="code"><span class="comment">// Connect to mainnet (homestead)
</span>provider = new EtherscanProvider();
// Connect to mainnet (homestead)
provider = new EtherscanProvider();
// Connect to rinkeby testnet (these are equivalent)
provider = new EtherscanProvider("rinkeby");
<span class="comment">// Connect to rinkeby testnet (these are equivalent)
</span>provider = new EtherscanProvider("rinkeby");
provider = new EtherscanProvider(4);
const network = ethers.providers.getNetwork("rinkeby");
// &lt;hide&gt;
delete network._defaultProvider;
network
// &lt;/hide&gt;
//!
<span class="result ok">// {
</span><span class="result ok">// chainId: 4,
</span><span class="result ok">// ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',
</span><span class="result ok">// name: 'rinkeby'
</span><span class="result ok">// }
</span>
provider = new EtherscanProvider(network);
// Connect to mainnet (homestead) with an API key
provider = new EtherscanProvider(null, apiKey);
provider = new EtherscanProvider("homestead", apiKey);</div><div class="property show-anchors"><div class="signature"><span class="path">provider</span><span class="symbol">.</span><span class="method">getHistory</span><span class="symbol">(</span> <span class="param">address</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Array&lt; History &gt;</span><div class="anchors"><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/etherscan-provider.ts#L306">source</a></div></div><div class="body"><p>@TODO... Explain</p>
<span class="comment">// Connect to mainnet (homestead) with an API key
</span>provider = new EtherscanProvider(null, apiKey);
provider = new EtherscanProvider("homestead", apiKey);
</div><div class="property show-anchors"><div class="signature"><span class="path">provider</span><span class="symbol">.</span><span class="method">getHistory</span><span class="symbol">(</span> <span class="param">address</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Array&lt; History &gt;</span><div class="anchors"><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/etherscan-provider.ts#L306">source</a></div></div><div class="body"><p>@TODO... Explain</p>
</div></div><a name="InfuraProvider"></a><a name="api-providers--InfuraProvider"></a><h2 class="show-anchors"><div>InfuraProvider<span class="inherits"> inherits <a href="/v5/api/providers/other/#UrlJsonRpcProvider">UrlJsonRpcProvider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/api-providers/#InfuraProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/infura-provider.ts#L17">source</a></div></div></h2><p>The <b>InfuraProvider</b> is backed by the popular <a href="https://infura.io">INFURA</a> Ethereum service.</p>
@ -73,28 +69,23 @@ provider = new EtherscanProvider("homestead", apiKey);</div><div class="property
</div></div><div class="definition"><div class="term"><b>Supported Networks</b></div><div class="body"><p><ul><li>Homestead (Mainnet) </li><li>Ropsten (proof-of-work testnet) </li><li>Rinkeby (proof-of-authority testnet) </li><li>G&ouml;rli (clique testnet) </li><li>Kovan (proof-of-authority testnet) </li></ul></p>
</div></div><div class="code-title"><div>INFURA Examples</div></div><div class="code">// &lt;hide&gt;
const InfuraProvider = ethers.providers.InfuraProvider;
const projectId = "...";
const projectSecret = "...";
// &lt;/hide&gt;
</div></div><div class="code-title"><div>INFURA Examples</div></div><div class="code"><span class="comment">// Connect to mainnet (homestead)
</span>provider = new InfuraProvider();
// Connect to mainnet (homestead)
provider = new InfuraProvider();
<span class="comment">// Connect to the ropsten testnet
</span><span class="comment">// (see EtherscanProvider above for other network examples)
</span>provider = new InfuraProvider("ropsten");
// Connect to the ropsten testnet
// (see EtherscanProvider above for other network examples)
provider = new InfuraProvider("ropsten");
// Connect to mainnet with a Project ID (these are equivalent)
provider = new InfuraProvider(null, projectId);
<span class="comment">// Connect to mainnet with a Project ID (these are equivalent)
</span>provider = new InfuraProvider(null, projectId);
provider = new InfuraProvider("homestead", projectId);
// Connect to mainnet with a Project ID and Project Secret
provider = new InfuraProvider("homestead", {
<span class="comment">// Connect to mainnet with a Project ID and Project Secret
</span>provider = new InfuraProvider("homestead", {
projectId: projectId,
projectSecret: projectSecret
});</div><a name="AlchemyProvider"></a><a name="api-providers--AlchemyProvider"></a><h2 class="show-anchors"><div>AlchemyProvider<span class="inherits"> inherits <a href="/v5/api/providers/other/#UrlJsonRpcProvider">UrlJsonRpcProvider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/api-providers/#AlchemyProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/alchemy-provider.ts#L18">source</a></div></div></h2><p>The <b>AlchemyProvider</b> is backed by <a href="https://alchemyapi.io">Alchemy</a>.</p>
});
</div><a name="AlchemyProvider"></a><a name="api-providers--AlchemyProvider"></a><h2 class="show-anchors"><div>AlchemyProvider<span class="inherits"> inherits <a href="/v5/api/providers/other/#UrlJsonRpcProvider">UrlJsonRpcProvider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/api-providers/#AlchemyProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/alchemy-provider.ts#L18">source</a></div></div></h2><p>The <b>AlchemyProvider</b> is backed by <a href="https://alchemyapi.io">Alchemy</a>.</p>
<div class="property show-anchors"><div class="signature"><span class="modifier">new </span><span class="path">ethers</span><span class="symbol">.</span><span class="path">providers</span><span class="symbol">.</span><span class="method">AlchemyProvider</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">network</span> = "<span class="param">homestead</span>" <span class="symbol">,</span> <span class="symbol">[</span> <span class="param">apiKey</span> <span class="symbol">]</span> <span class="symbol">]</span> <span class="symbol">)</span><div class="anchors"></div></div><div class="body"><p>Create a new <b>AlchemyProvider</b> connected to <i>network</i> with the optional <i>apiKey</i>.</p>
@ -106,38 +97,31 @@ provider = new InfuraProvider("homestead", {
</div></div><div class="definition"><div class="term"><b>Supported Networks</b></div><div class="body"><p><ul><li>Homestead (Mainnet) </li><li>Ropsten (proof-of-work testnet) </li><li>Rinkeby (proof-of-authority testnet) </li><li>G&ouml;rli (clique testnet) </li><li>Kovan (proof-of-authority testnet) </li></ul></p>
</div></div><div class="code-title"><div>Alchemy Examples</div></div><div class="code">// &lt;hide&gt;
const AlchemyProvider = ethers.providers.AlchemyProvider;
const apiKey = "...";
// &lt;/hide&gt;
</div></div><div class="code-title"><div>Alchemy Examples</div></div><div class="code"><span class="comment">// Connect to mainnet (homestead)
</span>provider = new AlchemyProvider();
// Connect to mainnet (homestead)
provider = new AlchemyProvider();
<span class="comment">// Connect to the ropsten testnet
</span><span class="comment">// (see EtherscanProvider above for other network examples)
</span>provider = new AlchemyProvider("ropsten");
// Connect to the ropsten testnet
// (see EtherscanProvider above for other network examples)
provider = new AlchemyProvider("ropsten");
// Connect to mainnet with an API key (these are equivalent)
provider = new AlchemyProvider(null, apiKey);
provider = new AlchemyProvider("homestead", apiKey);</div><a name="CloudflareProvider"></a><a name="api-providers--CloudflareProvider"></a><h2 class="show-anchors"><div>CloudflareProvider<span class="inherits"> inherits <a href="/v5/api/providers/other/#UrlJsonRpcProvider">UrlJsonRpcProvider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/api-providers/#CloudflareProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/cloudflare-provider.ts#L10">source</a></div></div></h2><p>The CloudflareProvider is backed by the <a href="https://developers.cloudflare.com/distributed-web/ethereum-gateway/">Cloudflare Ethereum Gateway</a>.</p>
<span class="comment">// Connect to mainnet with an API key (these are equivalent)
</span>provider = new AlchemyProvider(null, apiKey);
provider = new AlchemyProvider("homestead", apiKey);
</div><a name="CloudflareProvider"></a><a name="api-providers--CloudflareProvider"></a><h2 class="show-anchors"><div>CloudflareProvider<span class="inherits"> inherits <a href="/v5/api/providers/other/#UrlJsonRpcProvider">UrlJsonRpcProvider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/api-providers/#CloudflareProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/cloudflare-provider.ts#L10">source</a></div></div></h2><p>The CloudflareProvider is backed by the <a href="https://developers.cloudflare.com/distributed-web/ethereum-gateway/">Cloudflare Ethereum Gateway</a>.</p>
<div class="property show-anchors"><div class="signature"><span class="modifier">new </span><span class="path">ethers</span><span class="symbol">.</span><span class="path">providers</span><span class="symbol">.</span><span class="method">CloudflareProvider</span><span class="symbol">(</span> <span class="symbol">)</span><div class="anchors"></div></div><div class="body"><p>Create a new <b>CloudflareProvider</b> connected to mainnet (i.e. "homestead").</p>
</div></div><div class="definition"><div class="term"><b>Supported Networks</b></div><div class="body"><p><ul><li>Homestead (Mainnet) </li></ul></p>
</div></div><div class="code-title"><div>Cloudflare Examples</div></div><div class="code">// &lt;hide&gt;
const CloudflareProvider = ethers.providers.CloudflareProvider;
// &lt;/hide&gt;
// Connect to mainnet (homestead)
provider = new CloudflareProvider();</div>
</div></div><div class="code-title"><div>Cloudflare Examples</div></div><div class="code"><span class="comment">// Connect to mainnet (homestead)
</span>provider = new CloudflareProvider();
</div>
<div class="footer">
<div class="nav previous"><a href="/v5/api/providers/jsonrpc-provider/"><span class="arrow">&larr;</span>JsonRpcProvider</a></div>
<div class="nav next"><a href="/v5/api/providers/other/">Other Providers<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -47,7 +47,7 @@
<div class="nav previous"><a href="/v5/api/signer/"><span class="arrow">&larr;</span>Signers</a></div>
<div class="nav next"><a href="/v5/api/providers/provider/">Provider<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -16,18 +16,18 @@
<div class="content">
<div class="breadcrumbs"><a href="/v5/">Documentation</a>&nbsp;&nbsp;&raquo;&nbsp;&nbsp;<a href="/v5/api/">API</a>&nbsp;&nbsp;&raquo;&nbsp;&nbsp;<a href="/v5/api/providers/">Providers</a>&nbsp;&nbsp;&raquo;&nbsp;&nbsp;<span class="current">JsonRpcProvider</span></div>
<a name="JsonRpcProvider"></a><a name="JsonRpcProvider"></a><h1 class="show-anchors"><div>JsonRpcProvider<span class="inherits"> inherits <a href="/v5/api/providers/provider/">Provider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L234">source</a></div></div></h1><p>The <a href="https://github.com/ethereum/wiki/wiki/JSON-RPC">JSON-RPC API</a> is a very popular method for interacting with Ethereum and is available in all major Ethereum node implementations (e.g. <a href="https://geth.ethereum.org">Geth</a> and <a href="https://www.parity.io">Parity</a>) as well as many third-party web services (e.g. <a href="https://infura.io">INFURA</a>)</p>
<a name="JsonRpcProvider"></a><a name="JsonRpcProvider"></a><h1 class="show-anchors"><div>JsonRpcProvider<span class="inherits"> inherits <a href="/v5/api/providers/provider/">Provider</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L220">source</a></div></div></h1><p>The <a href="https://github.com/ethereum/wiki/wiki/JSON-RPC">JSON-RPC API</a> is a very popular method for interacting with Ethereum and is available in all major Ethereum node implementations (e.g. <a href="https://geth.ethereum.org">Geth</a> and <a href="https://www.parity.io">Parity</a>) as well as many third-party web services (e.g. <a href="https://infura.io">INFURA</a>)</p>
<div class="property show-anchors"><div class="signature"><span class="modifier">new </span><span class="path">ethers</span><span class="symbol">.</span><span class="path">providers</span><span class="symbol">.</span><span class="method">JsonRpcProvider</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">url</span> <span class="symbol">[</span> <span class="symbol">,</span> <span class="param">aNetworkish</span> <span class="symbol">]</span> <span class="symbol">]</span> <span class="symbol">)</span><div class="anchors"><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L240">source</a></div></div><div class="body"><p>Connect to a JSON-RPC API located at <i>url</i> using the <i>aNetworkish</i> network. If <i>url</i> is not specified, the default (i.e. <code class="inline">http://localhost:8545</code>) is used and if no network is specified, it will be determined automatically by querying the node.</p>
<div class="property show-anchors"><div class="signature"><span class="modifier">new </span><span class="path">ethers</span><span class="symbol">.</span><span class="path">providers</span><span class="symbol">.</span><span class="method">JsonRpcProvider</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">url</span> <span class="symbol">[</span> <span class="symbol">,</span> <span class="param">aNetworkish</span> <span class="symbol">]</span> <span class="symbol">]</span> <span class="symbol">)</span><div class="anchors"><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L226">source</a></div></div><div class="body"><p>Connect to a JSON-RPC API located at <i>url</i> using the <i>aNetworkish</i> network. If <i>url</i> is not specified, the default (i.e. <code class="inline">http://localhost:8545</code>) is used and if no network is specified, it will be determined automatically by querying the node.</p>
</div></div><div class="definition container-box note"><div class="term">Note: Connecting to a Local Node</div><div class="body"><p>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.</p>
</div></div><a name="JsonRpcProvider-getSigner"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">getSigner</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">addressOrIndex</span> <span class="symbol">]</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner">JsonRpcSigner</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L305">source</a></div></div><div class="body"><p>Returns a <a href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner">JsonRpcSigner</a> which is managed by this Ethereum node, at <i>addressOrIndex</i>. If no <i>addressOrIndex</i> is provided, the first account (account #0) is used.</p>
</div></div><a name="JsonRpcProvider-getSigner"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">getSigner</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">addressOrIndex</span> <span class="symbol">]</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner">JsonRpcSigner</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L291">source</a></div></div><div class="body"><p>Returns a <a href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner">JsonRpcSigner</a> which is managed by this Ethereum node, at <i>addressOrIndex</i>. If no <i>addressOrIndex</i> is provided, the first account (account #0) is used.</p>
</div></div><a name="JsonRpcProvider-getUncheckedSigner"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">getUncheckedSigner</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">addressOrIndex</span> <span class="symbol">]</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner">JsonRpcUncheckedSigner</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getUncheckedSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L309">source</a></div></div><div class="body">
</div></div><a name="JsonRpcProvider-listAccounts"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">listAccounts</span><span class="symbol">(</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Array&lt; string &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-listAccounts"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L313">source</a></div></div><div class="body"><p>Returns a list of all account addresses managed by this provider.</p>
</div></div><a name="JsonRpcProvider-getUncheckedSigner"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">getUncheckedSigner</span><span class="symbol">(</span> <span class="symbol">[</span> <span class="param">addressOrIndex</span> <span class="symbol">]</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner">JsonRpcUncheckedSigner</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getUncheckedSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L295">source</a></div></div><div class="body">
</div></div><a name="JsonRpcProvider-listAccounts"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">listAccounts</span><span class="symbol">(</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Array&lt; string &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-listAccounts"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L299">source</a></div></div><div class="body"><p>Returns a list of all account addresses managed by this provider.</p>
</div></div><a name="JsonRpcProvider-send"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">send</span><span class="symbol">(</span> <span class="param">method</span> <span class="symbol">,</span> <span class="param">params</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Promise&lt; any &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-send"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L319">source</a></div></div><div class="body"><p>Allows sending raw messages to the provider.</p>
</div></div><a name="JsonRpcProvider-send"></a><div class="property show-anchors"><div class="signature"><span class="path">jsonRpcProvider</span><span class="symbol">.</span><span class="method">send</span><span class="symbol">(</span> <span class="param">method</span> <span class="symbol">,</span> <span class="param">params</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Promise&lt; any &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-send"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L305">source</a></div></div><div class="body"><p>Allows sending raw messages to the provider.</p>
<p>This can be used for backend-specific calls, such as for debugging or specific account management.</p>
@ -35,13 +35,13 @@
<div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">provider</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/">JsonRpcProvider</a></span><div class="anchors"></div></div><div class="body"><p>The provider this signer was established from.</p>
</div></div><a name="JsonRpcSigner-connectUnchecked"></a><div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">connectUnchecked</span><span class="symbol">(</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner">JsonRpcUncheckedSigner</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner-connectUnchecked"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L87">source</a></div></div><div class="body"><p>Returns a new Signer object which does not perform addtional checks when sending a transaction. See <a href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getUncheckedSigner">getUncheckedSigner</a> for more details.</p>
</div></div><a name="JsonRpcSigner-connectUnchecked"></a><div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">connectUnchecked</span><span class="symbol">(</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner">JsonRpcUncheckedSigner</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner-connectUnchecked"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L83">source</a></div></div><div class="body"><p>Returns a new Signer object which does not perform addtional checks when sending a transaction. See <a href="/v5/api/providers/jsonrpc-provider/#JsonRpcProvider-getUncheckedSigner">getUncheckedSigner</a> for more details.</p>
</div></div><a name="JsonRpcSigner-sendUncheckedTransaction"></a><div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">sendUncheckedTransaction</span><span class="symbol">(</span> <span class="param">transaction</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Promise&lt; string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a>&lt; 32 &gt; &gt; &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner-sendUncheckedTransaction"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L116">source</a></div></div><div class="body"><p>Sends the <i>transaction</i> and returns a Promise which resolves to the opacque transaction hash.</p>
</div></div><a name="JsonRpcSigner-sendUncheckedTransaction"></a><div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">sendUncheckedTransaction</span><span class="symbol">(</span> <span class="param">transaction</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Promise&lt; string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a>&lt; 32 &gt; &gt; &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner-sendUncheckedTransaction"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L102">source</a></div></div><div class="body"><p>Sends the <i>transaction</i> and returns a Promise which resolves to the opacque transaction hash.</p>
</div></div><a name="JsonRpcSigner-unlock"></a><div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">unlock</span><span class="symbol">(</span> <span class="param">password</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Promise&lt; boolean &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner-unlock"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L202">source</a></div></div><div class="body"><p>Request the node unlock the account (if locked) using <i>password</i>.</p>
</div></div><a name="JsonRpcSigner-unlock"></a><div class="property show-anchors"><div class="signature"><span class="path">signer</span><span class="symbol">.</span><span class="method">unlock</span><span class="symbol">(</span> <span class="param">password</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Promise&lt; boolean &gt;</span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner-unlock"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L188">source</a></div></div><div class="body"><p>Request the node unlock the account (if locked) using <i>password</i>.</p>
</div></div><a name="UncheckedJsonRpcSigner"></a><a name="JsonRpcProvider--UncheckedJsonRpcSigner"></a><h2 class="show-anchors"><div>JsonRpcUncheckedSigner<span class="inherits"> inherits <a href="/v5/api/signer/#Signer">Signer</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L211">source</a></div></div></h2><p>The JSON-RPC API only provides a transaction hash as the response when a transaction is sent, but the ethers Provider requires populating all details 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.</p>
</div></div><a name="UncheckedJsonRpcSigner"></a><a name="JsonRpcProvider--UncheckedJsonRpcSigner"></a><h2 class="show-anchors"><div>JsonRpcUncheckedSigner<span class="inherits"> inherits <a href="/v5/api/signer/#Signer">Signer</a></span><div class="anchors"><a class="self" href="/v5/api/providers/jsonrpc-provider/#UncheckedJsonRpcSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/providers/src.ts/json-rpc-provider.ts#L197">source</a></div></div></h2><p>The JSON-RPC API only provides a transaction hash as the response when a transaction is sent, but the ethers Provider requires populating all details 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.</p>
<p>To remedy this, the <a href="/v5/api/providers/jsonrpc-provider/#JsonRpcSigner">JsonRpcSigner</a> immeidately queries the provider for the details using the returned transaction hash to populate the <a href="/v5/api/providers/types/#providers-TransactionResponse">TransactionResponse</a> object.</p>
@ -61,7 +61,7 @@
<div class="nav previous"><a href="/v5/api/providers/provider/"><span class="arrow">&larr;</span>Provider</a></div>
<div class="nav next"><a href="/v5/api/providers/api-providers/">API Providers<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -93,7 +93,7 @@
<div class="nav previous"><a href="/v5/api/providers/api-providers/"><span class="arrow">&larr;</span>API Providers</a></div>
<div class="nav next"><a href="/v5/api/providers/types/">Types<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -187,7 +187,7 @@
<div class="nav previous"><a href="/v5/api/providers/other/"><span class="arrow">&larr;</span>Other Providers</a></div>
<div class="nav next"><a href="/v5/api/utils/">Utilities<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -203,34 +203,38 @@ walletMnemonic = Wallet.fromMnemonic(mnemonic)
walletPrivateKey = new Wallet(walletMnemonic.privateKey)
walletMnemonic.address === walletPrivateKey.address
//!
// true
// The address as a Promise per the Signer API
walletMnemonic.getAddress()
//!
// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
// A Wallet address is also available synchronously
walletMnemonic.address
//!
// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
// The internal cryptographic components
walletMnemonic.privateKey
//!
// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
walletMnemonic.publicKey
//!
// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
// The wallet mnemonic
walletMnemonic.mnemonic
//!
// {
// locale: 'en',
// path: 'm/44\'/60\'/0\'/0/0',
// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
// }
// Note: A wallet created with a private key does not
// have a mnemonic (the derivation prevents it)
walletPrivateKey.mnemonic
//!
// null
// Signing a message
walletMnemonic.signMessage("Hello World")
//!
// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
tx = {
to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
@ -239,7 +243,7 @@ tx = {
// Signing a transaction
walletMnemonic.signTransaction(tx)
//!
// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
// The connect method returns a new instance of the
// Wallet connected to a provider
@ -247,15 +251,12 @@ wallet = walletMnemonic.connect(provider)
// Querying the network
wallet.getBalance();
//!
// { Promise: { BigNumber: "42" } }
wallet.getTransactionCount();
//!
// { Promise: 0 }
// Sending ether
wallet.sendTransaction(tx)
// <hide>
//! error
// </hide>
```
VoidSigner
@ -282,12 +283,9 @@ abi = [
]
contract = new ethers.Contract("dai.tokens.ethers.eth", abi, signer)
// <hide>
//!
// </hide>
// Get the number of tokens for this account
tokens = await contract.balanceOf(signer.getAddress())
//! async tokens
// { BigNumber: "7712595125722568213383" }
//
// Pre-flight (check for revert) on DAI from the signer
@ -300,11 +298,11 @@ tokens = await contract.balanceOf(signer.getAddress())
// This will pass since the token balance is available
contract.callStatic.transfer("donations.ethers.eth", tokens)
//!
// { Promise: true }
// This will fail since it is greater than the token balance
contract.callStatic.transfer("donations.ethers.eth", tokens.add(1))
//! error
// 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)
```
ExternallyOwnedAccount

@ -131,67 +131,69 @@
<p>If <i>progress</i> is provided it will be called during decryption with a value between 0 and 1 indicating the progress towards completion.</p>
</div></div><div class="code-title"><div>Wallet Examples</div></div><div class="code">// Create a wallet instance from a mnemonic...
mnemonic = "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
</div></div><div class="code-title"><div>Wallet Examples</div></div><div class="code"><span class="comment">// Create a wallet instance from a mnemonic...
</span>mnemonic = "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
walletMnemonic = Wallet.fromMnemonic(mnemonic)
// ...or from a private key
walletPrivateKey = new Wallet(walletMnemonic.privateKey)
<span class="comment">// ...or from a private key
</span>walletPrivateKey = new Wallet(walletMnemonic.privateKey)
walletMnemonic.address === walletPrivateKey.address
//!
// The address as a Promise per the Signer API
walletMnemonic.getAddress()
//!
// A Wallet address is also available synchronously
walletMnemonic.address
//!
// The internal cryptographic components
walletMnemonic.privateKey
//!
walletMnemonic.publicKey
//!
// The wallet mnemonic
walletMnemonic.mnemonic
//!
// Note: A wallet created with a private key does not
// have a mnemonic (the derivation prevents it)
walletPrivateKey.mnemonic
//!
// Signing a message
walletMnemonic.signMessage("Hello World")
//!
<span class="result ok">// true
</span>
<span class="comment">// The address as a Promise per the Signer API
</span>walletMnemonic.getAddress()
<span class="result ok">// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
</span>
<span class="comment">// A Wallet address is also available synchronously
</span>walletMnemonic.address
<span class="result ok">// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
</span>
<span class="comment">// The internal cryptographic components
</span>walletMnemonic.privateKey
<span class="result ok">// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
</span>walletMnemonic.publicKey
<span class="result ok">// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
</span>
<span class="comment">// The wallet mnemonic
</span>walletMnemonic.mnemonic
<span class="result ok">// {
</span><span class="result ok">// locale: 'en',
</span><span class="result ok">// path: 'm/44\'/60\'/0\'/0/0',
</span><span class="result ok">// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
</span><span class="result ok">// }
</span>
<span class="comment">// Note: A wallet created with a private key does not
</span><span class="comment">// have a mnemonic (the derivation prevents it)
</span>walletPrivateKey.mnemonic
<span class="result ok">// null
</span>
<span class="comment">// Signing a message
</span>walletMnemonic.signMessage("Hello World")
<span class="result ok">// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
</span>
tx = {
to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
value: utils.parseEther("1.0")
}
// Signing a transaction
walletMnemonic.signTransaction(tx)
//!
<span class="comment">// Signing a transaction
</span>walletMnemonic.signTransaction(tx)
<span class="result ok">// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
</span>
<span class="comment">// The connect method returns a new instance of the
</span><span class="comment">// Wallet connected to a provider
</span>wallet = walletMnemonic.connect(provider)
// The connect method returns a new instance of the
// Wallet connected to a provider
wallet = walletMnemonic.connect(provider)
// Querying the network
wallet.getBalance();
//!
wallet.getTransactionCount();
//!
// Sending ether
wallet.sendTransaction(tx)
// &lt;hide&gt;
//! error
// &lt;/hide&gt;</div><a name="VoidSigner"></a><a name="signers--VoidSigner"></a><h2 class="show-anchors"><div>VoidSigner<span class="inherits"> inherits <a href="/v5/api/signer/#Signer">Signer</a></span><div class="anchors"><a class="self" href="/v5/api/signer/#VoidSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abstract-signer/src.ts/index.ts#L211">source</a></div></div></h2><p>A <b>VoidSigner</b> is a simple Signer which cannot sign.</p>
<span class="comment">// Querying the network
</span>wallet.getBalance();
<span class="result ok">// { Promise: { BigNumber: "42" } }
</span>wallet.getTransactionCount();
<span class="result ok">// { Promise: 0 }
</span>
<span class="comment">// Sending ether
</span>wallet.sendTransaction(tx)
</div><a name="VoidSigner"></a><a name="signers--VoidSigner"></a><h2 class="show-anchors"><div>VoidSigner<span class="inherits"> inherits <a href="/v5/api/signer/#Signer">Signer</a></span><div class="anchors"><a class="self" href="/v5/api/signer/#VoidSigner"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abstract-signer/src.ts/index.ts#L211">source</a></div></div></h2><p>A <b>VoidSigner</b> is a simple Signer which cannot sign.</p>
<p>It is useful as a read-only signer, when an API requires a Signer as a parameter, but it is known only read-only operations will be carried.</p>
@ -204,36 +206,34 @@ wallet.sendTransaction(tx)
</div></div><div class="code-title"><div>VoidSigner Pre-flight Example</div></div><div class="code">address = "0x8ba1f109551bD432803012645Ac136ddd64DBA72"
signer = new ethers.VoidSigner(address, provider)
// The DAI token contract
abi = [
<span class="comment">// The DAI token contract
</span>abi = [
"function balanceOf(address) view returns (uint)",
"function transfer(address, uint) returns (bool)"
]
contract = new ethers.Contract("dai.tokens.ethers.eth", abi, signer)
// &lt;hide&gt;
//!
// &lt;/hide&gt;
// Get the number of tokens for this account
tokens = await contract.balanceOf(signer.getAddress())
//! async tokens
//
// Pre-flight (check for revert) on DAI from the signer
//
// Note: We do not have the private key at this point, this
// simply allows us to check what would happen if we
// did. This can be useful to check before prompting
// a request in the UI
<span class="comment">// Get the number of tokens for this account
</span>tokens = await contract.balanceOf(signer.getAddress())
<span class="result ok">// { BigNumber: "7712595125722568213383" }
</span>
//
<span class="comment">// Pre-flight (check for revert) on DAI from the signer
</span>//
<span class="comment">// Note: We do not have the private key at this point, this
</span><span class="comment">// simply allows us to check what would happen if we
</span><span class="comment">// did. This can be useful to check before prompting
</span><span class="comment">// a request in the UI
</span>//
// This will pass since the token balance is available
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</div><a name="ExternallyOwnedAccount"></a><a name="signers--ExternallyOwnedAccount"></a><h2 class="show-anchors"><div>ExternallyOwnedAccount<div class="anchors"><a class="self" href="/v5/api/signer/#ExternallyOwnedAccount"></a></div></div></h2><p>This is an interface which contains a minimal set of properties required for Externally Owned Accounts which can have certain operations performed, such as encoding as a JSON wallet.</p>
<span class="comment">// This will pass since the token balance is available
</span>contract.callStatic.transfer("donations.ethers.eth", tokens)
<span class="result ok">// { Promise: true }
</span>
<span class="comment">// This will fail since it is greater than the token balance
</span>contract.callStatic.transfer("donations.ethers.eth", tokens.add(1))
<span class="result error">// 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)
</span></div><a name="ExternallyOwnedAccount"></a><a name="signers--ExternallyOwnedAccount"></a><h2 class="show-anchors"><div>ExternallyOwnedAccount<div class="anchors"><a class="self" href="/v5/api/signer/#ExternallyOwnedAccount"></a></div></div></h2><p>This is an interface which contains a minimal set of properties required for Externally Owned Accounts which can have certain operations performed, such as encoding as a JSON wallet.</p>
<div class="property show-anchors"><div class="signature"><span class="path">eoa</span><span class="symbol">.</span><span class="method">address</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/address/#address">Address</a> &gt;</span><div class="anchors"></div></div><div class="body"><p>The <a href="/v5/api/utils/address/#address">Address</a> of this EOA.</p>
@ -247,7 +247,7 @@ contract.callStatic.transfer("donations.ethers.eth", tokens.add(1))
<div class="nav previous"><a href="/v5/api/contract/example/"><span class="arrow">&larr;</span>Example: ERC-20 Contract</a></div>
<div class="nav next"><a href="/v5/api/providers/">Providers<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -43,7 +43,7 @@
<div class="nav previous"><a href="/v5/api/utils/abi/"><span class="arrow">&larr;</span>Application Binary Interface</a></div>
<div class="nav next"><a href="/v5/api/utils/abi/formats/">ABI Formats<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -28,7 +28,7 @@
<div class="nav previous"><a href="/v5/api/utils/abi/coder/"><span class="arrow">&larr;</span>AbiCoder</a></div>
<div class="nav next"><a href="/v5/api/utils/abi/fragments/">Fragments<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -59,7 +59,7 @@
</div></div><a name="Fragment-isFragment"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">Fragment</span><span class="symbol">.</span><span class="method">isFragment</span><span class="symbol">(</span> <span class="param">object</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#Fragment-isFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L474">source</a></div></div><div class="body"><p>Tra lal al</p>
</div></div><a name="ConstructorFragment"></a><a name="fragments--ConstructorFragment"></a><h2 class="show-anchors"><div>ConstructorFragment<span class="inherits"> inherits <a href="/v5/api/utils/abi/fragments/#Fragment">Fragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ConstructorFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L704">source</a></div></div></h2>
</div></div><a name="ConstructorFragment"></a><a name="fragments--ConstructorFragment"></a><h2 class="show-anchors"><div>ConstructorFragment<span class="inherits"> inherits <a href="/v5/api/utils/abi/fragments/#Fragment">Fragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ConstructorFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L708">source</a></div></div></h2>
<a name="fragments--ConstructorFragment--properties"></a><h3 class="show-anchors"><div>Properties<div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#fragments--ConstructorFragment--properties"></a></div></div></h3>
<div class="property show-anchors"><div class="signature"><span class="path">fragment</span><span class="symbol">.</span><span class="method">gas</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/bignumber/">BigNumber</a></span><div class="anchors"></div></div><div class="body"><p>This is the gas limit that should be used during deployment. It may be null.</p>
@ -70,9 +70,9 @@
<p><ul><li><code class="inline">nonpayable</code> </li><li><code class="inline">payable</code> </li></ul></p>
</div></div><a name="fragments--ConstructorFragment--methods"></a><h3 class="show-anchors"><div>Methods<div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#fragments--ConstructorFragment--methods"></a></div></div></h3>
<a name="ConstructorFragment-from"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">ConstructorFragment</span><span class="symbol">.</span><span class="method">from</span><span class="symbol">(</span> <span class="param">objectOrString</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/abi/fragments/#ConstructorFragment">ConstructorFragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ConstructorFragment-from"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L742">source</a></div></div><div class="body"><p>Tra la la...</p>
<a name="ConstructorFragment-from"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">ConstructorFragment</span><span class="symbol">.</span><span class="method">from</span><span class="symbol">(</span> <span class="param">objectOrString</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/abi/fragments/#ConstructorFragment">ConstructorFragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ConstructorFragment-from"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L746">source</a></div></div><div class="body"><p>Tra la la...</p>
</div></div><a name="ConstructorFragment-isConstructorFragment"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">ConstructorFragment</span><span class="symbol">.</span><span class="method">isConstructorFragment</span><span class="symbol">(</span> <span class="param">object</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ConstructorFragment-isConstructorFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L790">source</a></div></div><div class="body"><p>Tra lal al</p>
</div></div><a name="ConstructorFragment-isConstructorFragment"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">ConstructorFragment</span><span class="symbol">.</span><span class="method">isConstructorFragment</span><span class="symbol">(</span> <span class="param">object</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ConstructorFragment-isConstructorFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L794">source</a></div></div><div class="body"><p>Tra lal al</p>
</div></div><a name="EventFragment"></a><a name="fragments--EventFragment"></a><h2 class="show-anchors"><div>EventFragment<span class="inherits"> inherits <a href="/v5/api/utils/abi/fragments/#Fragment">Fragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#EventFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L483">source</a></div></div></h2>
<a name="fragments--EventFragment--properties"></a><h3 class="show-anchors"><div>Properties<div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#fragments--EventFragment--properties"></a></div></div></h3>
@ -83,7 +83,7 @@
</div></div><a name="EventFragment-isEventFragment"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">EventFragment</span><span class="symbol">.</span><span class="method">isEventFragment</span><span class="symbol">(</span> <span class="param">object</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#EventFragment-isEventFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L572">source</a></div></div><div class="body"><p>Tra lal al</p>
</div></div><a name="FunctionFragment"></a><a name="fragments--FunctionFragment"></a><h2 class="show-anchors"><div>FunctionFragment<span class="inherits"> inherits <a href="/v5/api/utils/abi/fragments/#ConstructorFragment">ConstructorFragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#FunctionFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L800">source</a></div></div></h2>
</div></div><a name="FunctionFragment"></a><a name="fragments--FunctionFragment"></a><h2 class="show-anchors"><div>FunctionFragment<span class="inherits"> inherits <a href="/v5/api/utils/abi/fragments/#ConstructorFragment">ConstructorFragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#FunctionFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L804">source</a></div></div></h2>
<a name="fragments--FunctionFragment--properties"></a><h3 class="show-anchors"><div>Properties<div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#fragments--FunctionFragment--properties"></a></div></div></h3>
<div class="property show-anchors"><div class="signature"><span class="path">fragment</span><span class="symbol">.</span><span class="method">constant</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"></div></div><div class="body"><p>This is whether the function is constant (i.e. does not change state). This is true if the state mutability is <code class="inline">pure</code> or <code class="inline">view</code>.</p>
@ -94,9 +94,9 @@
</div></div><div class="property show-anchors"><div class="signature"><span class="path">fragment</span><span class="symbol">.</span><span class="method">outputs</span> <span class="arrow">&rArr;</span> <span class="returns">Array&lt; <a href="/v5/api/utils/abi/fragments/#ParamType">ParamType</a> &gt;</span><div class="anchors"></div></div><div class="body"><p>A list of the Function output parameters.</p>
</div></div><a name="fragments--FunctionFragment--method"></a><h3 class="show-anchors"><div>Method<div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#fragments--FunctionFragment--method"></a></div></div></h3>
<a name="FunctionFragment-from"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">FunctionFragment</span><span class="symbol">.</span><span class="method">from</span><span class="symbol">(</span> <span class="param">objectOrString</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/abi/fragments/#FunctionFragment">FunctionFragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#FunctionFragment-from"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L742">source</a></div></div><div class="body"><p>Tra la la...</p>
<a name="FunctionFragment-from"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">FunctionFragment</span><span class="symbol">.</span><span class="method">from</span><span class="symbol">(</span> <span class="param">objectOrString</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/abi/fragments/#FunctionFragment">FunctionFragment</a></span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#FunctionFragment-from"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L746">source</a></div></div><div class="body"><p>Tra la la...</p>
</div></div><a name="FunctionFragment-isFunctionFragment"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">FunctionFragment</span><span class="symbol">.</span><span class="method">isFunctionFragment</span><span class="symbol">(</span> <span class="param">object</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#FunctionFragment-isFunctionFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L921">source</a></div></div><div class="body"><p>Tra lal al</p>
</div></div><a name="FunctionFragment-isFunctionFragment"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="path">FunctionFragment</span><span class="symbol">.</span><span class="method">isFunctionFragment</span><span class="symbol">(</span> <span class="param">object</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">boolean</span><div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#FunctionFragment-isFunctionFragment"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L925">source</a></div></div><div class="body"><p>Tra lal al</p>
</div></div><a name="ParamType"></a><a name="fragments--ParamType"></a><h2 class="show-anchors"><div>ParamType<div class="anchors"><a class="self" href="/v5/api/utils/abi/fragments/#ParamType"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/abi/src.ts/fragments.ts#L251">source</a></div></div></h2><p>The following examples will represent the Solidity parameter:</p>
@ -131,7 +131,7 @@
<div class="nav previous"><a href="/v5/api/utils/abi/formats/"><span class="arrow">&larr;</span>ABI Formats</a></div>
<div class="nav next"><a href="/v5/api/utils/abi/interface/">Interface<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -28,7 +28,7 @@
<div class="nav previous"><a href="/v5/api/utils/"><span class="arrow">&larr;</span>Utilities</a></div>
<div class="nav next"><a href="/v5/api/utils/abi/coder/">AbiCoder<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -122,7 +122,7 @@
<div class="nav previous"><a href="/v5/api/utils/abi/fragments/"><span class="arrow">&larr;</span>Fragments</a></div>
<div class="nav next"><a href="/v5/api/utils/address/">Addresses<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -62,7 +62,7 @@
<div class="nav previous"><a href="/v5/api/utils/abi/interface/"><span class="arrow">&larr;</span>Interface</a></div>
<div class="nav next"><a href="/v5/api/utils/bignumber/">BigNumber<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -50,42 +50,42 @@ Returns an instance of a **BigNumber** for *aBigNumberish*.
```javascript
// From a decimal string...
BigNumber.from("42")
//!
// { BigNumber: "42" }
// From a HexString...
BigNumber.from("0x2a")
//!
// { BigNumber: "42" }
// From a negative HexString...
BigNumber.from("-0x2a")
//!
// { BigNumber: "-42" }
// From an Array (or Uint8Array)...
BigNumber.from([ 42 ])
//!
// { BigNumber: "42" }
// From an existing BigNumber...
let one1 = constants.One;
let one2 = BigNumber.from(one1)
one2
//!
// { BigNumber: "1" }
// ...which returns the same instance
one1 === one2
//!
// true
// From a (safe) number...
BigNumber.from(42)
//!
// { BigNumber: "42" }
// From a ES2015 BigInt... (only on platforms with BigInt support)
BigNumber.from(42n)
//!
// { BigNumber: "42" }
// Numbers outside the safe range fail:
BigNumber.from(Number.MAX_SAFE_INTEGER);
//! error
// Error: overflow (fault="overflow", operation="BigNumber.from", value=9007199254740991, code=NUMERIC_FAULT, version=bignumber/5.0.0-beta.139)
```
Methods
@ -210,7 +210,7 @@ let a = BigNumber.from(42);
let b = BigNumber.from("91");
a.mul(b);
//!
// { BigNumber: "3822" }
```
Notes
@ -220,7 +220,7 @@ Notes
```javascript
(Number.MAX_SAFE_INTEGER + 2 - 2) == (Number.MAX_SAFE_INTEGER)
//!
// false
```

@ -40,44 +40,45 @@
<div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">BigNumber</span><span class="symbol">.</span><span class="method">from</span><span class="symbol">(</span> <span class="param">aBigNumberish</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/bignumber/">BigNumber</a></span><div class="anchors"></div></div><div class="body"><p>Returns an instance of a <b>BigNumber</b> for <i>aBigNumberish</i>.</p>
</div></div><a name="BigNumber--BigNumber--creating--examples"></a><h3 class="show-anchors"><div>Examples:<div class="anchors"></div></div></h3>
<div class="code">// From a decimal string...
BigNumber.from("42")
//!
// From a HexString...
BigNumber.from("0x2a")
//!
// From a negative HexString...
BigNumber.from("-0x2a")
//!
// From an Array (or Uint8Array)...
BigNumber.from([ 42 ])
//!
// From an existing BigNumber...
let one1 = constants.One;
<div class="code"><span class="comment">// From a decimal string...
</span>BigNumber.from("42")
<span class="result ok">// { BigNumber: "42" }
</span>
<span class="comment">// From a HexString...
</span>BigNumber.from("0x2a")
<span class="result ok">// { BigNumber: "42" }
</span>
<span class="comment">// From a negative HexString...
</span>BigNumber.from("-0x2a")
<span class="result ok">// { BigNumber: "-42" }
</span>
<span class="comment">// From an Array (or Uint8Array)...
</span>BigNumber.from([ 42 ])
<span class="result ok">// { BigNumber: "42" }
</span>
<span class="comment">// From an existing BigNumber...
</span>let one1 = constants.One;
let one2 = BigNumber.from(one1)
one2
//!
// ...which returns the same instance
one1 === one2
//!
// From a (safe) number...
BigNumber.from(42)
//!
// From a ES2015 BigInt... (only on platforms with BigInt support)
BigNumber.from(42n)
//!
// Numbers outside the safe range fail:
BigNumber.from(Number.MAX_SAFE_INTEGER);
//! error</div><a name="BigNumber--methods"></a><a name="BigNumber--BigNumber--methods"></a><h2 class="show-anchors"><div>Methods<div class="anchors"><a class="self" href="/v5/api/utils/bignumber/#BigNumber--methods"></a></div></div></h2><p>The BigNumber class is immutable, so no operations can change the value it represents.</p>
<span class="result ok">// { BigNumber: "1" }
</span>
<span class="comment">// ...which returns the same instance
</span>one1 === one2
<span class="result ok">// true
</span>
<span class="comment">// From a (safe) number...
</span>BigNumber.from(42)
<span class="result ok">// { BigNumber: "42" }
</span>
<span class="comment">// From a ES2015 BigInt... (only on platforms with BigInt support)
</span>BigNumber.from(42n)
<span class="result ok">// { BigNumber: "42" }
</span>
<span class="comment">// Numbers outside the safe range fail:
</span>BigNumber.from(Number.MAX_SAFE_INTEGER);
<span class="result error">// Error: overflow (fault="overflow", operation="BigNumber.from", value=9007199254740991, code=NUMERIC_FAULT, version=bignumber/5.0.0-beta.139)
</span></div><a name="BigNumber--methods"></a><a name="BigNumber--BigNumber--methods"></a><h2 class="show-anchors"><div>Methods<div class="anchors"><a class="self" href="/v5/api/utils/bignumber/#BigNumber--methods"></a></div></div></h2><p>The BigNumber class is immutable, so no operations can change the value it represents.</p>
<a name="BigNumber--BigNumber--methods--math-operations"></a><h3 class="show-anchors"><div>Math Operations<div class="anchors"><a class="self" href="/v5/api/utils/bignumber/#BigNumber--BigNumber--methods--math-operations"></a></div></div></h3>
<div class="property show-anchors"><div class="signature"><span class="path">BigNumber</span><span class="symbol">.</span><span class="method">add</span><span class="symbol">(</span> <span class="param">otherValue</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns"><a href="/v5/api/utils/bignumber/">BigNumber</a></span><div class="anchors"><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/bignumber/src.ts/bignumber.ts#L71">source</a></div></div><div class="body"><p>Returns a BigNumber with the value of <i>BigNumber</i> <b>+</b> <i>otherValue</i>.</p>
@ -132,7 +133,8 @@ BigNumber.from(Number.MAX_SAFE_INTEGER);
let b = BigNumber.from("91");
a.mul(b);
//!</div><a name="BigNumber--notes"></a><a name="BigNumber--BigNumber--notes"></a><h2 class="show-anchors"><div>Notes<div class="anchors"><a class="self" href="/v5/api/utils/bignumber/#BigNumber--notes"></a></div></div></h2><p>This section is a for a couple of questions that come up frequently.</p>
<span class="result ok">// { BigNumber: "3822" }
</span></div><a name="BigNumber--notes"></a><a name="BigNumber--BigNumber--notes"></a><h2 class="show-anchors"><div>Notes<div class="anchors"><a class="self" href="/v5/api/utils/bignumber/#BigNumber--notes"></a></div></div></h2><p>This section is a for a couple of questions that come up frequently.</p>
<a name="BigNumber--notes-safenumbers"></a><a name="BigNumber--BigNumber--notes--BigNumber--notes-safenumbers"></a><h3 class="show-anchors"><div>Why can't I just use numbers?<div class="anchors"><a class="self" href="/v5/api/utils/bignumber/#BigNumber--notes-safenumbers"></a></div></div></h3><p>The first problem many encounter when dealing with Ethereum is the concept of numbers. Most common currencies are broken down with very little granularity. For example, there are only 100 cents in a single dollar. However, there are 10<sup>18</sup> <b>wei</b> in a single <b>ether</b>.</p>
@ -141,7 +143,8 @@ a.mul(b);
<p>To demonstrate how this may be an issue in your code, consider:</p>
<div class="code">(Number.MAX_SAFE_INTEGER + 2 - 2) == (Number.MAX_SAFE_INTEGER)
//!</div><p>To remedy this, all numbers (which can be large) are stored and manipulated as <a href="/v5/api/utils/bignumber/">Big Numbers</a>.</p>
<span class="result ok">// false
</span></div><p>To remedy this, all numbers (which can be large) are stored and manipulated as <a href="/v5/api/utils/bignumber/">Big Numbers</a>.</p>
<p>The functions <a href="/v5/api/utils/display-logic/#utils-parseEther">parseEther( etherString )</a> and <a href="/v5/api/utils/display-logic/#utils-formatEther">formatEther( wei )</a> can be used to convert between string representations, which are displayed to or entered by the user and Big Number representations which can have mathematical operations handled safely.</p>
@ -175,7 +178,7 @@ a.mul(b);
<div class="nav previous"><a href="/v5/api/utils/address/"><span class="arrow">&larr;</span>Addresses</a></div>
<div class="nav next"><a href="/v5/api/utils/bytes/">Byte Manipulation<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -63,27 +63,27 @@ Converts *aBigNumberish* to a [HexString](/v5/api/utils/bytes/#HexString), with
```javascript
// Convert a hexstring to a Uint8Array
arrayify("0x1234")
//!
// Uint8Array [ 18, 52 ]
// Convert an Array to a hexstring
hexlify([1, 2, 3, 4])
//!
// '0x01020304'
// Convert an Object to a hexstring
hexlify({ length: 2, "0": 1, "1": 2 })
//!
// '0x0102'
// Convert an Array to a hexstring
hexlify([ 1 ])
//!
// '0x01'
// Convert a number to a stripped hex value
hexValue(1)
//!
// '0x1'
// Convert an Array to a stripped hex value
hexValue([ 1, 2 ])
//!
// '0x102'
```
Array Manipulation
@ -164,16 +164,32 @@ 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 ]
const data = [ 1, 2, 3, 4, 5, 6, 7 ];
// Returns a new Array
utils.shuffled(data);
//!
// [
// 7,
// 6,
// 4,
// 2,
// 3,
// 1,
// 5
// ]
// The Original is unscathed...
data
//!
// [
// 1,
// 2,
// 3,
// 4,
// 5,
// 6,
// 7
// ]
```

@ -49,29 +49,30 @@
</div></div><a name="utils-hexValue"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">hexValue</span><span class="symbol">(</span> <span class="param">aBigNumberish</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#HexString">HexString</a> &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/bytes/#utils-hexValue"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/bytes/src.ts/index.ts#L287">source</a></div></div><div class="body"><p>Converts <i>aBigNumberish</i> to a <a href="/v5/api/utils/bytes/#HexString">HexString</a>, with no <u>unnecessary</u> leading zeros.</p>
</div></div><div class="code-title"><div>Examples</div></div><div class="code">// Convert a hexstring to a Uint8Array
arrayify("0x1234")
//!
// Convert an Array to a hexstring
hexlify([1, 2, 3, 4])
//!
// Convert an Object to a hexstring
hexlify({ length: 2, "0": 1, "1": 2 })
//!
// Convert an Array to a hexstring
hexlify([ 1 ])
//!
// Convert a number to a stripped hex value
hexValue(1)
//!
// Convert an Array to a stripped hex value
hexValue([ 1, 2 ])
//!</div><a name="byte-manipulation--array-manipulation"></a><h2 class="show-anchors"><div>Array Manipulation<div class="anchors"><a class="self" href="/v5/api/utils/bytes/#byte-manipulation--array-manipulation"></a></div></div></h2>
</div></div><div class="code-title"><div>Examples</div></div><div class="code"><span class="comment">// Convert a hexstring to a Uint8Array
</span>arrayify("0x1234")
<span class="result ok">// Uint8Array [ 18, 52 ]
</span>
<span class="comment">// Convert an Array to a hexstring
</span>hexlify([1, 2, 3, 4])
<span class="result ok">// '0x01020304'
</span>
<span class="comment">// Convert an Object to a hexstring
</span>hexlify({ length: 2, "0": 1, "1": 2 })
<span class="result ok">// '0x0102'
</span>
<span class="comment">// Convert an Array to a hexstring
</span>hexlify([ 1 ])
<span class="result ok">// '0x01'
</span>
<span class="comment">// Convert a number to a stripped hex value
</span>hexValue(1)
<span class="result ok">// '0x1'
</span>
<span class="comment">// Convert an Array to a stripped hex value
</span>hexValue([ 1, 2 ])
<span class="result ok">// '0x102'
</span></div><a name="byte-manipulation--array-manipulation"></a><h2 class="show-anchors"><div>Array Manipulation<div class="anchors"><a class="self" href="/v5/api/utils/bytes/#byte-manipulation--array-manipulation"></a></div></div></h2>
<a name="utils-concat"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">concat</span><span class="symbol">(</span> <span class="param">arrayOfBytesLike</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Uint8Array</span><div class="anchors"><a class="self" href="/v5/api/utils/bytes/#utils-concat"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/bytes/src.ts/index.ts#L140">source</a></div></div><div class="body"><p>Concatenates all the <a href="/v5/api/utils/bytes/#BytesLike">BytesLike</a> in <i>arrayOfBytesLike</i> into a single Uint8Array.</p>
</div></div><a name="utils-stripZeros"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">stripZeros</span><span class="symbol">(</span> <span class="param">aBytesLike</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Uint8Array</span><div class="anchors"><a class="self" href="/v5/api/utils/bytes/#utils-stripZeros"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/bytes/src.ts/index.ts#L154">source</a></div></div><div class="body"><p>Returns a Uint8Array with all leading <code class="inline">0</code> bytes of <i>aBtyesLike</i> removed.</p>
@ -104,23 +105,40 @@ hexValue([ 1, 2 ])
</div></div><a name="utils-shuffled"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">shuffled</span><span class="symbol">(</span> <span class="param">array</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">Array&lt; any &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/bytes/#utils-shuffled"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/random/src.ts/shuffle.ts#L3">source</a></div></div><div class="body"><p>Return a copy of <i>array</i> shuffled using <a href="https://en.wikipedia.org/wiki/Fisher-Yates_shuffle">Fisher-Yates Shuffle</a>.</p>
</div></div><div class="code-title"><div>Examples</div></div><div class="code">utils.randomBytes(8)
//!
<span class="result ok">// Uint8Array [ 131, 252, 210, 50, 128, 120, 18, 68 ]
</span>
const data = [ 1, 2, 3, 4, 5, 6, 7 ];
// Returns a new Array
utils.shuffled(data);
//!
// The Original is unscathed...
data
//!</div>
<span class="comment">// Returns a new Array
</span>utils.shuffled(data);
<span class="result ok">// [
</span><span class="result ok">// 7,
</span><span class="result ok">// 6,
</span><span class="result ok">// 4,
</span><span class="result ok">// 2,
</span><span class="result ok">// 3,
</span><span class="result ok">// 1,
</span><span class="result ok">// 5
</span><span class="result ok">// ]
</span>
<span class="comment">// The Original is unscathed...
</span>data
<span class="result ok">// [
</span><span class="result ok">// 1,
</span><span class="result ok">// 2,
</span><span class="result ok">// 3,
</span><span class="result ok">// 4,
</span><span class="result ok">// 5,
</span><span class="result ok">// 6,
</span><span class="result ok">// 7
</span><span class="result ok">// ]
</span></div>
<div class="footer">
<div class="nav previous"><a href="/v5/api/utils/bignumber/"><span class="arrow">&larr;</span>BigNumber</a></div>
<div class="nav next"><a href="/v5/api/utils/constants/">Constants<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -45,7 +45,7 @@
<div class="nav previous"><a href="/v5/api/utils/bytes/"><span class="arrow">&larr;</span>Byte Manipulation</a></div>
<div class="nav next"><a href="/v5/api/utils/display-logic/">Display Logic and Input<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -52,7 +52,7 @@
<div class="nav previous"><a href="/v5/api/utils/constants/"><span class="arrow">&larr;</span>Constants</a></div>
<div class="nav next"><a href="/v5/api/utils/encoding/">Encoding Utilities<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -49,7 +49,7 @@
<div class="nav previous"><a href="/v5/api/utils/display-logic/"><span class="arrow">&larr;</span>Display Logic and Input</a></div>
<div class="nav next"><a href="/v5/api/utils/fixednumber/">FixedNumber<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -87,7 +87,7 @@
<div class="nav previous"><a href="/v5/api/utils/encoding/"><span class="arrow">&larr;</span>Encoding Utilities</a></div>
<div class="nav next"><a href="/v5/api/utils/hashing/">Hashing Algorithms<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -37,13 +37,13 @@ Returns the [SHA2-512](https://en.wikipedia.org/wiki/SHA-2) digest of *aBytesLik
```javascript
utils.keccak256([ 0x12, 0x34 ])
//!
// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
utils.keccak256("0x")
//!
// '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
utils.keccak256("0x1234")
//!
// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
// The value MUST be data, such as:
// - an Array of numbers
@ -52,15 +52,15 @@ utils.keccak256("0x1234")
// Do NOT use UTF-8 strings that are not a DataHexstring
utils.keccak256("hello world")
//! error
// Error: invalid arrayify value (argument="value", value="hello world", code=INVALID_ARGUMENT, version=bytes/5.0.0-beta.138)
// If needed, convert strings to bytes first:
utils.keccak256(utils.toUtf8Bytes("hello world"))
//!
// '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad'
// Or equivalently use the identity function:
utils.id("hello world")
//!
// '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad'
// Keep in mind that the string "0x1234" represents TWO
// bytes (i.e. [ 0x12, 0x34 ]. If you wish to compute the
@ -71,47 +71,44 @@ utils.id("hello world")
// Hash of TWO (2) bytes:
utils.keccak256("0x1234")
//!
// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
// Hash of TWO (2) bytes: (same result)
utils.keccak256([ 0x12, 0x34 ])
//!
// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
const bytes = utils.toUtf8Bytes("0x1234");
// <hide>
bytes
// </hide>
//!
// Uint8Array [ 48, 120, 49, 50, 51, 52 ]
// Hash of SIX (6) characters (different than above)
utils.keccak256(bytes)
//!
// '0x1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8'
// Hash of SIX (6) characters (same result)
utils.id("0x1234")
//!
// '0x1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8'
```
```javascript
utils.ripemd160("0x")
//!
// '0x9c1185a5c5e9fc54612808977ee8f548b2258d31'
utils.ripemd160("0x1234")
//!
// '0xc39867e393cb061b837240862d9ad318c176a96d'
```
```javascript
utils.sha256("0x")
//!
// '0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
utils.sha256("0x1234")
//!
// '0x3a103a4e5729ad68c02a678ae39accfbc0ae208096437401b7ceab63cca0622f'
utils.sha512("0x")
//!
// '0xcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'
utils.sha512("0x1234")
//!
// '0x4c54886c9821195522d88ff4705c3e0c686b921054421e6ea598739c29c26e1ee75419aaceec94dd2e3c0dbb82ecf895c9f61215f375de6d800d9b99d3d4b816'
```
HMAC
@ -138,7 +135,7 @@ Use the [SHA2-512](https://en.wikipedia.org/wiki/SHA-2) hash algorithm.
const key = "0x0102";
const data = "0x1234";
utils.computeHmac("sha256", key, data)
//!
// '0x7553df81c628815cf569696cad13a37c606c5058df13d9dff4fee2cf5e9b5779'
```
Hashing Helpers
@ -160,16 +157,16 @@ Returns the [ENS Namehash](https://docs.ens.domains/contract-api-reference/name-
```javascript
utils.namehash("")
//!
// '0x0000000000000000000000000000000000000000000000000000000000000000'
utils.namehash("eth")
//!
// '0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae'
utils.namehash("ricmoo.firefly.eth")
//!
// '0x0bcad17ecf260d6506c6b97768bdc2acfb6694445d27ffd3f9c1cfbee4a9bd6d'
utils.namehash("ricmoo.xyz")
//!
// '0x7d56aa46358ba2f8b77d8e05bcabdd2358370dcf34e87810f8cea77ecb3fc57d'
```
Solidity Hashing Algorithms
@ -192,15 +189,15 @@ Returns the [SHA2-256](https://en.wikipedia.org/wiki/SHA-2) of the non-standard
```javascript
utils.solidityPack([ "int16", "uint48" ], [ -1, 12 ])
//!
// '0xffff00000000000c'
utils.solidityPack([ "string", "uint8" ], [ "Hello", 3 ])
//!
// '0x48656c6c6f03'
utils.solidityKeccak256([ "int16", "uint48" ], [ -1, 12 ])
//!
// '0x81da7abb5c9c7515f57dab2fc946f01217ab52f3bd8958bc36bd55894451a93c'
utils.soliditySha256([ "int16", "uint48" ], [ -1, 12 ])
//!
// '0xa5580fb602f6e2ba9c588011dc4e6c2335e0f5d970dc45869db8f217efc6911a'
```

@ -31,73 +31,73 @@
</div></div><a name="utils-sha512"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">sha512</span><span class="symbol">(</span> <span class="param">aBytesLike</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a>&lt; 64 &gt; &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils-sha512"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/sha2/src.ts/index.ts#L22">source</a></div></div><div class="body"><p>Returns the <a href="https://en.wikipedia.org/wiki/SHA-2">SHA2-512</a> digest of <i>aBytesLike</i>.</p>
</div></div><div class="code-title"><div>KECCAK256</div></div><div class="code">utils.keccak256([ 0x12, 0x34 ])
//!
<span class="result ok">// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
</span>
utils.keccak256("0x")
//!
<span class="result ok">// '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
</span>
utils.keccak256("0x1234")
//!
// The value MUST be data, such as:
// - an Array of numbers
// - a data hex string (e.g. "0x1234")
// - a Uint8Array
// Do NOT use UTF-8 strings that are not a DataHexstring
utils.keccak256("hello world")
//! error
// If needed, convert strings to bytes first:
utils.keccak256(utils.toUtf8Bytes("hello world"))
//!
// Or equivalently use the identity function:
utils.id("hello world")
//!
// Keep in mind that the string "0x1234" represents TWO
// bytes (i.e. [ 0x12, 0x34 ]. If you wish to compute the
// hash of the 6 characters "0x1234", convert it to UTF-8
// bytes first using utils.toUtf8Bytes.
// Consider the following examples:
// Hash of TWO (2) bytes:
utils.keccak256("0x1234")
//!
// Hash of TWO (2) bytes: (same result)
utils.keccak256([ 0x12, 0x34 ])
//!
<span class="result ok">// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
</span>
<span class="comment">// The value MUST be data, such as:
</span><span class="comment">// - an Array of numbers
</span><span class="comment">// - a data hex string (e.g. "0x1234")
</span><span class="comment">// - a Uint8Array
</span>
<span class="comment">// Do NOT use UTF-8 strings that are not a DataHexstring
</span>utils.keccak256("hello world")
<span class="result error">// Error: invalid arrayify value (argument="value", value="hello world", code=INVALID_ARGUMENT, version=bytes/5.0.0-beta.138)
</span>
<span class="comment">// If needed, convert strings to bytes first:
</span>utils.keccak256(utils.toUtf8Bytes("hello world"))
<span class="result ok">// '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad'
</span>
<span class="comment">// Or equivalently use the identity function:
</span>utils.id("hello world")
<span class="result ok">// '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad'
</span>
<span class="comment">// Keep in mind that the string "0x1234" represents TWO
</span><span class="comment">// bytes (i.e. [ 0x12, 0x34 ]. If you wish to compute the
</span><span class="comment">// hash of the 6 characters "0x1234", convert it to UTF-8
</span><span class="comment">// bytes first using utils.toUtf8Bytes.
</span>
<span class="comment">// Consider the following examples:
</span>
<span class="comment">// Hash of TWO (2) bytes:
</span>utils.keccak256("0x1234")
<span class="result ok">// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
</span>
<span class="comment">// Hash of TWO (2) bytes: (same result)
</span>utils.keccak256([ 0x12, 0x34 ])
<span class="result ok">// '0x56570de287d73cd1cb6092bb8fdee6173974955fdef345ae579ee9f475ea7432'
</span>
const bytes = utils.toUtf8Bytes("0x1234");
// &lt;hide&gt;
bytes
// &lt;/hide&gt;
//!
// Hash of SIX (6) characters (different than above)
utils.keccak256(bytes)
//!
// Hash of SIX (6) characters (same result)
utils.id("0x1234")
//!</div><div class="code-title"><div>RIPEMD160</div></div><div class="code">utils.ripemd160("0x")
//!
<span class="result ok">// Uint8Array [ 48, 120, 49, 50, 51, 52 ]
</span>
<span class="comment">// Hash of SIX (6) characters (different than above)
</span>utils.keccak256(bytes)
<span class="result ok">// '0x1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8'
</span>
<span class="comment">// Hash of SIX (6) characters (same result)
</span>utils.id("0x1234")
<span class="result ok">// '0x1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8'
</span></div><div class="code-title"><div>RIPEMD160</div></div><div class="code">utils.ripemd160("0x")
<span class="result ok">// '0x9c1185a5c5e9fc54612808977ee8f548b2258d31'
</span>
utils.ripemd160("0x1234")
//!</div><div class="code-title"><div>SHA-2</div></div><div class="code">utils.sha256("0x")
//!
<span class="result ok">// '0xc39867e393cb061b837240862d9ad318c176a96d'
</span></div><div class="code-title"><div>SHA-2</div></div><div class="code">utils.sha256("0x")
<span class="result ok">// '0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
</span>
utils.sha256("0x1234")
//!
<span class="result ok">// '0x3a103a4e5729ad68c02a678ae39accfbc0ae208096437401b7ceab63cca0622f'
</span>
utils.sha512("0x")
//!
<span class="result ok">// '0xcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'
</span>
utils.sha512("0x1234")
//!</div><a name="utils--hmac"></a><a name="hashing-algorithms--utils--hmac"></a><h2 class="show-anchors"><div>HMAC<div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--hmac"></a></div></div></h2>
<span class="result ok">// '0x4c54886c9821195522d88ff4705c3e0c686b921054421e6ea598739c29c26e1ee75419aaceec94dd2e3c0dbb82ecf895c9f61215f375de6d800d9b99d3d4b816'
</span></div><a name="utils--hmac"></a><a name="hashing-algorithms--utils--hmac"></a><h2 class="show-anchors"><div>HMAC<div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--hmac"></a></div></div></h2>
<a name="utils-computeHmac"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">computeHmac</span><span class="symbol">(</span> <span class="param">algorithm</span> <span class="symbol">,</span> <span class="param">key</span> <span class="symbol">,</span> <span class="param">data</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a> &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils-computeHmac"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/sha2/src.ts/index.ts#L27">source</a></div></div><div class="body"><p>Returns the <a href="https://en.wikipedia.org/wiki/HMAC">HMAC</a> of <i>data</i> with <i>key</i> using the <a href="/v5/api/utils/hashing/#utils--hmac-supported-algorithm">Algorithm</a> <i>algorithm</i>.</p>
</div></div><a name="utils--hmac-supported-algorithm"></a><a name="hashing-algorithms--utils--hmac--utils--hmac-supported-algorithm"></a><h3 class="show-anchors"><div><b>HMAC Supported Algorithms</b><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--hmac-supported-algorithm"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/sha2/src.ts/index.ts#L11">source</a></div></div></h3>
@ -108,22 +108,25 @@ utils.sha512("0x1234")
</div></div><div class="code-title"><div>HMAC</div></div><div class="code">const key = "0x0102";
const data = "0x1234";
utils.computeHmac("sha256", key, data)
//!</div><a name="utils--hashing-helpers"></a><a name="hashing-algorithms--utils--hashing-helpers"></a><h2 class="show-anchors"><div>Hashing Helpers<div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--hashing-helpers"></a></div></div></h2>
<span class="result ok">// '0x7553df81c628815cf569696cad13a37c606c5058df13d9dff4fee2cf5e9b5779'
</span></div><a name="utils--hashing-helpers"></a><a name="hashing-algorithms--utils--hashing-helpers"></a><h2 class="show-anchors"><div>Hashing Helpers<div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--hashing-helpers"></a></div></div></h2>
<a name="utils-hashMessage"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">hashMessage</span><span class="symbol">(</span> <span class="param">message</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a>&lt; 32 &gt; &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils-hashMessage"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/hash/src.ts/index.ts#L53">source</a></div></div><div class="body"><p>Computes the <a href="https://eips.ethereum.org/EIPS/eip-191">EIP-191</a> personal message digest of <i>message</i>. Personal messages are converted to UTF-8 bytes and prefixed with <code class="inline">\x19Ethereum Signed Message:</code> and the length of <i>message</i>.</p>
</div></div><a name="utils-namehash"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">namehash</span><span class="symbol">(</span> <span class="param">name</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a>&lt; 32 &gt; &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils-namehash"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/hash/src.ts/index.ts#L29">source</a></div></div><div class="body"><p>Returns the <a href="https://docs.ens.domains/contract-api-reference/name-processing#hashing-names">ENS Namehash</a> of <i>name</i>.</p>
</div></div><div class="code-title"><div>Hashing Messages</div></div><div class="code">// @TODO: include examples of hashMessage; it can be complex. :)</div><div class="code-title"><div>Namehash</div></div><div class="code">utils.namehash("")
//!
</div></div><div class="code-title"><div>Hashing Messages</div></div><div class="code"><span class="comment">// @TODO: include examples of hashMessage; it can be complex. :)
</span></div><div class="code-title"><div>Namehash</div></div><div class="code">utils.namehash("")
<span class="result ok">// '0x0000000000000000000000000000000000000000000000000000000000000000'
</span>
utils.namehash("eth")
//!
<span class="result ok">// '0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae'
</span>
utils.namehash("ricmoo.firefly.eth")
//!
<span class="result ok">// '0x0bcad17ecf260d6506c6b97768bdc2acfb6694445d27ffd3f9c1cfbee4a9bd6d'
</span>
utils.namehash("ricmoo.xyz")
//!</div><a name="utils--solidity-hashing"></a><a name="hashing-algorithms--utils--solidity-hashing"></a><h2 class="show-anchors"><div>Solidity Hashing Algorithms<div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--solidity-hashing"></a></div></div></h2><p>When using the Solidity <code class="inline">abi.packEncoded(...)</code> function, a non-standard <i>tightly packed</i> version of encoding is used. These functions implement the tightly packing algorithm.</p>
<span class="result ok">// '0x7d56aa46358ba2f8b77d8e05bcabdd2358370dcf34e87810f8cea77ecb3fc57d'
</span></div><a name="utils--solidity-hashing"></a><a name="hashing-algorithms--utils--solidity-hashing"></a><h2 class="show-anchors"><div>Solidity Hashing Algorithms<div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils--solidity-hashing"></a></div></div></h2><p>When using the Solidity <code class="inline">abi.packEncoded(...)</code> function, a non-standard <i>tightly packed</i> version of encoding is used. These functions implement the tightly packing algorithm.</p>
<a name="utils-solidityPack"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">solidityPack</span><span class="symbol">(</span> <span class="param">types</span> <span class="symbol">,</span> <span class="param">values</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a> &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils-solidityPack"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/solidity/src.ts/index.ts#L73">source</a></div></div><div class="body"><p>Returns the non-standard encoded <i>values</i> packed according to their respecive type in <i>types</i>.</p>
@ -132,22 +135,23 @@ utils.namehash("ricmoo.xyz")
</div></div><a name="utils-soliditySha256"></a><div class="property show-anchors"><div class="signature"><span class="path">ethers</span><span class="symbol">.</span><span class="path">utils</span><span class="symbol">.</span><span class="method">soliditySha256</span><span class="symbol">(</span> <span class="param">types</span> <span class="symbol">,</span> <span class="param">values</span> <span class="symbol">)</span> <span class="arrow">&rArr;</span> <span class="returns">string&lt; <a href="/v5/api/utils/bytes/#DataHexString">DataHexString</a>&lt; 32 &gt; &gt;</span><div class="anchors"><a class="self" href="/v5/api/utils/hashing/#utils-soliditySha256"></a><a class="source" href="https://github.com/ethers-io/ethers.js/blob/ethers-v5-beta/packages/solidity/src.ts/index.ts#L86">source</a></div></div><div class="body"><p>Returns the <a href="https://en.wikipedia.org/wiki/SHA-2">SHA2-256</a> of the non-standard encoded <i>values</i> packed according to their respective type in <i>types</i>.</p>
</div></div><div class="code-title"><div>Solidity Hashing</div></div><div class="code">utils.solidityPack([ "int16", "uint48" ], [ -1, 12 ])
//!
<span class="result ok">// '0xffff00000000000c'
</span>
utils.solidityPack([ "string", "uint8" ], [ "Hello", 3 ])
//!
<span class="result ok">// '0x48656c6c6f03'
</span>
utils.solidityKeccak256([ "int16", "uint48" ], [ -1, 12 ])
//!
<span class="result ok">// '0x81da7abb5c9c7515f57dab2fc946f01217ab52f3bd8958bc36bd55894451a93c'
</span>
utils.soliditySha256([ "int16", "uint48" ], [ -1, 12 ])
//!</div>
<span class="result ok">// '0xa5580fb602f6e2ba9c588011dc4e6c2335e0f5d970dc45869db8f217efc6911a'
</span></div>
<div class="footer">
<div class="nav previous"><a href="/v5/api/utils/fixednumber/"><span class="arrow">&larr;</span>FixedNumber</a></div>
<div class="nav next"><a href="/v5/api/utils/hdnode/">HD Wallet<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -88,7 +88,7 @@
<div class="nav previous"><a href="/v5/api/utils/hashing/"><span class="arrow">&larr;</span>Hashing Algorithms</a></div>
<div class="nav next"><a href="/v5/api/utils/logger/">Logging<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/api/providers/types/"><span class="arrow">&larr;</span>Types</a></div>
<div class="nav next"><a href="/v5/api/utils/abi/">Application Binary Interface<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -132,7 +132,7 @@
<div class="nav previous"><a href="/v5/api/utils/hdnode/"><span class="arrow">&larr;</span>HD Wallet</a></div>
<div class="nav next"><a href="/v5/api/utils/properties/">Property Utilities<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -29,7 +29,7 @@
<div class="nav previous"><a href="/v5/api/utils/logger/"><span class="arrow">&larr;</span>Logging</a></div>
<div class="nav next"><a href="/v5/api/utils/signing-key/">Signing Key<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -45,7 +45,7 @@
<div class="nav previous"><a href="/v5/api/utils/properties/"><span class="arrow">&larr;</span>Property Utilities</a></div>
<div class="nav next"><a href="/v5/api/utils/strings/">Strings<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -98,7 +98,7 @@
<div class="nav previous"><a href="/v5/api/utils/signing-key/"><span class="arrow">&larr;</span>Signing Key</a></div>
<div class="nav next"><a href="/v5/api/utils/transactions/">Transactions<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -81,7 +81,7 @@
<div class="nav previous"><a href="/v5/api/utils/strings/"><span class="arrow">&larr;</span>Strings</a></div>
<div class="nav next"><a href="/v5/api/utils/web/">Web Utilities<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -61,7 +61,7 @@
<div class="nav previous"><a href="/v5/api/utils/transactions/"><span class="arrow">&larr;</span>Transactions</a></div>
<div class="nav next"><a href="/v5/api/utils/wordlists/">Wordlists<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -58,7 +58,7 @@
<div class="nav previous"><a href="/v5/api/utils/web/"><span class="arrow">&larr;</span>Web Utilities</a></div>
<div class="nav next"><a href="/v5/api/other/">Other Libraries<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -180,7 +180,7 @@ return(0, #myContract)
<div class="nav previous"><a href="/v5/cli/ethers/"><span class="arrow">&larr;</span>Sandbox Utility</a></div>
<div class="nav next"><a href="/v5/cli/ens/">Ethereum Naming Service<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -94,7 +94,7 @@ OTHER OPTIONS
<div class="nav previous"><a href="/v5/cli/asm/"><span class="arrow">&larr;</span>Assembler</a></div>
<div class="nav next"><a href="/v5/cli/typescript/">TypeScript<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -209,7 +209,7 @@ homestead&gt;</div><div class="definition container-box warning"><div class="ter
<div class="nav previous"><a href="/v5/cli/"><span class="arrow">&larr;</span>Command Line Interfaces</a></div>
<div class="nav next"><a href="/v5/cli/asm/">Assembler<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -23,7 +23,7 @@
<div class="nav previous"><a href="/v5/api/experimental/"><span class="arrow">&larr;</span>Experimental</a></div>
<div class="nav next"><a href="/v5/cli/ethers/">Sandbox Utility<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -102,7 +102,7 @@
<div class="nav previous"><a href="/v5/cli/typescript/"><span class="arrow">&larr;</span>TypeScript</a></div>
<div class="nav next"><a href="/v5/cookbook/">Cookbook<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -42,7 +42,7 @@ OTHER OPTIONS
<div class="nav previous"><a href="/v5/cli/ens/"><span class="arrow">&larr;</span>Ethereum Naming Service</a></div>
<div class="nav next"><a href="/v5/cli/plugin/">Making Your Own<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -27,25 +27,26 @@
<p>This can be acomplished by using the following function:</p>
<div class="code-title"><div>Automatically Refresh on Network Change</div></div><div class="code">// Force page refreshes on network changes
{
// The "any" network will allow spontaneous network changes
const provider = new ethers.providers.Web3Provider(window.ethereum, "any");
<div class="code-title"><div>Automatically Refresh on Network Change</div></div><div class="code"><span class="comment">// Force page refreshes on network changes
</span>{
<span class="comment"> // The "any" network will allow spontaneous network changes
</span> const provider = new ethers.providers.Web3Provider(window.ethereum, "any");
provider.on("network", (newNetwork, oldNetwork) =&gt; {
// When a Provider makes its initial connection, it emits a "network"
// event with a null oldNetwork along with the newNetwork. So, if the
// oldNetwork exists, it represents a changing network
if (oldNetwork) {
<span class="comment"> // When a Provider makes its initial connection, it emits a "network"
</span><span class="comment"> // event with a null oldNetwork along with the newNetwork. So, if the
</span><span class="comment"> // oldNetwork exists, it represents a changing network
</span> if (oldNetwork) {
window.location.reload();
}
});
}</div>
}
</div>
<div class="footer">
<div class="nav previous"><!--PREV_LINK--></div>
<div class="nav next"><!--NEXT_LINK--></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -20,14 +20,6 @@ Example Log Matching
```javascript
// <hide>
const tokenAddress = ethers.constants.AddressZero;
const myAddress = ethers.constants.AddressZero;
const myOtherAddress = ethers.constants.AddressZero;
const id = ethers.utils.id;
const hexZeroPad = ethers.utils.hexZeroPad;
// </hide>
// Short example of manually creating filters for an ERC-20
// Transfer event.
//
@ -90,14 +82,6 @@ To simplify life, ..., explain here, the contract API
```javascript
// <hide>
const tokenAddress = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; // DAI
const myAddress = "0x8ba1f109551bD432803012645Ac136ddd64DBA72";
const otherAddress = "0xEA517D5a070e6705Cc5467858681Ed953d285Eb9";
const provider = ethers.getDefaultProvider();
const Contract = ethers.Contract;
// </hide>
const abi = [
"event Transfer(address indexed src, address indexed dst, uint val)"
];
@ -106,19 +90,49 @@ const contract = new Contract(tokenAddress, abi, provider);
// List all token transfers *from* myAddress
contract.filters.Transfer(myAddress)
//!
// {
// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
// ]
// }
// List all token transfers *to* myAddress:
contract.filters.Transfer(null, myAddress)
//!
// {
// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// null,
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
// ]
// }
// List all token transfers *from* myAddress *to* otherAddress:
contract.filters.Transfer(myAddress, otherAddress)
//!
// {
// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
// '0x000000000000000000000000ea517d5a070e6705cc5467858681ed953d285eb9'
// ]
// }
// List all token transfers *to* myAddress OR otherAddress:
contract.filters.Transfer(null, [ myAddress, otherAddress ])
//!
// {
// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// null,
// [
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
// '0x000000000000000000000000ea517d5a070e6705cc5467858681ed953d285eb9'
// ]
// ]
// }
```
### Other Things? TODO

@ -34,40 +34,32 @@
<p>If a topic-set is an array of topics, a log topic in that position must match any <b>one</b> of topics (i.e. the topic in thie position are <code class="inline">OR</code>-ed).</p>
<table class="table full"><tr><td align="center" width="25%"><b>Topic-Sets</b></td><td align="center" colspan="3" width="75%"><b>Matching Logs</b></td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A ]</td><td align="left" colspan="3" rowspan="2" width="75%">topic[0] = A</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ null, B ]</td><td align="left" colspan="3" rowspan="3" width="75%">topic[1] = B</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ null, [ B ] ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ null, [ B ], null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, B ]</td><td align="left" colspan="3" rowspan="3" width="75%">(topic[0] = A) <b>AND</b> (topic[1] = B)</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, [ B ] ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, [ B ], null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ [ A, B ] ]</td><td align="left" colspan="3" rowspan="2" width="75%">(topic[0] = A) <b>OR</b> (topic[0] = B)</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ [ A, B ], null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ [ A, B ], [ C, D ] ]</td><td align="left" colspan="3" width="75%"><b>[</b> (topic[0] = A) <b>OR</b> (topic[0] = B) <b>]</b> <b>AND</b> <b>[</b> (topic[1] = C) <b>OR</b> (topic[1] = D) <b>]</b></td><td class="fix">&nbsp;</td></tr><tr><td class="table-title" colspan="4">Example Log Matching</td><td class="fix">&nbsp;</td></tr></table><div class="code-title"><div>ERC-20 Transfer Filter Examples</div></div><div class="code">// &lt;hide&gt;
const tokenAddress = ethers.constants.AddressZero;
const myAddress = ethers.constants.AddressZero;
const myOtherAddress = ethers.constants.AddressZero;
const id = ethers.utils.id;
const hexZeroPad = ethers.utils.hexZeroPad;
// &lt;/hide&gt;
// Short example of manually creating filters for an ERC-20
// Transfer event.
//
// Most users should generally use the Contract API to
// compute filters, as it is much simpler, but this is
// provided as an illustration for those curious. See
// below for examples of the equivalent Contract API.
// ERC-20:
// Transfer(address indexed src, address indexed dst, uint val)
//
// -------------------^
// ----------------------------------------^
//
// Notice that only *src* and *dst* are *indexed*, so ONLY they
// qualify for filtering.
//
// Also, note that in Solidity an Event uses the first topic to
// identify the Event name; for Transfer this will be:
// id("Transfer(address,address,uint256)")
//
// Other Notes:
// - A topic must be 32 bytes; so shorter types must be padded
// List all token transfers *from* myAddress
filter = {
<table class="table full"><tr><td align="center" width="25%"><b>Topic-Sets</b></td><td align="center" colspan="3" width="75%"><b>Matching Logs</b></td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A ]</td><td align="left" colspan="3" rowspan="2" width="75%">topic[0] = A</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ null, B ]</td><td align="left" colspan="3" rowspan="3" width="75%">topic[1] = B</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ null, [ B ] ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ null, [ B ], null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, B ]</td><td align="left" colspan="3" rowspan="3" width="75%">(topic[0] = A) <b>AND</b> (topic[1] = B)</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, [ B ] ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ A, [ B ], null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ [ A, B ] ]</td><td align="left" colspan="3" rowspan="2" width="75%">(topic[0] = A) <b>OR</b> (topic[0] = B)</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ [ A, B ], null ]</td><td class="fix">&nbsp;</td></tr><tr><td align="center" width="25%">[ [ A, B ], [ C, D ] ]</td><td align="left" colspan="3" width="75%"><b>[</b> (topic[0] = A) <b>OR</b> (topic[0] = B) <b>]</b> <b>AND</b> <b>[</b> (topic[1] = C) <b>OR</b> (topic[1] = D) <b>]</b></td><td class="fix">&nbsp;</td></tr><tr><td class="table-title" colspan="4">Example Log Matching</td><td class="fix">&nbsp;</td></tr></table><div class="code-title"><div>ERC-20 Transfer Filter Examples</div></div><div class="code"><span class="comment">// Short example of manually creating filters for an ERC-20
</span><span class="comment">// Transfer event.
</span>//
<span class="comment">// Most users should generally use the Contract API to
</span><span class="comment">// compute filters, as it is much simpler, but this is
</span><span class="comment">// provided as an illustration for those curious. See
</span><span class="comment">// below for examples of the equivalent Contract API.
</span>
<span class="comment">// ERC-20:
</span><span class="comment">// Transfer(address indexed src, address indexed dst, uint val)
</span>//
<span class="comment">// -------------------^
</span><span class="comment">// ----------------------------------------^
</span>//
<span class="comment">// Notice that only *src* and *dst* are *indexed*, so ONLY they
</span><span class="comment">// qualify for filtering.
</span>//
<span class="comment">// Also, note that in Solidity an Event uses the first topic to
</span><span class="comment">// identify the Event name; for Transfer this will be:
</span><span class="comment">// id("Transfer(address,address,uint256)")
</span>//
<span class="comment">// Other Notes:
</span><span class="comment">// - A topic must be 32 bytes; so shorter types must be padded
</span>
<span class="comment">// List all token transfers *from* myAddress
</span>filter = {
address: tokenAddress,
topics: [
id("Transfer(address,address,uint256)"),
@ -75,8 +67,8 @@ filter = {
]
}
// List all token transfers *to* myAddress:
filter = {
<span class="comment">// List all token transfers *to* myAddress:
</span>filter = {
address: tokenAddress,
topics: [
id("Transfer(address,address,uint256)"),
@ -85,8 +77,8 @@ filter = {
]
}
// List all token transfers *to* myAddress or myOtherAddress:
filter = {
<span class="comment">// List all token transfers *to* myAddress or myOtherAddress:
</span>filter = {
address: tokenAddress,
topics: [
id("Transfer(address,address,uint256)"),
@ -96,37 +88,61 @@ filter = {
hexZeroPad(myOtherAddress, 32),
]
]
}</div><p>To simplify life, ..., explain here, the contract API</p>
}
</div><p>To simplify life, ..., explain here, the contract API</p>
<div class="code-title"><div>ERC-20 Contract Filter Examples</div></div><div class="code">// &lt;hide&gt;
const tokenAddress = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; // DAI
const myAddress = "0x8ba1f109551bD432803012645Ac136ddd64DBA72";
const otherAddress = "0xEA517D5a070e6705Cc5467858681Ed953d285Eb9";
const provider = ethers.getDefaultProvider();
const Contract = ethers.Contract;
// &lt;/hide&gt;
const abi = [
<div class="code-title"><div>ERC-20 Contract Filter Examples</div></div><div class="code">const abi = [
"event Transfer(address indexed src, address indexed dst, uint val)"
];
const contract = new Contract(tokenAddress, abi, provider);
// List all token transfers *from* myAddress
contract.filters.Transfer(myAddress)
//!
// List all token transfers *to* myAddress:
contract.filters.Transfer(null, myAddress)
//!
// List all token transfers *from* myAddress *to* otherAddress:
contract.filters.Transfer(myAddress, otherAddress)
//!
// List all token transfers *to* myAddress OR otherAddress:
contract.filters.Transfer(null, [ myAddress, otherAddress ])
//!</div><a name="events--logs-and-filtering--other-things-todo"></a><h3 class="show-anchors"><div>Other Things? TODO<div class="anchors"><a class="self" href="/v5/concepts/events/#events--logs-and-filtering--other-things-todo"></a></div></div></h3><p>Explain what happens to strings and bytes, how to filter and retain the value</p>
<span class="comment">// List all token transfers *from* myAddress
</span>contract.filters.Transfer(myAddress)
<span class="result ok">// {
</span><span class="result ok">// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span>
<span class="comment">// List all token transfers *to* myAddress:
</span>contract.filters.Transfer(null, myAddress)
<span class="result ok">// {
</span><span class="result ok">// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// null,
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span>
<span class="comment">// List all token transfers *from* myAddress *to* otherAddress:
</span>contract.filters.Transfer(myAddress, otherAddress)
<span class="result ok">// {
</span><span class="result ok">// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
</span><span class="result ok">// '0x000000000000000000000000ea517d5a070e6705cc5467858681ed953d285eb9'
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span>
<span class="comment">// List all token transfers *to* myAddress OR otherAddress:
</span>contract.filters.Transfer(null, [ myAddress, otherAddress ])
<span class="result ok">// {
</span><span class="result ok">// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// null,
</span><span class="result ok">// [
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
</span><span class="result ok">// '0x000000000000000000000000ea517d5a070e6705cc5467858681ed953d285eb9'
</span><span class="result ok">// ]
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span></div><a name="events--logs-and-filtering--other-things-todo"></a><h3 class="show-anchors"><div>Other Things? TODO<div class="anchors"><a class="self" href="/v5/concepts/events/#events--logs-and-filtering--other-things-todo"></a></div></div></h3><p>Explain what happens to strings and bytes, how to filter and retain the value</p>
@ -134,7 +150,7 @@ contract.filters.Transfer(null, [ myAddress, otherAddress ])
<div class="nav previous"><a href="/v5/concepts/"><span class="arrow">&larr;</span>Ethereum Basics</a></div>
<div class="nav next"><a href="/v5/concepts/gas/">Gas<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -27,7 +27,7 @@
<div class="nav previous"><a href="/v5/concepts/events/"><span class="arrow">&larr;</span>Events</a></div>
<div class="nav next"><a href="/v5/concepts/security/">Security<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -26,7 +26,7 @@
<div class="nav previous"><a href="/v5/getting-started/"><span class="arrow">&larr;</span>Getting Started</a></div>
<div class="nav next"><a href="/v5/concepts/events/">Events<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -39,29 +39,30 @@
<p>The scrypt algorithm is designed to be tuned. The main purpose of this is to increase the difficulty as time goes on and computers get faster, but it can also be tuned down in situations where the security is less important.</p>
<div class="code">// Our wallet object
const wallet = Wallet.createRandom();
<div class="code"><span class="comment">// Our wallet object
</span>const wallet = Wallet.createRandom();
// The password to encrypt with
const password = "password123";
<span class="comment">// The password to encrypt with
</span>const password = "password123";
// WARNING: Doing this substantially reduces the security
// of the wallet. This is highly NOT recommended.
// We override the default scrypt.N value, which is used
// to indicate the difficulty to crack this wallet.
const json = wallet.encrypt(password, {
<span class="comment">// WARNING: Doing this substantially reduces the security
</span><span class="comment">// of the wallet. This is highly NOT recommended.
</span>
<span class="comment">// We override the default scrypt.N value, which is used
</span><span class="comment">// to indicate the difficulty to crack this wallet.
</span>const json = wallet.encrypt(password, {
scrypt: {
// The number must be a power of 2 (default: 131072)
N: 64
<span class="comment"> // The number must be a power of 2 (default: 131072)
</span> N: 64
}
});</div>
});
</div>
<div class="footer">
<div class="nav previous"><a href="/v5/concepts/gas/"><span class="arrow">&larr;</span>Gas</a></div>
<div class="nav next"><a href="/v5/api/">Application Programming Interface<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -57,7 +57,7 @@
<div class="nav previous"><a href="/v5/testing/"><span class="arrow">&larr;</span>Testing</a></div>
<div class="nav next"><a href="/v5/documentation/">Flatworm Docs<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/cli/plugin/"><span class="arrow">&larr;</span>Making Your Own</a></div>
<div class="nav next"><a href="/v5/migration/">Migration Guide<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -229,22 +229,15 @@ foo
```
```javascript
// <hide>
const url = require("url");
// </hide>
url.parse("https://www.ricmoo.com/").protocol
//!
// 'https:'
url.parse(45)
//! error
// Error: The "url" argument must be of type string. Received type number
// You want to assign (doesn't emit eval) AND display the value
const foo = 4 + 5;
// <hide>
foo
// </hide>
//!
// 9
```
### Languages

@ -199,22 +199,16 @@ const foo = 4 + 5;
// &lt;hide&gt;
foo
// &lt;/hide&gt;
//!</div><div class="code-title"><div>Result of Code Example</div></div><div class="code">// &lt;hide&gt;
const url = require("url");
// &lt;/hide&gt;
url.parse("https://www.ricmoo.com/").protocol
//!
//!</div><div class="code-title"><div>Result of Code Example</div></div><div class="code">url.parse("https://www.ricmoo.com/").protocol
<span class="result ok">// 'https:'
</span>
url.parse(45)
//! error
// You want to assign (doesn't emit eval) AND display the value
const foo = 4 + 5;
// &lt;hide&gt;
foo
// &lt;/hide&gt;
//!</div><a name="flatworm-docs--flatworm--code--languages"></a><h3 class="show-anchors"><div>Languages<div class="anchors"><a class="self" href="/v5/documentation/#flatworm-docs--flatworm--code--languages"></a></div></div></h3><p>The language can be specified using the <a href="/v5/documentation/#flatworm--ext-lang">@lang extension</a>.</p>
<span class="result error">// Error: The "url" argument must be of type string. Received type number
</span>
<span class="comment">// You want to assign (doesn't emit eval) AND display the value
</span>const foo = 4 + 5;
<span class="result ok">// 9
</span></div><a name="flatworm-docs--flatworm--code--languages"></a><h3 class="show-anchors"><div>Languages<div class="anchors"><a class="self" href="/v5/documentation/#flatworm-docs--flatworm--code--languages"></a></div></div></h3><p>The language can be specified using the <a href="/v5/documentation/#flatworm--ext-lang">@lang extension</a>.</p>
<table class="table minimal"><tr><td align="center"><b>Language</b></td><td align="center"><b>Notes</b></td><td class="fix">&nbsp;</td></tr><tr><td align="center">javascript</td><td align="left">Syntax highlights and <a href="/v5/documentation/#flatworm--code-eval">evaluates</a> the JavaScipt</td><td class="fix">&nbsp;</td></tr><tr><td align="center">script</td><td align="left">Same as <code class="inline">javascript</code>, but does not evaluate the results</td><td class="fix">&nbsp;</td></tr><tr><td align="center">shell</td><td align="left">Shell scripts or command-line</td><td class="fix">&nbsp;</td></tr><tr><td align="center">text</td><td align="left">Plain text with no syntax highlighting</td><td class="fix">&nbsp;</td></tr></table><a name="flatworm--table"></a><a name="flatworm-docs--flatworm--table"></a><h2 class="show-anchors"><div>Tables<div class="anchors"><a class="self" href="/v5/documentation/#flatworm--table"></a></div></div></h2><p>The table directive consumes the entire body up until the next directive. To terminate a table early to begin a text block, use a <b>_null:</b> directive.</p>
@ -287,7 +281,7 @@ $bottom: This just represents an example of
<div class="nav previous"><a href="/v5/contributing/"><span class="arrow">&larr;</span>Contributing and Hacking</a></div>
<div class="nav next"><a href="/v5/license/">License and Copyright<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -65,21 +65,21 @@ const signer = provider.getSigner()
```javascript
// Look up the current block number
provider.getBlockNumber()
//!
// { Promise: 10253799 }
// Get the balance of an account (by address or ENS name)
balance = await provider.getBalance("ethers.eth")
//! async balance
// { BigNumber: "2337132817842795605" }
// Often you will need to format the output for the user
// which prefer to see values in ether (instead of wei)
ethers.utils.formatEther(balance)
//!
// '2.337132817842795605'
// Or if a user enters a string in an input field, you may need
// to convert it from ether (as a string) to wei (as a BigNumber)
ethers.utils.parseEther("1.0")
//!
// { BigNumber: "1000000000000000000" }
```
### Writing to the Blockchain
@ -123,33 +123,21 @@ const daiContract = new ethers.Contract(daiAddress, daiAbi, provider);
### Read-Only Methods
```javascript
// <hide>
const daiAbi = [
// Some simple details about the token
"function name() view returns (string)",
"function symbol() view returns (string)",
// Get the account balance
"function balanceOf(address) view returns (uint)",
];
const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provider);
// </hide>
// Get the ERC-20 token name
daiContract.name()
//!
// { Promise: 'Dai Stablecoin' }
// Get the ERC-20 token synbol (for tickers and UIs)
daiContract.symbol()
//!
// { Promise: 'DAI' }
// Get the balance of an address
balance = await daiContract.balanceOf("ricmoo.firefly.eth")
//! async balance
// { BigNumber: "7712595125722568213383" }
// Format the DAI for displaying to the user
ethers.utils.formatUnits(balance, 18)
//!
// '7712.595125722568213383'
```
### State Changing Methods
@ -170,14 +158,6 @@ tx = daiWithSigner.transfer("ricmoo.firefly.eth", dai);
### Listening to Events
```javascript
// <hide>
const daiAbi = [
"event Transfer(address indexed, address indexed, uint256)"
];
const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provider);
const formatEther = ethers.utils.formatEther;
// </hide>
// Receive an event when ANY transfer occurs
daiContract.on("Transfer", (from, to, amount, event) => {
console.log(`${ from } sent ${ formatEther(amount) } to ${ to}`);
@ -189,56 +169,108 @@ daiContract.on("Transfer", (from, to, amount, event) => {
// A filter for when a specific address receives tokens
myAddress = "0x8ba1f109551bD432803012645Ac136ddd64DBA72";
filter = daiContract.filters.Transfer(null, myAddress)
// <hide>
filter
// </hide>
//!
// {
// address: 'dai.tokens.ethers.eth',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// null,
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
// ]
// }
// Receive an event when that filter occurs
daiContract.on(filter, (from, to, amount, event) => {
// The to will always be "address"
console.log(`I got ${ formatEther(amount) } from ${ from }.`);
});
// <hide>
// Don't want to block the docs from compiling...
daiContract.removeAllListeners();
// </hide>
```
### Query Historic Events
```javascript
// <hide>
const signer = new ethers.VoidSigner("0x8ba1f109551bD432803012645Ac136ddd64DBA72");
const daiAbi = [
"event Transfer(address indexed, address indexed, uint256)"
];
const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provider);
//!
// </hide>
// Get the address of the Signer
myAddress = await signer.getAddress()
//! async myAddress
// '0x8ba1f109551bD432803012645Ac136ddd64DBA72'
// Filter for all token transfers to me
filterFrom = daiContract.filters.Transfer(myAddress, null);
// <hide>
filterFrom
// </hide>
//!
// {
// address: 'dai.tokens.ethers.eth',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
// ]
// }
// Filter for all token transfers from me
filterTo = daiContract.filters.Transfer(null, myAddress);
// <hide>
filterTo
// </hide>
//!
// {
// address: 'dai.tokens.ethers.eth',
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// null,
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
// ]
// }
// List all transfers sent from me a specific block range
daiContract.queryFilter(filterFrom, 9843470, 9843480)
//!
// { Promise: [
// {
// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
// args: [
// '0x8ba1f109551bD432803012645Ac136ddd64DBA72',
// '0x8B3765eDA5207fB21690874B722ae276B96260E0',
// { BigNumber: "4750000000000000000" }
// ],
// blockHash: '0x8462eb2fbcef5aa4861266f59ad5f47b9aa6525d767d713920fdbdfb6b0c0b78',
// blockNumber: 9843476,
// data: '0x00000000000000000000000000000000000000000000000041eb63d55b1b0000',
// decode: [Function],
// event: 'Transfer',
// eventSignature: 'Transfer(address,address,uint256)',
// getBlock: [Function],
// getTransaction: [Function],
// getTransactionReceipt: [Function],
// logIndex: 69,
// removeListener: [Function],
// removed: false,
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
// '0x0000000000000000000000008b3765eda5207fb21690874b722ae276b96260e0'
// ],
// transactionHash: '0x1be23554545030e1ce47391a41098a46ff426382ed740db62d63d7676ff6fcf1',
// transactionIndex: 81
// },
// {
// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
// args: [
// '0x8ba1f109551bD432803012645Ac136ddd64DBA72',
// '0x00De4B13153673BCAE2616b67bf822500d325Fc3',
// { BigNumber: "250000000000000000" }
// ],
// blockHash: '0x8462eb2fbcef5aa4861266f59ad5f47b9aa6525d767d713920fdbdfb6b0c0b78',
// blockNumber: 9843476,
// data: '0x00000000000000000000000000000000000000000000000003782dace9d90000',
// decode: [Function],
// event: 'Transfer',
// eventSignature: 'Transfer(address,address,uint256)',
// getBlock: [Function],
// getTransaction: [Function],
// getTransactionReceipt: [Function],
// logIndex: 70,
// removeListener: [Function],
// removed: false,
// topics: [
// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
// '0x00000000000000000000000000de4b13153673bcae2616b67bf822500d325fc3'
// ],
// transactionHash: '0x1be23554545030e1ce47391a41098a46ff426382ed740db62d63d7676ff6fcf1',
// transactionIndex: 81
// }
// ] }
//
// The following have had the results omitted due to the
@ -256,16 +288,11 @@ Signing Messages
----------------
```javascript
// <hide>
const signer = ethers.Wallet.createRandom();
//!
// </hide>
// To sign a simple string, which can often be used for
// logging into a service, such as CryptoKitties simply
// pass the string in.
signature = await signer.signMessage("Hello World");
//! async signature
// '0xe4f2a4e1a867a4757bd1ef7d0d5b9bf552c013f4598356e9326106d74d47292412efc81cd3b97a7e298f1b78b973c376d32ae0bdca811514e1258360a00c1bb71c'
//
// A common case is also signing a hash, which is 32
@ -278,10 +305,10 @@ message = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
// This array representation is 32 bytes long
messageBytes = ethers.utils.arrayify(message);
//!
// Uint8Array [ 221, 242, 82, 173, 27, 226, 200, 155, 105, 194, 176, 104, 252, 55, 141, 170, 149, 43, 167, 241, 99, 196, 161, 22, 40, 245, 90, 77, 245, 35, 179, 239 ]
// To sign a hash, you most often want to sign the bytes
signature = await signer.signMessage(messageBytes)
//! async signature
// '0x4542871f6c9b776c7ca4f23d0435b4e98eaf9fc25060162bf1c43420d8ce202c2d12a5e1c1dbbbde145e5ee8b1c243c931d3e2d93394f73081800155b2cc480b1c'
```

@ -21,7 +21,9 @@
<div class="code">/home/ricmoo&gt; npm install --save ethers@next</div><a name="importing"></a><a name="getting-started--importing"></a><h2 class="show-anchors"><div>Importing<div class="anchors"><a class="self" href="/v5/getting-started/#importing"></a></div></div></h2>
<a name="getting-started--importing--node-js"></a><h3 class="show-anchors"><div>Node.js<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--importing--node-js"></a></div></div></h3>
<div class="code-title"><div>node.js require</div></div><div class="code">const { ethers } = require("ethers");</div><div class="code-title"><div>ES6 or TypeScript</div></div><div class="code">import { ethers } from "ethers";</div><a name="getting-started--importing--web-browser"></a><h3 class="show-anchors"><div>Web Browser<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--importing--web-browser"></a></div></div></h3><p>It is generally better practice (for security reasons) to copy the <a href="https://cdn.ethers.io/lib/ethers-5.0.esm.min.js">ethers library</a> to your own webserver and serve it yourself.</p>
<div class="code-title"><div>node.js require</div></div><div class="code">const { ethers } = require("ethers");
</div><div class="code-title"><div>ES6 or TypeScript</div></div><div class="code">import { ethers } from "ethers";
</div><a name="getting-started--importing--web-browser"></a><h3 class="show-anchors"><div>Web Browser<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--importing--web-browser"></a></div></div></h3><p>It is generally better practice (for security reasons) to copy the <a href="https://cdn.ethers.io/lib/ethers-5.0.esm.min.js">ethers library</a> to your own webserver and serve it yourself.</p>
<p>For quick demos or prototyping though, it can be loaded in your Web Applications from our CDN.</p>
@ -33,37 +35,40 @@
<p><ul><li>A connection to the Ethereum network (a <a href="/v5/api/providers/provider/">Provider</a>) </li><li>Holds your private key and can sign thing (a <a href="/v5/api/signer/#Signer">Signer</a>) </li></ul></p>
<div class="code-title"><div>Connecting to Metamask</div></div><div class="code">// A Web3Provider wraps a standard Web3 provider, which is
// what Metamask injects as window.ethereum into each page
const provider = new ethers.providers.Web3Provider(window.ethereum)
<div class="code-title"><div>Connecting to Metamask</div></div><div class="code"><span class="comment">// A Web3Provider wraps a standard Web3 provider, which is
</span><span class="comment">// what Metamask injects as window.ethereum into each page
</span>const provider = new ethers.providers.Web3Provider(window.ethereum)
// The Metamask plugin also allows signing transactions to
// send ether and pay to change state within the blockchain.
// For this, we need the account signer...
const signer = provider.getSigner()</div><a name="getting-started--querying"></a><a name="getting-started--getting-started--connecting--getting-started--querying"></a><h3 class="show-anchors"><div>Querying the Blockchain<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--querying"></a></div></div></h3><p>Once you have a <a href="/v5/api/providers/provider/">Provider</a>, you have a read-only connection to the blockchain, which can be used to query the current state, fetch historic logs, look up deployed code and so on.</p>
<span class="comment">// The Metamask plugin also allows signing transactions to
</span><span class="comment">// send ether and pay to change state within the blockchain.
</span><span class="comment">// For this, we need the account signer...
</span>const signer = provider.getSigner()
</div><a name="getting-started--querying"></a><a name="getting-started--getting-started--connecting--getting-started--querying"></a><h3 class="show-anchors"><div>Querying the Blockchain<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--querying"></a></div></div></h3><p>Once you have a <a href="/v5/api/providers/provider/">Provider</a>, you have a read-only connection to the blockchain, which can be used to query the current state, fetch historic logs, look up deployed code and so on.</p>
<div class="code-title"><div>Basic Queries</div></div><div class="code">// Look up the current block number
provider.getBlockNumber()
//!
// Get the balance of an account (by address or ENS name)
balance = await provider.getBalance("ethers.eth")
//! async balance
// Often you will need to format the output for the user
// which prefer to see values in ether (instead of wei)
ethers.utils.formatEther(balance)
//!
// Or if a user enters a string in an input field, you may need
// to convert it from ether (as a string) to wei (as a BigNumber)
ethers.utils.parseEther("1.0")
//!</div><a name="getting-started--sending"></a><a name="getting-started--getting-started--connecting--getting-started--sending"></a><h3 class="show-anchors"><div>Writing to the Blockchain<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--sending"></a></div></div></h3>
<div class="code-title"><div>Sending Ether</div></div><div class="code">// Send 1 ether to an ens name.
const tx = signer.sendTransaction({
<div class="code-title"><div>Basic Queries</div></div><div class="code"><span class="comment">// Look up the current block number
</span>provider.getBlockNumber()
<span class="result ok">// { Promise: 10253799 }
</span>
<span class="comment">// Get the balance of an account (by address or ENS name)
</span>balance = await provider.getBalance("ethers.eth")
<span class="result ok">// { BigNumber: "2337132817842795605" }
</span>
<span class="comment">// Often you will need to format the output for the user
</span><span class="comment">// which prefer to see values in ether (instead of wei)
</span>ethers.utils.formatEther(balance)
<span class="result ok">// '2.337132817842795605'
</span>
<span class="comment">// Or if a user enters a string in an input field, you may need
</span><span class="comment">// to convert it from ether (as a string) to wei (as a BigNumber)
</span>ethers.utils.parseEther("1.0")
<span class="result ok">// { BigNumber: "1000000000000000000" }
</span></div><a name="getting-started--sending"></a><a name="getting-started--getting-started--connecting--getting-started--sending"></a><h3 class="show-anchors"><div>Writing to the Blockchain<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--sending"></a></div></div></h3>
<div class="code-title"><div>Sending Ether</div></div><div class="code"><span class="comment">// Send 1 ether to an ens name.
</span>const tx = signer.sendTransaction({
to: "ricmoo.firefly.eth",
value: ethers.utils.parseEther("1.0")
});</div><a name="getting-started--contracts"></a><a name="getting-started--getting-started--contracts"></a><h2 class="show-anchors"><div>Contracts<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--contracts"></a></div></div></h2><p>A Contract is an abstraction of program code which lives on the Ethereum blockchain.</p>
});
</div><a name="getting-started--contracts"></a><a name="getting-started--getting-started--contracts"></a><h2 class="show-anchors"><div>Contracts<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--contracts"></a></div></div></h2><p>A Contract is an abstraction of program code which lives on the Ethereum blockchain.</p>
<p>The <a href="/v5/api/contract/contract/">Contract</a> object makes it easier to use an on-chain Contract as a normal JavaScript object, with the method all mapped to encoding and decoding data for you.</p>
@ -77,173 +82,206 @@ const tx = signer.sendTransaction({
<p>An ABI often comes from the Solidity or Vyper compiler, but may also be placed in the code easily using the Human-Readable ABI, which the following examples use.</p>
<div class="code-title"><div>Connecting to the DAI Contract</div></div><div class="code">// We can use an ENS name for the contract address
const daiAddress = "dai.tokens.ethers.eth";
<div class="code-title"><div>Connecting to the DAI Contract</div></div><div class="code"><span class="comment">// We can use an ENS name for the contract address
</span>const daiAddress = "dai.tokens.ethers.eth";
// The ERC-20 Contract ABI, which is a common contract interface
// for tokens (this is the Human-Readable ABI format)
const daiAbi = [
// Some simple details about the token
"function name() view returns (string)",
<span class="comment">// The ERC-20 Contract ABI, which is a common contract interface
</span><span class="comment">// for tokens (this is the Human-Readable ABI format)
</span>const daiAbi = [
<span class="comment"> // Some simple details about the token
</span> "function name() view returns (string)",
"function symbol() view returns (string)",
// Get the account balance
"function balanceOf(address) view returns (uint)",
<span class="comment"> // Get the account balance
</span> "function balanceOf(address) view returns (uint)",
// Send some of your tokens to someone else
"function transfer(address to, uint amount)",
<span class="comment"> // Send some of your tokens to someone else
</span> "function transfer(address to, uint amount)",
// An event triggered whenever anyone transfers to someone else
"event Transfer(address indexed from, address indexed to, uint amount)"
<span class="comment"> // An event triggered whenever anyone transfers to someone else
</span> "event Transfer(address indexed from, address indexed to, uint amount)"
];
// The Contract object
const daiContract = new ethers.Contract(daiAddress, daiAbi, provider);</div><a name="getting-started--reading"></a><a name="getting-started--getting-started--contracts--getting-started--reading"></a><h3 class="show-anchors"><div>Read-Only Methods<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--reading"></a></div></div></h3>
<div class="code-title"><div>Querying the DAI Contract</div></div><div class="code">// &lt;hide&gt;
const daiAbi = [
// Some simple details about the token
"function name() view returns (string)",
"function symbol() view returns (string)",
<span class="comment">// The Contract object
</span>const daiContract = new ethers.Contract(daiAddress, daiAbi, provider);
</div><a name="getting-started--reading"></a><a name="getting-started--getting-started--contracts--getting-started--reading"></a><h3 class="show-anchors"><div>Read-Only Methods<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--reading"></a></div></div></h3>
<div class="code-title"><div>Querying the DAI Contract</div></div><div class="code"><span class="comment">// Get the ERC-20 token name
</span>daiContract.name()
<span class="result ok">// { Promise: 'Dai Stablecoin' }
</span>
<span class="comment">// Get the ERC-20 token synbol (for tickers and UIs)
</span>daiContract.symbol()
<span class="result ok">// { Promise: 'DAI' }
</span>
<span class="comment">// Get the balance of an address
</span>balance = await daiContract.balanceOf("ricmoo.firefly.eth")
<span class="result ok">// { BigNumber: "7712595125722568213383" }
</span>
<span class="comment">// Format the DAI for displaying to the user
</span>ethers.utils.formatUnits(balance, 18)
<span class="result ok">// '7712.595125722568213383'
</span></div><a name="getting-started--writing"></a><a name="getting-started--getting-started--contracts--getting-started--writing"></a><h3 class="show-anchors"><div>State Changing Methods<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--writing"></a></div></div></h3>
<div class="code-title"><div>Sending DAI</div></div><div class="code"><span class="comment">// The DAI Contract is currently connected to the Provider,
</span><span class="comment">// which is read-only. We need to connect to a Signer, so
</span><span class="comment">// that we can pay to send state-changing transactions.
</span>const daiWithSigner = contract.connect(signer);
// Get the account balance
"function balanceOf(address) view returns (uint)",
];
const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provider);
// &lt;/hide&gt;
<span class="comment">// Each DAI has 18 decimal places
</span>const dai = ethers.utils.parseUnits("1.0", 18);
// Get the ERC-20 token name
daiContract.name()
//!
// Get the ERC-20 token synbol (for tickers and UIs)
daiContract.symbol()
//!
// Get the balance of an address
balance = await daiContract.balanceOf("ricmoo.firefly.eth")
//! async balance
// Format the DAI for displaying to the user
ethers.utils.formatUnits(balance, 18)
//!</div><a name="getting-started--writing"></a><a name="getting-started--getting-started--contracts--getting-started--writing"></a><h3 class="show-anchors"><div>State Changing Methods<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--writing"></a></div></div></h3>
<div class="code-title"><div>Sending DAI</div></div><div class="code">// The DAI Contract is currently connected to the Provider,
// which is read-only. We need to connect to a Signer, so
// that we can pay to send state-changing transactions.
const daiWithSigner = contract.connect(signer);
// Each DAI has 18 decimal places
const dai = ethers.utils.parseUnits("1.0", 18);
// Send 1 DAI to "ricmoo.firefly.eth"
tx = daiWithSigner.transfer("ricmoo.firefly.eth", dai);</div><a name="getting-started--events"></a><a name="getting-started--getting-started--contracts--getting-started--events"></a><h3 class="show-anchors"><div>Listening to Events<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--events"></a></div></div></h3>
<div class="code-title"><div>Listening to Events</div></div><div class="code">// &lt;hide&gt;
const daiAbi = [
"event Transfer(address indexed, address indexed, uint256)"
];
const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provider);
const formatEther = ethers.utils.formatEther;
// &lt;/hide&gt;
// Receive an event when ANY transfer occurs
daiContract.on("Transfer", (from, to, amount, event) =&gt; {
<span class="comment">// Send 1 DAI to "ricmoo.firefly.eth"
</span>tx = daiWithSigner.transfer("ricmoo.firefly.eth", dai);
</div><a name="getting-started--events"></a><a name="getting-started--getting-started--contracts--getting-started--events"></a><h3 class="show-anchors"><div>Listening to Events<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--events"></a></div></div></h3>
<div class="code-title"><div>Listening to Events</div></div><div class="code"><span class="comment">// Receive an event when ANY transfer occurs
</span>daiContract.on("Transfer", (from, to, amount, event) =&gt; {
console.log(`${ from } sent ${ formatEther(amount) } to ${ to}`);
// The event object contains the verbatim log data, the
// EventFragment and functions to fetch the block,
// transaction and receipt and event functions
});
<span class="comment"> // The event object contains the verbatim log data, the
</span><span class="comment"> // EventFragment and functions to fetch the block,
</span><span class="comment"> // transaction and receipt and event functions
</span>});
// A filter for when a specific address receives tokens
myAddress = "0x8ba1f109551bD432803012645Ac136ddd64DBA72";
<span class="comment">// A filter for when a specific address receives tokens
</span>myAddress = "0x8ba1f109551bD432803012645Ac136ddd64DBA72";
filter = daiContract.filters.Transfer(null, myAddress)
// &lt;hide&gt;
filter
// &lt;/hide&gt;
//!
// Receive an event when that filter occurs
daiContract.on(filter, (from, to, amount, event) =&gt; {
// The to will always be "address"
console.log(`I got ${ formatEther(amount) } from ${ from }.`);
<span class="result ok">// {
</span><span class="result ok">// address: 'dai.tokens.ethers.eth',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// null,
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span>
<span class="comment">// Receive an event when that filter occurs
</span>daiContract.on(filter, (from, to, amount, event) =&gt; {
<span class="comment"> // The to will always be "address"
</span> console.log(`I got ${ formatEther(amount) } from ${ from }.`);
});
// &lt;hide&gt;
// Don't want to block the docs from compiling...
daiContract.removeAllListeners();
// &lt;/hide&gt;</div><a name="getting-started--history"></a><a name="getting-started--getting-started--contracts--getting-started--history"></a><h3 class="show-anchors"><div>Query Historic Events<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--history"></a></div></div></h3>
<div class="code-title"><div>Filtering Historic Events</div></div><div class="code">// &lt;hide&gt;
const signer = new ethers.VoidSigner("0x8ba1f109551bD432803012645Ac136ddd64DBA72");
const daiAbi = [
"event Transfer(address indexed, address indexed, uint256)"
];
const daiContract = new ethers.Contract("dai.tokens.ethers.eth", daiAbi, provider);
//!
// &lt;/hide&gt;
// Get the address of the Signer
myAddress = await signer.getAddress()
//! async myAddress
// Filter for all token transfers to me
filterFrom = daiContract.filters.Transfer(myAddress, null);
// &lt;hide&gt;
filterFrom
// &lt;/hide&gt;
//!
// Filter for all token transfers from me
filterTo = daiContract.filters.Transfer(null, myAddress);
// &lt;hide&gt;
filterTo
// &lt;/hide&gt;
//!
// List all transfers sent from me a specific block range
daiContract.queryFilter(filterFrom, 9843470, 9843480)
//!
</div><a name="getting-started--history"></a><a name="getting-started--getting-started--contracts--getting-started--history"></a><h3 class="show-anchors"><div>Query Historic Events<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--history"></a></div></div></h3>
<div class="code-title"><div>Filtering Historic Events</div></div><div class="code"><span class="comment">// Get the address of the Signer
</span>myAddress = await signer.getAddress()
<span class="result ok">// '0x8ba1f109551bD432803012645Ac136ddd64DBA72'
</span>
<span class="comment">// Filter for all token transfers to me
</span>filterFrom = daiContract.filters.Transfer(myAddress, null);
<span class="result ok">// {
</span><span class="result ok">// address: 'dai.tokens.ethers.eth',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span>
<span class="comment">// Filter for all token transfers from me
</span>filterTo = daiContract.filters.Transfer(null, myAddress);
<span class="result ok">// {
</span><span class="result ok">// address: 'dai.tokens.ethers.eth',
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// null,
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72'
</span><span class="result ok">// ]
</span><span class="result ok">// }
</span>
<span class="comment">// List all transfers sent from me a specific block range
</span>daiContract.queryFilter(filterFrom, 9843470, 9843480)
<span class="result ok">// { Promise: [
</span><span class="result ok">// {
</span><span class="result ok">// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
</span><span class="result ok">// args: [
</span><span class="result ok">// '0x8ba1f109551bD432803012645Ac136ddd64DBA72',
</span><span class="result ok">// '0x8B3765eDA5207fB21690874B722ae276B96260E0',
</span><span class="result ok">// { BigNumber: "4750000000000000000" }
</span><span class="result ok">// ],
</span><span class="result ok">// blockHash: '0x8462eb2fbcef5aa4861266f59ad5f47b9aa6525d767d713920fdbdfb6b0c0b78',
</span><span class="result ok">// blockNumber: 9843476,
</span><span class="result ok">// data: '0x00000000000000000000000000000000000000000000000041eb63d55b1b0000',
</span><span class="result ok">// decode: [Function],
</span><span class="result ok">// event: 'Transfer',
</span><span class="result ok">// eventSignature: 'Transfer(address,address,uint256)',
</span><span class="result ok">// getBlock: [Function],
</span><span class="result ok">// getTransaction: [Function],
</span><span class="result ok">// getTransactionReceipt: [Function],
</span><span class="result ok">// logIndex: 69,
</span><span class="result ok">// removeListener: [Function],
</span><span class="result ok">// removed: false,
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
</span><span class="result ok">// '0x0000000000000000000000008b3765eda5207fb21690874b722ae276b96260e0'
</span><span class="result ok">// ],
</span><span class="result ok">// transactionHash: '0x1be23554545030e1ce47391a41098a46ff426382ed740db62d63d7676ff6fcf1',
</span><span class="result ok">// transactionIndex: 81
</span><span class="result ok">// },
</span><span class="result ok">// {
</span><span class="result ok">// address: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
</span><span class="result ok">// args: [
</span><span class="result ok">// '0x8ba1f109551bD432803012645Ac136ddd64DBA72',
</span><span class="result ok">// '0x00De4B13153673BCAE2616b67bf822500d325Fc3',
</span><span class="result ok">// { BigNumber: "250000000000000000" }
</span><span class="result ok">// ],
</span><span class="result ok">// blockHash: '0x8462eb2fbcef5aa4861266f59ad5f47b9aa6525d767d713920fdbdfb6b0c0b78',
</span><span class="result ok">// blockNumber: 9843476,
</span><span class="result ok">// data: '0x00000000000000000000000000000000000000000000000003782dace9d90000',
</span><span class="result ok">// decode: [Function],
</span><span class="result ok">// event: 'Transfer',
</span><span class="result ok">// eventSignature: 'Transfer(address,address,uint256)',
</span><span class="result ok">// getBlock: [Function],
</span><span class="result ok">// getTransaction: [Function],
</span><span class="result ok">// getTransactionReceipt: [Function],
</span><span class="result ok">// logIndex: 70,
</span><span class="result ok">// removeListener: [Function],
</span><span class="result ok">// removed: false,
</span><span class="result ok">// topics: [
</span><span class="result ok">// '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
</span><span class="result ok">// '0x0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba72',
</span><span class="result ok">// '0x00000000000000000000000000de4b13153673bcae2616b67bf822500d325fc3'
</span><span class="result ok">// ],
</span><span class="result ok">// transactionHash: '0x1be23554545030e1ce47391a41098a46ff426382ed740db62d63d7676ff6fcf1',
</span><span class="result ok">// transactionIndex: 81
</span><span class="result ok">// }
</span><span class="result ok">// ] }
</span>
//
// The following have had the results omitted due to the
// number of entries; but they provide some useful examples
<span class="comment">// The following have had the results omitted due to the
</span><span class="comment">// number of entries; but they provide some useful examples
</span>//
<span class="comment">// List all transfers I sent in the last 10,000 blocks
</span>daiContract.queryFilter(filterFrom, -10000)
<span class="comment">// List all transfers ever sent to me
</span>daiContract.queryFilter(filterTo)
</div><a name="getting-started--signing"></a><a name="getting-started--getting-started--signing"></a><h2 class="show-anchors"><div>Signing Messages<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--signing"></a></div></div></h2>
<div class="code-title"><div>Signing Messages</div></div><div class="code"><span class="comment">// To sign a simple string, which can often be used for
</span><span class="comment">// logging into a service, such as CryptoKitties simply
</span><span class="comment">// pass the string in.
</span>signature = await signer.signMessage("Hello World");
<span class="result ok">// '0xe4f2a4e1a867a4757bd1ef7d0d5b9bf552c013f4598356e9326106d74d47292412efc81cd3b97a7e298f1b78b973c376d32ae0bdca811514e1258360a00c1bb71c'
</span>
//
<span class="comment">// A common case is also signing a hash, which is 32
</span><span class="comment">// bytes. It is important to note, that to sign binary
</span><span class="comment">// data it MUST be an Array (or TypedArray)
</span>//
// List all transfers I sent in the last 10,000 blocks
daiContract.queryFilter(filterFrom, -10000)
<span class="comment">// This string is 66 chacacters long
</span>message = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
// List all transfers ever sent to me
daiContract.queryFilter(filterTo)</div><a name="getting-started--signing"></a><a name="getting-started--getting-started--signing"></a><h2 class="show-anchors"><div>Signing Messages<div class="anchors"><a class="self" href="/v5/getting-started/#getting-started--signing"></a></div></div></h2>
<div class="code-title"><div>Signing Messages</div></div><div class="code">// &lt;hide&gt;
const signer = ethers.Wallet.createRandom();
//!
// &lt;/hide&gt;
// To sign a simple string, which can often be used for
// logging into a service, such as CryptoKitties simply
// pass the string in.
signature = await signer.signMessage("Hello World");
//! async signature
//
// A common case is also signing a hash, which is 32
// bytes. It is important to note, that to sign binary
// data it MUST be an Array (or TypedArray)
//
// This string is 66 chacacters long
message = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
// This array representation is 32 bytes long
messageBytes = ethers.utils.arrayify(message);
//!
// To sign a hash, you most often want to sign the bytes
signature = await signer.signMessage(messageBytes)
//! async signature</div>
<span class="comment">// This array representation is 32 bytes long
</span>messageBytes = ethers.utils.arrayify(message);
<span class="result ok">// Uint8Array [ 221, 242, 82, 173, 27, 226, 200, 155, 105, 194, 176, 104, 252, 55, 141, 170, 149, 43, 167, 241, 99, 196, 161, 22, 40, 245, 90, 77, 245, 35, 179, 239 ]
</span>
<span class="comment">// To sign a hash, you most often want to sign the bytes
</span>signature = await signer.signMessage(messageBytes)
<span class="result ok">// '0x4542871f6c9b776c7ca4f23d0435b4e98eaf9fc25060162bf1c43420d8ce202c2d12a5e1c1dbbbde145e5ee8b1c243c931d3e2d93394f73081800155b2cc480b1c'
</span></div>
<div class="footer">
<div class="nav previous"><a href="/v5/"><span class="arrow">&larr;</span>Documentation</a></div>
<div class="nav next"><a href="/v5/concepts/">Ethereum Basics<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -46,7 +46,7 @@
<div class="nav previous"><!--PREV_LINK--></div>
<div class="nav next"><!--NEXT_LINK--></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -32,7 +32,7 @@
<div class="nav previous"><!--PREV_LINK--></div>
<div class="nav next"><a href="/v5/getting-started/">Getting Started<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -32,7 +32,7 @@
<div class="nav previous"><a href="/v5/documentation/"><span class="arrow">&larr;</span>Flatworm Docs</a></div>
<div class="nav next"><!--NEXT_LINK--></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -20,29 +20,32 @@
<a name="migration-v4--bignumber"></a><h2 class="show-anchors"><div>BigNumber<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--bignumber"></a></div></div></h2>
<a name="migration-v4--bignumber--namespace"></a><h3 class="show-anchors"><div>Namespace<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--bignumber--namespace"></a></div></div></h3><p>Since <a href="/v5/api/utils/bignumber/">BigNumber</a> is used quite frequently, it has been moved to the top level of the umbrella package.</p>
<div class="code">// v4
ethers.utils.BigNumber
<div class="code"><span class="comment">// v4
</span>ethers.utils.BigNumber
ethers.utils.BigNumberish
// v5
ethers.BigNumber
ethers.BigNumberish</div><a name="migration-v4--bignumber--creating-instances"></a><h3 class="show-anchors"><div>Creating Instances<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--bignumber--creating-instances"></a></div></div></h3><p>The <code class="inline">bigNumberify</code> 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 <code class="inline">from</code> class method.</p>
<span class="comment">// v5
</span>ethers.BigNumber
ethers.BigNumberish
</div><a name="migration-v4--bignumber--creating-instances"></a><h3 class="show-anchors"><div>Creating Instances<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--bignumber--creating-instances"></a></div></div></h3><p>The <code class="inline">bigNumberify</code> 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 <code class="inline">from</code> class method.</p>
<div class="code">// v4
new ethers.utils.BigNumber(someValue)
<div class="code"><span class="comment">// v4
</span>new ethers.utils.BigNumber(someValue)
ethers.utils.bigNumberify(someValue);
// v5
// - Constructor is private
// - Removed `bigNumberify`
ethers.BigNumber.from(someValue)</div><a name="migration-v4--contracts"></a><h2 class="show-anchors"><div>Contracts<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--contracts"></a></div></div></h2>
<div class="code">// @TODO</div><a name="migration-v4--errors"></a><h2 class="show-anchors"><div>Errors<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--errors"></a></div></div></h2>
<span class="comment">// v5
</span><span class="comment">// - Constructor is private
</span><span class="comment">// - Removed `bigNumberify`
</span>ethers.BigNumber.from(someValue)
</div><a name="migration-v4--contracts"></a><h2 class="show-anchors"><div>Contracts<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--contracts"></a></div></div></h2>
<div class="code"><span class="comment">// @TODO
</span></div><a name="migration-v4--errors"></a><h2 class="show-anchors"><div>Errors<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--errors"></a></div></div></h2>
<a name="migration-v4--errors--namespace"></a><h3 class="show-anchors"><div>Namespace<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--errors--namespace"></a></div></div></h3><p>All errors now belong to the <a href="/v5/api/utils/logger/#Logger">Logger</a> class and the related functions have been moved to <a href="/v5/api/utils/logger/#Logger">Logger</a> instances, which can include a per-package version string.</p>
<p>Global error fucntions have been moved <a href="/v5/api/utils/logger/#Logger">Logger</a> class methods.</p>
<div class="code">// v4
ethers.errors.UNKNOWN_ERROR
<div class="code"><span class="comment">// v4
</span>ethers.errors.UNKNOWN_ERROR
ethers.errors.*
errors.setCensorship(censorship, permanent)
@ -55,8 +58,8 @@ errors.throwError(message, code, params)
errors.warn(...)
errors.info(...)
// v5
ethers.utils.Logger.errors.UNKNOWN_ERROR
<span class="comment">// v5
</span>ethers.utils.Logger.errors.UNKNOWN_ERROR
ethers.utils.Logger.errors.*
Logger.setCensorship(censorship, permanent)
@ -68,31 +71,34 @@ logger.checkNew(self, kind)
logger.checkNormalize()
logger.throwError(message, code, params)
logger.warn(...)
logger.info(...)</div><a name="migration-v4--interface"></a><h2 class="show-anchors"><div>Interface<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface"></a></div></div></h2><p>The <a href="/v5/api/utils/abi/interface/">Interface</a> object has undergone the most dramatic changes.</p>
logger.info(...)
</div><a name="migration-v4--interface"></a><h2 class="show-anchors"><div>Interface<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface"></a></div></div></h2><p>The <a href="/v5/api/utils/abi/interface/">Interface</a> object has undergone the most dramatic changes.</p>
<p>It is no longer a meta-class and now has methods that simplify handling contract interface operations without the need for object inspection and special edge cases.</p>
<a name="migration-v4--interface--functions"></a><h3 class="show-anchors"><div>Functions<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface--functions"></a></div></div></h3>
<div class="code">// v4 (example: "transfer(address to, uint amount)")
interface.functions.transfer.encode(to, amount)
<div class="code"><span class="comment">// v4 (example: "transfer(address to, uint amount)")
</span>interface.functions.transfer.encode(to, amount)
interface.functions.transfer.decode(callData)
// v5
interface.encodeData("transfer", [ to, amount ])
<span class="comment">// v5
</span>interface.encodeData("transfer", [ to, amount ])
interface.decodeResult("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)</div><a name="migration-v4--interface--events"></a><h3 class="show-anchors"><div>Events<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface--events"></a></div></div></h3>
<div class="code">// v4 (example: Transfer(address indexed, address indexed, uint256)
interface.events.Transfer.encodeTopics(values)
<span class="comment">// Or you can use any compatible signature or Fragment objects.
</span><span class="comment">// Notice that signature normalization is performed for you,
</span><span class="comment">// e.g. "uint" and "uint256" will be automatically converted
</span>interface.encodeData("transfer(address,uint)", [ to, amount ])
interface.decodeResult("transfer(address to, uint256 amount)", data)
</div><a name="migration-v4--interface--events"></a><h3 class="show-anchors"><div>Events<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface--events"></a></div></div></h3>
<div class="code"><span class="comment">// v4 (example: Transfer(address indexed, address indexed, uint256)
</span>interface.events.Transfer.encodeTopics(values)
interface.events.Transfer.decode(data, topics)
// v5
interface.encodeFilterTopics("Transfer", values)
interface.encodeEventLog("Transfer", data, topics)</div><a name="migration-v4--interface--inspection"></a><h3 class="show-anchors"><div>Inspection<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface--inspection"></a></div></div></h3><p>Interrogating properties about a function or event can now (mostly) be done directly on the <a href="/v5/api/utils/abi/fragments/#Fragment">Fragment</a> object.</p>
<span class="comment">// v5
</span>interface.encodeFilterTopics("Transfer", values)
interface.encodeEventLog("Transfer", data, topics)
</div><a name="migration-v4--interface--inspection"></a><h3 class="show-anchors"><div>Inspection<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--interface--inspection"></a></div></div></h3><p>Interrogating properties about a function or event can now (mostly) be done directly on the <a href="/v5/api/utils/abi/fragments/#Fragment">Fragment</a> object.</p>
<div class="code">// v4
interface.functions.transfer.name
@ -143,24 +149,26 @@ const sighash = interface.getSighash(functionFragment)
const eventSig = eventFragment.format()
const topic = interface.getTopic(eventFragment)</div><a name="migration-v4--utilities"></a><h2 class="show-anchors"><div>Utilities<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--utilities"></a></div></div></h2>
<a name="migration-v4--utilities--renaming"></a><h3 class="show-anchors"><div>Renaming<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--utilities--renaming"></a></div></div></h3>
<div class="code">// @TODO</div><a name="migration-v4--wallet"></a><h2 class="show-anchors"><div>Wallet<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--wallet"></a></div></div></h2>
<div class="code"><span class="comment">// @TODO
</span></div><a name="migration-v4--wallet"></a><h2 class="show-anchors"><div>Wallet<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--wallet"></a></div></div></h2>
<a name="migration-v4--wallet--mnemonic-phrases"></a><h3 class="show-anchors"><div>Mnemonic Phrases<div class="anchors"><a class="self" href="/v5/migration/ethers-v4/#migration-v4--wallet--mnemonic-phrases"></a></div></div></h3><p>The <b>mnemonic</b> phrase and related properties have been merged into a single <code class="inline">mnemonic</code> object, which also now includes the <code class="inline">locale</code>.</p>
<div class="code">// v4
wallet.mnemonic
<div class="code"><span class="comment">// v4
</span>wallet.mnemonic
wallet.path
// v5
// - Mnemonic phrase and path are a Mnemonic object
// - Note: wallet.mnemonic is null if there is no mnemonic
wallet.mnemonic.phrase
wallet.mnemonic.path</div>
<span class="comment">// v5
</span><span class="comment">// - Mnemonic phrase and path are a Mnemonic object
</span><span class="comment">// - Note: wallet.mnemonic is null if there is no mnemonic
</span>wallet.mnemonic.phrase
wallet.mnemonic.path
</div>
<div class="footer">
<div class="nav previous"><a href="/v5/migration/web3/"><span class="arrow">&larr;</span>Migration: From Web3.js</a></div>
<div class="nav next"><a href="/v5/testing/">Testing<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/cookbook/"><span class="arrow">&larr;</span>Cookbook</a></div>
<div class="nav next"><a href="/v5/migration/web3/">Migration: From Web3.js<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

@ -28,7 +28,7 @@
<div class="nav previous"><a href="/v5/migration/"><span class="arrow">&larr;</span>Migration Guide</a></div>
<div class="nav next"><a href="/v5/migration/ethers-v4/">Migration: From Ethers v4<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>

File diff suppressed because one or more lines are too long

@ -24,7 +24,7 @@
<div class="nav previous"><a href="/v5/migration/ethers-v4/"><span class="arrow">&larr;</span>Migration: From Ethers v4</a></div>
<div class="nav next"><a href="/v5/contributing/">Contributing and Hacking<span class="arrow">&rarr;</span></a></div>
</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Generated on June 12, 2020, 3:31am.</div>
<div class="copyright">The content of this site is licensed under the <a href="https://choosealicense.com/licenses/cc-by-4.0/">Creative Commons License</a>. Last modified on June 12, 2020, 7:17pm.</div>
</div>
<script src="/v5/static/script.js" type="text/javascript"></script>
</body>