Socket
Socket
Sign inDemoInstall

@ethersproject/contracts

Package Overview
Dependencies
Maintainers
1
Versions
62
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ethersproject/contracts - npm Package Compare versions

Comparing version 5.0.0-beta.154 to 5.0.0-beta.155

2

lib.esm/_version.d.ts

@@ -1,1 +0,1 @@

export declare const version = "contracts/5.0.0-beta.154";
export declare const version = "contracts/5.0.0-beta.155";

@@ -1,1 +0,1 @@

export const version = "contracts/5.0.0-beta.154";
export const version = "contracts/5.0.0-beta.155";

@@ -6,3 +6,2 @@ import { Fragment, Indexed, Interface, JsonFragment, Result } from "@ethersproject/abi";

import { BytesLike } from "@ethersproject/bytes";
import { UnsignedTransaction } from "@ethersproject/transactions";
export interface Overrides {

@@ -20,2 +19,12 @@ gasLimit?: BigNumberish | Promise<BigNumberish>;

}
export interface PopulatedTransaction {
to?: string;
from?: string;
nonce?: number;
gasLimit?: BigNumber;
gasPrice?: BigNumber;
data?: string;
value?: BigNumber;
chainId?: number;
}
export declare type EventFilter = {

@@ -73,3 +82,3 @@ address?: string;

readonly populateTransaction: {
[name: string]: ContractFunction<UnsignedTransaction>;
[name: string]: ContractFunction<PopulatedTransaction>;
};

@@ -89,3 +98,3 @@ readonly filters: {

};
constructor(addressOrName: string, contractInterface: ContractInterface, signerOrProvider: Signer | Provider);
constructor(addressOrName: string, contractInterface: ContractInterface, signerOrProvider?: Signer | Provider);
static getContractAddress(transaction: {

@@ -124,3 +133,3 @@ from: string;

}, signer?: Signer);
getDeployTransaction(...args: Array<any>): UnsignedTransaction;
getDeployTransaction(...args: Array<any>): TransactionRequest;
deploy(...args: Array<any>): Promise<Contract>;

@@ -127,0 +136,0 @@ attach(address: string): Contract;

@@ -14,9 +14,13 @@ "use strict";

import { Signer, VoidSigner } from "@ethersproject/abstract-signer";
import { getContractAddress } from "@ethersproject/address";
import { getAddress, getContractAddress } from "@ethersproject/address";
import { BigNumber } from "@ethersproject/bignumber";
import { concat, hexlify, isBytes, isHexString } from "@ethersproject/bytes";
//import { AddressZero } from "@ethersproject/constants";
import { defineReadOnly, deepCopy, getStatic, resolveProperties, shallowCopy } from "@ethersproject/properties";
// @TOOD remove dependences transactions
import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);
;
;
///////////////////////////////

