* Initial ERC1155 implementation with some tests (#1803) * Initial ERC1155 implementation with some tests * Remove mocked isERC1155TokenReceiver * Revert reason edit nit * Remove parameters associated with isERC1155TokenReceiver call * Add tests for approvals and single transfers * Add tests for transferring to contracts * Add tests for batch transfers * Make expectEvent.inTransaction tests async * Renamed "owner" to "account" and "holder" * Document unspecified balanceOfBatch reversion on zero behavior * Ensure accounts can't set their own operator status * Specify descriptive messages for underflow errors * Bring SafeMath.add calls in line with OZ style * Explicitly prevent _burn on the zero account * Implement batch minting/burning * Refactored operator approval check into isApprovedForAll calls * Renamed ERC1155TokenReceiver to ERC1155Receiver * Added ERC1155Holder * Fix lint issues * Migrate tests to @openzeppelin/test-environment * port ERC1155 to Solidity 0.6 * make ERC1155 constructor more similar to ERC721 one * also migrate mock contracts to Solidity 0.6 * mark all non-view functions as virtual * add simple catch-all implementation for the metadata URI interface * include an internal function to set the URI so users can implement functionality to switch URIs * add tests for ERC1155 metadata URI * fix nits, mostly pointed out by linter * convert ERC1155 metadata URI work to Solidity 0.6 * mark all non-view functions as virtual * Port ERC 1155 branch to Solidity 0.6 (and current master) (#2130) * port ERC1155 to Solidity 0.6 * make ERC1155 constructor more similar to ERC721 one * also migrate mock contracts to Solidity 0.6 * mark all non-view functions as virtual * Update contracts/token/ERC1155/IERC1155MetadataURI.sol Starting on Solidity v0.6.2, interfaces can now inherit. \o/ Co-authored-by: Nicolás Venturo <nicolas.venturo@gmail.com> * Fix compile errors * Remove URI event * Merge MetadataCatchAll into ERC1155 * Improve documentation. * Simplify tests * Move tests into ERC1155 tests * Update documentation * Bump minimum compiler version for inteface inheritance * Fix holder tests * Improve setUri docs * Fix docs generation Co-authored-by: Alan Lu <alanlu1023@gmail.com> Co-authored-by: Nicolás Venturo <nicolas.venturo@gmail.com> Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
const { accounts, contract } = require('@openzeppelin/test-environment');
|
|
const { BN } = require('@openzeppelin/test-helpers');
|
|
|
|
const ERC1155Holder = contract.fromArtifact('ERC1155Holder');
|
|
const ERC1155Mock = contract.fromArtifact('ERC1155Mock');
|
|
|
|
const { expect } = require('chai');
|
|
|
|
describe('ERC1155Holder', function () {
|
|
const [creator] = accounts;
|
|
|
|
it('receives ERC1155 tokens', async function () {
|
|
const uri = 'https://token-cdn-domain/{id}.json';
|
|
|
|
const multiToken = await ERC1155Mock.new(uri, { from: creator });
|
|
const multiTokenIds = [new BN(1), new BN(2), new BN(3)];
|
|
const multiTokenAmounts = [new BN(1000), new BN(2000), new BN(3000)];
|
|
await multiToken.mintBatch(creator, multiTokenIds, multiTokenAmounts, '0x', { from: creator });
|
|
|
|
const transferData = '0xf00dbabe';
|
|
|
|
const holder = await ERC1155Holder.new();
|
|
|
|
await multiToken.safeTransferFrom(
|
|
creator,
|
|
holder.address,
|
|
multiTokenIds[0],
|
|
multiTokenAmounts[0],
|
|
transferData,
|
|
{ from: creator },
|
|
);
|
|
|
|
expect(await multiToken.balanceOf(holder.address, multiTokenIds[0])).to.be.bignumber.equal(multiTokenAmounts[0]);
|
|
|
|
await multiToken.safeBatchTransferFrom(
|
|
creator,
|
|
holder.address,
|
|
multiTokenIds.slice(1),
|
|
multiTokenAmounts.slice(1),
|
|
transferData,
|
|
{ from: creator },
|
|
);
|
|
|
|
for (let i = 1; i < multiTokenIds.length; i++) {
|
|
expect(await multiToken.balanceOf(holder.address, multiTokenIds[i])).to.be.bignumber.equal(multiTokenAmounts[i]);
|
|
}
|
|
});
|
|
});
|