Compare commits

...

53 Commits

Author SHA1 Message Date
Richard Moore
d15c097dba Updated dist files. 2020-09-16 03:08:36 -04:00
Richard Moore
49f71574f4 More robust blockchain error detection (#1047) 2020-09-16 02:19:28 -04:00
Richard Moore
9ee685df46 Forward blockchain errors from Signer during gas estimation (#1047). 2020-09-15 22:14:22 -04:00
Richard Moore
263bfe5ce6 Improve fetch errors with looser mime-type detection (#1047). 2020-09-15 22:12:56 -04:00
Richard Moore
e8a9eea493 CI: Add node-hid requirements to all jobs. 2020-09-12 01:31:17 -04:00
Richard Moore
1c499c9f42 CI: Add node-hid requirements. 2020-09-12 01:18:28 -04:00
Richard Moore
c1a297db99 Updated dist files. 2020-09-11 02:10:58 -04:00
Richard Moore
be92339696 Force content-length in web fetching. 2020-09-11 01:10:53 -04:00
Richard Moore
bc3eeeca39 Better error forwarding from FallbackProvider (#1021). 2020-09-11 01:10:15 -04:00
Richard Moore
042b74e6ee Add clamping functions to FixedNumber (#1037). 2020-09-10 01:16:28 -04:00
Richard Moore
6e10675adf Docs: updated dist files. 2020-09-08 01:12:15 -04:00
Richard Moore
2b83feb6bd Docs: fixed markdown. 2020-09-08 01:11:29 -04:00
Richard Moore
19fd55e935 Docs: add example for custom ENS address (#911). 2020-09-08 01:10:08 -04:00
Richard Moore
710998b19a Docs: Added link to React-Native. 2020-09-08 00:36:44 -04:00
Richard Moore
828a35fdca Merge branch 'ChrisChinchilla-ethereum-basics' 2020-09-08 00:30:09 -04:00
Richard Moore
95bcda0d8a Merge branch 'ethereum-basics' of git://github.com/ChrisChinchilla/ethers.js into ChrisChinchilla-ethereum-basics 2020-09-08 00:29:14 -04:00
Richard Moore
ccfe205db8 Merge branch 'ChrisChinchilla-master' 2020-09-08 00:27:57 -04:00
Richard Moore
f9684aeec2 Merge branch 'master' of git://github.com/ChrisChinchilla/ethers.js into ChrisChinchilla-master 2020-09-08 00:26:54 -04:00
Richard Moore
9d5de46c84 Updated dist files. 2020-09-07 19:55:52 -04:00
Richard Moore
28ee745211 Docs: added React Native and fixed typos. 2020-09-07 19:40:50 -04:00
Richard Moore
4e394fc680 Allow events to use compact bytes ABI coded data for Solidity 0.4 external events (#891, #992). 2020-09-07 19:35:37 -04:00
Richard Moore
97acaa1129 Docs: fixed typo (#1026). 2020-09-06 01:57:06 -04:00
Richard Moore
fe280c8458 Updated dist files. 2020-09-05 23:57:15 -04:00
Richard Moore
bdccf7b8d3 Synced unorm in shims to most recent version. 2020-09-05 23:45:25 -04:00
Richard Moore
0234cfbbef Updated dist files. 2020-09-05 23:35:35 -04:00
Richard Moore
cadb28d6b3 Fixed LedgerSigner sendTransaction (#936). 2020-09-05 04:37:47 -04:00
Richard Moore
72385c2287 Added BrainWallet to experimental exports. 2020-09-05 04:29:53 -04:00
Richard Moore
201e5ced9c More readable server errors. 2020-09-05 04:29:08 -04:00
Richard Moore
bf481f4bbf Updated dist files. 2020-09-05 01:23:16 -04:00
Richard Moore
681f2a50b2 Fixed test retry in browsers. 2020-09-05 01:14:25 -04:00
Richard Moore
18fdb96fe1 Updated dist files. 2020-09-04 03:21:51 -04:00
Richard Moore
35b64b9a65 Add test retry support to reporter. 2020-09-04 03:15:07 -04:00
Richard Moore
4ca98825d4 Updated dist files. 2020-09-04 02:11:49 -04:00
Richard Moore
0558bba8eb Added retry logic to provider tests. 2020-09-04 02:06:04 -04:00
Richard Moore
a440317594 Updated dist files. 2020-09-04 01:37:14 -04:00
Richard Moore
2359a98641 Fixed link in docs (#1028). 2020-09-04 01:26:29 -04:00
Richard Moore
a32fbd835d Ignore coverage build folder. 2020-09-04 01:24:54 -04:00
Richard Moore
6fd3bb62d1 Added memory-like support and new opcodes to asm. 2020-09-04 01:20:35 -04:00
Richard Moore
83db8a6bd1 Added basic ENS resolver functions for contenthash, text and multi-coin addresses (#1003). 2020-09-04 01:18:57 -04:00
Richard Moore
f24240eddf Updated dist files. 2020-08-27 22:04:58 -04:00
Richard Moore
d01d0c8448 Added support for changing Reporter logging function. 2020-08-27 21:58:34 -04:00
Richard Moore
d3b473e7c7 Added test-react script. 2020-08-27 21:56:40 -04:00
Richard Moore
57eb5b777e Initial React Native test harness (#993). 2020-08-27 21:54:16 -04:00
Richard Moore
240aac5683 Updating shims for constrained environments (#944, #993). 2020-08-27 14:23:23 -04:00
Richard Moore
8abdbbbf63 Updating shims for constrained environments (#944, #993). 2020-08-27 14:22:58 -04:00
Chris Chinchilla
32de4f1930 Minor typo changes 2020-07-14 14:12:22 +02:00
Chris Chinchilla
232c7a895b Further review 2020-07-14 14:08:59 +02:00
Chris Chinchilla
c443a8bd9d Further review 2020-07-14 14:08:59 +02:00
Chris Chinchilla
0940944048 Start review of getting started guide 2020-07-14 14:08:59 +02:00
Chris Chinchilla
3ac0aeaac6 Further review 2020-07-14 14:05:55 +02:00
Chris Chinchilla
8557285da6 Merge branch 'master' of github.com:ethers-io/ethers.js 2020-07-14 13:14:08 +02:00
Chris Chinchilla
fb46e0fd79 Further review 2020-07-14 13:13:52 +02:00
Chris Chinchilla
84d6fdfc37 Start review of getting started guide 2020-07-07 14:41:23 +02:00
472 changed files with 22461 additions and 5042 deletions

View File

@@ -14,7 +14,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [8.x, 10.x, 12.x, 13.x ]
node-version: [ 8.x, 10.x, 12.x, 13.x ]
steps:
- name: Use Node.js ${{ matrix.node-version }}
@@ -22,11 +22,20 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- uses: actions/checkout@v2
- name: Checkout repository
uses: actions/checkout@v2
- run: npm ci
- run: npm run build-all
- run: npm run test-node
- name: Install node-hid requirements
run: sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libudev-dev
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-node
test-browser:
@@ -43,11 +52,48 @@ jobs:
with:
node-version: 12.x
- uses: actions/checkout@v2
- name: Checkout repository
uses: actions/checkout@v2
- run: npm ci
- run: npm run build-all
- run: npm run test-browser-${{ matrix.module }}
- name: Install node-hid requirements
run: sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libudev-dev
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-browser-${{ matrix.module }}
test-react-native:
runs-on: macos-latest
# Temporary for testing CI
continue-on-error: true
strategy:
fail-fast: false
steps:
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Checkout repository
uses: actions/checkout@v2
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-react
coverage:
@@ -63,11 +109,20 @@ jobs:
with:
node-version: 12.x
- uses: actions/checkout@v2
- name: Checkout repository
uses: actions/checkout@v2
- run: npm ci
- run: npm run build-all
- run: npm run test-coverage
- name: Install node-hid requirements
run: sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev libudev-dev
- name: Install dependencies (and link per package)
run: npm ci
- name: Build CommonJS and ESM (from TypeScript)
run: npm run build-all
- name: Run tests
run: npm run test-coverage
- name: Upload coverage summary
uses: actions/upload-artifact@v2

2
.gitignore vendored
View File

@@ -20,3 +20,5 @@ packages/*/tsconfig.tsbuildinfo
packages/testcases/input/nameprep/**
.nyc_output/**
output/**

View File

@@ -1,7 +1,45 @@
Changelog
=========
This change log is managed by `scripts/cmds/update-versions` but may be manually updated.
This change log is managed by `admin/cmds/update-versions` but may be manually updated.
ethers/v5.0.14 (2020-09-16 02:39)
---------------------------------
- More robust blockchain error detection ([#1047](https://github.com/ethers-io/ethers.js/issues/1047); [49f7157](https://github.com/ethers-io/ethers.js/commit/49f71574f4799d685a5ae8fd24fe1134f752d70a))
- Forward blockchain errors from Signer during gas estimation. ([#1047](https://github.com/ethers-io/ethers.js/issues/1047); [9ee685d](https://github.com/ethers-io/ethers.js/commit/9ee685df46753c46cbbde12d05d6ea04f2b5ea3f))
- Improve fetch errors with looser mime-type detection. ([#1047](https://github.com/ethers-io/ethers.js/issues/1047); [263bfe5](https://github.com/ethers-io/ethers.js/commit/263bfe5ce632790e0399d06a0ab660a501997998))
ethers/v5.0.13 (2020-09-11 02:10)
---------------------------------
- Force content-length in web fetching. ([be92339](https://github.com/ethers-io/ethers.js/commit/be923396962ea76bf0fb566dcf8801e58ccf0e7e))
- Better error forwarding from FallbackProvider. ([#1021](https://github.com/ethers-io/ethers.js/issues/1021); [bc3eeec](https://github.com/ethers-io/ethers.js/commit/bc3eeeca39adb734f24019d0e942eff2eac6ad4d))
- Add clamping functions to FixedNumber. ([#1037](https://github.com/ethers-io/ethers.js/issues/1037); [042b74e](https://github.com/ethers-io/ethers.js/commit/042b74e6ee648d4fa37bf674194273d8f4483bfb))
ethers/v5.0.12 (2020-09-07 19:54)
---------------------------------
- Allow events to use compact bytes ABI coded data for Solidity 0.4 external events. ([#891](https://github.com/ethers-io/ethers.js/issues/891), [#992](https://github.com/ethers-io/ethers.js/issues/992); [4e394fc](https://github.com/ethers-io/ethers.js/commit/4e394fc68019445ae4b4e201e41f95d6793dbe92))
ethers/v5.0.11 (2020-09-05 23:51)
---------------------------------
- Synced unorm in shims to most recent version. ([bdccf7b](https://github.com/ethers-io/ethers.js/commit/bdccf7b8d352ba400317266a0a37e6e290633e3c))
- Fixed LedgerSigner sendTransaction. ([#936](https://github.com/ethers-io/ethers.js/issues/936); [cadb28d](https://github.com/ethers-io/ethers.js/commit/cadb28d6b364e68e43a06f7a9b8a31797afbd920))
- Added BrainWallet to experimental exports. ([72385c2](https://github.com/ethers-io/ethers.js/commit/72385c228783a3158511b3cddc5cb4f9ce1dddae))
- More readable server errors. ([201e5ce](https://github.com/ethers-io/ethers.js/commit/201e5ced9c38da2de1dd7518ffbf24284d477e80))
ethers/v5.0.10 (2020-09-05 01:21)
---------------------------------
- Added retry logic to provider tests. ([0558bba](https://github.com/ethers-io/ethers.js/commit/0558bba8eb1b783ef50bb37bcf4c9bae1f86f1e1), [35b64b9](https://github.com/ethers-io/ethers.js/commit/35b64b9a65e2c09ecb63b0eca712b45a3092c204), [681f2a5](https://github.com/ethers-io/ethers.js/commit/681f2a50b26d7954795dba5aec55bede4740e494))
- Fixed link in docs. ([#1028](https://github.com/ethers-io/ethers.js/issues/1028); [2359a98](https://github.com/ethers-io/ethers.js/commit/2359a98641d99b26cf88ec892e3601a8a2c81c9c))
- Added memory-like support and new opcodes to asm. ([6fd3bb6](https://github.com/ethers-io/ethers.js/commit/6fd3bb62d10eab1563dc4ddbd88732b4f484ec7a))
- Added basic ENS resolver functions for contenthash, text and multi-coin addresses. ([#1003](https://github.com/ethers-io/ethers.js/issues/1003); [83db8a6](https://github.com/ethers-io/ethers.js/commit/83db8a6bd1364458dcfeea544de707df41890b4e))
- Added support for changing Reporter logging function. ([d01d0c8](https://github.com/ethers-io/ethers.js/commit/d01d0c8448df40de52253f9e92889ab7e75c6a97))
- Initial React Native test harness. ([#993](https://github.com/ethers-io/ethers.js/issues/993); [57eb5b7](https://github.com/ethers-io/ethers.js/commit/57eb5b777e2c67f1f8d74e41d3413e9f0564528d), [d3b473e](https://github.com/ethers-io/ethers.js/commit/d3b473e7c738fdfc65b6f1c8f80bcdacf9827d8a))
- Updating shims for constrained environments. ([#944](https://github.com/ethers-io/ethers.js/issues/944), [#993](https://github.com/ethers-io/ethers.js/issues/993); [8abdbbb](https://github.com/ethers-io/ethers.js/commit/8abdbbbf633f96fde2346c4ae70e538895fd7829), [240aac5](https://github.com/ethers-io/ethers.js/commit/240aac568303deff14cbb2366b94c8c89cacefc1))
ethers/v5.0.9 (2020-08-25 01:45)
--------------------------------

View File

@@ -17,7 +17,7 @@ A complete Ethereum wallet implementation and utilities in JavaScript (and TypeS
- **Tiny** (~104kb compressed; 322kb uncompressed)
- **Modular** packages; include only what you need
- **Complete** functionality for all your Ethereum desires
- Extensive [documentation](https://docs.ethers.io/ethers.js/v5/)
- Extensive [documentation](https://docs.ethers.io/v5/)
- Large collection of **test cases** which are maintained and added to
- Fully **TypeScript** ready, with definition files and full TypeScript source
- **MIT License** (including ALL dependencies); completely open source to do with as you please

View File

@@ -11,7 +11,7 @@ const Words = fs.readFileSync("/usr/share/dict/words").toString().split("\n").re
`
// Words missing from the dictionary
accessing addresses aligned autofill called cancelled changed censored
compiled computed configured consumed creating decoded decoding
clamping compiled computed configured consumed creating decoded decoding
decrypt decrypted decrypting deployed deploying deprecated detected
discontinued earliest email enabled encoded encoding encrypt
encrypted encrypting entries euro exceeded existing expected
@@ -25,8 +25,8 @@ serializes shared signed signing skipped stored supported tagging targetted
throttled transactions uninstall unstake unsubscribe using verifies website
// Overly Specific Words
BIP BIP39 BIP44 crypto eip hashes hmac icap
keccak namehash ripemd RLP scrypt secp sha
bech BIP BIP39 BIP44 btc bzz crypto eip etc hashes hmac icap
keccak ltc namehash ripemd RLP scrypt secp sha xdai
blockhash

View File

@@ -4,7 +4,7 @@ _section: ContractFactory @<ContractFactory> @SRC<contracts:class.ContractFactor
_subsection: Creating Instances @<ContractFactory--creating>
_property: new ethers.ContractFactory(interface, bydecode [ , signer ]) @SRC<contracts:constructor.ContractFactory>
_property: new ethers.ContractFactory(interface, bytecode [ , signer ]) @SRC<contracts:constructor.ContractFactory>
_property: ContractFactory.fromSolidity(compilerOutput [ , signer ]) => [[ContractFactory]]

View File

@@ -9,7 +9,7 @@ cover the vast majority of use-cases, but also includes the
necessary functions and classes for sub-classing if a more
custom configuration is necessary.
Most users should be able to simply use the [[providers-getDefaultProvider]].
Most users should use the [[providers-getDefaultProvider]].
_subsection: Default Provider @<providers-getDefaultProvider>
@@ -34,6 +34,9 @@ Returns a new Provider, backed by multiple services, connected
to //network//. Is no //network// is provided, **homestead**
(i.e. mainnet) is used.
The //network// may also be a URL to connect to, such as ``http:/\/localhost:8545``
or ``wss:/\/example.com``.
The //options// is an object, with the following properties:
_table: Option Properties
@@ -67,6 +70,29 @@ used the most.
Some services also provide additional paid features, which are only
available when specifying an API Key.
_subsection: Networks
There are several official common Ethereum networks as well as custom
networks and other compatible projects.
Any API that accept a [[providers-Networkish]] can be passed a common name (such as
``"mainnet"`` or ``"ropsten"``) to use that network definition or may specify
custom parameters.
_heading: Custom ENS Contract
One common reason to specify custom properties for a [[providers-Network]] is to override
the address of the root ENS registry, either on a common network to intercept
the [ENS Methods](Provider--ens-methods) or to specify the ENS registry on a
dev network (on most dev networks you must deploy the ENS contracts manually).
_code: Example: Override the ENS registry @lang<script>
const network = {
name: "dev",
chianId: 1337,
ensAddress: customEnsAddress
};
_subsection: Provider Documentation

View File

@@ -1,6 +1,6 @@
_section: JsonRpcProvider @<JsonRpcProvider> @INHERIT<[[Provider]]> @SRC<providers:class.JsonRpcProvider>
The [JSON-RPC API](link-jsonrpc) is a very popular method for interacting
The [JSON-RPC API](link-jsonrpc) is a popular method for interacting
with Ethereum and is available in all major Ethereum node implementations
(e.g. [[link-geth]] and [[link-parity]]) as well as many
third-party web services (e.g. [[link-infura]])

View File

@@ -156,7 +156,7 @@ WebSockets are much more intensive on your server resourses, as they must manage
and maintain the state for each client. For this reason, many services may also
charge additional fees for using their WebSocket endpoints.
_property: new ethers.provider.WebSockerProvider([ url [ , network ] ])
_property: new ethers.provider.WebSocketProvider([ url [ , network ] ])
Returns a new [[WebSocketProvider]] connected to //url// as the //network//.
If //url// is unspecified, the default ``"ws:/\/localhost:8546"`` will be used.

View File

@@ -19,6 +19,15 @@ And **EventType** can be any of the following.
- **//[[providers-EventFilter]]//** -- TODO...
_subsection: Networkish @<providers-Networkish>
A **Networkish** may be any of the following:
- a [[providers-Network]] object
- the name of a common network as a string (e.g. ``"homestead"``)
- the chain ID a network as a number; if the chain ID is that of a
common network, the ``name`` and ``ensAddress`` will be populated, otherwise,
the deafults name ``"unknown"`` and no ``ensAddress`` is used
_subsection: Network @<providers-Network>
A **Network** represents an Etherem network.

View File

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

View File

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

View File

@@ -21,7 +21,7 @@ _heading: Why does it take so long?
The goal is to use as much CPU and memory as possible during
this algorithm, so that a single computer can only compute a
very small number of results for some fixed amount of time. To
scale up an attack, the attacker requires additional compuers,
scale up an attack, the attacker requires additional computers,
increasing the cost to [brute-force attack](link-wiki-bruteforce)
to guess the password.

View File

@@ -175,14 +175,17 @@ module.exports = {
"link-ens": { name: "ENS", url: "https:/\/ens.domains/" },
"link-ethereum": { name: "Ethereum", url: "https:/\/ethereumorg" },
"link-etherscan": { name: "Etherscan", url: "https:/\/etherscan.io" },
"link-expo": { name: "Expo", url: "https:/\/expo.io" },
"link-etherscan-api": "https:/\/etherscan.io/apis",
"link-flatworm": { name: "Flatworm", url: "https:/\/github.com/ricmoo/flatworm" },
"link-geth": { name: "Geth", url: "https:/\/geth.ethereum.org" },
"link-infura": { name: "INFURA", url: "https:/\/infura.io" },
"link-javascriptcore": { name: "JavaScriptCore", url: "https:/\/developer.apple.com/documentation/javascriptcore?language=objc" },
"link-ledger": "https:/\/www.ledger.com",
"link-metamask": { name: "Metamask", url: "https:/\/metamask.io/" },
"link-otto": "https:/\/github.com/robertkrimen/otto",
"link-parity": { name: "Parity", url: "https:/\/www.parity.io" },
"link-react-native": { name: "React Native", url: "https:/\/reactnative.dev" },
"link-rtd": "https:/\/github.com/readthedocs/sphinx_rtd_theme",
"link-semver": { name: "semver", url: "https:/\/semver.org" },
"link-solidity": { name: "Solidity" , url: "https:/\/solidity.readthedocs.io/en/v0.6.2/" },
@@ -240,9 +243,11 @@ module.exports = {
"link-bip-32": { name: "BIP-32", url: "https:/\/github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" },
"link-npm-elliptic": { name: "elliptic", url: "https:/\/www.npmjs.com/package/elliptic" },
"link-npm-ethersproject-shims": { name: "Shims", url: "https:/\/www.npmjs.com/package/@ethersproject/shims" },
"link-npm-events": { name: "EventEmitter", url: "https:/\/nodejs.org/dist/latest-v13.x/docs/api/events.html#events_class_eventemitter" },
"link-npm-bnjs": { name: "BN.js", url: "https:/\/www.npmjs.com/package/bn.js" },
"link-npm-query-bignumber": "https:/\/www.npmjs.com/search?q=bignumber",
"link-npm-react-native-crypto": { name: "React Native Crypto", url: "https:/\/www.npmjs.com/package/react-native-crypto" },
"link-js-array": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
"link-js-bigint": "https:/\/developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt",

View File

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

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

@@ -10,7 +10,7 @@ ContractFactory
Creating Instances
------------------
#### **new ***ethers* . **ContractFactory**( interface , bydecode [ , signer ] )
#### **new ***ethers* . **ContractFactory**( interface , bytecode [ , signer ] )

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -199,7 +199,7 @@ When you perform a static call, the current state is taken into account as best
Meta-Class Filters
------------------
#### *erc20* . *filters* . **Transafer**( [ fromAddress [ , toAddress ] ] ) => *Filter*
#### *erc20* . *filters* . **Transfer**( [ fromAddress [ , toAddress ] ] ) => *Filter*
Returns a new Filter which can be used to [query](/v5/api/contract/example/#erc20-queryfilter) or to [subscribe/unsubscribe to events](/v5/api/contract/example/#erc20-events).

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -14,6 +14,8 @@ Default Provider
Returns a new Provider, backed by multiple services, connected to *network*. Is no *network* is provided, **homestead** (i.e. mainnet) is used.
The *network* may also be a URL to connect to, such as `http://localhost:8545` or `wss://example.com`.
The *options* is an object, with the following properties:
@@ -32,6 +34,19 @@ Many services also have monitoring and usage metrics, which are only available i
Some services also provide additional paid features, which are only available when specifying an API Key.
Networks
--------
### Custom ENS Contract
```
const network = {
name: "dev",
chianId: 1337,
ensAddress: customEnsAddress
};
```
Provider Documentation
----------------------
@@ -61,6 +76,7 @@ Provider Documentation
* [WebSocketProvider](other)
* [Types](types)
* [BlockTag](types)
* [Networkish](types)
* [Network](types)
* [Block](types)
* [Events and Logs](types)

View File

@@ -162,6 +162,9 @@ provider = new AlchemyProvider("ropsten");
// Connect to mainnet with an API key (these are equivalent)
provider = new AlchemyProvider(null, apiKey);
provider = new AlchemyProvider("homestead", apiKey);
// Connect to the Alchemy WebSocket endpoints with a WebSocketProvider
provider = AlchemyProvider.getWebSocketProvider()
```
CloudflareProvider

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -123,7 +123,7 @@ This is identical to `sendAsync`. Historically, this used a synchronous web requ
WebSocketProvider
-----------------
#### **new ***ethers* . *provider* . **WebSockerProvider**( [ url [ , network ] ] )
#### **new ***ethers* . *provider* . **WebSocketProvider**( [ url [ , network ] ] )
Returns a new [WebSocketProvider](/v5/api/providers/other/#WebSocketProvider) connected to *url* as the *network*.

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

View File

@@ -12,6 +12,9 @@ BlockTag
### EventType
Networkish
----------
Network
-------

File diff suppressed because one or more lines are too long

View File

@@ -285,7 +285,7 @@ contract = new ethers.Contract("dai.tokens.ethers.eth", abi, signer)
// Get the number of tokens for this account
tokens = await contract.balanceOf(signer.getAddress())
// { BigNumber: "9709905125722568213383" }
// { BigNumber: "11386855832278858351495" }
//
// Pre-flight (check for revert) on DAI from the signer
@@ -302,7 +302,7 @@ contract.callStatic.transfer("donations.ethers.eth", tokens)
// This will fail since it is greater than the token balance
contract.callStatic.transfer("donations.ethers.eth", tokens.add(1))
// Error: call revert exception (method="transfer(address,uint256)", errorSignature="Error(string)", errorArgs=["Dai/insufficient-balance"], reason="Dai/insufficient-balance", code=CALL_EXCEPTION, version=abi/5.0.1)
// Error: call revert exception (method="transfer(address,uint256)", errorSignature="Error(string)", errorArgs=["Dai/insufficient-balance"], reason="Dai/insufficient-balance", code=CALL_EXCEPTION, version=abi/5.0.4)
```
ExternallyOwnedAccount

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -85,7 +85,7 @@ BigNumber.from(42n)
// Numbers outside the safe range fail:
BigNumber.from(Number.MAX_SAFE_INTEGER);
// Error: overflow (fault="overflow", operation="BigNumber.from", value=9007199254740991, code=NUMERIC_FAULT, version=bignumber/5.0.3)
// Error: overflow (fault="overflow", operation="BigNumber.from", value=9007199254740991, code=NUMERIC_FAULT, version=bignumber/5.0.6)
```
Methods

File diff suppressed because one or more lines are too long

View File

@@ -164,20 +164,20 @@ Return a copy of *array* shuffled using [Fisher-Yates Shuffle](https://en.wikipe
```javascript
utils.randomBytes(8)
// Uint8Array [ 158, 14, 185, 6, 8, 37, 214, 172 ]
// Uint8Array [ 98, 93, 74, 126, 111, 146, 146, 3 ]
const data = [ 1, 2, 3, 4, 5, 6, 7 ];
// Returns a new Array
utils.shuffled(data);
// [
// 5,
// 2,
// 6,
// 1,
// 3,
// 4,
// 7,
// 2,
// 5,
// 6
// 3
// ]
// The Original is unscathed...

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -7,3 +7,7 @@ Documentation: [html](https://docs.ethers.io/)
Cookbook
========
* [React Native (and ilk)](react-native)
* [Installing](react-native)
* [Security](react-native)

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,27 @@
-----
Documentation: [html](https://docs.ethers.io/)
-----
React Native (and ilk)
======================
Installing
----------
```
/home/ricmoo/my-react-project> npm install @ethersproject/shims --save
```
```
// Pull in the shims (BEFORE importing ethers)
import "@ethersproject/shims"
// Import the ethers library
import { ethers } from "ethers";
```
Security
--------

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -11,7 +11,7 @@ Installing
----------
```
/home/ricmoo> npm install --save ethers@next
/home/ricmoo> npm install --save ethers
```
Importing
@@ -58,6 +58,20 @@ 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, you need the account signer...
const signer = provider.getSigner()
```
Connecting to Ethereum: RPC
---------------------------
```
// If you don't specify a //url//, Ethers connects to the default
// (i.e. ``http:/\/localhost:8545``)
const provider = new ethers.providers.JsonRpcProvider();
// The provider also allows signing transactions to
// send ether and pay to change state within the blockchain.
// For this, we need the account signer...
const signer = provider.getSigner()
```
@@ -67,18 +81,18 @@ const signer = provider.getSigner()
```javascript
// Look up the current block number
provider.getBlockNumber()
// { Promise: 10397126 }
// { Promise: 10819010 }
// Get the balance of an account (by address or ENS name)
// Get the balance of an account (by address or ENS name, if supported by network)
balance = await provider.getBalance("ethers.eth")
// { BigNumber: "2337132817842795605" }
// Often you will need to format the output for the user
// which prefer to see values in ether (instead of wei)
// Often you need to format the output to something more user-friendly,
// such as in ether (instead of wei)
ethers.utils.formatEther(balance)
// '2.337132817842795605'
// Or if a user enters a string in an input field, you may need
// If a user enters a string in an input field, you may need
// to convert it from ether (as a string) to wei (as a BigNumber)
ethers.utils.parseEther("1.0")
// { BigNumber: "1000000000000000000" }
@@ -98,13 +112,13 @@ Contracts
---------
```javascript
// We can use an ENS name for the contract address
// You can also use an ENS name for the contract address
const daiAddress = "dai.tokens.ethers.eth";
// The ERC-20 Contract ABI, which is a common contract interface
// for tokens (this is the Human-Readable ABI format)
const daiAbi = [
// Some simple details about the token
// Some details about the token
"function name() view returns (string)",
"function symbol() view returns (string)",
@@ -135,19 +149,19 @@ daiContract.symbol()
// Get the balance of an address
balance = await daiContract.balanceOf("ricmoo.firefly.eth")
// { BigNumber: "9709905125722568213383" }
// { BigNumber: "11386855832278858351495" }
// Format the DAI for displaying to the user
ethers.utils.formatUnits(balance, 18)
// '9709.905125722568213383'
// '11386.855832278858351495'
```
### State Changing Methods
```
// The DAI Contract is currently connected to the Provider,
// which is read-only. We need to connect to a Signer, so
// that we can pay to send state-changing transactions.
// which is read-only. You need to connect to a Signer, so
// that you can pay to send state-changing transactions.
const daiWithSigner = contract.connect(signer);
// Each DAI has 18 decimal places
@@ -279,7 +293,7 @@ daiContract.queryFilter(filterFrom, 9843470, 9843480)
// number of entries; but they provide some useful examples
//
// List all transfers I sent in the last 10,000 blocks
// List all transfers sent in the last 10,000 blocks
daiContract.queryFilter(filterFrom, -10000)
// List all transfers ever sent to me
@@ -290,11 +304,11 @@ Signing Messages
----------------
```javascript
// To sign a simple string, which can often be used for
// logging into a service, such as CryptoKitties simply
// To sign a simple string, which are used for
// logging into a service, such as CryptoKitties,
// pass the string in.
signature = await signer.signMessage("Hello World");
// '0x7b8d663c680b165bb7b0601a65d730f532fa6427b2e30f1d91ff1d929712b3a50b427a672b90c1dc48a4e5fbde292fbded51f670ab57d15d5794b6ff015649611c'
// '0x94fac815fc18f295c4860128d8960dfdb1d88acf891a48e345368f3f4d52c95e59d0f8b35d05d554905a39c63c11b66f61abf0211fcaba36bef5dfaf1ea5f1331c'
//
// A common case is also signing a hash, which is 32
@@ -302,7 +316,7 @@ signature = await signer.signMessage("Hello World");
// data it MUST be an Array (or TypedArray)
//
// This string is 66 chacacters long
// This string is 66 characters long
message = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
// This array representation is 32 bytes long
@@ -311,6 +325,6 @@ messageBytes = ethers.utils.arrayify(message);
// To sign a hash, you most often want to sign the bytes
signature = await signer.signMessage(messageBytes)
// '0xc791b3d29aa1754f9e392784273f076ef39ca5d81f2729c92af61f89db724a604074acbd725d9d95e1d3c9630211c8eee8e34f6d948d537dd82c11be4bcf676e1c'
// '0xa77f9018a3ad3078056d529d5ccaca8796cdb5bc84e799d13b63a53646ab73f87f0895df7bbe2ee6016c95eb78a2e77013ab8f8d4855143d3567932cb5331e881c'
```

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -8,8 +8,9 @@ Migration Guide
===============
* [Migration: From Web3.js](web3)
* [Contracts](web3)
* [Providers](web3)
* [Signers](web3)
* [Contracts](web3)
* [Numbers](web3)
* [Utilities](web3)
* [Migration: From Ethers v4](ethers-v4)
@@ -17,6 +18,5 @@ Migration Guide
* [Contracts](ethers-v4)
* [Errors](ethers-v4)
* [Interface](ethers-v4)
* [Utilities](ethers-v4)
* [Wallet](ethers-v4)

View File

@@ -38,8 +38,64 @@ ethers.BigNumber.from(someValue)
Contracts
---------
### ENS Name Resolution
```
// @TODO
// v4
contract.addressPromise
// v5
contract.resolvedAddress
```
### Gas Estimation
```
// v4
contract.estimate.transfer(toAddress, amount)
// v5
contract.estimateGas.transfer(toAddress, amount)
```
### Functions
```
const abi = [
// Returns a single value
"function single() view returns (uint8)",
// Returns two values
"function double() view returns (uint8, uint8)",
];
// v4
await contract.single()
// 123
await contract.functions.single()
// 123
// v5 (notice the change in the .function variant)
await contract.single()
// 123
await contract.functions.single()
// [ 123 ]
// v4
await contract.double()
// [ 123, 5 ]
await contract.functions.double()
// [ 123, 5 ]
// v5 (no difference from v4)
await contract.double()
// [ 123, 5 ]
await contract.functions.double()
// [ 123, 5 ]
```
Errors
@@ -164,15 +220,6 @@ const eventSig = eventFragment.format()
const topic = interface.getTopic(eventFragment)
```
Utilities
---------
### Renaming
```
// @TODO
```
Wallet
------

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