Add assertions for txOpts and methodOpts
This commit is contained in:
parent
de40497330
commit
f7b3fc58bc
@ -5,6 +5,8 @@ import { ContractAbi, LogWithDecodedArgs } from 'ethereum-types';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
|
import { methodOptsSchema } from '../schemas/method_opts_schema';
|
||||||
|
import { txOptsSchema } from '../schemas/tx_opts_schema';
|
||||||
import {
|
import {
|
||||||
BlockRange,
|
BlockRange,
|
||||||
ContractWrappersError,
|
ContractWrappersError,
|
||||||
@ -49,6 +51,9 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
): Promise<BigNumber> {
|
): Promise<BigNumber> {
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
|
|
||||||
@ -81,6 +86,9 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('spenderAddress', spenderAddress);
|
assert.isETHAddressHex('spenderAddress', spenderAddress);
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
await assert.isSenderAddressAsync('ownerAddress', ownerAddress, this._web3Wrapper);
|
await assert.isSenderAddressAsync('ownerAddress', ownerAddress, this._web3Wrapper);
|
||||||
|
if (!_.isUndefined(txOpts)) {
|
||||||
|
assert.doesConformToSchema('txOpts', txOpts, txOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedSpenderAddress = spenderAddress.toLowerCase();
|
const normalizedSpenderAddress = spenderAddress.toLowerCase();
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
@ -112,16 +120,10 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
spenderAddress: string,
|
spenderAddress: string,
|
||||||
txOpts: TransactionOpts = {},
|
txOpts: TransactionOpts = {},
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
|
||||||
assert.isETHAddressHex('spenderAddress', spenderAddress);
|
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
|
||||||
const normalizedSpenderAddress = spenderAddress.toLowerCase();
|
|
||||||
const txHash = await this.setAllowanceAsync(
|
const txHash = await this.setAllowanceAsync(
|
||||||
normalizedTokenAddress,
|
tokenAddress,
|
||||||
normalizedOwnerAddress,
|
ownerAddress,
|
||||||
normalizedSpenderAddress,
|
spenderAddress,
|
||||||
this.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
|
this.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
|
||||||
txOpts,
|
txOpts,
|
||||||
);
|
);
|
||||||
@ -144,6 +146,9 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isETHAddressHex('spenderAddress', spenderAddress);
|
assert.isETHAddressHex('spenderAddress', spenderAddress);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
const normalizedSpenderAddress = spenderAddress.toLowerCase();
|
const normalizedSpenderAddress = spenderAddress.toLowerCase();
|
||||||
@ -172,18 +177,8 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
ownerAddress: string,
|
ownerAddress: string,
|
||||||
methodOpts?: MethodOpts,
|
methodOpts?: MethodOpts,
|
||||||
): Promise<BigNumber> {
|
): Promise<BigNumber> {
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
|
||||||
|
|
||||||
const proxyAddress = this._erc20ProxyWrapper.getContractAddress();
|
const proxyAddress = this._erc20ProxyWrapper.getContractAddress();
|
||||||
const allowanceInBaseUnits = await this.getAllowanceAsync(
|
const allowanceInBaseUnits = await this.getAllowanceAsync(tokenAddress, ownerAddress, proxyAddress, methodOpts);
|
||||||
normalizedTokenAddress,
|
|
||||||
normalizedOwnerAddress,
|
|
||||||
proxyAddress,
|
|
||||||
methodOpts,
|
|
||||||
);
|
|
||||||
return allowanceInBaseUnits;
|
return allowanceInBaseUnits;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -202,16 +197,10 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
amountInBaseUnits: BigNumber,
|
amountInBaseUnits: BigNumber,
|
||||||
txOpts: TransactionOpts = {},
|
txOpts: TransactionOpts = {},
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
|
||||||
assert.isValidBaseUnitAmount('amountInBaseUnits', amountInBaseUnits);
|
|
||||||
|
|
||||||
const proxyAddress = this._erc20ProxyWrapper.getContractAddress();
|
const proxyAddress = this._erc20ProxyWrapper.getContractAddress();
|
||||||
const txHash = await this.setAllowanceAsync(
|
const txHash = await this.setAllowanceAsync(
|
||||||
normalizedTokenAddress,
|
tokenAddress,
|
||||||
normalizedOwnerAddress,
|
ownerAddress,
|
||||||
proxyAddress,
|
proxyAddress,
|
||||||
amountInBaseUnits,
|
amountInBaseUnits,
|
||||||
txOpts,
|
txOpts,
|
||||||
@ -234,13 +223,9 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
ownerAddress: string,
|
ownerAddress: string,
|
||||||
txOpts: TransactionOpts = {},
|
txOpts: TransactionOpts = {},
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
|
||||||
const txHash = await this.setProxyAllowanceAsync(
|
const txHash = await this.setProxyAllowanceAsync(
|
||||||
normalizedTokenAddress,
|
tokenAddress,
|
||||||
normalizedOwnerAddress,
|
ownerAddress,
|
||||||
this.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
|
this.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
|
||||||
txOpts,
|
txOpts,
|
||||||
);
|
);
|
||||||
@ -265,6 +250,9 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isETHAddressHex('toAddress', toAddress);
|
assert.isETHAddressHex('toAddress', toAddress);
|
||||||
await assert.isSenderAddressAsync('fromAddress', fromAddress, this._web3Wrapper);
|
await assert.isSenderAddressAsync('fromAddress', fromAddress, this._web3Wrapper);
|
||||||
|
if (!_.isUndefined(txOpts)) {
|
||||||
|
assert.doesConformToSchema('txOpts', txOpts, txOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedFromAddress = fromAddress.toLowerCase();
|
const normalizedFromAddress = fromAddress.toLowerCase();
|
||||||
const normalizedToAddress = toAddress.toLowerCase();
|
const normalizedToAddress = toAddress.toLowerCase();
|
||||||
@ -310,6 +298,9 @@ export class ERC20TokenWrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('fromAddress', fromAddress);
|
assert.isETHAddressHex('fromAddress', fromAddress);
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
await assert.isSenderAddressAsync('senderAddress', senderAddress, this._web3Wrapper);
|
await assert.isSenderAddressAsync('senderAddress', senderAddress, this._web3Wrapper);
|
||||||
|
if (!_.isUndefined(txOpts)) {
|
||||||
|
assert.doesConformToSchema('txOpts', txOpts, txOptsSchema);
|
||||||
|
}
|
||||||
const normalizedToAddress = toAddress.toLowerCase();
|
const normalizedToAddress = toAddress.toLowerCase();
|
||||||
const normalizedFromAddress = fromAddress.toLowerCase();
|
const normalizedFromAddress = fromAddress.toLowerCase();
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
|
@ -6,6 +6,8 @@ import * as _ from 'lodash';
|
|||||||
|
|
||||||
import { constants } from '../../test/utils/constants';
|
import { constants } from '../../test/utils/constants';
|
||||||
import { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
|
import { methodOptsSchema } from '../schemas/method_opts_schema';
|
||||||
|
import { txOptsSchema } from '../schemas/tx_opts_schema';
|
||||||
import {
|
import {
|
||||||
BlockRange,
|
BlockRange,
|
||||||
ContractWrappersError,
|
ContractWrappersError,
|
||||||
@ -49,6 +51,9 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
): Promise<BigNumber> {
|
): Promise<BigNumber> {
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
|
|
||||||
@ -71,6 +76,9 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
public async getOwnerOfAsync(tokenAddress: string, tokenId: BigNumber, methodOpts?: MethodOpts): Promise<string> {
|
public async getOwnerOfAsync(tokenAddress: string, tokenId: BigNumber, methodOpts?: MethodOpts): Promise<string> {
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isBigNumber('tokenId', tokenId);
|
assert.isBigNumber('tokenId', tokenId);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
|
|
||||||
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
|
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
|
||||||
@ -100,6 +108,9 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
assert.isETHAddressHex('operatorAddress', operatorAddress);
|
assert.isETHAddressHex('operatorAddress', operatorAddress);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
const normalizedOperatorAddress = operatorAddress.toLowerCase();
|
const normalizedOperatorAddress = operatorAddress.toLowerCase();
|
||||||
@ -127,10 +138,17 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
ownerAddress: string,
|
ownerAddress: string,
|
||||||
methodOpts?: MethodOpts,
|
methodOpts?: MethodOpts,
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
const proxyAddress = this._erc721ProxyWrapper.getContractAddress();
|
const proxyAddress = this._erc721ProxyWrapper.getContractAddress();
|
||||||
const isProxyApprovedForAll = await this.isApprovedForAllAsync(
|
const isProxyApprovedForAll = await this.isApprovedForAllAsync(
|
||||||
tokenAddress,
|
normalizedTokenAddress,
|
||||||
ownerAddress,
|
normalizedOwnerAddress,
|
||||||
proxyAddress,
|
proxyAddress,
|
||||||
methodOpts,
|
methodOpts,
|
||||||
);
|
);
|
||||||
@ -151,6 +169,9 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
): Promise<string | undefined> {
|
): Promise<string | undefined> {
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isBigNumber('tokenId', tokenId);
|
assert.isBigNumber('tokenId', tokenId);
|
||||||
|
if (!_.isUndefined(methodOpts)) {
|
||||||
|
assert.doesConformToSchema('methodOpts', methodOpts, methodOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
|
|
||||||
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
|
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
|
||||||
@ -199,9 +220,12 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
txOpts: TransactionOpts = {},
|
txOpts: TransactionOpts = {},
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
await assert.isSenderAddressAsync('ownerAddress', ownerAddress, this._web3Wrapper);
|
||||||
assert.isETHAddressHex('operatorAddress', operatorAddress);
|
assert.isETHAddressHex('operatorAddress', operatorAddress);
|
||||||
assert.isBoolean('isApproved', isApproved);
|
assert.isBoolean('isApproved', isApproved);
|
||||||
|
if (!_.isUndefined(txOpts)) {
|
||||||
|
assert.doesConformToSchema('txOpts', txOpts, txOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
const normalizedOwnerAddress = ownerAddress.toLowerCase();
|
||||||
const normalizedOperatorAddress = operatorAddress.toLowerCase();
|
const normalizedOperatorAddress = operatorAddress.toLowerCase();
|
||||||
@ -260,11 +284,15 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isETHAddressHex('approvedAddress', approvedAddress);
|
assert.isETHAddressHex('approvedAddress', approvedAddress);
|
||||||
assert.isBigNumber('tokenId', tokenId);
|
assert.isBigNumber('tokenId', tokenId);
|
||||||
|
if (!_.isUndefined(txOpts)) {
|
||||||
|
assert.doesConformToSchema('txOpts', txOpts, txOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedApprovedAddress = approvedAddress.toLowerCase();
|
const normalizedApprovedAddress = approvedAddress.toLowerCase();
|
||||||
|
|
||||||
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
|
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
|
||||||
const tokenOwnerAddress = await tokenContract.ownerOf.callAsync(tokenId);
|
const tokenOwnerAddress = await tokenContract.ownerOf.callAsync(tokenId);
|
||||||
|
await assert.isSenderAddressAsync('tokenOwnerAddress', tokenOwnerAddress, this._web3Wrapper);
|
||||||
const txHash = await tokenContract.approve.sendTransactionAsync(normalizedApprovedAddress, tokenId, {
|
const txHash = await tokenContract.approve.sendTransactionAsync(normalizedApprovedAddress, tokenId, {
|
||||||
gas: txOpts.gasLimit,
|
gas: txOpts.gasLimit,
|
||||||
gasPrice: txOpts.gasPrice,
|
gasPrice: txOpts.gasPrice,
|
||||||
@ -311,7 +339,10 @@ export class ERC721TokenWrapper extends ContractWrapper {
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
assert.isETHAddressHex('receiverAddress', receiverAddress);
|
assert.isETHAddressHex('receiverAddress', receiverAddress);
|
||||||
assert.isETHAddressHex('senderAddress', senderAddress);
|
await assert.isSenderAddressAsync('senderAddress', senderAddress, this._web3Wrapper);
|
||||||
|
if (!_.isUndefined(txOpts)) {
|
||||||
|
assert.doesConformToSchema('txOpts', txOpts, txOptsSchema);
|
||||||
|
}
|
||||||
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
const normalizedTokenAddress = tokenAddress.toLowerCase();
|
||||||
const normalizedReceiverAddress = receiverAddress.toLowerCase();
|
const normalizedReceiverAddress = receiverAddress.toLowerCase();
|
||||||
const normalizedSenderAddress = senderAddress.toLowerCase();
|
const normalizedSenderAddress = senderAddress.toLowerCase();
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
export const methodOptsSchema = {
|
||||||
|
id: '/MethodOpts',
|
||||||
|
properties: {
|
||||||
|
defaultBlock: { $ref: '/BlockParam' },
|
||||||
|
},
|
||||||
|
type: 'object',
|
||||||
|
};
|
8
packages/contract-wrappers/src/schemas/tx_opts_schema.ts
Normal file
8
packages/contract-wrappers/src/schemas/tx_opts_schema.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export const txOptsSchema = {
|
||||||
|
id: '/TxOpts',
|
||||||
|
properties: {
|
||||||
|
gasPrice: { $ref: '/Number' },
|
||||||
|
gasLimit: { type: 'number' },
|
||||||
|
},
|
||||||
|
type: 'object',
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user