@@ -26,14 +30,30 @@ const allowedTransactionKeys = {

};
function resolveName(resolver, nameOrPromise) {
return __awaiter(this, void 0, void 0, function* () {
const name = yield nameOrPromise;
// If it is already an address, just use it (after adding checksum)
try {
return getAddress(name);
}
catch (error) { }
if (!resolver) {
logger.throwError("a provider or signer is needed to resolve ENS names", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "resolveName"
});
}
return yield resolver.resolveName(name);
});
}
// Recursively replaces ENS names with promises to resolve the name and resolves all properties
function resolveAddresses(signerOrProvider, value, paramType) {
function resolveAddresses(resolver, value, paramType) {
if (Array.isArray(paramType)) {
return Promise.all(paramType.map((paramType, index) => {
return resolveAddresses(signerOrProvider, ((Array.isArray(value)) ? value[index] : value[paramType.name]), paramType);
return resolveAddresses(resolver, ((Array.isArray(value)) ? value[index] : value[paramType.name]), paramType);
}));
}
if (paramType.type === "address") {
return signerOrProvider.resolveName(value);
return resolveName(resolver, value);
}
if (paramType.type === "tuple") {
return resolveAddresses(signerOrProvider, value, paramType.components);
return resolveAddresses(resolver, value, paramType.components);
}

@@ -44,10 +64,44 @@ if (paramType.baseType === "array") {

}
return Promise.all(value.map((v) => resolveAddresses(signerOrProvider, v, paramType.arrayChildren)));
return Promise.all(value.map((v) => resolveAddresses(resolver, v, paramType.arrayChildren)));
}
return Promise.resolve(value);
}
function _populateTransaction(contract, fragment, args, overrides) {
function populateTransaction(contract, fragment, args) {
return __awaiter(this, void 0, void 0, function* () {
overrides = shallowCopy(overrides);
// Wait for all dependency addresses to be resolved (prefer the signer over the provider)
// If an extra argument is given, it is overrides
let overrides = {};
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = shallowCopy(args.pop());
}
// Make sure the parameter count matches
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
// Populate "from" override (allow promises)
if (contract.signer) {
if (overrides.from) {
// Contracts with a Signer are from the Signer's frame-of-reference;
// but we allow overriding "from" if it matches the signer
overrides.from = resolveProperties({
override: resolveName(contract.signer, overrides.from),
signer: contract.signer.getAddress()
}).then((check) => __awaiter(this, void 0, void 0, function* () {
if (getAddress(check.signer) !== check.override) {
logger.throwError("Contract with a Signer cannot override from", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "overrides.from"
});
}
return check.override;
}));
}
else {
overrides.from = contract.signer.getAddress();
}
}
else if (overrides.from) {
overrides.from = resolveName(contract.provider, overrides.from);
//} else {
// Contracts without a signer can override "from", and if
// unspecified the zero address is used
//overrides.from = AddressZero;
}
// Wait for all dependencies to be resolved (prefer the signer over the provider)
const resolved = yield resolveProperties({

@@ -65,2 +119,3 @@ args: resolveAddresses(contract.signer || contract.provider, args, fragment.inputs),

const ro = resolved.overrides;
// Populate simple overrides
if (ro.nonce != null) {

@@ -75,6 +130,20 @@ tx.nonce = BigNumber.from(ro.nonce).toNumber();

}
// If there was no gasLimit override, but the ABI specifies one use it
if (ro.from != null) {
tx.from = ro.from;
}
// If there was no "gasLimit" override, but the ABI specifies a default, use it
if (tx.gasLimit == null && fragment.gas != null) {
tx.gasLimit = BigNumber.from(fragment.gas).add(21000);
}
// Populate "value" override
if (ro.value) {
const roValue = BigNumber.from(ro.value);
if (!roValue.isZero() && !fragment.payable) {
logger.throwError("non-payable method cannot override value", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "overrides.value",
value: overrides.value
});
}
tx.value = roValue;
}
// Remvoe the overrides

@@ -84,3 +153,4 @@ delete overrides.nonce;

delete overrides.gasPrice;
// @TODO: Maybe move all tx property validation to the Signer and Provider?
delete overrides.from;
delete overrides.value;
// Make sure there are no stray overrides, which may indicate a

@@ -92,3 +162,3 @@ // typo or using an unsupported key.

operation: "overrides",
keys: leftovers
overrides: leftovers
});

@@ -99,59 +169,6 @@ }

}
function populateTransaction(contract, fragment, args, overrides) {
return __awaiter(this, void 0, void 0, function* () {
overrides = shallowCopy(overrides);
// If the contract was just deployed, wait until it is minded
if (contract.deployTransaction != null) {
yield contract._deployed();
}
// Resolved Overrides (keep value for errors)
const ro = yield resolveProperties(overrides);
const value = overrides.value;
delete overrides.value;
const tx = yield _populateTransaction(contract, fragment, args, overrides);
if (ro.value) {
const roValue = BigNumber.from(ro.value);
if (!roValue.isZero() && !fragment.payable) {
logger.throwError("non-payable method cannot override value", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "overrides.value",
value: value
});
}
tx.value = roValue;
}
return tx;
});
}
function populateCallTransaction(contract, fragment, args, overrides) {
return __awaiter(this, void 0, void 0, function* () {
overrides = shallowCopy(overrides);
// If the contract was just deployed, wait until it is minded
if (contract.deployTransaction != null) {
let blockTag = undefined;
if (overrides.blockTag) {
blockTag = yield overrides.blockTag;
}
yield contract._deployed(blockTag);
}
// Resolved Overrides
delete overrides.blockTag;
const ro = yield resolveProperties(overrides);
delete overrides.from;
const tx = yield populateTransaction(contract, fragment, args, overrides);
if (ro.from) {
tx.from = this.interface.constructor.getAddress(ro.from);
}
return tx;
});
}
function buildPopulate(contract, fragment) {
const populate = (fragment.constant) ? populateCallTransaction : populateTransaction;
return function (...args) {
return __awaiter(this, void 0, void 0, function* () {
let overrides = null;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = args.pop();
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
return populate(contract, fragment, args, overrides);
return populateTransaction(contract, fragment, args);
});

@@ -162,14 +179,10 @@ };

const signerOrProvider = (contract.signer || contract.provider);
const populate = (fragment.constant) ? populateCallTransaction : populateTransaction;
return function (...args) {
return __awaiter(this, void 0, void 0, function* () {
let overrides = null;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = args.pop();
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
if (!signerOrProvider) {
logger.throwError("estimate require a provider or signer", Logger.errors.UNSUPPORTED_OPERATION, { operation: "estimateGas" });
logger.throwError("estimate require a provider or signer", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "estimateGas"
});
}
const tx = yield populate(contract, fragment, args, overrides);
const tx = yield populateTransaction(contract, fragment, args);
return yield signerOrProvider.estimateGas(tx);

@@ -181,9 +194,8 @@ });

const signerOrProvider = (contract.signer || contract.provider);
const populate = (fragment.constant) ? populateCallTransaction : populateTransaction;
return function (...args) {
return __awaiter(this, void 0, void 0, function* () {
let overrides = null;
// Extract the "blockTag" override if present
let blockTag = undefined;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = shallowCopy(args.pop());
const overrides = shallowCopy(args.pop());
if (overrides.blockTag) {

@@ -193,12 +205,17 @@ blockTag = yield overrides.blockTag;

}
args.push(overrides);
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
const tx = yield populate(contract, fragment, args, overrides);
const value = yield signerOrProvider.call(tx, blockTag);
// If the contract was just deployed, wait until it is mined
if (contract.deployTransaction != null) {
yield contract._deployed(blockTag);
}
// Call a node and get the result
const tx = yield populateTransaction(contract, fragment, args);
const result = yield signerOrProvider.call(tx, blockTag);
try {
let result = contract.interface.decodeFunctionResult(fragment, value);
let value = contract.interface.decodeFunctionResult(fragment, result);
if (collapseSimple && fragment.outputs.length === 1) {
result = result[0];
value = value[0];
}
return result;
return value;
}

@@ -220,14 +237,11 @@ catch (error) {

if (!contract.signer) {
logger.throwError("sending a transaction requires a signer", Logger.errors.UNSUPPORTED_OPERATION, { operation: "sendTransaction" });
logger.throwError("sending a transaction requires a signer", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "sendTransaction"
});
}
// We allow CallOverrides, since the Signer can accept from
let overrides = null;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = shallowCopy(args.pop());
if (overrides.blockTag != null) {
logger.throwArgumentError(`cannot override "blockTag" in transaction`, "overrides", overrides);
}
// If the contract was just deployed, wait until it is minded
if (contract.deployTransaction != null) {
yield contract._deployed();
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
const txRequest = yield populateCallTransaction(contract, fragment, args, overrides);
const txRequest = yield populateTransaction(contract, fragment, args);
const tx = yield contract.signer.sendTransaction(txRequest);

@@ -427,3 +441,7 @@ // Tweak the tw.wait so the receipt has extra properties

defineReadOnly(this, "interface", getStatic((new.target), "getInterface")(contractInterface));
if (Signer.isSigner(signerOrProvider)) {
if (signerOrProvider == null) {
defineReadOnly(this, "provider", null);
defineReadOnly(this, "signer", null);
}
else if (Signer.isSigner(signerOrProvider)) {
defineReadOnly(this, "provider", signerOrProvider.provider || null);

@@ -485,7 +503,9 @@ defineReadOnly(this, "signer", signerOrProvider);

try {
defineReadOnly(this, "resolvedAddress", Promise.resolve((this.interface.constructor).getAddress(addressOrName)));
defineReadOnly(this, "resolvedAddress", Promise.resolve(getAddress(addressOrName)));
}
catch (error) {
// Without a provider, we cannot use ENS names
logger.throwArgumentError("provider is required to use non-address contract address", "addressOrName", addressOrName);
logger.throwError("provider is required to use ENS name as contract address", Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new Contract"
});
}

@@ -492,0 +512,0 @@ }

@@ -1,1 +0,1 @@

export declare const version = "contracts/5.0.0-beta.154";
export declare const version = "contracts/5.0.0-beta.155";
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.version = "contracts/5.0.0-beta.154";
exports.version = "contracts/5.0.0-beta.155";

@@ -6,3 +6,2 @@ import { Fragment, Indexed, Interface, JsonFragment, Result } from "@ethersproject/abi";

import { BytesLike } from "@ethersproject/bytes";
import { UnsignedTransaction } from "@ethersproject/transactions";
export interface Overrides {

@@ -20,2 +19,12 @@ gasLimit?: BigNumberish | Promise<BigNumberish>;

}
export interface PopulatedTransaction {
to?: string;
from?: string;
nonce?: number;
gasLimit?: BigNumber;
gasPrice?: BigNumber;
data?: string;
value?: BigNumber;
chainId?: number;
}
export declare type EventFilter = {

@@ -73,3 +82,3 @@ address?: string;

readonly populateTransaction: {
[name: string]: ContractFunction<UnsignedTransaction>;
[name: string]: ContractFunction<PopulatedTransaction>;
};

@@ -89,3 +98,3 @@ readonly filters: {

};
constructor(addressOrName: string, contractInterface: ContractInterface, signerOrProvider: Signer | Provider);
constructor(addressOrName: string, contractInterface: ContractInterface, signerOrProvider?: Signer | Provider);
static getContractAddress(transaction: {

@@ -124,3 +133,3 @@ from: string;

}, signer?: Signer);
getDeployTransaction(...args: Array<any>): UnsignedTransaction;
getDeployTransaction(...args: Array<any>): TransactionRequest;
deploy(...args: Array<any>): Promise<Contract>;

@@ -127,0 +136,0 @@ attach(address: string): Contract;

@@ -65,6 +65,10 @@ "use strict";

var bytes_1 = require("@ethersproject/bytes");
//import { AddressZero } from "@ethersproject/constants";
var properties_1 = require("@ethersproject/properties");
// @TOOD remove dependences transactions
var logger_1 = require("@ethersproject/logger");
var _version_1 = require("./_version");
var logger = new logger_1.Logger(_version_1.version);
;
;
///////////////////////////////

@@ -74,14 +78,38 @@ var allowedTransactionKeys = {

};
function resolveName(resolver, nameOrPromise) {
return __awaiter(this, void 0, void 0, function () {
var name;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, nameOrPromise];
case 1:
name = _a.sent();
// If it is already an address, just use it (after adding checksum)
try {
return [2 /*return*/, address_1.getAddress(name)];
}
catch (error) { }
if (!resolver) {
logger.throwError("a provider or signer is needed to resolve ENS names", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "resolveName"
});
}
return [4 /*yield*/, resolver.resolveName(name)];
case 2: return [2 /*return*/, _a.sent()];
}
});
});
}
// Recursively replaces ENS names with promises to resolve the name and resolves all properties
function resolveAddresses(signerOrProvider, value, paramType) {
function resolveAddresses(resolver, value, paramType) {
if (Array.isArray(paramType)) {
return Promise.all(paramType.map(function (paramType, index) {
return resolveAddresses(signerOrProvider, ((Array.isArray(value)) ? value[index] : value[paramType.name]), paramType);
return resolveAddresses(resolver, ((Array.isArray(value)) ? value[index] : value[paramType.name]), paramType);
}));
}
if (paramType.type === "address") {
return signerOrProvider.resolveName(value);
return resolveName(resolver, value);
}
if (paramType.type === "tuple") {
return resolveAddresses(signerOrProvider, value, paramType.components);
return resolveAddresses(resolver, value, paramType.components);
}

@@ -92,13 +120,49 @@ if (paramType.baseType === "array") {

}
return Promise.all(value.map(function (v) { return resolveAddresses(signerOrProvider, v, paramType.arrayChildren); }));
return Promise.all(value.map(function (v) { return resolveAddresses(resolver, v, paramType.arrayChildren); }));
}
return Promise.resolve(value);
}
function _populateTransaction(contract, fragment, args, overrides) {
function populateTransaction(contract, fragment, args) {
return __awaiter(this, void 0, void 0, function () {
var resolved, tx, ro, leftovers;
var overrides, resolved, tx, ro, roValue, leftovers;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
overrides = properties_1.shallowCopy(overrides);
overrides = {};
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = properties_1.shallowCopy(args.pop());
}
// Make sure the parameter count matches
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
// Populate "from" override (allow promises)
if (contract.signer) {
if (overrides.from) {
// Contracts with a Signer are from the Signer's frame-of-reference;
// but we allow overriding "from" if it matches the signer
overrides.from = properties_1.resolveProperties({
override: resolveName(contract.signer, overrides.from),
signer: contract.signer.getAddress()
}).then(function (check) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (address_1.getAddress(check.signer) !== check.override) {
logger.throwError("Contract with a Signer cannot override from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "overrides.from"
});
}
return [2 /*return*/, check.override];
});
}); });
}
else {
overrides.from = contract.signer.getAddress();
}
}
else if (overrides.from) {
overrides.from = resolveName(contract.provider, overrides.from);
//} else {
// Contracts without a signer can override "from", and if
// unspecified the zero address is used
//overrides.from = AddressZero;
}
return [4 /*yield*/, properties_1.resolveProperties({

@@ -116,2 +180,3 @@ args: resolveAddresses(contract.signer || contract.provider, args, fragment.inputs),

ro = resolved.overrides;
// Populate simple overrides
if (ro.nonce != null) {

@@ -126,42 +191,10 @@ tx.nonce = bignumber_1.BigNumber.from(ro.nonce).toNumber();

}
// If there was no gasLimit override, but the ABI specifies one use it
if (ro.from != null) {
tx.from = ro.from;
}
// If there was no "gasLimit" override, but the ABI specifies a default, use it
if (tx.gasLimit == null && fragment.gas != null) {
tx.gasLimit = bignumber_1.BigNumber.from(fragment.gas).add(21000);
}
// Remvoe the overrides
delete overrides.nonce;
delete overrides.gasLimit;
delete overrides.gasPrice;
leftovers = Object.keys(overrides);
if (leftovers.length) {
logger.throwError("cannot override " + leftovers.map(function (l) { return JSON.stringify(l); }).join(","), logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "overrides",
keys: leftovers
});
}
return [2 /*return*/, tx];
}
});
});
}
function populateTransaction(contract, fragment, args, overrides) {
return __awaiter(this, void 0, void 0, function () {
var ro, value, tx, roValue;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
overrides = properties_1.shallowCopy(overrides);
if (!(contract.deployTransaction != null)) return [3 /*break*/, 2];
return [4 /*yield*/, contract._deployed()];
case 1:
_a.sent();
_a.label = 2;
case 2: return [4 /*yield*/, properties_1.resolveProperties(overrides)];
case 3:
ro = _a.sent();
value = overrides.value;
delete overrides.value;
return [4 /*yield*/, _populateTransaction(contract, fragment, args, overrides)];
case 4:
tx = _a.sent();
// Populate "value" override
if (ro.value) {

@@ -172,3 +205,3 @@ roValue = bignumber_1.BigNumber.from(ro.value);

operation: "overrides.value",
value: value
value: overrides.value
});

@@ -178,37 +211,14 @@ }

}
return [2 /*return*/, tx];
}
});
});
}
function populateCallTransaction(contract, fragment, args, overrides) {
return __awaiter(this, void 0, void 0, function () {
var blockTag, ro, tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
overrides = properties_1.shallowCopy(overrides);
if (!(contract.deployTransaction != null)) return [3 /*break*/, 4];
blockTag = undefined;
if (!overrides.blockTag) return [3 /*break*/, 2];
return [4 /*yield*/, overrides.blockTag];
case 1:
blockTag = _a.sent();
_a.label = 2;
case 2: return [4 /*yield*/, contract._deployed(blockTag)];
case 3:
_a.sent();
_a.label = 4;
case 4:
// Resolved Overrides
delete overrides.blockTag;
return [4 /*yield*/, properties_1.resolveProperties(overrides)];
case 5:
ro = _a.sent();
// Remvoe the overrides
delete overrides.nonce;
delete overrides.gasLimit;
delete overrides.gasPrice;
delete overrides.from;
return [4 /*yield*/, populateTransaction(contract, fragment, args, overrides)];
case 6:
tx = _a.sent();
if (ro.from) {
tx.from = this.interface.constructor.getAddress(ro.from);
delete overrides.value;
leftovers = Object.keys(overrides);
if (leftovers.length) {
logger.throwError("cannot override " + leftovers.map(function (l) { return JSON.stringify(l); }).join(","), logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "overrides",
overrides: leftovers
});
}

@@ -221,3 +231,2 @@ return [2 /*return*/, tx];

function buildPopulate(contract, fragment) {
var populate = (fragment.constant) ? populateCallTransaction : populateTransaction;
return function () {

@@ -229,10 +238,4 @@ var args = [];

return __awaiter(this, void 0, void 0, function () {
var overrides;
return __generator(this, function (_a) {
overrides = null;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = args.pop();
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
return [2 /*return*/, populate(contract, fragment, args, overrides)];
return [2 /*return*/, populateTransaction(contract, fragment, args)];
});

@@ -244,3 +247,2 @@ });

var signerOrProvider = (contract.signer || contract.provider);
var populate = (fragment.constant) ? populateCallTransaction : populateTransaction;
return function () {

@@ -252,15 +254,12 @@ var args = [];

return __awaiter(this, void 0, void 0, function () {
var overrides, tx;
var tx;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
overrides = null;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = args.pop();
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
if (!signerOrProvider) {
logger.throwError("estimate require a provider or signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: "estimateGas" });
logger.throwError("estimate require a provider or signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "estimateGas"
});
}
return [4 /*yield*/, populate(contract, fragment, args, overrides)];
return [4 /*yield*/, populateTransaction(contract, fragment, args)];
case 1:

@@ -277,3 +276,2 @@ tx = _a.sent();

var signerOrProvider = (contract.signer || contract.provider);
var populate = (fragment.constant) ? populateCallTransaction : populateTransaction;
return function () {

@@ -285,9 +283,8 @@ var args = [];

return __awaiter(this, void 0, void 0, function () {
var overrides, blockTag, tx, value, result;
var blockTag, overrides, tx, result, value;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
overrides = null;
blockTag = undefined;
if (!(args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object")) return [3 /*break*/, 2];
if (!(args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object")) return [3 /*break*/, 3];
overrides = properties_1.shallowCopy(args.pop());

@@ -301,15 +298,22 @@ if (!overrides.blockTag) return [3 /*break*/, 2];

case 2:
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
return [4 /*yield*/, populate(contract, fragment, args, overrides)];
args.push(overrides);
_a.label = 3;
case 3:
if (!(contract.deployTransaction != null)) return [3 /*break*/, 5];
return [4 /*yield*/, contract._deployed(blockTag)];
case 4:
_a.sent();
_a.label = 5;
case 5: return [4 /*yield*/, populateTransaction(contract, fragment, args)];
case 6:
tx = _a.sent();
return [4 /*yield*/, signerOrProvider.call(tx, blockTag)];
case 4:
value = _a.sent();
case 7:
result = _a.sent();
try {
result = contract.interface.decodeFunctionResult(fragment, value);
value = contract.interface.decodeFunctionResult(fragment, result);
if (collapseSimple && fragment.outputs.length === 1) {
result = result[0];
value = value[0];
}
return [2 /*return*/, result];
return [2 /*return*/, value];
}

@@ -337,3 +341,3 @@ catch (error) {

return __awaiter(this, void 0, void 0, function () {
var overrides, txRequest, tx, wait;
var txRequest, tx, wait;
var _this = this;

@@ -344,17 +348,16 @@ return __generator(this, function (_a) {

if (!contract.signer) {
logger.throwError("sending a transaction requires a signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: "sendTransaction" });
logger.throwError("sending a transaction requires a signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "sendTransaction"
});
}
overrides = null;
if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") {
overrides = properties_1.shallowCopy(args.pop());
if (overrides.blockTag != null) {
logger.throwArgumentError("cannot override \"blockTag\" in transaction", "overrides", overrides);
}
}
logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract");
return [4 /*yield*/, populateCallTransaction(contract, fragment, args, overrides)];
if (!(contract.deployTransaction != null)) return [3 /*break*/, 2];
return [4 /*yield*/, contract._deployed()];
case 1:
_a.sent();
_a.label = 2;
case 2: return [4 /*yield*/, populateTransaction(contract, fragment, args)];
case 3:
txRequest = _a.sent();
return [4 /*yield*/, contract.signer.sendTransaction(txRequest)];
case 2:
case 4:
tx = _a.sent();

@@ -570,3 +573,7 @@ wait = tx.wait.bind(tx);

properties_1.defineReadOnly(this, "interface", properties_1.getStatic((_newTarget), "getInterface")(contractInterface));
if (abstract_signer_1.Signer.isSigner(signerOrProvider)) {
if (signerOrProvider == null) {
properties_1.defineReadOnly(this, "provider", null);
properties_1.defineReadOnly(this, "signer", null);
}
else if (abstract_signer_1.Signer.isSigner(signerOrProvider)) {
properties_1.defineReadOnly(this, "provider", signerOrProvider.provider || null);

@@ -632,7 +639,9 @@ properties_1.defineReadOnly(this, "signer", signerOrProvider);

try {
properties_1.defineReadOnly(this, "resolvedAddress", Promise.resolve((this.interface.constructor).getAddress(addressOrName)));
properties_1.defineReadOnly(this, "resolvedAddress", Promise.resolve(address_1.getAddress(addressOrName)));
}
catch (error) {
// Without a provider, we cannot use ENS names
logger.throwArgumentError("provider is required to use non-address contract address", "addressOrName", addressOrName);
logger.throwError("provider is required to use ENS name as contract address", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
operation: "new Contract"
});
}

@@ -639,0 +648,0 @@ }

@@ -12,4 +12,3 @@ {

"@ethersproject/logger": ">=5.0.0-beta.137",
"@ethersproject/properties": ">=5.0.0-beta.140",
"@ethersproject/transactions": ">=5.0.0-beta.135"
"@ethersproject/properties": ">=5.0.0-beta.140"
},

@@ -36,5 +35,5 @@ "description": "Contract abstraction meta-class for ethers.",

},
"tarballHash": "0xc7210dbd8a387e8ee1b090ba36f5393ab7167a7a5fbb2dea34fc938b2e5c67e6",
"tarballHash": "0xccc2bced42f75b771c52745a7f9736b37b1adbb9d4e67c694c143422fe1e6ad4",
"types": "./lib/index.d.ts",
"version": "5.0.0-beta.154"
"version": "5.0.0-beta.155"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc