erc1155 wrapper improvements - handle minting for mutliple addresses at once + more revert reasons
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user