1234567891011121314151617import {default as usingApi} from './substrate/substrate-api';18import {IKeyringPair} from '@polkadot/types/types';19import {20 createCollectionExpectSuccess,21 getBalance,22 createMultipleItemsExpectSuccess,23 isTokenExists,24 getLastTokenId,25 getAllowance,26 approve,27 transferFrom,28 createCollection,29 createRefungibleToken,30 transfer,31 burnItem,32 repartitionRFT,33} from './util/helpers';3435import chai from 'chai';36import chaiAsPromised from 'chai-as-promised';37chai.use(chaiAsPromised);38const expect = chai.expect;3940let alice: IKeyringPair;41let bob: IKeyringPair;4243describe('integration test: Refungible functionality:', () => {44 before(async () => {45 await usingApi(async (api, privateKeyWrapper) => {46 alice = privateKeyWrapper('//Alice');47 bob = privateKeyWrapper('//Bob');48 });49 });5051 it('Create refungible collection and token', async () => {52 await usingApi(async api => {53 const createCollectionResult = await createCollection(api, alice, {mode: {type: 'ReFungible'}});54 expect(createCollectionResult.success).to.be.true; 55 const collectionId = createCollectionResult.collectionId;5657 const itemCountBefore = await getLastTokenId(api, collectionId);58 const result = await createRefungibleToken(api, alice, collectionId, 100n);5960 const itemCountAfter = await getLastTokenId(api, collectionId);6162 63 64 expect(result.success).to.be.true;65 expect(itemCountAfter).to.be.equal(itemCountBefore + 1);66 expect(collectionId).to.be.equal(result.collectionId);67 expect(itemCountAfter.toString()).to.be.equal(result.itemId.toString());68 });69 });7071 it.only('Check total pieces of token', async () => {72 await usingApi(async api => {73 const createCollectionResult = await createCollection(api, alice, {mode: {type: 'ReFungible'}});74 expect(createCollectionResult.success).to.be.true; 75 const collectionId = createCollectionResult.collectionId;76 const amountPieces = 100n;77 const result = await createRefungibleToken(api, alice, collectionId, amountPieces);78 expect(result.success).to.be.true;79 {80 const totalPieces = await api.rpc.unique.totalPieces(collectionId, result.itemId);81 expect(totalPieces.toBigInt()).to.be.eq(amountPieces);82 }8384 await transfer(api, collectionId, result.itemId, alice, bob, 60n);85 {86 const totalPieces = await api.rpc.unique.totalPieces(collectionId, result.itemId);87 expect(totalPieces.toBigInt()).to.be.eq(amountPieces);88 }89 });90 });9192 it('Transfer token pieces', async () => {93 await usingApi(async api => {94 const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;95 const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;9697 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);98 expect(await transfer(api, collectionId, tokenId, alice, bob, 60n)).to.be.true;99100 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(40n);101 expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(60n);102 await expect(transfer(api, collectionId, tokenId, alice, bob, 41n)).to.eventually.be.rejected;103 });104 });105106 it('Create multiple tokens', async () => {107 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});108 const args = [109 {ReFungible: {pieces: 1}},110 {ReFungible: {pieces: 2}},111 {ReFungible: {pieces: 100}},112 ];113 await createMultipleItemsExpectSuccess(alice, collectionId, args);114115 await usingApi(async api => { 116 const tokenId = await getLastTokenId(api, collectionId);117 expect(tokenId).to.be.equal(3);118 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);119 });120 });121122 it('Burn some pieces', async () => {123 await usingApi(async api => { 124 const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;125 const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;126 expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;127 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);128 expect(await burnItem(api, alice, collectionId, tokenId, 99n)).to.be.true;129 expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;130 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(1n);131 });132 });133134 it('Burn all pieces', async () => {135 await usingApi(async api => { 136 const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;137 const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;138 expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;139 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);140 expect(await burnItem(api, alice, collectionId, tokenId, 100n)).to.be.true;141 expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;142 });143 });144145 it('Burn some pieces for multiple users', async () => {146 await usingApi(async api => { 147 const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;148 const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;149 expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;150151 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);152 expect(await transfer(api, collectionId, tokenId, alice, bob, 60n)).to.be.true;153154 155 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(40n);156 expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(60n);157 expect(await burnItem(api, alice, collectionId, tokenId, 40n)).to.be.true;158159 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(0n);160 expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;161 expect(await burnItem(api, bob, collectionId, tokenId, 59n)).to.be.true;162163 expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(1n);164 expect(await isTokenExists(api, collectionId, tokenId)).to.be.true;165 expect(await burnItem(api, bob, collectionId, tokenId, 1n)).to.be.true;166 167 expect(await isTokenExists(api, collectionId, tokenId)).to.be.false;168 });169 });170171 it('Set allowance for token', async () => {172 await usingApi(async api => {173 const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;174 const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;175176 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(100n);177178 expect(await approve(api, collectionId, tokenId, alice, bob, 60n)).to.be.true;179 expect(await getAllowance(api, collectionId, alice, bob, tokenId)).to.be.equal(60n);180181 expect(await transferFrom(api, collectionId, tokenId, bob, alice, bob, 20n)).to.be.true;182 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(80n);183 expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(20n);184 expect(await getAllowance(api, collectionId, alice, bob, tokenId)).to.be.equal(40n);185 });186 });187188 it('Repartition', async () => {189 await usingApi(async api => {190 const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;191 const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;192193 expect(await repartitionRFT(api, collectionId, alice, tokenId, 200n)).to.be.true;194 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(200n);195196 expect(await transfer(api, collectionId, tokenId, alice, bob, 110n)).to.be.true;197 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(90n);198 expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(110n);199200 await expect(repartitionRFT(api, collectionId, alice, tokenId, 80n)).to.eventually.be.rejected;201202 expect(await transfer(api, collectionId, tokenId, alice, bob, 90n)).to.be.true;203 expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(0n);204 expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(200n);205206 expect(await repartitionRFT(api, collectionId, bob, tokenId, 150n)).to.be.true;207 await expect(transfer(api, collectionId, tokenId, bob, alice, 160n)).to.eventually.be.rejected;208 });209 });210});