Compare commits

..

14 Commits

Author SHA1 Message Date
Richard Moore
427e16826e Updated dist files. 2020-04-21 23:17:53 -04:00
Richard Moore
fab14f8f5a Fixed typo in error message (#778). 2020-04-21 23:12:56 -04:00
Richard Moore
e8c89d7ca9 Allow receive type in ABI without warning (#746). 2020-04-21 23:10:15 -04:00
Richard Moore
b1c6575a1b Updated dist files. 2020-03-14 16:59:58 +01:00
Richard Moore
3b7176f322 Fixed typo in error (#722). 2020-03-13 18:37:23 +01:00
Richard Moore
5f7ddcd5d7 Fix EtherscanProvider from throwing outside async context (#729). 2020-03-13 18:34:56 +01:00
Richard Moore
4c9d740cdf Updated dist files. 2020-02-16 16:34:49 -05:00
Richard Moore
a930047a10 Added default API key for EtherscanProvider. 2020-02-16 16:29:29 -05:00
Richard Moore
4e41871fa4 Fixed typo in arguments name for waitForTransaction (#477). 2020-02-16 16:15:00 -05:00
Richard Moore
9947acc349 Partial support for non-English mnemonics for encrypted JSON wallets (#685). 2020-02-16 16:13:24 -05:00
Richard Moore
748f89660a Updated expected balance in test cases. 2020-01-29 22:45:34 -05:00
Richard Moore
2987925fa5 Updated dist files. 2020-01-29 22:14:34 -05:00
Richard Moore
0589b3102e Fix backwards compatibility with certain parsed JSON objects passed into Interface and Contracts (#721). 2020-01-29 22:01:42 -05:00
Richard Moore
df51b26fe7 Updated ENS registry address for all networks. 2020-01-29 21:54:49 -05:00
27 changed files with 136 additions and 53 deletions

View File

@@ -1,6 +1,41 @@
CHANGELOG
=========
ethers/v4.0.47 (2020-04-21 23:15)
---------------------------------
- Fixed typo in error message. ([#778](https://github.com/ethers-io/ethers.js/issues/778); [fab14f8](https://github.com/ethers-io/ethers.js/commit/fab14f8f5a16091810bbe4d35f38e0b976adab7c)).
- Allow receive type in ABI without warning. ([#746](https://github.com/ethers-io/ethers.js/issues/746); [e8c89d7](https://github.com/ethers-io/ethers.js/commit/e8c89d7ca9cea6e20281f614c4fb22f180114622)).
ethers/v4.0.46 (2020-03-14 16:56)
---------------------------------
- Fixed typo in error. ([#722](https://github.com/ethers-io/ethers.js/issues/722); [3b7176f](https://github.com/ethers-io/ethers.js/commit/3b7176f322376f8f42c333082388ef56d1720bae)).
- Fix EtherscanProvider from throwing outside async context. ([#729](https://github.com/ethers-io/ethers.js/issues/729); [5f7ddcd](https://github.com/ethers-io/ethers.js/commit/5f7ddcd5d71d8a1c9efbeef1232c34ef93f92e5a)).
ethers/v4.0.45 (2020-02-16 16:16)
---------------------------------
- Added default API key for EtherscanProvider. ([a930047](https://github.com/ethers-io/ethers.js/commit/a930047a102d3369c4e847d7ef43bd850704cf00)).
- Fixed typo in arguments name for waitForTransaction. ([#477](https://github.com/ethers-io/ethers.js/issues/477); [4e41871](https://github.com/ethers-io/ethers.js/commit/4e41871fa4cf701d714ad73527a367e9ca1d3431)).
- Partial support for non-English mnemonics for encrypted JSON wallets. ([#685](https://github.com/ethers-io/ethers.js/issues/685); [9947acc](https://github.com/ethers-io/ethers.js/commit/9947acc349691734bce8b33d870ab48944a7962f)).
- Updated expected balance in test cases. ([748f896](https://github.com/ethers-io/ethers.js/commit/748f89660ac4bf60175f936da755cf1a0d370f46)).
ethers/v4.0.44 (2020-01-29 22:01)
---------------------------------
- Fix backwards compatibility with certain parsed JSON objects passed into Interface and Contracts ([#721](https://github.com/ethers-io/ethers.js/issues/721); [0589b31](https://github.com/ethers-io/ethers.js/commit/0589b3102e2da702f4ac19a32c8b083faa6bbeea)).
- Updated ENS registry address for all networks ([df51b26](https://github.com/ethers-io/ethers.js/commit/df51b26fe71c33fb8aa610d95c4955647345ce0a)).
ethers/v4.0.43 (2020-01-10 21:14)
---------------------------------
- Fixed Contract and Interface constructor abi paramter type; should be a Fragment not a ParamType ([#602](https://github.com/ethers-io/ethers.js/issues/602); [6da5c53](https://github.com/ethers-io/ethers.js/commit/6da5c531206777ceef98d111a12b050a04bdf49c)).
- Add missing chainId to transaction responses ([#700](https://github.com/ethers-io/ethers.js/issues/700); [26d3271](https://github.com/ethers-io/ethers.js/commit/26d32716436cd8925a5278173ba72ad54e00eef8)).
- Fix resolveName when name is an address with an invalid checksum ([#694](https://github.com/ethers-io/ethers.js/issues/694); [bd066b8](https://github.com/ethers-io/ethers.js/commit/bd066b85421b1d0e575180e0626fcfb70135caf0)).
- Fixed testcases for PhantomJS syntax. ([447889](https://github.com/ethers-io/ethers.js/commit/4478896ca5e77be0e20d6d491a092da981ed5343))
ethers/v4.0.42 (2020-01-03 18:35)
---------------------------------

2
_version.d.ts vendored
View File

@@ -1 +1 @@
export declare const version = "4.0.43";
export declare const version = "4.0.47";

View File

@@ -1,3 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "4.0.43";
exports.version = "4.0.47";

6
contract.d.ts vendored
View File

@@ -4,7 +4,7 @@ import { UnsignedTransaction } from './utils/transaction';
import { BlockTag, Provider } from './providers/abstract-provider';
import { Signer } from './abstract-signer';
import { Arrayish } from './utils/bytes';
import { EventFragment, FunctionFragment } from './utils/abi-coder';
import { EventFragment, FunctionFragment, ParamType } from './utils/abi-coder';
import { Block, Listener, Log, TransactionReceipt, TransactionRequest, TransactionResponse } from './providers/abstract-provider';
export declare type ContractFunction = (...params: Array<any>) => Promise<any>;
export declare type EventFilter = {
@@ -51,7 +51,7 @@ export declare class Contract {
readonly addressPromise: Promise<string>;
readonly deployTransaction: TransactionResponse;
private _deployedPromise;
constructor(addressOrName: string, contractInterface: Array<string | FunctionFragment | EventFragment> | string | Interface, signerOrProvider: Signer | Provider);
constructor(addressOrName: string, contractInterface: Array<string | FunctionFragment | EventFragment | ParamType> | string | Interface, signerOrProvider: Signer | Provider);
deployed(): Promise<Contract>;
_deployed(blockTag?: BlockTag): Promise<Contract>;
fallback(overrides?: TransactionRequest): Promise<TransactionResponse>;
@@ -74,7 +74,7 @@ export declare class ContractFactory {
readonly interface: Interface;
readonly bytecode: string;
readonly signer: Signer;
constructor(contractInterface: Array<string | FunctionFragment | EventFragment> | string | Interface, bytecode: Arrayish | string | {
constructor(contractInterface: Array<string | FunctionFragment | EventFragment | ParamType> | string | Interface, bytecode: Arrayish | string | {
object: string;
}, signer?: Signer);
getDeployTransaction(...args: Array<any>): UnsignedTransaction;

View File

@@ -256,6 +256,8 @@ var Contract = /** @class */ (function () {
// https://github.com/Microsoft/TypeScript/issues/5453
// Once this issue is resolved (there are open PR) we can do this nicer
// by making addressOrName default to null for 2 operand calls. :)
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
function Contract(addressOrName, contractInterface, signerOrProvider) {
var _this = this;
errors.checkNew(this, Contract);
@@ -602,6 +604,8 @@ var Contract = /** @class */ (function () {
}());
exports.Contract = Contract;
var ContractFactory = /** @class */ (function () {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
function ContractFactory(contractInterface, bytecode, signer) {
var bytecodeHex = null;
// Allow the bytecode object from the Solidity compiler

34
dist/ethers.js vendored
View File

@@ -1,7 +1,7 @@
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethers = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "4.0.43";
exports.version = "4.0.47";
},{}],2:[function(require,module,exports){
"use strict";
@@ -304,6 +304,8 @@ var Contract = /** @class */ (function () {
// https://github.com/Microsoft/TypeScript/issues/5453
// Once this issue is resolved (there are open PR) we can do this nicer
// by making addressOrName default to null for 2 operand calls. :)
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
function Contract(addressOrName, contractInterface, signerOrProvider) {
var _this = this;
errors.checkNew(this, Contract);
@@ -650,6 +652,8 @@ var Contract = /** @class */ (function () {
}());
exports.Contract = Contract;
var ContractFactory = /** @class */ (function () {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
function ContractFactory(contractInterface, bytecode, signer) {
var bytecodeHex = null;
// Allow the bytecode object from the Solidity compiler
@@ -11400,6 +11404,7 @@ function checkLogTag(blockTag) {
}
return parseInt(blockTag.substring(2), 16);
}
var defaultApiKey = "8FG3JMZ9USS4NTA6YKEKHINU56SEPPVBJR";
var EtherscanProvider = /** @class */ (function (_super) {
__extends(EtherscanProvider, _super);
function EtherscanProvider(network, apiKey) {
@@ -11430,7 +11435,7 @@ var EtherscanProvider = /** @class */ (function (_super) {
throw new Error('unsupported network');
}
properties_1.defineReadOnly(_this, 'baseUrl', baseUrl);
properties_1.defineReadOnly(_this, 'apiKey', apiKey);
properties_1.defineReadOnly(_this, 'apiKey', apiKey || defaultApiKey);
return _this;
}
EtherscanProvider.prototype.perform = function (method, params) {
@@ -11508,7 +11513,7 @@ var EtherscanProvider = /** @class */ (function (_super) {
url += apiKey;
return get(url);
}
throw new Error('getBlock by blockHash not implmeneted');
return Promise.reject(new Error('getBlock by blockHash not implemeneted'));
case 'getTransaction':
url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash;
url += apiKey;
@@ -11525,7 +11530,7 @@ var EtherscanProvider = /** @class */ (function (_super) {
url += '/api?module=proxy&action=eth_call' + transaction;
//url += '&tag=' + params.blockTag + apiKey;
if (params.blockTag !== 'latest') {
throw new Error('EtherscanProvider does not support blockTag for call');
return Promise.reject(new Error('EtherscanProvider does not support blockTag for call'));
}
url += apiKey;
return get(url);
@@ -12896,7 +12901,7 @@ var CoderAddress = /** @class */ (function (_super) {
};
CoderAddress.prototype.decode = function (data, offset) {
if (data.length < offset + 32) {
errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {
errors.throwError('insufficient data for address type', errors.INVALID_ARGUMENT, {
arg: this.localName,
coderType: 'address',
value: bytes_1.hexlify(data.slice(offset, offset + 32))
@@ -14931,6 +14936,7 @@ function addMethod(method) {
}
break;
}
case "receive":
case 'fallback':
// Nothing to do for fallback
break;
@@ -14940,6 +14946,8 @@ function addMethod(method) {
}
}
var Interface = /** @class */ (function () {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
function Interface(abi) {
errors.checkNew(this, Interface);
if (typeof (abi) === 'string') {
@@ -15133,13 +15141,13 @@ function etcDefaultProvider(url, network) {
}
var homestead = {
chainId: 1,
ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "homestead",
_defaultProvider: ethDefaultProvider('homestead')
};
var ropsten = {
chainId: 3,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "ropsten",
_defaultProvider: ethDefaultProvider('ropsten')
};
@@ -15158,13 +15166,13 @@ var networks = {
testnet: ropsten,
rinkeby: {
chainId: 4,
ensAddress: "0xe7410170f87102DF0055eB195163A03B7F2Bff4A",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: 'rinkeby',
_defaultProvider: ethDefaultProvider('rinkeby')
},
goerli: {
chainId: 5,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "goerli",
_defaultProvider: ethDefaultProvider('goerli')
},
@@ -15827,7 +15835,8 @@ function decrypt(json, password, progressCallback) {
return null;
}
// Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase
if (searchPath(data, 'x-ethers/version') === '0.1') {
var locale = searchPath(data, 'x-ethers/locale');
if (searchPath(data, 'x-ethers/version') === '0.1' && (locale == null || locale === "en")) {
var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext'));
var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter'));
var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv);
@@ -15959,7 +15968,7 @@ function encrypt(privateKey, password, options, progressCallback) {
}
}
else {
entropy = bytes_1.arrayify(HDNode.mnemonicToEntropy(options.mnemonic));
entropy = bytes_1.arrayify(HDNode.mnemonicToEntropy(options.mnemonic, options.wordlist));
}
}
var path = options.path;
@@ -16084,6 +16093,9 @@ function encrypt(privateKey, password, options, progressCallback) {
path: path,
version: "0.1"
};
if (options.wordlist && typeof (options.wordlist.locale) === "string") {
data['x-ethers'].locale = options.wordlist.locale;
}
}
if (progressCallback) {
progressCallback(1);

2
dist/ethers.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

13
dist/ethers.types.txt vendored
View File

@@ -29,7 +29,7 @@ declare module 'ethers/contract' {
import { BlockTag, Provider } from 'ethers/providers/abstract-provider';
import { Signer } from 'ethers/abstract-signer';
import { Arrayish } from 'ethers/utils/bytes';
import { EventFragment, FunctionFragment } from 'ethers/utils/abi-coder';
import { EventFragment, FunctionFragment, ParamType } from 'ethers/utils/abi-coder';
import { Block, Listener, Log, TransactionReceipt, TransactionRequest, TransactionResponse } from 'ethers/providers/abstract-provider';
export type ContractFunction = (...params: Array<any>) => Promise<any>;
export type EventFilter = {
@@ -75,7 +75,7 @@ declare module 'ethers/contract' {
readonly [name: string]: ContractFunction | any;
readonly addressPromise: Promise<string>;
readonly deployTransaction: TransactionResponse;
constructor(addressOrName: string, contractInterface: Array<string | FunctionFragment | EventFragment> | string | Interface, signerOrProvider: Signer | Provider);
constructor(addressOrName: string, contractInterface: Array<string | FunctionFragment | EventFragment | ParamType> | string | Interface, signerOrProvider: Signer | Provider);
deployed(): Promise<Contract>;
_deployed(blockTag?: BlockTag): Promise<Contract>;
fallback(overrides?: TransactionRequest): Promise<TransactionResponse>;
@@ -95,7 +95,7 @@ declare module 'ethers/contract' {
readonly interface: Interface;
readonly bytecode: string;
readonly signer: Signer;
constructor(contractInterface: Array<string | FunctionFragment | EventFragment> | string | Interface, bytecode: Arrayish | string | {
constructor(contractInterface: Array<string | FunctionFragment | EventFragment | ParamType> | string | Interface, bytecode: Arrayish | string | {
object: string;
}, signer?: Signer);
getDeployTransaction(...args: Array<any>): UnsignedTransaction;
@@ -266,7 +266,7 @@ declare module 'ethers/utils/shims' {
}
declare module 'ethers/_version' {
export const version = "4.0.43";
export const version = "4.0.47";
}
declare module 'ethers/utils/bignumber' {
@@ -400,7 +400,7 @@ declare module 'ethers/utils/interface' {
[name: string]: _EventDescription;
};
readonly deployFunction: _DeployDescription;
constructor(abi: Array<string | FunctionFragment | EventFragment> | string);
constructor(abi: Array<string | FunctionFragment | EventFragment | ParamType> | string);
parseTransaction(tx: {
data: string;
value?: BigNumberish;
@@ -553,7 +553,7 @@ declare module 'ethers/providers/abstract-provider' {
abstract listeners(eventName: EventType): Array<Listener>;
abstract removeAllListeners(eventName: EventType): Provider;
abstract removeListener(eventName: EventType, listener: Listener): Provider;
abstract waitForTransaction(transactionHash: string, timeout?: number): Promise<TransactionReceipt>;
abstract waitForTransaction(transactionHash: string, confirmations?: number): Promise<TransactionReceipt>;
constructor();
static isProvider(value: any): value is Provider;
}
@@ -710,6 +710,7 @@ declare module 'ethers/utils/secret-storage' {
entropy?: Arrayish;
mnemonic?: string;
path?: string;
wordlist?: any;
client?: string;
salt?: Arrayish;
uuid?: string;

View File

@@ -1,6 +1,6 @@
{
"name": "ethers",
"version": "4.0.43",
"version": "4.0.47",
"description": "Ethereum wallet library.",
"main": "./index.js",
"types": "./index.d.ts",

View File

@@ -102,7 +102,7 @@ export declare abstract class Provider implements OnceBlockable {
abstract listeners(eventName: EventType): Array<Listener>;
abstract removeAllListeners(eventName: EventType): Provider;
abstract removeListener(eventName: EventType, listener: Listener): Provider;
abstract waitForTransaction(transactionHash: string, timeout?: number): Promise<TransactionReceipt>;
abstract waitForTransaction(transactionHash: string, confirmations?: number): Promise<TransactionReceipt>;
constructor();
static isProvider(value: any): value is Provider;
}

View File

@@ -81,6 +81,7 @@ function checkLogTag(blockTag) {
}
return parseInt(blockTag.substring(2), 16);
}
var defaultApiKey = "8FG3JMZ9USS4NTA6YKEKHINU56SEPPVBJR";
var EtherscanProvider = /** @class */ (function (_super) {
__extends(EtherscanProvider, _super);
function EtherscanProvider(network, apiKey) {
@@ -111,7 +112,7 @@ var EtherscanProvider = /** @class */ (function (_super) {
throw new Error('unsupported network');
}
properties_1.defineReadOnly(_this, 'baseUrl', baseUrl);
properties_1.defineReadOnly(_this, 'apiKey', apiKey);
properties_1.defineReadOnly(_this, 'apiKey', apiKey || defaultApiKey);
return _this;
}
EtherscanProvider.prototype.perform = function (method, params) {
@@ -189,7 +190,7 @@ var EtherscanProvider = /** @class */ (function (_super) {
url += apiKey;
return get(url);
}
throw new Error('getBlock by blockHash not implmeneted');
return Promise.reject(new Error('getBlock by blockHash not implemeneted'));
case 'getTransaction':
url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash;
url += apiKey;
@@ -206,7 +207,7 @@ var EtherscanProvider = /** @class */ (function (_super) {
url += '/api?module=proxy&action=eth_call' + transaction;
//url += '&tag=' + params.blockTag + apiKey;
if (params.blockTag !== 'latest') {
throw new Error('EtherscanProvider does not support blockTag for call');
return Promise.reject(new Error('EtherscanProvider does not support blockTag for call'));
}
url += apiKey;
return get(url);

View File

@@ -1 +1 @@
export const version = "4.0.43";
export const version = "4.0.47";

View File

@@ -364,7 +364,9 @@ export class Contract {
// Once this issue is resolved (there are open PR) we can do this nicer
// by making addressOrName default to null for 2 operand calls. :)
constructor(addressOrName: string, contractInterface: Array<string | FunctionFragment | EventFragment> | string | Interface, signerOrProvider: Signer | Provider) {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
constructor(addressOrName: string, contractInterface: Array<string | FunctionFragment | EventFragment | ParamType> | string | Interface, signerOrProvider: Signer | Provider) {
errors.checkNew(this, Contract);
// @TODO: Maybe still check the addressOrName looks like a valid address or name?
@@ -744,7 +746,9 @@ export class ContractFactory {
readonly bytecode: string;
readonly signer: Signer;
constructor(contractInterface: Array<string | FunctionFragment | EventFragment> | string | Interface, bytecode: Arrayish | string | { object: string }, signer?: Signer) {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
constructor(contractInterface: Array<string | FunctionFragment | EventFragment | ParamType> | string | Interface, bytecode: Arrayish | string | { object: string }, signer?: Signer) {
let bytecodeHex: string = null;

View File

@@ -156,7 +156,7 @@ export abstract class Provider implements OnceBlockable {
abstract removeListener(eventName: EventType, listener: Listener): Provider;
// @TODO: This *could* be implemented here, but would pull in events...
abstract waitForTransaction(transactionHash: string, timeout?: number): Promise<TransactionReceipt>;
abstract waitForTransaction(transactionHash: string, confirmations?: number): Promise<TransactionReceipt>;
constructor() {
setType(this, 'Provider');

View File

@@ -73,6 +73,7 @@ function checkLogTag(blockTag: string): number | "latest" {
return parseInt(blockTag.substring(2), 16);
}
const defaultApiKey = "8FG3JMZ9USS4NTA6YKEKHINU56SEPPVBJR";
export class EtherscanProvider extends BaseProvider{
readonly baseUrl: string;
@@ -106,7 +107,7 @@ export class EtherscanProvider extends BaseProvider{
}
defineReadOnly(this, 'baseUrl', baseUrl);
defineReadOnly(this, 'apiKey', apiKey);
defineReadOnly(this, 'apiKey', apiKey || defaultApiKey);
}
@@ -193,7 +194,7 @@ export class EtherscanProvider extends BaseProvider{
url += apiKey;
return get(url);
}
throw new Error('getBlock by blockHash not implmeneted');
return Promise.reject(new Error('getBlock by blockHash not implemeneted'));
case 'getTransaction':
url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash;
@@ -212,7 +213,7 @@ export class EtherscanProvider extends BaseProvider{
url += '/api?module=proxy&action=eth_call' + transaction;
//url += '&tag=' + params.blockTag + apiKey;
if (params.blockTag !== 'latest') {
throw new Error('EtherscanProvider does not support blockTag for call');
return Promise.reject(new Error('EtherscanProvider does not support blockTag for call'));
}
url += apiKey;
return get(url);

View File

@@ -607,7 +607,7 @@ class CoderAddress extends Coder {
}
decode(data: Uint8Array, offset: number): DecodedResult {
if (data.length < offset + 32) {
errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {
errors.throwError('insufficient data for address type', errors.INVALID_ARGUMENT, {
arg: this.localName,
coderType: 'address',
value: hexlify(data.slice(offset, offset + 32))

View File

@@ -374,6 +374,7 @@ function addMethod(method: any): void {
break;
}
case "receive":
case 'fallback':
// Nothing to do for fallback
break;
@@ -390,7 +391,9 @@ export class Interface {
readonly events: { [ name: string ]: _EventDescription };
readonly deployFunction: _DeployDescription;
constructor(abi: Array<string | FunctionFragment | EventFragment> | string) {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
constructor(abi: Array<string | FunctionFragment | EventFragment | ParamType> | string) {
errors.checkNew(this, Interface);
if (typeof(abi) === 'string') {

View File

@@ -46,14 +46,14 @@ function etcDefaultProvider(url: string, network: string): (providers: any) => a
const homestead: Network = {
chainId: 1,
ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "homestead",
_defaultProvider: ethDefaultProvider('homestead')
};
const ropsten: Network = {
chainId: 3,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "ropsten",
_defaultProvider: ethDefaultProvider('ropsten')
};
@@ -77,14 +77,14 @@ const networks: { [name: string]: Network } = {
rinkeby: {
chainId: 4,
ensAddress: "0xe7410170f87102DF0055eB195163A03B7F2Bff4A",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: 'rinkeby',
_defaultProvider: ethDefaultProvider('rinkeby')
},
goerli: {
chainId: 5,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "goerli",
_defaultProvider: ethDefaultProvider('goerli')
},

View File

@@ -26,6 +26,7 @@ export type EncryptOptions = {
entropy?: Arrayish;
mnemonic?: string;
path?: string;
wordlist?: any; // Should be a wordlist, but don't want to create the dependency
client?: string;
salt?: Arrayish;
uuid?: string;
@@ -177,7 +178,8 @@ export function decrypt(json: string, password: Arrayish, progressCallback?: Pro
}
// Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase
if (searchPath(data, 'x-ethers/version') === '0.1') {
const locale = searchPath(data, 'x-ethers/locale');
if (searchPath(data, 'x-ethers/version') === '0.1' && (locale == null || locale === "en")) {
var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext'));
var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter'));
@@ -318,7 +320,7 @@ export function encrypt(privateKey: Arrayish | SigningKey, password: Arrayish |
throw new Error('entropy and mnemonic mismatch');
}
} else {
entropy = arrayify(HDNode.mnemonicToEntropy(options.mnemonic));
entropy = arrayify(HDNode.mnemonicToEntropy(options.mnemonic, options.wordlist));
}
}
@@ -441,6 +443,9 @@ export function encrypt(privateKey: Arrayish | SigningKey, password: Arrayish |
path: path,
version: "0.1"
};
if (options.wordlist && typeof(options.wordlist.locale) === "string") {
data['x-ethers'].locale = options.wordlist.locale;
}
}
if (progressCallback) { progressCallback(1); }

View File

@@ -14,7 +14,7 @@ var blockchainData = {
homestead: {
balance: {
address: '0xAC1639CF97a3A46D431e6d1216f576622894cBB5',
balance: bigNumberify('4918774100000000')
balance: bigNumberify('0x1119c64d965d00')
},
block3: {
hash: '0x3d6122660cc824376f11ee842f83addc3525e2dd6756b9bcf0affa6aa88cf741',
@@ -393,6 +393,15 @@ function testProvider(providerName, networkName) {
});
}
if (networkName === "homestead") {
it('fetches ENS names', function() {
this.timeout(20000);
return provider.resolveName("ricmoo.firefly.eth").then(function(address) {
assert.equal(address, "0x8ba1f109551bD432803012645Ac136ddd64DBA72");
});
});
}
// Obviously many more cases to add here
// - getTransactionCount
// - getCode

View File

@@ -514,7 +514,7 @@ var CoderAddress = /** @class */ (function (_super) {
};
CoderAddress.prototype.decode = function (data, offset) {
if (data.length < offset + 32) {
errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {
errors.throwError('insufficient data for address type', errors.INVALID_ARGUMENT, {
arg: this.localName,
coderType: 'address',
value: bytes_1.hexlify(data.slice(offset, offset + 32))

View File

@@ -98,7 +98,7 @@ export declare class Interface {
[name: string]: _EventDescription;
};
readonly deployFunction: _DeployDescription;
constructor(abi: Array<string | FunctionFragment | EventFragment> | string);
constructor(abi: Array<string | FunctionFragment | EventFragment | ParamType> | string);
parseTransaction(tx: {
data: string;
value?: BigNumberish;

View File

@@ -294,6 +294,7 @@ function addMethod(method) {
}
break;
}
case "receive":
case 'fallback':
// Nothing to do for fallback
break;
@@ -303,6 +304,8 @@ function addMethod(method) {
}
}
var Interface = /** @class */ (function () {
// ParamType is not actually correct here, but for legacy reasons,
// we need it. See #721.
function Interface(abi) {
errors.checkNew(this, Interface);
if (typeof (abi) === 'string') {

View File

@@ -37,13 +37,13 @@ function etcDefaultProvider(url, network) {
}
var homestead = {
chainId: 1,
ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "homestead",
_defaultProvider: ethDefaultProvider('homestead')
};
var ropsten = {
chainId: 3,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "ropsten",
_defaultProvider: ethDefaultProvider('ropsten')
};
@@ -62,13 +62,13 @@ var networks = {
testnet: ropsten,
rinkeby: {
chainId: 4,
ensAddress: "0xe7410170f87102DF0055eB195163A03B7F2Bff4A",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: 'rinkeby',
_defaultProvider: ethDefaultProvider('rinkeby')
},
goerli: {
chainId: 5,
ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
name: "goerli",
_defaultProvider: ethDefaultProvider('goerli')
},

View File

@@ -6,6 +6,7 @@ export declare type EncryptOptions = {
entropy?: Arrayish;
mnemonic?: string;
path?: string;
wordlist?: any;
client?: string;
salt?: Arrayish;
uuid?: string;

View File

@@ -130,7 +130,8 @@ function decrypt(json, password, progressCallback) {
return null;
}
// Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase
if (searchPath(data, 'x-ethers/version') === '0.1') {
var locale = searchPath(data, 'x-ethers/locale');
if (searchPath(data, 'x-ethers/version') === '0.1' && (locale == null || locale === "en")) {
var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext'));
var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter'));
var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv);
@@ -262,7 +263,7 @@ function encrypt(privateKey, password, options, progressCallback) {
}
}
else {
entropy = bytes_1.arrayify(HDNode.mnemonicToEntropy(options.mnemonic));
entropy = bytes_1.arrayify(HDNode.mnemonicToEntropy(options.mnemonic, options.wordlist));
}
}
var path = options.path;
@@ -387,6 +388,9 @@ function encrypt(privateKey, password, options, progressCallback) {
path: path,
version: "0.1"
};
if (options.wordlist && typeof (options.wordlist.locale) === "string") {
data['x-ethers'].locale = options.wordlist.locale;
}
}
if (progressCallback) {
progressCallback(1);