erc1155 wrapper improvements - handle minting for mutliple addresses at once + more revert reasons

This commit is contained in:
Greg Hysen
2019-03-04 13:30:16 -08:00
parent 60d24ada62
commit 4b60d941cc
4 changed files with 53 additions and 22 deletions

View File

@@ -1,8 +1,9 @@
import { constants, LogDecoder, Web3ProviderEngine } from '@0x/contracts-test-utils';
import { constants, LogDecoder } from '@0x/contracts-test-utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
import { LogWithDecodedArgs, TransactionReceiptWithDecodedLogs } from 'ethereum-types';
import * as _ from 'lodash';
import { Provider } from 'ethereum-types';
import { BigNumber } from '@0x/utils';
@@ -16,12 +17,15 @@ export class Erc1155Wrapper {
private readonly _contractOwner: string;
private readonly _logDecoder: LogDecoder;
constructor(contractInstance: ERC1155MintableContract, provider: Web3ProviderEngine, contractOwner: string) {
constructor(contractInstance: ERC1155MintableContract, provider: Provider, contractOwner: string) {
this._erc1155Contract = contractInstance;
this._web3Wrapper = new Web3Wrapper(provider);
this._contractOwner = contractOwner;
this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts);
}
public getContract(): ERC1155MintableContract {
return this._erc1155Contract;
}
public async getBalancesAsync(owners: string[], tokens: BigNumber[]): Promise<BigNumber[]> {
const balances = await this._erc1155Contract.balanceOfBatch.callAsync(owners, tokens);
return balances;
@@ -63,7 +67,7 @@ export class Erc1155Wrapper {
);
return tx;
}
public async mintFungibleTokenAsync(beneficiary: string, tokenAmount: BigNumber): Promise<BigNumber> {
public async mintFungibleTokensAsync(beneficiaries: string[], tokenAmounts: BigNumber | BigNumber[]): Promise<BigNumber> {
const tokenUri = 'dummyFungibleToken';
const tokenIsNonFungible = false;
const tx = await this._logDecoder.getTxWithDecodedLogsAsync(
@@ -74,15 +78,19 @@ export class Erc1155Wrapper {
// tslint:disable-next-line no-unnecessary-type-assertion
const createFungibleTokenLog = tx.logs[0] as LogWithDecodedArgs<ERC1155TransferSingleEventArgs>;
const token = createFungibleTokenLog.args.id;
const tokenAmountsAsArray = _.isArray(tokenAmounts) ? tokenAmounts : [];
if (!_.isArray(tokenAmounts)) {
_.each(_.range(0, beneficiaries.length), () => {tokenAmountsAsArray.push(tokenAmounts)});
}
await this._web3Wrapper.awaitTransactionSuccessAsync(
await this._erc1155Contract.mintFungible.sendTransactionAsync(token, [beneficiary], [tokenAmount], {
await this._erc1155Contract.mintFungible.sendTransactionAsync(token, beneficiaries, tokenAmountsAsArray, {
from: this._contractOwner,
}),
constants.AWAIT_TRANSACTION_MINED_MS,
);
return token;
}
public async mintNonFungibleTokenAsync(beneficiary: string): Promise<[BigNumber, BigNumber]> {
public async mintNonFungibleTokensAsync(beneficiaries: string[]): Promise<[BigNumber, BigNumber[]]> {
const tokenUri = 'dummyNonFungibleToken';
const tokenIsNonFungible = true;
const tx = await this._logDecoder.getTxWithDecodedLogsAsync(
@@ -94,13 +102,20 @@ export class Erc1155Wrapper {
const createFungibleTokenLog = tx.logs[0] as LogWithDecodedArgs<ERC1155TransferSingleEventArgs>;
const token = createFungibleTokenLog.args.id;
await this._web3Wrapper.awaitTransactionSuccessAsync(
await this._erc1155Contract.mintNonFungible.sendTransactionAsync(token, [beneficiary], {
await this._erc1155Contract.mintNonFungible.sendTransactionAsync(token, beneficiaries, {
from: this._contractOwner,
}),
constants.AWAIT_TRANSACTION_MINED_MS,
);
const nftId = token.plus(1);
return [token, nftId];
const encodedNftIds: BigNumber[] = [];
const nftIdBegin = 1;
const nftIdEnd = beneficiaries.length + 1;
const nftIdRange = _.range(nftIdBegin, nftIdEnd);
_.each(nftIdRange, (nftId: number) => {
const encodedNftId = token.plus(nftId);
encodedNftIds.push(encodedNftId);
});
return [token, encodedNftIds];
}
public async setApprovalForAllAsync(
owner: string,
@@ -124,11 +139,11 @@ export class Erc1155Wrapper {
expectedBalances: BigNumber[],
): Promise<void> {
const ownersExtended: string[] = [];
const tokensExtended: BigNumber[] = [];
_.each(tokens, (token: BigNumber) => {
ownersExtended.concat(owners);
_.range(0, owners.length, () => {
tokensExtended.push(token);
let tokensExtended: BigNumber[] = [];
_.each(owners, (owner: string) => {
tokensExtended = tokensExtended.concat(tokens);
_.each(_.range(0, tokens.length), () => {
ownersExtended.push(owner);
});
});
const balances = await this.getBalancesAsync(ownersExtended, tokensExtended);