Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6372a46b1b | ||
|
|
2ba4a17255 | ||
|
|
37bf4fb555 | ||
|
|
400d57621b | ||
|
|
314595113c | ||
|
|
0bf53d7804 | ||
|
|
ef84706312 | ||
|
|
6c338c1c5b | ||
|
|
8d5a13faea | ||
|
|
24e13fc0f2 | ||
|
|
faa556c1e5 | ||
|
|
1c5e1e8201 | ||
|
|
3f7dbe75ad | ||
|
|
a0f272973d | ||
|
|
b67ad79264 | ||
|
|
ccb9a0643e | ||
|
|
d0ed91840c | ||
|
|
32b1e7827a | ||
|
|
522fd16f68 | ||
|
|
803e8f9821 | ||
|
|
2cba1c7781 | ||
|
|
0b92fed9ed | ||
|
|
0a740c470d |
81
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
81
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
name: Bug Report
|
||||
description: Open an issue for a bug in Ethers
|
||||
title: "Bug Report Title"
|
||||
labels: ["investigate"]
|
||||
assignees:
|
||||
- ricmoo
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
**READ THIS FIRST** and follow all instructions, please. `:)`
|
||||
|
||||
Thank you for taking the time to report an issue. This form is for reporting **bugs within ethers**.
|
||||
|
||||
If you are **new to ethers** or *uncertain* whether this is a bug in ethers, a bug in another framework or a bug in your own code, please [start a discussion](https://github.com/ethers-io/ethers.js/discussions) first.
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Ethers Version
|
||||
description: What version of ethers are you using? Before opening an issue, please make sure you are up to date.
|
||||
placeholder: x.y.z
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: search-terms
|
||||
attributes:
|
||||
label: Search Terms
|
||||
description: Have you searched for answers [in the documentation](https://docs.ethers.org), through [the issues](https://github.com/ethers-io/ethers.js/issues) and [on the discusions](https://github.com/ethers-io/ethers.js/discussions)? Please include the search terms you have tried. This helps us add more keywords where needed.
|
||||
placeholder: e.g. abi, network, utf8
|
||||
- type: textarea
|
||||
id: about-the-bug
|
||||
attributes:
|
||||
label: Describe the Problem
|
||||
description: Please describe what you expected to happen vs what did happen?
|
||||
placeholder: What happened?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: code-snippet
|
||||
attributes:
|
||||
label: Code Snippet
|
||||
description: If possible, please include a **short and concise** code snippets that can reproduce this issue. Ideally code that can be pasted into the [Ethers Playground](https://playground.ethers.org).
|
||||
placeholder: e.g. provider.getBlockNumber()
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: contract-abi
|
||||
attributes:
|
||||
label: Contract ABI
|
||||
description: If this involves a contract, please include any **concise and relevant** ABI fragments.
|
||||
placeholder: e.g. [ 'function balanceOf(address owner) view returns (uint)' ]
|
||||
render: shell
|
||||
- type: textarea
|
||||
id: errors
|
||||
attributes:
|
||||
label: Errors
|
||||
description: If there is an error, please include the **entire error** (redacting any sensitive information).
|
||||
placeholder: "e.g. Error: invalid name (code='INVALID_ARGUMENT, ...)"
|
||||
render: shell
|
||||
- type: dropdown
|
||||
id: environment
|
||||
attributes:
|
||||
label: Environment
|
||||
description: What environment, platforms or frameworks are you using? Select all that apply.
|
||||
multiple: true
|
||||
options:
|
||||
- Ethereum (mainnet/ropsten/rinkeby/goerli)
|
||||
- Altcoin - Please specify (e.g. Polygon)
|
||||
- node.js (v12 or newer)
|
||||
- node.js (older than v12)
|
||||
- Browser (Chrome, Safari, etc)
|
||||
- React Native/Expo/JavaScriptCore
|
||||
- Hardhat
|
||||
- Geth
|
||||
- Parity
|
||||
- Ganache
|
||||
- Other (please specify)
|
||||
- type: input
|
||||
id: other-envrionment
|
||||
attributes:
|
||||
label: Environment (Other)
|
||||
placeholder: anything else?
|
||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
blank_issues_enabled: false
|
||||
23
.github/ISSUE_TEMPLATE/documentation.yml
vendored
Normal file
23
.github/ISSUE_TEMPLATE/documentation.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Documentation
|
||||
description: Documentation update, change or suggestion
|
||||
title: "Documentation Title"
|
||||
labels: ["documentation"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please include anything about the [documentation](https://docs.ethers.org) you would like to see improved.
|
||||
|
||||
- Missing information or details?
|
||||
- Spelling or Grammar mistakes?
|
||||
- Wrong Information?
|
||||
- Dead or wrong links?
|
||||
- Something needs code examples?
|
||||
- General feedback or anything else?
|
||||
- type: textarea
|
||||
id: suggestion
|
||||
attributes:
|
||||
label: Suggestion
|
||||
placeholder: e.g. please add an example for ropsten
|
||||
validations:
|
||||
required: true
|
||||
26
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
Normal file
26
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Feature Request
|
||||
description: Suggest a new feature or addition to Ethers
|
||||
title: "Feature Request Title"
|
||||
labels: [ "enhancement" ]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
The best place to start a new feature request is by starting an [Idea discussion](https://github.com/ethers-io/ethers.js/discussions), to mull over the feature, discuss current options and think through the impact on the overall library.
|
||||
|
||||
Keep in mind that features increase the library size, and may require additional dependencies. Ethers strives to remain lean and the number of dependencies low, so many features may make more sense as ancillary packages.
|
||||
- type: textarea
|
||||
id: about-the-feature
|
||||
attributes:
|
||||
label: Describe the Feature
|
||||
description: Please describe the feature, the problem it is solving, your solution and alternatives you've considered.
|
||||
placeholder: e.g. I want Ethers to be more/less magical.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: code-example
|
||||
attributes:
|
||||
label: Code Example
|
||||
description: Optionally, provide an example of how the feature would be used in code.
|
||||
placeholder: e.g. provider.doMagic()
|
||||
render: shell
|
||||
14
README.md
14
README.md
@@ -3,7 +3,7 @@ The Ethers Project
|
||||
|
||||
[](https://www.npmjs.com/package/ethers)
|
||||
[](https://github.com/ethers-io/ethers.js/actions/workflows/test-ci.yml)
|
||||

|
||||

|
||||

|
||||
[](https://www.gitpoap.io/gh/ethers-io/ethers.js)
|
||||
[](https://twitter.com/ricmoo)
|
||||
@@ -24,7 +24,7 @@ in [TypeScript](https://www.typescriptlang.org).
|
||||
- **Tiny** (~120kb compressed; 400kb uncompressed)
|
||||
- **Tree-shaking** focused; include only what you need during bundling
|
||||
- **Complete** functionality for all your Ethereum desires
|
||||
- Extensive [documentation](https://docs.ethers.io/v5/)
|
||||
- Extensive [documentation](https://docs.ethers.org/v6/)
|
||||
- Large collection of **test cases** which are maintained and added to
|
||||
- Fully written in **TypeScript**, with strict types for security
|
||||
- **MIT License** (including ALL dependencies); completely open source to do with as you please
|
||||
@@ -76,12 +76,10 @@ The bundled library is available in the `./dist/` folder in this repo.
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
**Note: The v6 docs are not available yet**
|
||||
Browse the [documentation](https://docs.ethers.org) online:
|
||||
|
||||
Browse the [documentation](https://docs.ethers.io) online:
|
||||
|
||||
- [Getting Started](https://docs.ethers.io/v6/getting-started/)
|
||||
- [Full API Documentation](https://docs.ethers.io/v6/api/)
|
||||
- [Getting Started](https://docs.ethers.org/v6/getting-started/)
|
||||
- [Full API Documentation](https://docs.ethers.org/v6/api/)
|
||||
- [Various Ethereum Articles](https://blog.ricmoo.com/)
|
||||
|
||||
|
||||
@@ -103,7 +101,7 @@ responses, more capacity, analytics and other features like archival
|
||||
data.
|
||||
|
||||
When you are ready to sign up and start using for your own keys, please
|
||||
check out the [Provider API Keys](https://docs.ethers.io/v5/api-keys/) in
|
||||
check out the [Provider API Keys](https://docs.ethers.org/v5/api-keys/) in
|
||||
the documentation.
|
||||
|
||||
A special thanks to these services for providing community resources:
|
||||
|
||||
34
SECURITY.md
Normal file
34
SECURITY.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Maintaining multiple versions of the library is quite time consuming, so
|
||||
the majority of the effort is focused on the latest major release.
|
||||
|
||||
If you do require a version outside of this chart updated with patch fix,
|
||||
please [contact me](mailto:github@ricmoo.com).
|
||||
|
||||
| Version | Supported | Initial Release |
|
||||
| ------- | ------------------------------------------ | ----------------- |
|
||||
| 6.0.x | :white_check_mark: | 2023-02-02 |
|
||||
| 5.0.x | :white_check_mark: (security updates) | 2020-06-12 |
|
||||
| 4.0.x | :x: | 2018-10-01 |
|
||||
| 3.0.x | :x: | 2018-03-05 |
|
||||
| 2.2.x | :x: | 2018-01-11 |
|
||||
| 2.1.x | :x: | 2017-05-22 |
|
||||
| 2.0.x | :x: | 2017-04-05 |
|
||||
| 1.0.x | :x: | 2016-08-23 |
|
||||
| 0.0.x | :x: | 2016-07-14 |
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you identify a security vulnerability with this library (or any dependency),
|
||||
please do not hesitate to contact [github@ricmoo.com](mailto:github@ricmoo.com)
|
||||
immediately.
|
||||
|
||||
I try to respond within the same day and will address any concern as quickly
|
||||
as possible (including code fixes and publishing to NPM).
|
||||
|
||||
Any vulnerability will also be published to this file, along with credits,
|
||||
pertinent information and links to fixes.
|
||||
22
dist/README.md
vendored
Normal file
22
dist/README.md
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
Distribution Folder
|
||||
===================
|
||||
|
||||
The contents of this folder are for using `import` in ESM
|
||||
browser-base projects.
|
||||
|
||||
The `ethers.js` (and `ethers.min.js`) files only include the
|
||||
English wordlist to conserve space.
|
||||
|
||||
For additional Wordlist support, the `wordlist-extra.js` (and
|
||||
`wordlist-extra.min.js`) should be imported too.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm build dist` target using
|
||||
`rollup` and the `/rollup.config.js` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/dist`.
|
||||
698
dist/ethers.js
vendored
698
dist/ethers.js
vendored
File diff suppressed because it is too large
Load Diff
2
dist/ethers.js.map
vendored
2
dist/ethers.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/ethers.min.js
vendored
2
dist/ethers.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/wordlists-extra.js
vendored
2
dist/wordlists-extra.js
vendored
@@ -145,7 +145,7 @@ const u64 = {
|
||||
add, add3L, add3H, add4L, add4H, add5H, add5L,
|
||||
};
|
||||
|
||||
const version = "6.0.0";
|
||||
const version = "6.0.2";
|
||||
|
||||
/**
|
||||
* Property helper functions.
|
||||
|
||||
2
dist/wordlists-extra.js.map
vendored
2
dist/wordlists-extra.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/wordlists-extra.min.js
vendored
2
dist/wordlists-extra.min.js
vendored
File diff suppressed because one or more lines are too long
5
docs.wrm/README.md
Normal file
5
docs.wrm/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
Documentation Source
|
||||
====================
|
||||
|
||||
This folder contains all the Flatworm source for the documentation.
|
||||
|
||||
@@ -13,11 +13,26 @@ const subtitle = (function(version) {
|
||||
return version.substring(dash + 1);
|
||||
})(version);
|
||||
|
||||
const extraLinks = function() {
|
||||
return [
|
||||
`link-cdnjs [ethers.min.js](https:/\/cdnjs.cloudflare.com/ajax/libs/ethers/${ version }/ethers.min.js)`,
|
||||
`link-cdnjs-wordlists [wordlists-extra.min.js](https:/\/cdnjs.cloudflare.com/ajax/libs/ethers/${ version }/wordlists-extra.min.js)`,
|
||||
];
|
||||
}
|
||||
|
||||
export default {
|
||||
title, subtitle,
|
||||
|
||||
// Where all the basic documentation is
|
||||
docRoot: ".",
|
||||
|
||||
// Where all the code is for the jsdocs API crawler
|
||||
codeRoot: "../src.ts/index.ts",
|
||||
|
||||
// Place all files in the /v6/ folder
|
||||
prefix: "v6",
|
||||
|
||||
// Prepare the context for running the examples
|
||||
contextify: function(context) {
|
||||
Object.assign(context, ethers);
|
||||
context.provider = new ethers.InfuraProvider();
|
||||
@@ -42,22 +57,28 @@ export default {
|
||||
};
|
||||
},
|
||||
|
||||
// The base URL to use for the <src> links
|
||||
srcBaseUrl: "https:/\/github.com/ethers-io/ethers.js/blob/main/src.ts/{FILENAME}#L{LINENO}",
|
||||
|
||||
// Used at the bottom of each page to indicate the last-modified-time.
|
||||
// This uses the most recent time in the repo that the file was
|
||||
// updated.
|
||||
getTimestamp: function(path) {
|
||||
return getModifiedTime(path);
|
||||
},
|
||||
|
||||
docRoot: ".",
|
||||
|
||||
codeRoot: "../src.ts/index.ts",
|
||||
// All the links to pull in
|
||||
links: [
|
||||
"./links/javascript.txt",
|
||||
"./links/npm.txt",
|
||||
"./links/projects.txt",
|
||||
"./links/ricmoo.txt",
|
||||
"./links/specs.txt",
|
||||
"./links/wiki.txt"
|
||||
"./links/wiki.txt",
|
||||
extraLinks
|
||||
],
|
||||
|
||||
// Extra files to copy over to the /static folder
|
||||
staticFiles: [
|
||||
"logo.svg",
|
||||
"social.jpg"
|
||||
|
||||
@@ -23,6 +23,6 @@ about the entire Application Programming Interface.
|
||||
|
||||
_subsection: Older Documentation
|
||||
|
||||
- [v5 documentation here](link-docs-v5)
|
||||
- [v4 documentation here](link-docs-v4)
|
||||
- [v3 documentation here](link-docs-v3)
|
||||
- [v5 documentation](link-docs-v5)
|
||||
- [v4 documentation](link-docs-v4)
|
||||
- [v3 documentation](link-docs-v3)
|
||||
|
||||
@@ -6,9 +6,9 @@ link-ci [Ethers CI](https://github.com/ethers-io/ethers.js/actions/runs/15800690
|
||||
link-discussion [Ethers Discussion](https://github.com/ethers-io/ethers.js/discussions)
|
||||
link-issue [Open Ethers Issue](https://github.com/ethers-io/ethers.js/issues/new/choose)
|
||||
link-issues [Ethers Issues](https://github.com/ethers-io/ethers.js/issues)
|
||||
link-docs-v3 [V3 Documentation](https://docs.ethers.io/v3/)
|
||||
link-docs-v4 [V4 Documentation](https://docs.ethers.io/v4/)
|
||||
link-docs-v5 [V5 Documentation](https://docs.ethers.io/v5/)
|
||||
link-docs-v3 [V3 Documentation](https://docs.ethers.org/v3/)
|
||||
link-docs-v4 [V4 Documentation](https://docs.ethers.org/v4/)
|
||||
link-docs-v5 [V5 Documentation](https://docs.ethers.org/v5/)
|
||||
|
||||
# Social profiles
|
||||
link-repo [GitHub Repo](https://github.com/ethers-io/ethers.js)
|
||||
|
||||
@@ -206,3 +206,23 @@ _code: default AbiCoder @lang<script>
|
||||
// instance is returned.
|
||||
coder = AbiCoder.defaultAbiCoder()
|
||||
|
||||
_code: getting a JSON-RPC quantity @lang<script>
|
||||
// In v5:
|
||||
hex = ethers.util.hexValue(value)
|
||||
|
||||
// In v6:
|
||||
hex = ethers.toQuantity(value)
|
||||
|
||||
_code: using Bytes32 strings @lang<script>
|
||||
// In v5:
|
||||
bytes32 = formatBytes32String(text)
|
||||
text = parseBytes32String(bytes32)
|
||||
|
||||
// In v6:
|
||||
bytes32 = encodeBytes32String(text)
|
||||
text = decodeBytes32String(bytes32)
|
||||
|
||||
_subsection: Removed Classes and functions
|
||||
|
||||
The **Logger** class has been replaced by
|
||||
[several Error utility functions](about-errors).
|
||||
|
||||
16
lib.commonjs/README.md
Normal file
16
lib.commonjs/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
CommonJS Files
|
||||
==============
|
||||
|
||||
The contents of this folder are for using `require` in CommonJS
|
||||
projects.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm run build-commonjs` target
|
||||
using `tsc` and the `/tsconfig.commonjs.json` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/lib.commonjs`.
|
||||
@@ -1,5 +1,5 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.version = void 0;
|
||||
exports.version = "6.0.0";
|
||||
exports.version = "6.0.2";
|
||||
//# sourceMappingURL=_version.js.map
|
||||
@@ -33,10 +33,12 @@ const SimpleTokens = {
|
||||
",": "COMMA", "@": "AT"
|
||||
};
|
||||
// Parser regexes to consume the next token
|
||||
const regexWhitespace = new RegExp("^(\\s*)");
|
||||
const regexNumber = new RegExp("^([0-9]+)");
|
||||
const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
|
||||
const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))");
|
||||
const regexWhitespacePrefix = new RegExp("^(\\s*)");
|
||||
const regexNumberPrefix = new RegExp("^([0-9]+)");
|
||||
const regexIdPrefix = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
|
||||
// Parser regexs to check validity
|
||||
const regexId = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$");
|
||||
const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");
|
||||
class TokenString {
|
||||
#offset;
|
||||
#tokens;
|
||||
@@ -145,7 +147,7 @@ function lex(text) {
|
||||
while (offset < text.length) {
|
||||
// Strip off any leading whitespace
|
||||
let cur = text.substring(offset);
|
||||
let match = cur.match(regexWhitespace);
|
||||
let match = cur.match(regexWhitespacePrefix);
|
||||
if (match) {
|
||||
offset += match[1].length;
|
||||
cur = text.substring(offset);
|
||||
@@ -194,7 +196,7 @@ function lex(text) {
|
||||
}
|
||||
continue;
|
||||
}
|
||||
match = cur.match(regexIdentifier);
|
||||
match = cur.match(regexIdPrefix);
|
||||
if (match) {
|
||||
token.text = match[1];
|
||||
offset += token.text.length;
|
||||
@@ -209,7 +211,7 @@ function lex(text) {
|
||||
token.type = "ID";
|
||||
continue;
|
||||
}
|
||||
match = cur.match(regexNumber);
|
||||
match = cur.match(regexNumberPrefix);
|
||||
if (match) {
|
||||
token.text = match[1];
|
||||
token.type = "NUMBER";
|
||||
@@ -654,7 +656,7 @@ class ParamType {
|
||||
return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);
|
||||
}
|
||||
const name = obj.name;
|
||||
(0, index_js_1.assertArgument)(!name || (typeof (name) === "string" && name.match(regexIdentifier)), "invalid name", "obj.name", name);
|
||||
(0, index_js_1.assertArgument)(!name || (typeof (name) === "string" && name.match(regexId)), "invalid name", "obj.name", name);
|
||||
let indexed = obj.indexed;
|
||||
if (indexed != null) {
|
||||
(0, index_js_1.assertArgument)(allowIndexed, "parameter cannot be indexed", "obj.indexed", obj.indexed);
|
||||
@@ -799,7 +801,7 @@ class NamedFragment extends Fragment {
|
||||
*/
|
||||
constructor(guard, type, name, inputs) {
|
||||
super(guard, type, inputs);
|
||||
(0, index_js_1.assertArgument)(typeof (name) === "string" && name.match(regexIdentifier), "invalid identifier", "name", name);
|
||||
(0, index_js_1.assertArgument)(typeof (name) === "string" && name.match(regexId), "invalid identifier", "name", name);
|
||||
inputs = Object.freeze(inputs.slice());
|
||||
(0, index_js_1.defineProperties)(this, { name });
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -33,7 +33,7 @@ function showThrottleMessage(service) {
|
||||
console.log("signing up for your own API keys to improve performance, increase your");
|
||||
console.log("request rate/limit and enable other perks, such as metrics and advanced APIs.");
|
||||
console.log("");
|
||||
console.log("For more details: https:/\/docs.ethers.io/api-keys/");
|
||||
console.log("For more details: https:/\/docs.ethers.org/api-keys/");
|
||||
console.log("==========================");
|
||||
}
|
||||
exports.showThrottleMessage = showThrottleMessage;
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../src.ts/providers/community.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAeH,kDAAkD;AAClD,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;AAErC;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAC,OAAe;IAC/C,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO;KAAE;IACnC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,6BAA8B,OAAQ,sCAAsC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC;AAhBD,kDAgBC"}
|
||||
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../src.ts/providers/community.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAeH,kDAAkD;AAClD,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;AAErC;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAC,OAAe;IAC/C,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO;KAAE;IACnC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,6BAA8B,OAAQ,sCAAsC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC;AAhBD,kDAgBC"}
|
||||
4
lib.commonjs/providers/provider.d.ts
vendored
4
lib.commonjs/providers/provider.d.ts
vendored
@@ -177,7 +177,7 @@ export declare class Block implements BlockParams, Iterable<string> {
|
||||
* prefetched them, by passing ``true`` to %%prefetchTxs%%
|
||||
* into [[provider_getBlock]].
|
||||
*/
|
||||
get transactionResponses(): Array<TransactionResponse>;
|
||||
get prefetchedTransactions(): Array<TransactionResponse>;
|
||||
/**
|
||||
* Returns a JSON-friendly value.
|
||||
*/
|
||||
@@ -195,7 +195,7 @@ export declare class Block implements BlockParams, Iterable<string> {
|
||||
* Get the transaction at %%indexe%% within this block.
|
||||
*/
|
||||
getTransaction(indexOrHash: number | string): Promise<TransactionResponse>;
|
||||
getTransactionResponse(indexOrHash: number | string): TransactionResponse;
|
||||
getPrefetchedTransaction(indexOrHash: number | string): TransactionResponse;
|
||||
/**
|
||||
* Has this block been mined.
|
||||
*
|
||||
|
||||
@@ -233,7 +233,7 @@ class Block {
|
||||
* prefetched them, by passing ``true`` to %%prefetchTxs%%
|
||||
* into [[provider_getBlock]].
|
||||
*/
|
||||
get transactionResponses() {
|
||||
get prefetchedTransactions() {
|
||||
const txs = this.#transactions.slice();
|
||||
// Doesn't matter...
|
||||
if (txs.length === 0) {
|
||||
@@ -326,8 +326,8 @@ class Block {
|
||||
return tx;
|
||||
}
|
||||
}
|
||||
getTransactionResponse(indexOrHash) {
|
||||
const txs = this.transactionResponses;
|
||||
getPrefetchedTransaction(indexOrHash) {
|
||||
const txs = this.prefetchedTransactions;
|
||||
if (typeof (indexOrHash) === "number") {
|
||||
return txs[indexOrHash];
|
||||
}
|
||||
@@ -337,7 +337,7 @@ class Block {
|
||||
return tx;
|
||||
}
|
||||
}
|
||||
throw new Error("no such tx");
|
||||
(0, index_js_1.assertArgument)(false, "no matching transaction", "indexOrHash", indexOrHash);
|
||||
}
|
||||
/**
|
||||
* Has this block been mined.
|
||||
@@ -362,23 +362,6 @@ class Block {
|
||||
exports.Block = Block;
|
||||
//////////////////////
|
||||
// Log
|
||||
/*
|
||||
export interface LogParams {
|
||||
transactionHash: string;
|
||||
blockHash: string;
|
||||
blockNumber: number;
|
||||
|
||||
removed: boolean;
|
||||
|
||||
address: string;
|
||||
data: string;
|
||||
|
||||
topics: ReadonlyArray<string>;
|
||||
|
||||
index: number;
|
||||
transactionIndex: number;
|
||||
}
|
||||
*/
|
||||
class Log {
|
||||
provider;
|
||||
transactionHash;
|
||||
@@ -405,9 +388,6 @@ class Log {
|
||||
transactionIndex: log.transactionIndex,
|
||||
});
|
||||
}
|
||||
//connect(provider: Provider): Log {
|
||||
// return new Log(this, provider);
|
||||
//}
|
||||
toJSON() {
|
||||
const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;
|
||||
return {
|
||||
@@ -439,32 +419,6 @@ exports.Log = Log;
|
||||
//////////////////////
|
||||
// Transaction Receipt
|
||||
/*
|
||||
export interface TransactionReceiptParams {
|
||||
to: null | string;
|
||||
from: string;
|
||||
contractAddress: null | string;
|
||||
|
||||
hash: string;
|
||||
index: number;
|
||||
|
||||
blockHash: string;
|
||||
blockNumber: number;
|
||||
|
||||
logsBloom: string;
|
||||
logs: ReadonlyArray<LogParams>;
|
||||
|
||||
gasUsed: bigint;
|
||||
cumulativeGasUsed: bigint;
|
||||
gasPrice?: null | bigint;
|
||||
effectiveGasPrice?: null | bigint;
|
||||
|
||||
type: number;
|
||||
//byzantium: boolean;
|
||||
status: null | number;
|
||||
root: null | string;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
export interface LegacyTransactionReceipt {
|
||||
byzantium: false;
|
||||
status: null;
|
||||
@@ -519,9 +473,6 @@ class TransactionReceipt {
|
||||
});
|
||||
}
|
||||
get logs() { return this.#logs; }
|
||||
//connect(provider: Provider): TransactionReceipt {
|
||||
// return new TransactionReceipt(this, provider);
|
||||
//}
|
||||
toJSON() {
|
||||
const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, //byzantium,
|
||||
status, root } = this;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -10,13 +10,19 @@ const index_js_1 = require("../utils/index.js");
|
||||
class BlockConnectionSubscriber {
|
||||
#provider;
|
||||
#blockNumber;
|
||||
#running;
|
||||
#filterId;
|
||||
constructor(provider) {
|
||||
this.#provider = provider;
|
||||
this.#blockNumber = -2;
|
||||
this.#running = false;
|
||||
this.#filterId = null;
|
||||
}
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
this.#filterId = this.#provider._subscribe(["newHeads"], (result) => {
|
||||
const blockNumber = (0, index_js_1.getNumber)(result.number);
|
||||
const initial = (this.#blockNumber === -2) ? blockNumber : (this.#blockNumber + 1);
|
||||
@@ -27,6 +33,10 @@ class BlockConnectionSubscriber {
|
||||
});
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
if (this.#filterId != null) {
|
||||
this.#provider._unsubscribe(this.#filterId);
|
||||
this.#filterId = null;
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"subscriber-connection.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-connection.ts"],"names":[],"mappings":";;;AACA,gDAA8C;AAmB9C;;;;GAIG;AACH,MAAa,yBAAyB;IAClC,SAAS,CAAwB;IACjC,YAAY,CAAS;IAErB,SAAS,CAAgB;IAEzB,YAAY,QAA+B;QACvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAE,UAAU,CAAE,EAAE,CAAC,MAAW,EAAE,EAAE;YACvE,MAAM,WAAW,GAAG,IAAA,oBAAS,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;YACjF,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACL,CAAC;IAED,KAAK,CAAC,eAAyB;QAC3B,IAAI,eAAe,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;SAAE;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ;AAtCD,8DAsCC"}
|
||||
{"version":3,"file":"subscriber-connection.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-connection.ts"],"names":[],"mappings":";;;AACA,gDAA8C;AAmB9C;;;;GAIG;AACH,MAAa,yBAAyB;IAClC,SAAS,CAAwB;IACjC,YAAY,CAAS;IAErB,QAAQ,CAAU;IAElB,SAAS,CAAgB;IAEzB,YAAY,QAA+B;QACvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;SAAE;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAE,UAAU,CAAE,EAAE,CAAC,MAAW,EAAE,EAAE;YACvE,MAAM,WAAW,GAAG,IAAA,oBAAS,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;YACjF,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;SAAE;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACL,CAAC;IAED,KAAK,CAAC,eAAyB;QAC3B,IAAI,eAAe,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;SAAE;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ;AA/CD,8DA+CC"}
|
||||
@@ -19,12 +19,14 @@ class FilterIdSubscriber {
|
||||
#provider;
|
||||
#filterIdPromise;
|
||||
#poller;
|
||||
#running;
|
||||
#network;
|
||||
#hault;
|
||||
constructor(provider) {
|
||||
this.#provider = provider;
|
||||
this.#filterIdPromise = null;
|
||||
this.#poller = this.#poll.bind(this);
|
||||
this.#running = false;
|
||||
this.#network = null;
|
||||
this.#hault = false;
|
||||
}
|
||||
@@ -74,8 +76,18 @@ class FilterIdSubscriber {
|
||||
});
|
||||
}
|
||||
}
|
||||
start() { this.#poll(-2); }
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
this.#poll(-2);
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
this.#hault = true;
|
||||
this.#teardown();
|
||||
this.#provider.off("block", this.#poller);
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"subscriber-filterid.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-filterid.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"subscriber-filterid.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-filterid.ts"],"names":[],"mappings":"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"}
|
||||
@@ -68,14 +68,14 @@ class PollingBlockSubscriber {
|
||||
}
|
||||
start() {
|
||||
if (this.#poller) {
|
||||
throw new Error("subscriber already running");
|
||||
return;
|
||||
}
|
||||
this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
|
||||
this.#poll();
|
||||
}
|
||||
stop() {
|
||||
if (!this.#poller) {
|
||||
throw new Error("subscriber not running");
|
||||
return;
|
||||
}
|
||||
this.#provider._clearTimeout(this.#poller);
|
||||
this.#poller = null;
|
||||
@@ -99,8 +99,10 @@ exports.PollingBlockSubscriber = PollingBlockSubscriber;
|
||||
class OnBlockSubscriber {
|
||||
#provider;
|
||||
#poll;
|
||||
#running;
|
||||
constructor(provider) {
|
||||
this.#provider = provider;
|
||||
this.#running = false;
|
||||
this.#poll = (blockNumber) => {
|
||||
this._poll(blockNumber, this.#provider);
|
||||
};
|
||||
@@ -109,10 +111,18 @@ class OnBlockSubscriber {
|
||||
throw new Error("sub-classes must override this");
|
||||
}
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
this.#poll(-2);
|
||||
this.#provider.on("block", this.#poll);
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
this.#provider.off("block", this.#poll);
|
||||
}
|
||||
pause(dropWhilePaused) { this.stop(); }
|
||||
@@ -164,6 +174,7 @@ class PollingEventSubscriber {
|
||||
#provider;
|
||||
#filter;
|
||||
#poller;
|
||||
#running;
|
||||
// The most recent block we have scanned for events. The value -2
|
||||
// indicates we still need to fetch an initial block number
|
||||
#blockNumber;
|
||||
@@ -171,6 +182,7 @@ class PollingEventSubscriber {
|
||||
this.#provider = provider;
|
||||
this.#filter = copy(filter);
|
||||
this.#poller = this.#poll.bind(this);
|
||||
this.#running = false;
|
||||
this.#blockNumber = -2;
|
||||
}
|
||||
async #poll(blockNumber) {
|
||||
@@ -196,6 +208,10 @@ class PollingEventSubscriber {
|
||||
}
|
||||
}
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
if (this.#blockNumber === -2) {
|
||||
this.#provider.getBlockNumber().then((blockNumber) => {
|
||||
this.#blockNumber = blockNumber;
|
||||
@@ -204,6 +220,10 @@ class PollingEventSubscriber {
|
||||
this.#provider.on("block", this.#poller);
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
this.#provider.off("block", this.#poller);
|
||||
}
|
||||
pause(dropWhilePaused) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
1
lib.commonjs/providers/subscriber.d.ts
vendored
1
lib.commonjs/providers/subscriber.d.ts
vendored
@@ -1 +0,0 @@
|
||||
export {};
|
||||
@@ -1,58 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/*
|
||||
import { defineProperties } from "@ethersproject/properties";
|
||||
export type EventCommon = "block" | "debug" | "blockObject";
|
||||
|
||||
export type Event = EventCommon | string | { address?: string, topics: Array<string | Array<string>> }
|
||||
|
||||
export type EventLike = Event | Array<string>;
|
||||
|
||||
export function getTag(eventName: Event): string {
|
||||
if (typeof(eventName) === "string") { return eventName; }
|
||||
|
||||
if (typeof(eventName) === "object") {
|
||||
return (eventName.address || "*") + (eventName.topics || []).map((topic) => {
|
||||
if (typeof(topic) === "string") { return topic; }
|
||||
return topic.join("|");
|
||||
}).join("&");
|
||||
}
|
||||
|
||||
throw new Error("FOO");
|
||||
}
|
||||
|
||||
export function getEvent(tag: string): Event {
|
||||
}
|
||||
|
||||
let nextId = 1;
|
||||
|
||||
export class Subscriber {
|
||||
readonly id!: number;
|
||||
readonly tag!: string;
|
||||
|
||||
#paused: boolean;
|
||||
#blockNumber: number;
|
||||
|
||||
constructor(tag: string) {
|
||||
this.#paused = false;
|
||||
this.#blockNumber = -1;
|
||||
defineProperties<Subscriber>(this, { id: nextId++, tag });
|
||||
}
|
||||
|
||||
get blockNumber(): number {
|
||||
return this.#blockNumber;
|
||||
}
|
||||
_setBlockNumber(blockNumber: number): void { this.#blockNumber = blockNumber; }
|
||||
|
||||
setup(): void { }
|
||||
teardown(): void { }
|
||||
|
||||
isPaused(): boolean { return this.#paused; }
|
||||
pause(): void { this.#paused = true; }
|
||||
resume(): void { this.#paused = false; }
|
||||
|
||||
resubscribeInfo(): string { return this.tag; }
|
||||
resubscribe(info: string): boolean { return true; }
|
||||
}
|
||||
*/
|
||||
//# sourceMappingURL=subscriber.js.map
|
||||
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"subscriber.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDE"}
|
||||
63
lib.commonjs/utils/errors.d.ts
vendored
63
lib.commonjs/utils/errors.d.ts
vendored
@@ -10,11 +10,62 @@ export type ErrorInfo<T> = Omit<T, "code" | "name" | "message">;
|
||||
* All errors emitted by ethers have an **ErrorCode** to help
|
||||
* identify and coalesce errors to simplfy programatic analysis.
|
||||
*
|
||||
* _property: ``"UNKNOWN_ERROR"``
|
||||
* This is a general puspose fallback when no other error makes sense
|
||||
* or the error wasn't expected
|
||||
* Each **ErrorCode** is the %%code%% proerty of a coresponding
|
||||
* [[EthersError]].
|
||||
*
|
||||
* _property: ``"NOT_IMPLEMENTED"``
|
||||
* **Generic Errors**
|
||||
*
|
||||
* **``"UNKNOWN_ERROR"``** - see [[UnknownError]]
|
||||
*
|
||||
* **``"NOT_IMPLEMENTED"``** - see [[NotImplementedError]]
|
||||
*
|
||||
* **``"UNSUPPORTED_OPERATION"``** - see [[UnsupportedOperationError]]
|
||||
*
|
||||
* **``"NETWORK_ERROR"``** - see [[NetworkError]]
|
||||
*
|
||||
* **``"SERVER_ERROR"``** - see [[ServerError]]
|
||||
*
|
||||
* **``"TIMEOUT"``** - see [[TimeoutError]]
|
||||
*
|
||||
* **``"BAD_DATA"``** - see [[BadDataError]]
|
||||
*
|
||||
* **``"CANCELLED"``** - see [[CancelledError]]
|
||||
*
|
||||
* **Operational Errors**
|
||||
*
|
||||
* **``"BUFFER_OVERRUN"``** - see [[BufferOverrunError]]
|
||||
*
|
||||
* **``"NUMERIC_FAULT"``** - see [[NumericFaultError]]
|
||||
*
|
||||
* **Argument Errors**
|
||||
*
|
||||
* **``"INVALID_ARGUMENT"``** - see [[InvalidArgumentError]]
|
||||
*
|
||||
* **``"MISSING_ARGUMENT"``** - see [[MissingArgumentError]]
|
||||
*
|
||||
* **``"UNEXPECTED_ARGUMENT"``** - see [[UnexpectedArgumentError]]
|
||||
*
|
||||
* **``"VALUE_MISMATCH"``** - //unused//
|
||||
*
|
||||
* **Blockchain Errors**
|
||||
*
|
||||
* **``"CALL_EXCEPTION"``** - see [[CallExceptionError]]
|
||||
*
|
||||
* **``"INSUFFICIENT_FUNDS"``** - see [[InsufficientFundsError]]
|
||||
*
|
||||
* **``"NONCE_EXPIRED"``** - see [[NonceExpiredError]]
|
||||
*
|
||||
* **``"REPLACEMENT_UNDERPRICED"``** - see [[ReplacementUnderpricedError]]
|
||||
*
|
||||
* **``"TRANSACTION_REPLACED"``** - see [[TransactionReplacedError]]
|
||||
*
|
||||
* **``"UNCONFIGURED_NAME"``** - see [[UnconfiguredNameError]]
|
||||
*
|
||||
* **``"OFFCHAIN_FAULT"``** - see [[OffchainFaultError]]
|
||||
*
|
||||
* **User Interaction Errors**
|
||||
*
|
||||
* **``"ACTION_REJECTED"``** - see [[ActionRejectedError]]
|
||||
*/
|
||||
export type ErrorCode = "UNKNOWN_ERROR" | "NOT_IMPLEMENTED" | "UNSUPPORTED_OPERATION" | "NETWORK_ERROR" | "SERVER_ERROR" | "TIMEOUT" | "BAD_DATA" | "CANCELLED" | "BUFFER_OVERRUN" | "NUMERIC_FAULT" | "INVALID_ARGUMENT" | "MISSING_ARGUMENT" | "UNEXPECTED_ARGUMENT" | "VALUE_MISMATCH" | "CALL_EXCEPTION" | "INSUFFICIENT_FUNDS" | "NONCE_EXPIRED" | "REPLACEMENT_UNDERPRICED" | "TRANSACTION_REPLACED" | "UNCONFIGURED_NAME" | "OFFCHAIN_FAULT" | "ACTION_REJECTED";
|
||||
/**
|
||||
@@ -333,7 +384,7 @@ export interface TransactionReplacedError extends EthersError<"TRANSACTION_REPLA
|
||||
* been configured.
|
||||
*
|
||||
* This could indicate an ENS name is unowned or that the current
|
||||
* address being pointed to is the [[Zero]].
|
||||
* address being pointed to is the [[ZeroAddress]].
|
||||
*/
|
||||
export interface UnconfiguredNameError extends EthersError<"UNCONFIGURED_NAME"> {
|
||||
/**
|
||||
@@ -391,7 +442,7 @@ export type CodedEthersError<T> = T extends "UNKNOWN_ERROR" ? UnknownError : T e
|
||||
*/
|
||||
export declare function isError<K extends ErrorCode, T extends CodedEthersError<K>>(error: any, code: K): error is T;
|
||||
/**
|
||||
* Returns true if %%error%% is a [CALL_EXCEPTION](api:CallExceptionError).
|
||||
* Returns true if %%error%% is a [[CallExceptionError].
|
||||
*/
|
||||
export declare function isCallException(error: any): error is CallExceptionError;
|
||||
/**
|
||||
|
||||
@@ -69,7 +69,7 @@ function isError(error, code) {
|
||||
}
|
||||
exports.isError = isError;
|
||||
/**
|
||||
* Returns true if %%error%% is a [CALL_EXCEPTION](api:CallExceptionError).
|
||||
* Returns true if %%error%% is a [[CallExceptionError].
|
||||
*/
|
||||
function isCallException(error) {
|
||||
return isError(error, "CALL_EXCEPTION");
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -80,17 +80,14 @@ class FetchCancelSignal {
|
||||
});
|
||||
}
|
||||
addListener(listener) {
|
||||
(0, errors_js_1.assert)(this.#cancelled, "singal already cancelled", "UNSUPPORTED_OPERATION", {
|
||||
(0, errors_js_1.assert)(!this.#cancelled, "singal already cancelled", "UNSUPPORTED_OPERATION", {
|
||||
operation: "fetchCancelSignal.addCancelListener"
|
||||
});
|
||||
this.#listeners.push(listener);
|
||||
}
|
||||
get cancelled() { return this.#cancelled; }
|
||||
checkSignal() {
|
||||
if (!this.cancelled) {
|
||||
return;
|
||||
}
|
||||
(0, errors_js_1.assert)(false, "cancelled", "CANCELLED", {});
|
||||
(0, errors_js_1.assert)(!this.cancelled, "cancelled", "CANCELLED", {});
|
||||
}
|
||||
}
|
||||
exports.FetchCancelSignal = FetchCancelSignal;
|
||||
|
||||
File diff suppressed because one or more lines are too long
16
lib.esm/README.md
Normal file
16
lib.esm/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
ESM Files
|
||||
=========
|
||||
|
||||
The contents of this folder are for using `import` in ESM
|
||||
projects.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm run build` target
|
||||
using `tsc` and the `/tsconfig.esm.json` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/lib.esm`.
|
||||
@@ -1,2 +1,2 @@
|
||||
export const version = "6.0.0";
|
||||
export const version = "6.0.2";
|
||||
//# sourceMappingURL=_version.js.map
|
||||
@@ -30,10 +30,12 @@ const SimpleTokens = {
|
||||
",": "COMMA", "@": "AT"
|
||||
};
|
||||
// Parser regexes to consume the next token
|
||||
const regexWhitespace = new RegExp("^(\\s*)");
|
||||
const regexNumber = new RegExp("^([0-9]+)");
|
||||
const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
|
||||
const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))");
|
||||
const regexWhitespacePrefix = new RegExp("^(\\s*)");
|
||||
const regexNumberPrefix = new RegExp("^([0-9]+)");
|
||||
const regexIdPrefix = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
|
||||
// Parser regexs to check validity
|
||||
const regexId = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$");
|
||||
const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");
|
||||
class TokenString {
|
||||
#offset;
|
||||
#tokens;
|
||||
@@ -142,7 +144,7 @@ function lex(text) {
|
||||
while (offset < text.length) {
|
||||
// Strip off any leading whitespace
|
||||
let cur = text.substring(offset);
|
||||
let match = cur.match(regexWhitespace);
|
||||
let match = cur.match(regexWhitespacePrefix);
|
||||
if (match) {
|
||||
offset += match[1].length;
|
||||
cur = text.substring(offset);
|
||||
@@ -191,7 +193,7 @@ function lex(text) {
|
||||
}
|
||||
continue;
|
||||
}
|
||||
match = cur.match(regexIdentifier);
|
||||
match = cur.match(regexIdPrefix);
|
||||
if (match) {
|
||||
token.text = match[1];
|
||||
offset += token.text.length;
|
||||
@@ -206,7 +208,7 @@ function lex(text) {
|
||||
token.type = "ID";
|
||||
continue;
|
||||
}
|
||||
match = cur.match(regexNumber);
|
||||
match = cur.match(regexNumberPrefix);
|
||||
if (match) {
|
||||
token.text = match[1];
|
||||
token.type = "NUMBER";
|
||||
@@ -651,7 +653,7 @@ export class ParamType {
|
||||
return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);
|
||||
}
|
||||
const name = obj.name;
|
||||
assertArgument(!name || (typeof (name) === "string" && name.match(regexIdentifier)), "invalid name", "obj.name", name);
|
||||
assertArgument(!name || (typeof (name) === "string" && name.match(regexId)), "invalid name", "obj.name", name);
|
||||
let indexed = obj.indexed;
|
||||
if (indexed != null) {
|
||||
assertArgument(allowIndexed, "parameter cannot be indexed", "obj.indexed", obj.indexed);
|
||||
@@ -794,7 +796,7 @@ export class NamedFragment extends Fragment {
|
||||
*/
|
||||
constructor(guard, type, name, inputs) {
|
||||
super(guard, type, inputs);
|
||||
assertArgument(typeof (name) === "string" && name.match(regexIdentifier), "invalid identifier", "name", name);
|
||||
assertArgument(typeof (name) === "string" && name.match(regexId), "invalid identifier", "name", name);
|
||||
inputs = Object.freeze(inputs.slice());
|
||||
defineProperties(this, { name });
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -30,7 +30,7 @@ export function showThrottleMessage(service) {
|
||||
console.log("signing up for your own API keys to improve performance, increase your");
|
||||
console.log("request rate/limit and enable other perks, such as metrics and advanced APIs.");
|
||||
console.log("");
|
||||
console.log("For more details: https:/\/docs.ethers.io/api-keys/");
|
||||
console.log("For more details: https:/\/docs.ethers.org/api-keys/");
|
||||
console.log("==========================");
|
||||
}
|
||||
//# sourceMappingURL=community.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../src.ts/providers/community.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,kDAAkD;AAClD,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAC/C,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO;KAAE;IACnC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,6BAA8B,OAAQ,sCAAsC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC"}
|
||||
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../src.ts/providers/community.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,kDAAkD;AAClD,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAC/C,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO;KAAE;IACnC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,6BAA8B,OAAQ,sCAAsC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC"}
|
||||
@@ -228,7 +228,7 @@ export class Block {
|
||||
* prefetched them, by passing ``true`` to %%prefetchTxs%%
|
||||
* into [[provider_getBlock]].
|
||||
*/
|
||||
get transactionResponses() {
|
||||
get prefetchedTransactions() {
|
||||
const txs = this.#transactions.slice();
|
||||
// Doesn't matter...
|
||||
if (txs.length === 0) {
|
||||
@@ -321,8 +321,8 @@ export class Block {
|
||||
return tx;
|
||||
}
|
||||
}
|
||||
getTransactionResponse(indexOrHash) {
|
||||
const txs = this.transactionResponses;
|
||||
getPrefetchedTransaction(indexOrHash) {
|
||||
const txs = this.prefetchedTransactions;
|
||||
if (typeof (indexOrHash) === "number") {
|
||||
return txs[indexOrHash];
|
||||
}
|
||||
@@ -332,7 +332,7 @@ export class Block {
|
||||
return tx;
|
||||
}
|
||||
}
|
||||
throw new Error("no such tx");
|
||||
assertArgument(false, "no matching transaction", "indexOrHash", indexOrHash);
|
||||
}
|
||||
/**
|
||||
* Has this block been mined.
|
||||
@@ -356,23 +356,6 @@ export class Block {
|
||||
}
|
||||
//////////////////////
|
||||
// Log
|
||||
/*
|
||||
export interface LogParams {
|
||||
transactionHash: string;
|
||||
blockHash: string;
|
||||
blockNumber: number;
|
||||
|
||||
removed: boolean;
|
||||
|
||||
address: string;
|
||||
data: string;
|
||||
|
||||
topics: ReadonlyArray<string>;
|
||||
|
||||
index: number;
|
||||
transactionIndex: number;
|
||||
}
|
||||
*/
|
||||
export class Log {
|
||||
provider;
|
||||
transactionHash;
|
||||
@@ -399,9 +382,6 @@ export class Log {
|
||||
transactionIndex: log.transactionIndex,
|
||||
});
|
||||
}
|
||||
//connect(provider: Provider): Log {
|
||||
// return new Log(this, provider);
|
||||
//}
|
||||
toJSON() {
|
||||
const { address, blockHash, blockNumber, data, index, removed, topics, transactionHash, transactionIndex } = this;
|
||||
return {
|
||||
@@ -432,32 +412,6 @@ export class Log {
|
||||
//////////////////////
|
||||
// Transaction Receipt
|
||||
/*
|
||||
export interface TransactionReceiptParams {
|
||||
to: null | string;
|
||||
from: string;
|
||||
contractAddress: null | string;
|
||||
|
||||
hash: string;
|
||||
index: number;
|
||||
|
||||
blockHash: string;
|
||||
blockNumber: number;
|
||||
|
||||
logsBloom: string;
|
||||
logs: ReadonlyArray<LogParams>;
|
||||
|
||||
gasUsed: bigint;
|
||||
cumulativeGasUsed: bigint;
|
||||
gasPrice?: null | bigint;
|
||||
effectiveGasPrice?: null | bigint;
|
||||
|
||||
type: number;
|
||||
//byzantium: boolean;
|
||||
status: null | number;
|
||||
root: null | string;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
export interface LegacyTransactionReceipt {
|
||||
byzantium: false;
|
||||
status: null;
|
||||
@@ -512,9 +466,6 @@ export class TransactionReceipt {
|
||||
});
|
||||
}
|
||||
get logs() { return this.#logs; }
|
||||
//connect(provider: Provider): TransactionReceipt {
|
||||
// return new TransactionReceipt(this, provider);
|
||||
//}
|
||||
toJSON() {
|
||||
const { to, from, contractAddress, hash, index, blockHash, blockNumber, logsBloom, logs, //byzantium,
|
||||
status, root } = this;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -7,13 +7,19 @@ import { getNumber } from "../utils/index.js";
|
||||
export class BlockConnectionSubscriber {
|
||||
#provider;
|
||||
#blockNumber;
|
||||
#running;
|
||||
#filterId;
|
||||
constructor(provider) {
|
||||
this.#provider = provider;
|
||||
this.#blockNumber = -2;
|
||||
this.#running = false;
|
||||
this.#filterId = null;
|
||||
}
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
this.#filterId = this.#provider._subscribe(["newHeads"], (result) => {
|
||||
const blockNumber = getNumber(result.number);
|
||||
const initial = (this.#blockNumber === -2) ? blockNumber : (this.#blockNumber + 1);
|
||||
@@ -24,6 +30,10 @@ export class BlockConnectionSubscriber {
|
||||
});
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
if (this.#filterId != null) {
|
||||
this.#provider._unsubscribe(this.#filterId);
|
||||
this.#filterId = null;
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"subscriber-connection.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-connection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAmB9C;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAClC,SAAS,CAAwB;IACjC,YAAY,CAAS;IAErB,SAAS,CAAgB;IAEzB,YAAY,QAA+B;QACvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAE,UAAU,CAAE,EAAE,CAAC,MAAW,EAAE,EAAE;YACvE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;YACjF,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACL,CAAC;IAED,KAAK,CAAC,eAAyB;QAC3B,IAAI,eAAe,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;SAAE;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ"}
|
||||
{"version":3,"file":"subscriber-connection.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-connection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAmB9C;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IAClC,SAAS,CAAwB;IACjC,YAAY,CAAS;IAErB,QAAQ,CAAU;IAElB,SAAS,CAAgB;IAEzB,YAAY,QAA+B;QACvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;SAAE;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAE,UAAU,CAAE,EAAE,CAAC,MAAW,EAAE,EAAE;YACvE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;YACjF,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;SAAE;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACL,CAAC;IAED,KAAK,CAAC,eAAyB;QAC3B,IAAI,eAAe,EAAE;YAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;SAAE;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACJ"}
|
||||
@@ -16,12 +16,14 @@ export class FilterIdSubscriber {
|
||||
#provider;
|
||||
#filterIdPromise;
|
||||
#poller;
|
||||
#running;
|
||||
#network;
|
||||
#hault;
|
||||
constructor(provider) {
|
||||
this.#provider = provider;
|
||||
this.#filterIdPromise = null;
|
||||
this.#poller = this.#poll.bind(this);
|
||||
this.#running = false;
|
||||
this.#network = null;
|
||||
this.#hault = false;
|
||||
}
|
||||
@@ -71,8 +73,18 @@ export class FilterIdSubscriber {
|
||||
});
|
||||
}
|
||||
}
|
||||
start() { this.#poll(-2); }
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
this.#poll(-2);
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
this.#hault = true;
|
||||
this.#teardown();
|
||||
this.#provider.off("block", this.#poller);
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"subscriber-filterid.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-filterid.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"subscriber-filterid.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber-filterid.ts"],"names":[],"mappings":"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"}
|
||||
@@ -64,14 +64,14 @@ export class PollingBlockSubscriber {
|
||||
}
|
||||
start() {
|
||||
if (this.#poller) {
|
||||
throw new Error("subscriber already running");
|
||||
return;
|
||||
}
|
||||
this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
|
||||
this.#poll();
|
||||
}
|
||||
stop() {
|
||||
if (!this.#poller) {
|
||||
throw new Error("subscriber not running");
|
||||
return;
|
||||
}
|
||||
this.#provider._clearTimeout(this.#poller);
|
||||
this.#poller = null;
|
||||
@@ -94,8 +94,10 @@ export class PollingBlockSubscriber {
|
||||
export class OnBlockSubscriber {
|
||||
#provider;
|
||||
#poll;
|
||||
#running;
|
||||
constructor(provider) {
|
||||
this.#provider = provider;
|
||||
this.#running = false;
|
||||
this.#poll = (blockNumber) => {
|
||||
this._poll(blockNumber, this.#provider);
|
||||
};
|
||||
@@ -104,10 +106,18 @@ export class OnBlockSubscriber {
|
||||
throw new Error("sub-classes must override this");
|
||||
}
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
this.#poll(-2);
|
||||
this.#provider.on("block", this.#poll);
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
this.#provider.off("block", this.#poll);
|
||||
}
|
||||
pause(dropWhilePaused) { this.stop(); }
|
||||
@@ -156,6 +166,7 @@ export class PollingEventSubscriber {
|
||||
#provider;
|
||||
#filter;
|
||||
#poller;
|
||||
#running;
|
||||
// The most recent block we have scanned for events. The value -2
|
||||
// indicates we still need to fetch an initial block number
|
||||
#blockNumber;
|
||||
@@ -163,6 +174,7 @@ export class PollingEventSubscriber {
|
||||
this.#provider = provider;
|
||||
this.#filter = copy(filter);
|
||||
this.#poller = this.#poll.bind(this);
|
||||
this.#running = false;
|
||||
this.#blockNumber = -2;
|
||||
}
|
||||
async #poll(blockNumber) {
|
||||
@@ -188,6 +200,10 @@ export class PollingEventSubscriber {
|
||||
}
|
||||
}
|
||||
start() {
|
||||
if (this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = true;
|
||||
if (this.#blockNumber === -2) {
|
||||
this.#provider.getBlockNumber().then((blockNumber) => {
|
||||
this.#blockNumber = blockNumber;
|
||||
@@ -196,6 +212,10 @@ export class PollingEventSubscriber {
|
||||
this.#provider.on("block", this.#poller);
|
||||
}
|
||||
stop() {
|
||||
if (!this.#running) {
|
||||
return;
|
||||
}
|
||||
this.#running = false;
|
||||
this.#provider.off("block", this.#poller);
|
||||
}
|
||||
pause(dropWhilePaused) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,57 +0,0 @@
|
||||
export {};
|
||||
/*
|
||||
import { defineProperties } from "@ethersproject/properties";
|
||||
export type EventCommon = "block" | "debug" | "blockObject";
|
||||
|
||||
export type Event = EventCommon | string | { address?: string, topics: Array<string | Array<string>> }
|
||||
|
||||
export type EventLike = Event | Array<string>;
|
||||
|
||||
export function getTag(eventName: Event): string {
|
||||
if (typeof(eventName) === "string") { return eventName; }
|
||||
|
||||
if (typeof(eventName) === "object") {
|
||||
return (eventName.address || "*") + (eventName.topics || []).map((topic) => {
|
||||
if (typeof(topic) === "string") { return topic; }
|
||||
return topic.join("|");
|
||||
}).join("&");
|
||||
}
|
||||
|
||||
throw new Error("FOO");
|
||||
}
|
||||
|
||||
export function getEvent(tag: string): Event {
|
||||
}
|
||||
|
||||
let nextId = 1;
|
||||
|
||||
export class Subscriber {
|
||||
readonly id!: number;
|
||||
readonly tag!: string;
|
||||
|
||||
#paused: boolean;
|
||||
#blockNumber: number;
|
||||
|
||||
constructor(tag: string) {
|
||||
this.#paused = false;
|
||||
this.#blockNumber = -1;
|
||||
defineProperties<Subscriber>(this, { id: nextId++, tag });
|
||||
}
|
||||
|
||||
get blockNumber(): number {
|
||||
return this.#blockNumber;
|
||||
}
|
||||
_setBlockNumber(blockNumber: number): void { this.#blockNumber = blockNumber; }
|
||||
|
||||
setup(): void { }
|
||||
teardown(): void { }
|
||||
|
||||
isPaused(): boolean { return this.#paused; }
|
||||
pause(): void { this.#paused = true; }
|
||||
resume(): void { this.#paused = false; }
|
||||
|
||||
resubscribeInfo(): string { return this.tag; }
|
||||
resubscribe(info: string): boolean { return true; }
|
||||
}
|
||||
*/
|
||||
//# sourceMappingURL=subscriber.js.map
|
||||
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"subscriber.js","sourceRoot":"","sources":["../../src.ts/providers/subscriber.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDE"}
|
||||
@@ -65,7 +65,7 @@ export function isError(error, code) {
|
||||
return (error && error.code === code);
|
||||
}
|
||||
/**
|
||||
* Returns true if %%error%% is a [CALL_EXCEPTION](api:CallExceptionError).
|
||||
* Returns true if %%error%% is a [[CallExceptionError].
|
||||
*/
|
||||
export function isCallException(error) {
|
||||
return isError(error, "CALL_EXCEPTION");
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -77,17 +77,14 @@ export class FetchCancelSignal {
|
||||
});
|
||||
}
|
||||
addListener(listener) {
|
||||
assert(this.#cancelled, "singal already cancelled", "UNSUPPORTED_OPERATION", {
|
||||
assert(!this.#cancelled, "singal already cancelled", "UNSUPPORTED_OPERATION", {
|
||||
operation: "fetchCancelSignal.addCancelListener"
|
||||
});
|
||||
this.#listeners.push(listener);
|
||||
}
|
||||
get cancelled() { return this.#cancelled; }
|
||||
checkSignal() {
|
||||
if (!this.cancelled) {
|
||||
return;
|
||||
}
|
||||
assert(false, "cancelled", "CANCELLED", {});
|
||||
assert(!this.cancelled, "cancelled", "CANCELLED", {});
|
||||
}
|
||||
}
|
||||
// Check the signal, throwing if it is cancelled
|
||||
|
||||
File diff suppressed because one or more lines are too long
22
output/post-build/dist/README.md
vendored
Normal file
22
output/post-build/dist/README.md
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
Distribution Folder
|
||||
===================
|
||||
|
||||
The contents of this folder are for using `import` in ESM
|
||||
browser-base projects.
|
||||
|
||||
The `ethers.js` (and `ethers.min.js`) files only include the
|
||||
English wordlist to conserve space.
|
||||
|
||||
For additional Wordlist support, the `wordlist-extra.js` (and
|
||||
`wordlist-extra.min.js`) should be imported too.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm build dist` target using
|
||||
`rollup` and the `/rollup.config.js` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/dist`.
|
||||
16
output/post-build/lib.commonjs/README.md
Normal file
16
output/post-build/lib.commonjs/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
CommonJS Files
|
||||
==============
|
||||
|
||||
The contents of this folder are for using `require` in CommonJS
|
||||
projects.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm run build-commonjs` target
|
||||
using `tsc` and the `/tsconfig.commonjs.json` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/lib.commonjs`.
|
||||
16
output/post-build/lib.esm/README.md
Normal file
16
output/post-build/lib.esm/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
ESM Files
|
||||
=========
|
||||
|
||||
The contents of this folder are for using `import` in ESM
|
||||
projects.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm run build` target
|
||||
using `tsc` and the `/tsconfig.esm.json` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/lib.esm`.
|
||||
16
output/post-build/types/README.md
Normal file
16
output/post-build/types/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
TypeScript Type Definitions
|
||||
===========================
|
||||
|
||||
The contents of this folder are the TypeScript definirtions for
|
||||
TypeScript projects.
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
The contents are generated via the `npm run build-types` target
|
||||
using `tsc` and the `/tsconfig.types.json` configuration.
|
||||
|
||||
Do not modify the files in this folder. They are deleted on `build-clean`.
|
||||
|
||||
To modify this `README.md`, see the `/output/post-build/types`.
|
||||
28
package-lock.json
generated
28
package-lock.json
generated
@@ -1,17 +1,27 @@
|
||||
{
|
||||
"name": "ethers",
|
||||
"version": "6.0.0-beta-exports.16",
|
||||
"version": "6.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "ethers",
|
||||
"version": "6.0.0-beta-exports.16",
|
||||
"version": "6.0.0",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/ethers-io/"
|
||||
},
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://www.buymeacoffee.com/ricmoo"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@adraffy/ens-normalize": "1.8.9",
|
||||
"@noble/hashes": "1.1.2",
|
||||
"@noble/secp256k1": "1.6.3",
|
||||
"@noble/secp256k1": "1.7.1",
|
||||
"aes-js": "4.0.0-beta.3",
|
||||
"tslib": "2.4.0",
|
||||
"ws": "8.5.0"
|
||||
@@ -88,9 +98,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@noble/secp256k1": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz",
|
||||
"integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==",
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
|
||||
"integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
@@ -1609,9 +1619,9 @@
|
||||
"integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA=="
|
||||
},
|
||||
"@noble/secp256k1": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz",
|
||||
"integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ=="
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
|
||||
"integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw=="
|
||||
},
|
||||
"@rollup/plugin-node-resolve": {
|
||||
"version": "13.3.0",
|
||||
|
||||
26
package.json
26
package.json
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"@adraffy/ens-normalize": "1.8.9",
|
||||
"@noble/hashes": "1.1.2",
|
||||
"@noble/secp256k1": "1.6.3",
|
||||
"@noble/secp256k1": "1.7.1",
|
||||
"aes-js": "4.0.0-beta.3",
|
||||
"tslib": "2.4.0",
|
||||
"ws": "8.5.0"
|
||||
@@ -31,6 +31,7 @@
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"ethereum": "donations.ethers.eth",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./lib.esm/index.js",
|
||||
@@ -93,7 +94,18 @@
|
||||
"types": "./types/wordlists/index.d.ts"
|
||||
}
|
||||
},
|
||||
"gitHead": "415efbfb0474298458a7f73b5b4959ecf93c3f30",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/ethers-io/"
|
||||
},
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://www.buymeacoffee.com/ricmoo"
|
||||
}
|
||||
],
|
||||
"gitHead": "6c338c1c5b4013db9754c9d1a33dcbf54330e5c7",
|
||||
"homepage": "https://ethers.org",
|
||||
"keywords": [
|
||||
"ethereum",
|
||||
"ethers",
|
||||
@@ -113,16 +125,16 @@
|
||||
},
|
||||
"scripts": {
|
||||
"_build-clean": "npm run clean && node lib.esm/_admin/update-version-const && npm run build-all && npm run _build-dist",
|
||||
"_build-dist": "rollup -c && uglifyjs ./dist/ethers.js -o ./dist/ethers.min.js && uglifyjs ./dist/wordlists-extra.js -o ./dist/wordlists-extra.min.js",
|
||||
"_build-dist": "rollup -c && uglifyjs ./dist/ethers.js -o ./dist/ethers.min.js && uglifyjs ./dist/wordlists-extra.js -o ./dist/wordlists-extra.min.js && cp ./output/post-build/dist/* ./dist/",
|
||||
"_dist-stats": "gzip -k9f -S '.gz' ./dist/ethers.min.js && gzip -k9f -S '.gz' ./dist/wordlists-extra.min.js && du -hs ./dist/*.gz && echo '' && du -hs ./dist/*.js",
|
||||
"auto-build": "npm run build -- -w",
|
||||
"build": "tsc --project tsconfig.esm.json",
|
||||
"build-all": "npm run build && npm run build-commonjs && npm run build-types",
|
||||
"build-all": "npm run build && cp ./output/post-build/lib.esm/* ./lib.esm/ && npm run build-commonjs && npm run build-types",
|
||||
"build-clean": "npm run clean && npm run build && node lib.esm/_admin/update-version.js && npm run build-all && npm run _build-dist && npm run _dist-stats",
|
||||
"build-commonjs": "tsc --project tsconfig.commonjs.json && cp ./package-commonjs.json ./lib.commonjs/package.json",
|
||||
"build-commonjs": "tsc --project tsconfig.commonjs.json && cp ./output/post-build/lib.commonjs/* ./lib.commonjs/",
|
||||
"build-dist": "npm run build && npm run _build-dist && npm run _dist-stats",
|
||||
"build-docs": "echo 'foo'",
|
||||
"build-types": "tsc --project tsconfig.types.json",
|
||||
"build-types": "tsc --project tsconfig.types.json && cp ./output/post-build/types/* ./types/",
|
||||
"clean": "rm -rf dist lib.esm lib.commonjs types",
|
||||
"stats": "echo 'Dependencies' && npm ls --all --omit=dev",
|
||||
"test": "npm run test-esm",
|
||||
@@ -133,5 +145,5 @@
|
||||
"sideEffects": false,
|
||||
"type": "module",
|
||||
"types": "./types/index.d.ts",
|
||||
"version": "6.0.0"
|
||||
"version": "6.0.2"
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
export const version: string = "6.0.0";
|
||||
export const version: string = "6.0.2";
|
||||
|
||||
@@ -219,7 +219,7 @@ export class AbiCoder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ethers-compatible [[CALL_EXCEPTION]] Error for the given
|
||||
* Returns an ethers-compatible [[CallExceptionError]] Error for the given
|
||||
* result %%data%% for the [[CallExceptionAction]] %%action%% against
|
||||
* the Transaction %%tx%%.
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* About frgaments...
|
||||
*
|
||||
* @_subsection api/abi/abi-coder:Fragments
|
||||
* @_subsection api/abi/abi-coder:Fragments [about-fragments]
|
||||
*/
|
||||
|
||||
import {
|
||||
@@ -137,10 +137,13 @@ const SimpleTokens: Record<string, string> = {
|
||||
};
|
||||
|
||||
// Parser regexes to consume the next token
|
||||
const regexWhitespace = new RegExp("^(\\s*)");
|
||||
const regexNumber = new RegExp("^([0-9]+)");
|
||||
const regexIdentifier = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
|
||||
const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))");
|
||||
const regexWhitespacePrefix = new RegExp("^(\\s*)");
|
||||
const regexNumberPrefix = new RegExp("^([0-9]+)");
|
||||
const regexIdPrefix = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)");
|
||||
|
||||
// Parser regexs to check validity
|
||||
const regexId = new RegExp("^([a-zA-Z$_][a-zA-Z0-9$_]*)$");
|
||||
const regexType = new RegExp("^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$");
|
||||
|
||||
/**
|
||||
* @ignore:
|
||||
@@ -293,7 +296,7 @@ function lex(text: string): TokenString {
|
||||
|
||||
// Strip off any leading whitespace
|
||||
let cur = text.substring(offset);
|
||||
let match = cur.match(regexWhitespace);
|
||||
let match = cur.match(regexWhitespacePrefix);
|
||||
if (match) {
|
||||
offset += match[1].length;
|
||||
cur = text.substring(offset);
|
||||
@@ -347,7 +350,7 @@ function lex(text: string): TokenString {
|
||||
continue;
|
||||
}
|
||||
|
||||
match = cur.match(regexIdentifier);
|
||||
match = cur.match(regexIdPrefix);
|
||||
if (match) {
|
||||
token.text = match[1];
|
||||
offset += token.text.length;
|
||||
@@ -366,7 +369,7 @@ function lex(text: string): TokenString {
|
||||
continue;
|
||||
}
|
||||
|
||||
match = cur.match(regexNumber);
|
||||
match = cur.match(regexNumberPrefix);
|
||||
if (match) {
|
||||
token.text = match[1];
|
||||
token.type = "NUMBER";
|
||||
@@ -534,29 +537,28 @@ export class ParamType {
|
||||
/**
|
||||
* True if the parameters is indexed.
|
||||
*
|
||||
* For non-indexable types (see [[ParamType_isIndexable]]) this
|
||||
* is ``null``.
|
||||
* For non-indexable types this is ``null``.
|
||||
*/
|
||||
readonly indexed!: null | boolean;
|
||||
|
||||
/**
|
||||
* The components for the tuple.
|
||||
*
|
||||
* For non-tuple types (see [[ParamType_isTuple]]) this is ``null``.
|
||||
* For non-tuple types this is ``null``.
|
||||
*/
|
||||
readonly components!: null | ReadonlyArray<ParamType>;
|
||||
|
||||
/**
|
||||
* The array length, or ``-1`` for dynamic-lengthed arrays.
|
||||
*
|
||||
* For non-array types (see [[ParamType_isArray]]) this is ``null``.
|
||||
* For non-array types this is ``null``.
|
||||
*/
|
||||
readonly arrayLength!: null | number;
|
||||
|
||||
/**
|
||||
* The type of each child in the array.
|
||||
*
|
||||
* For non-array types (see [[ParamType_isArray]]) this is ``null``.
|
||||
* For non-array types this is ``null``.
|
||||
*/
|
||||
readonly arrayChildren!: null | ParamType;
|
||||
|
||||
@@ -841,7 +843,7 @@ export class ParamType {
|
||||
}
|
||||
|
||||
const name = obj.name;
|
||||
assertArgument(!name || (typeof(name) === "string" && name.match(regexIdentifier)),
|
||||
assertArgument(!name || (typeof(name) === "string" && name.match(regexId)),
|
||||
"invalid name", "obj.name", name);
|
||||
|
||||
let indexed = obj.indexed;
|
||||
@@ -1019,7 +1021,7 @@ export abstract class NamedFragment extends Fragment {
|
||||
*/
|
||||
constructor(guard: any, type: FragmentType, name: string, inputs: ReadonlyArray<ParamType>) {
|
||||
super(guard, type, inputs);
|
||||
assertArgument(typeof(name) === "string" && name.match(regexIdentifier),
|
||||
assertArgument(typeof(name) === "string" && name.match(regexId),
|
||||
"invalid identifier", "name", name);
|
||||
inputs = Object.freeze(inputs.slice());
|
||||
defineProperties<NamedFragment>(this, { name });
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Explain about ABI here...
|
||||
*
|
||||
* @_section api/abi:Application Binary Interface [abi]
|
||||
* @_section api/abi:Application Binary Interface [about-abi]
|
||||
* @_navTitle: ABI
|
||||
*/
|
||||
|
||||
|
||||
@@ -660,7 +660,7 @@ export class Interface {
|
||||
* specified error (see [[getError]] for valid values for
|
||||
* %%key%%).
|
||||
*
|
||||
* Most developers should prefer the [[parseResult]] method instead,
|
||||
* Most developers should prefer the [[parseCallResult]] method instead,
|
||||
* which will automatically detect a ``CALL_EXCEPTION`` and throw the
|
||||
* corresponding error.
|
||||
*/
|
||||
@@ -742,7 +742,7 @@ export class Interface {
|
||||
* specified function (see [[getFunction]] for valid values for
|
||||
* %%key%%).
|
||||
*
|
||||
* Most developers should prefer the [[parseResult]] method instead,
|
||||
* Most developers should prefer the [[parseCallResult]] method instead,
|
||||
* which will automatically detect a ``CALL_EXCEPTION`` and throw the
|
||||
* corresponding error.
|
||||
*/
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* These functions help convert between various formats, validate
|
||||
* addresses and safely resolve ENS names.
|
||||
*
|
||||
* @_section: api/address:Addresses [addresses]
|
||||
* @_section: api/address:Addresses [about-addresses]
|
||||
*/
|
||||
|
||||
null;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Some common constants useful for Ethereum.
|
||||
*
|
||||
* @_section: api/constants: Constants [constants]
|
||||
* @_section: api/constants: Constants [about-constants]
|
||||
*/
|
||||
|
||||
export { ZeroAddress } from "./addresses.js";
|
||||
|
||||
@@ -586,7 +586,7 @@ async function _emit(contract: BaseContract, event: ContractEventName, args: Arr
|
||||
|
||||
const count = sub.listeners.length;
|
||||
sub.listeners = sub.listeners.filter(({ listener, once }) => {
|
||||
const passArgs = args.slice();
|
||||
const passArgs = Array.from(args);
|
||||
if (payloadFunc) {
|
||||
passArgs.push(payloadFunc(once ? null: listener));
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* About contracts...
|
||||
*
|
||||
* @_section: api/contract:Contracts [contracts]
|
||||
* @_section: api/contract:Contracts [about-contracts]
|
||||
*/
|
||||
export {
|
||||
BaseContract, Contract
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* A fundamental building block of Ethereum is the underlying
|
||||
* cryptographic primitives.
|
||||
*
|
||||
* @_section: api/crypto:Cryptographic Functions [crypto]
|
||||
* @_section: api/crypto:Cryptographic Functions [about-crypto]
|
||||
*/
|
||||
|
||||
null
|
||||
|
||||
@@ -9,6 +9,8 @@ import type { BytesLike } from "../utils/index.js";
|
||||
* UI or provide programatic access to the progress.
|
||||
*
|
||||
* The %%percent%% is a value between ``0`` and ``1``.
|
||||
*
|
||||
* @_docloc: api/crypto:Passwords
|
||||
*/
|
||||
export type ProgressCallback = (percent: number) => void;
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
import { ZeroHash } from "../constants/index.js";
|
||||
import {
|
||||
concat, dataLength, getBigInt, getBytes, getNumber, hexlify,
|
||||
@@ -22,6 +23,12 @@ const BN_35 = BigInt(35);
|
||||
const _guard = { };
|
||||
|
||||
// @TODO: Allow Uint8Array
|
||||
|
||||
/**
|
||||
* A SignatureLike
|
||||
*
|
||||
* @_docloc: api/crypto:Signing
|
||||
*/
|
||||
export type SignatureLike = Signature | string | {
|
||||
r: string;
|
||||
s: string;
|
||||
@@ -48,6 +55,9 @@ function toUint256(value: BigNumberish): string {
|
||||
|
||||
/**
|
||||
* A Signature @TODO
|
||||
*
|
||||
*
|
||||
* @_docloc: api/crypto:Signing
|
||||
*/
|
||||
export class Signature {
|
||||
#r: string;
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/**
|
||||
* Add details about signing here.
|
||||
*
|
||||
* @_subsection: api/crypto:Signing [about-signing]
|
||||
*/
|
||||
|
||||
import * as secp256k1 from "@noble/secp256k1";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* About hashing here...
|
||||
*
|
||||
* @_section: api/hashing:Hashing Utilities [hashing]
|
||||
* @_section: api/hashing:Hashing Utilities [about-hashing]
|
||||
*/
|
||||
|
||||
export { id } from "./id.js"
|
||||
|
||||
@@ -161,6 +161,8 @@ type Sub = {
|
||||
nameMap: Map<string, string>
|
||||
addressableMap: WeakMap<Addressable, string>;
|
||||
listeners: Array<{ listener: Listener, once: boolean }>;
|
||||
// @TODO: get rid of this, as it is (and has to be)
|
||||
// tracked in subscriber
|
||||
started: boolean;
|
||||
subscriber: Subscriber;
|
||||
};
|
||||
|
||||
@@ -44,6 +44,6 @@ export function showThrottleMessage(service: string): void {
|
||||
console.log("signing up for your own API keys to improve performance, increase your");
|
||||
console.log("request rate/limit and enable other perks, such as metrics and advanced APIs.");
|
||||
console.log("");
|
||||
console.log("For more details: https:/\/docs.ethers.io/api-keys/");
|
||||
console.log("For more details: https:/\/docs.ethers.org/api-keys/");
|
||||
console.log("==========================");
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ const _formatTransactionReceipt = object({
|
||||
cumulativeGasUsed: getBigInt,
|
||||
effectiveGasPrice: allowNull(getBigInt),
|
||||
status: allowNull(getNumber),
|
||||
type: getNumber
|
||||
type: allowNull(getNumber, 0)
|
||||
}, {
|
||||
effectiveGasPrice: [ "gasPrice" ],
|
||||
hash: [ "transactionHash" ],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* About providers.
|
||||
*
|
||||
* @_section: api/providers:Providers [providers]
|
||||
* @_section: api/providers:Providers [about-providers]
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import { AbstractProvider, UnmanagedSubscriber } from "./abstract-provider.js";
|
||||
import { AbstractSigner } from "./abstract-signer.js";
|
||||
import { Network } from "./network.js";
|
||||
import { FilterIdEventSubscriber, FilterIdPendingSubscriber } from "./subscriber-filterid.js";
|
||||
import { PollingEventSubscriber } from "./subscriber-polling.js";
|
||||
|
||||
import type { TypedDataDomain, TypedDataField } from "../hash/index.js";
|
||||
import type { TransactionLike } from "../transaction/index.js";
|
||||
@@ -628,6 +629,9 @@ export abstract class JsonRpcApiProvider extends AbstractProvider {
|
||||
if (sub.type === "pending") { return new FilterIdPendingSubscriber(this); }
|
||||
|
||||
if (sub.type === "event") {
|
||||
if (this._getOption("polling")) {
|
||||
return new PollingEventSubscriber(this, sub.filter);
|
||||
}
|
||||
return new FilterIdEventSubscriber(this, sub.filter);
|
||||
}
|
||||
|
||||
@@ -806,74 +810,6 @@ export abstract class JsonRpcApiProvider extends AbstractProvider {
|
||||
);
|
||||
e.info = { error, payload };
|
||||
return e;
|
||||
/*
|
||||
let message = "missing revert data during JSON-RPC call";
|
||||
|
||||
const action = <"call" | "estimateGas" | "unknown">(({ eth_call: "call", eth_estimateGas: "estimateGas" })[method] || "unknown");
|
||||
let data: null | string = null;
|
||||
let reason: null | string = null;
|
||||
const transaction = <{ from: string, to: string, data: string }>((<any>payload).params[0]);
|
||||
const invocation = null;
|
||||
let revert: null | { signature: string, name: string, args: Array<any> } = null;
|
||||
|
||||
if (result) {
|
||||
// @TODO: Extract errorSignature, errorName, errorArgs, reason if
|
||||
// it is Error(string) or Panic(uint25)
|
||||
message = "execution reverted during JSON-RPC call";
|
||||
data = result.data;
|
||||
|
||||
let bytes = getBytes(data);
|
||||
if (bytes.length % 32 !== 4) {
|
||||
message += " (could not parse reason; invalid data length)";
|
||||
|
||||
} else if (data.substring(0, 10) === "0x08c379a0") {
|
||||
// Error(string)
|
||||
try {
|
||||
if (bytes.length < 68) { throw new Error("bad length"); }
|
||||
bytes = bytes.slice(4);
|
||||
const pointer = getNumber(hexlify(bytes.slice(0, 32)));
|
||||
bytes = bytes.slice(pointer);
|
||||
if (bytes.length < 32) { throw new Error("overrun"); }
|
||||
const length = getNumber(hexlify(bytes.slice(0, 32)));
|
||||
bytes = bytes.slice(32);
|
||||
if (bytes.length < length) { throw new Error("overrun"); }
|
||||
reason = toUtf8String(bytes.slice(0, length));
|
||||
revert = {
|
||||
signature: "Error(string)",
|
||||
name: "Error",
|
||||
args: [ reason ]
|
||||
};
|
||||
message += `: ${ JSON.stringify(reason) }`;
|
||||
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
message += " (could not parse reason; invalid data length)";
|
||||
}
|
||||
|
||||
} else if (data.substring(0, 10) === "0x4e487b71") {
|
||||
// Panic(uint256)
|
||||
try {
|
||||
if (bytes.length !== 36) { throw new Error("bad length"); }
|
||||
const arg = getNumber(hexlify(bytes.slice(4)));
|
||||
revert = {
|
||||
signature: "Panic(uint256)",
|
||||
name: "Panic",
|
||||
args: [ arg ]
|
||||
};
|
||||
reason = `Panic due to ${ PanicReasons.get(Number(arg)) || "UNKNOWN" }(${ arg })`;
|
||||
message += `: ${ reason }`;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
message += " (could not parse panic reason)";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return makeError(message, "CALL_EXCEPTION", {
|
||||
action, data, reason, transaction, invocation, revert,
|
||||
info: { payload, error }
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
// Only estimateGas and call can return arbitrary contract-defined text, so now we
|
||||
@@ -904,7 +840,7 @@ export abstract class JsonRpcApiProvider extends AbstractProvider {
|
||||
|
||||
if (message.match(/insufficient funds|base fee exceeds gas limit/i)) {
|
||||
return makeError("insufficient funds for intrinsic transaction cost", "INSUFFICIENT_FUNDS", {
|
||||
transaction
|
||||
transaction, info: { error }
|
||||
});
|
||||
}
|
||||
|
||||
@@ -926,7 +862,7 @@ export abstract class JsonRpcApiProvider extends AbstractProvider {
|
||||
|
||||
if (message.match(/the method .* does not exist/i)) {
|
||||
return makeError("unsupported operation", "UNSUPPORTED_OPERATION", {
|
||||
operation: payload.method
|
||||
operation: payload.method, info: { error }
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -27,15 +27,21 @@ export class BlockConnectionSubscriber implements Subscriber {
|
||||
#provider: ConnectionRpcProvider;
|
||||
#blockNumber: number;
|
||||
|
||||
#running: boolean;
|
||||
|
||||
#filterId: null | number;
|
||||
|
||||
constructor(provider: ConnectionRpcProvider) {
|
||||
this.#provider = provider;
|
||||
this.#blockNumber = -2;
|
||||
this.#running = false;
|
||||
this.#filterId = null;
|
||||
}
|
||||
|
||||
start(): void {
|
||||
if (this.#running) { return; }
|
||||
this.#running = true;
|
||||
|
||||
this.#filterId = this.#provider._subscribe([ "newHeads" ], (result: any) => {
|
||||
const blockNumber = getNumber(result.number);
|
||||
const initial = (this.#blockNumber === -2) ? blockNumber: (this.#blockNumber + 1)
|
||||
@@ -47,6 +53,9 @@ export class BlockConnectionSubscriber implements Subscriber {
|
||||
}
|
||||
|
||||
stop(): void {
|
||||
if (!this.#running) { return; }
|
||||
this.#running = false;
|
||||
|
||||
if (this.#filterId != null) {
|
||||
this.#provider._unsubscribe(this.#filterId);
|
||||
this.#filterId = null;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { isError } from "../utils/index.js";
|
||||
|
||||
import { PollingEventSubscriber } from "./subscriber-polling.js";
|
||||
|
||||
import type { AbstractProvider, Subscriber } from "./abstract-provider.js";
|
||||
@@ -5,7 +7,6 @@ import type { Network } from "./network.js";
|
||||
import type { EventFilter } from "./provider.js";
|
||||
import type { JsonRpcApiProvider } from "./provider-jsonrpc.js";
|
||||
|
||||
|
||||
function copy(obj: any): any {
|
||||
return JSON.parse(JSON.stringify(obj));
|
||||
}
|
||||
@@ -26,6 +27,8 @@ export class FilterIdSubscriber implements Subscriber {
|
||||
#filterIdPromise: null | Promise<string>;
|
||||
#poller: (b: number) => Promise<void>;
|
||||
|
||||
#running: boolean;
|
||||
|
||||
#network: null | Network;
|
||||
|
||||
#hault: boolean;
|
||||
@@ -36,6 +39,8 @@ export class FilterIdSubscriber implements Subscriber {
|
||||
this.#filterIdPromise = null;
|
||||
this.#poller = this.#poll.bind(this);
|
||||
|
||||
this.#running = false;
|
||||
|
||||
this.#network = null;
|
||||
|
||||
this.#hault = false;
|
||||
@@ -55,12 +60,25 @@ export class FilterIdSubscriber implements Subscriber {
|
||||
|
||||
async #poll(blockNumber: number): Promise<void> {
|
||||
try {
|
||||
// Subscribe if necessary
|
||||
if (this.#filterIdPromise == null) {
|
||||
this.#filterIdPromise = this._subscribe(this.#provider);
|
||||
}
|
||||
|
||||
const filterId = await this.#filterIdPromise;
|
||||
// Get the Filter ID
|
||||
let filterId: null | string = null;
|
||||
try {
|
||||
filterId = await this.#filterIdPromise;
|
||||
} catch (error) {
|
||||
if (!isError(error, "UNSUPPORTED_OPERATION") || error.operation !== "eth_newFilter") {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// The backend does not support Filter ID; downgrade to
|
||||
// polling
|
||||
if (filterId == null) {
|
||||
this.#filterIdPromise = null;
|
||||
this.#provider._recoverSubscriber(this, this._recover(this.#provider));
|
||||
return;
|
||||
}
|
||||
@@ -91,9 +109,17 @@ export class FilterIdSubscriber implements Subscriber {
|
||||
}
|
||||
}
|
||||
|
||||
start(): void { this.#poll(-2); }
|
||||
start(): void {
|
||||
if (this.#running) { return; }
|
||||
this.#running = true;
|
||||
|
||||
this.#poll(-2);
|
||||
}
|
||||
|
||||
stop(): void {
|
||||
if (!this.#running) { return; }
|
||||
this.#running = false;
|
||||
|
||||
this.#hault = true;
|
||||
this.#teardown();
|
||||
this.#provider.off("block", this.#poller);
|
||||
|
||||
@@ -76,13 +76,13 @@ export class PollingBlockSubscriber implements Subscriber {
|
||||
}
|
||||
|
||||
start(): void {
|
||||
if (this.#poller) { throw new Error("subscriber already running"); }
|
||||
if (this.#poller) { return; }
|
||||
this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);
|
||||
this.#poll();
|
||||
}
|
||||
|
||||
stop(): void {
|
||||
if (!this.#poller) { throw new Error("subscriber not running"); }
|
||||
if (!this.#poller) { return; }
|
||||
this.#provider._clearTimeout(this.#poller);
|
||||
this.#poller = null;
|
||||
}
|
||||
@@ -105,9 +105,11 @@ export class PollingBlockSubscriber implements Subscriber {
|
||||
export class OnBlockSubscriber implements Subscriber {
|
||||
#provider: AbstractProvider;
|
||||
#poll: (b: number) => void;
|
||||
#running: boolean;
|
||||
|
||||
constructor(provider: AbstractProvider) {
|
||||
this.#provider = provider;
|
||||
this.#running = false;
|
||||
this.#poll = (blockNumber: number) => {
|
||||
this._poll(blockNumber, this.#provider);
|
||||
}
|
||||
@@ -118,11 +120,17 @@ export class OnBlockSubscriber implements Subscriber {
|
||||
}
|
||||
|
||||
start(): void {
|
||||
if (this.#running) { return; }
|
||||
this.#running = true;
|
||||
|
||||
this.#poll(-2);
|
||||
this.#provider.on("block", this.#poll);
|
||||
}
|
||||
|
||||
stop(): void {
|
||||
if (!this.#running) { return; }
|
||||
this.#running = false;
|
||||
|
||||
this.#provider.off("block", this.#poll);
|
||||
}
|
||||
|
||||
@@ -178,6 +186,8 @@ export class PollingEventSubscriber implements Subscriber {
|
||||
#filter: EventFilter;
|
||||
#poller: (b: number) => void;
|
||||
|
||||
#running: boolean;
|
||||
|
||||
// The most recent block we have scanned for events. The value -2
|
||||
// indicates we still need to fetch an initial block number
|
||||
#blockNumber: number;
|
||||
@@ -186,6 +196,7 @@ export class PollingEventSubscriber implements Subscriber {
|
||||
this.#provider = provider;
|
||||
this.#filter = copy(filter);
|
||||
this.#poller = this.#poll.bind(this);
|
||||
this.#running = false;
|
||||
this.#blockNumber = -2;
|
||||
}
|
||||
|
||||
@@ -215,6 +226,9 @@ export class PollingEventSubscriber implements Subscriber {
|
||||
}
|
||||
|
||||
start(): void {
|
||||
if (this.#running) { return; }
|
||||
this.#running = true;
|
||||
|
||||
if (this.#blockNumber === -2) {
|
||||
this.#provider.getBlockNumber().then((blockNumber) => {
|
||||
this.#blockNumber = blockNumber;
|
||||
@@ -224,6 +238,9 @@ export class PollingEventSubscriber implements Subscriber {
|
||||
}
|
||||
|
||||
stop(): void {
|
||||
if (!this.#running) { return; }
|
||||
this.#running = false;
|
||||
|
||||
this.#provider.off("block", this.#poller);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
|
||||
/*
|
||||
import { defineProperties } from "@ethersproject/properties";
|
||||
export type EventCommon = "block" | "debug" | "blockObject";
|
||||
|
||||
export type Event = EventCommon | string | { address?: string, topics: Array<string | Array<string>> }
|
||||
|
||||
export type EventLike = Event | Array<string>;
|
||||
|
||||
export function getTag(eventName: Event): string {
|
||||
if (typeof(eventName) === "string") { return eventName; }
|
||||
|
||||
if (typeof(eventName) === "object") {
|
||||
return (eventName.address || "*") + (eventName.topics || []).map((topic) => {
|
||||
if (typeof(topic) === "string") { return topic; }
|
||||
return topic.join("|");
|
||||
}).join("&");
|
||||
}
|
||||
|
||||
throw new Error("FOO");
|
||||
}
|
||||
|
||||
export function getEvent(tag: string): Event {
|
||||
}
|
||||
|
||||
let nextId = 1;
|
||||
|
||||
export class Subscriber {
|
||||
readonly id!: number;
|
||||
readonly tag!: string;
|
||||
|
||||
#paused: boolean;
|
||||
#blockNumber: number;
|
||||
|
||||
constructor(tag: string) {
|
||||
this.#paused = false;
|
||||
this.#blockNumber = -1;
|
||||
defineProperties<Subscriber>(this, { id: nextId++, tag });
|
||||
}
|
||||
|
||||
get blockNumber(): number {
|
||||
return this.#blockNumber;
|
||||
}
|
||||
_setBlockNumber(blockNumber: number): void { this.#blockNumber = blockNumber; }
|
||||
|
||||
setup(): void { }
|
||||
teardown(): void { }
|
||||
|
||||
isPaused(): boolean { return this.#paused; }
|
||||
pause(): void { this.#paused = true; }
|
||||
resume(): void { this.#paused = false; }
|
||||
|
||||
resubscribeInfo(): string { return this.tag; }
|
||||
resubscribe(info: string): boolean { return true; }
|
||||
}
|
||||
*/
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Transactions..
|
||||
*
|
||||
* @_section api/transaction:Transactions [transactions]
|
||||
* @_section api/transaction:Transactions [about-transactions]
|
||||
*/
|
||||
|
||||
null;
|
||||
|
||||
@@ -13,6 +13,19 @@ import type { BytesLike } from "./data.js";
|
||||
|
||||
/**
|
||||
* Decodes the base-64 encoded %%value%%.
|
||||
*
|
||||
* @example:
|
||||
* // The decoded value is always binary data...
|
||||
* result = decodeBase64("SGVsbG8gV29ybGQhIQ==")
|
||||
* //_result:
|
||||
*
|
||||
* // ...use toUtf8String to convert it to a string.
|
||||
* toUtf8String(result)
|
||||
* //_result:
|
||||
*
|
||||
* // Decoding binary data
|
||||
* decodeBase64("EjQ=")
|
||||
* //_result:
|
||||
*/
|
||||
export function decodeBase64(value: string): Uint8Array {
|
||||
return getBytesCopy(Buffer.from(value, "base64"));
|
||||
@@ -20,6 +33,23 @@ export function decodeBase64(value: string): Uint8Array {
|
||||
|
||||
/**
|
||||
* Encodes %%data%% as a base-64 encoded string.
|
||||
*
|
||||
* @example:
|
||||
* // Encoding binary data as a hexstring
|
||||
* encodeBase64("0x1234")
|
||||
* //_result:
|
||||
*
|
||||
* // Encoding binary data as a Uint8Array
|
||||
* encodeBase64(new Uint8Array([ 0x12, 0x34 ]))
|
||||
* //_result:
|
||||
*
|
||||
* // The input MUST be data...
|
||||
* encodeBase64("Hello World!!")
|
||||
* //_error:
|
||||
*
|
||||
* // ...use toUtf8Bytes for this.
|
||||
* encodeBase64(toUtf8Bytes("Hello World!!"))
|
||||
* //_result:
|
||||
*/
|
||||
export function encodeBase64(data: BytesLike): string {
|
||||
return Buffer.from(getBytes(data)).toString("base64");
|
||||
|
||||
@@ -174,7 +174,7 @@ function zeroPad(data: BytesLike, length: number, left: boolean): string {
|
||||
* Return the [[DataHexString]] of %%data%% padded on the **left**
|
||||
* to %%length%% bytes.
|
||||
*
|
||||
* If %%data%% already exceeds %%length%%, a [[BufferOverrun]] is
|
||||
* If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is
|
||||
* thrown.
|
||||
*
|
||||
* This pads data the same as **values** are in Solidity
|
||||
@@ -188,7 +188,7 @@ export function zeroPadValue(data: BytesLike, length: number): string {
|
||||
* Return the [[DataHexString]] of %%data%% padded on the **right**
|
||||
* to %%length%% bytes.
|
||||
*
|
||||
* If %%data%% already exceeds %%length%%, a [[BufferOverrun]] is
|
||||
* If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is
|
||||
* thrown.
|
||||
*
|
||||
* This pads data the same as **bytes** are in Solidity
|
||||
|
||||
@@ -61,11 +61,62 @@ function stringify(value: any): any {
|
||||
* All errors emitted by ethers have an **ErrorCode** to help
|
||||
* identify and coalesce errors to simplfy programatic analysis.
|
||||
*
|
||||
* _property: ``"UNKNOWN_ERROR"``
|
||||
* This is a general puspose fallback when no other error makes sense
|
||||
* or the error wasn't expected
|
||||
* Each **ErrorCode** is the %%code%% proerty of a coresponding
|
||||
* [[EthersError]].
|
||||
*
|
||||
* _property: ``"NOT_IMPLEMENTED"``
|
||||
* **Generic Errors**
|
||||
*
|
||||
* **``"UNKNOWN_ERROR"``** - see [[UnknownError]]
|
||||
*
|
||||
* **``"NOT_IMPLEMENTED"``** - see [[NotImplementedError]]
|
||||
*
|
||||
* **``"UNSUPPORTED_OPERATION"``** - see [[UnsupportedOperationError]]
|
||||
*
|
||||
* **``"NETWORK_ERROR"``** - see [[NetworkError]]
|
||||
*
|
||||
* **``"SERVER_ERROR"``** - see [[ServerError]]
|
||||
*
|
||||
* **``"TIMEOUT"``** - see [[TimeoutError]]
|
||||
*
|
||||
* **``"BAD_DATA"``** - see [[BadDataError]]
|
||||
*
|
||||
* **``"CANCELLED"``** - see [[CancelledError]]
|
||||
*
|
||||
* **Operational Errors**
|
||||
*
|
||||
* **``"BUFFER_OVERRUN"``** - see [[BufferOverrunError]]
|
||||
*
|
||||
* **``"NUMERIC_FAULT"``** - see [[NumericFaultError]]
|
||||
*
|
||||
* **Argument Errors**
|
||||
*
|
||||
* **``"INVALID_ARGUMENT"``** - see [[InvalidArgumentError]]
|
||||
*
|
||||
* **``"MISSING_ARGUMENT"``** - see [[MissingArgumentError]]
|
||||
*
|
||||
* **``"UNEXPECTED_ARGUMENT"``** - see [[UnexpectedArgumentError]]
|
||||
*
|
||||
* **``"VALUE_MISMATCH"``** - //unused//
|
||||
*
|
||||
* **Blockchain Errors**
|
||||
*
|
||||
* **``"CALL_EXCEPTION"``** - see [[CallExceptionError]]
|
||||
*
|
||||
* **``"INSUFFICIENT_FUNDS"``** - see [[InsufficientFundsError]]
|
||||
*
|
||||
* **``"NONCE_EXPIRED"``** - see [[NonceExpiredError]]
|
||||
*
|
||||
* **``"REPLACEMENT_UNDERPRICED"``** - see [[ReplacementUnderpricedError]]
|
||||
*
|
||||
* **``"TRANSACTION_REPLACED"``** - see [[TransactionReplacedError]]
|
||||
*
|
||||
* **``"UNCONFIGURED_NAME"``** - see [[UnconfiguredNameError]]
|
||||
*
|
||||
* **``"OFFCHAIN_FAULT"``** - see [[OffchainFaultError]]
|
||||
*
|
||||
* **User Interaction Errors**
|
||||
*
|
||||
* **``"ACTION_REJECTED"``** - see [[ActionRejectedError]]
|
||||
*/
|
||||
export type ErrorCode =
|
||||
|
||||
@@ -462,7 +513,7 @@ export interface TransactionReplacedError extends EthersError<"TRANSACTION_REPLA
|
||||
* been configured.
|
||||
*
|
||||
* This could indicate an ENS name is unowned or that the current
|
||||
* address being pointed to is the [[Zero]].
|
||||
* address being pointed to is the [[ZeroAddress]].
|
||||
*/
|
||||
export interface UnconfiguredNameError extends EthersError<"UNCONFIGURED_NAME"> {
|
||||
/**
|
||||
@@ -558,7 +609,7 @@ export function isError<K extends ErrorCode, T extends CodedEthersError<K>>(erro
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if %%error%% is a [CALL_EXCEPTION](api:CallExceptionError).
|
||||
* Returns true if %%error%% is a [[CallExceptionError].
|
||||
*/
|
||||
export function isCallException(error: any): error is CallExceptionError {
|
||||
return isError(error, "CALL_EXCEPTION");
|
||||
|
||||
@@ -125,7 +125,7 @@ export class FetchCancelSignal {
|
||||
}
|
||||
|
||||
addListener(listener: () => void): void {
|
||||
assert(this.#cancelled, "singal already cancelled", "UNSUPPORTED_OPERATION", {
|
||||
assert(!this.#cancelled, "singal already cancelled", "UNSUPPORTED_OPERATION", {
|
||||
operation: "fetchCancelSignal.addCancelListener"
|
||||
});
|
||||
this.#listeners.push(listener);
|
||||
@@ -134,8 +134,7 @@ export class FetchCancelSignal {
|
||||
get cancelled(): boolean { return this.#cancelled; }
|
||||
|
||||
checkSignal(): void {
|
||||
if (!this.cancelled) { return; }
|
||||
assert(false, "cancelled", "CANCELLED", { });
|
||||
assert(!this.cancelled, "cancelled", "CANCELLED", { });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Ethereum and to simplify the library, without increasing
|
||||
* the library dependencies for simple functions.
|
||||
*
|
||||
* @_section api/utils:Utilities [utils]
|
||||
* @_section api/utils:Utilities [about-utils]
|
||||
*/
|
||||
|
||||
export { decodeBase58, encodeBase58 } from "./base58.js";
|
||||
|
||||
@@ -89,7 +89,7 @@ export function mask(_value: BigNumberish, _bits: Numeric): bigint {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a [[BigInt]] from %%value%%. If it is an invalid value for
|
||||
* Gets a BigInt from %%value%%. If it is an invalid value for
|
||||
* a BigInt, then an ArgumentError will be thrown for %%name%%.
|
||||
*/
|
||||
export function getBigInt(value: BigNumberish, name?: string): bigint {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user