From c169007f1251ed4447fe8c273d20d0b70df21145 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Tue, 19 Apr 2022 18:41:32 +0200 Subject: [PATCH 01/17] Creating initial setPublishingMarketFee function --- src/tokens/Datatoken.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 701bb302..93f49f2b 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1357,4 +1357,24 @@ export class Datatoken { const balance = await dtContract.methods.balanceOf(address).call() return this.web3.utils.fromWei(balance) } + + /** + * @dev setPublishingMarketFee + * Only publishMarketFeeAddress can call it + * This function allows to set the fee required by the publisherMarket + * @param _publishMarketFeeAddress new _publishMarketFeeAddress + * @param _publishMarketFeeToken new _publishMarketFeeToken + * @param _publishMarketFeeAmount new fee amount + */ + public async setPublishingMarketFee( + publishMarketFeeAddress: string, + publishMarketFeeToken: string, + publishMarketFeeAmount: number + ): Promise { + const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { + from: address + }) + const balance = await dtContract.methods.setPublishingMarketFee(address).call() + return this.web3.utils.fromWei(balance) + } } From 518dc6715eb0f28a00d956a5f68382affbc9f75d Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 20 Apr 2022 12:59:27 +0200 Subject: [PATCH 02/17] Updating parameters for setPublishingMarketFee function --- src/tokens/Datatoken.ts | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 93f49f2b..7e724ea6 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1362,19 +1362,28 @@ export class Datatoken { * @dev setPublishingMarketFee * Only publishMarketFeeAddress can call it * This function allows to set the fee required by the publisherMarket - * @param _publishMarketFeeAddress new _publishMarketFeeAddress - * @param _publishMarketFeeToken new _publishMarketFeeToken - * @param _publishMarketFeeAmount new fee amount + * @param {String} datatokenAddress Datatoken adress + * @param publishMarketFeeAddress new publish Market Fee Address + * @param publishMarketFeeToken new publish Market Fee Token + * @param publishMarketFeeAmount new fee amount + * @param {String} address user adress */ public async setPublishingMarketFee( + datatokenAddress: string, publishMarketFeeAddress: string, - publishMarketFeeToken: string, - publishMarketFeeAmount: number - ): Promise { + publishMarketFeeToken: string, + publishMarketFeeAmount: number, + address: string + ) { const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { from: address }) - const balance = await dtContract.methods.setPublishingMarketFee(address).call() - return this.web3.utils.fromWei(balance) + await dtContract.methods + .setPublishingMarketFee( + publishMarketFeeAddress, + publishMarketFeeToken, + publishMarketFeeAmount + ) + .call() } } From edcb01090de823cd7212979495e66afcf332e9a1 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 20 Apr 2022 13:29:12 +0200 Subject: [PATCH 03/17] Adding getPublishingMarketFee function --- src/tokens/Datatoken.ts | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 7e724ea6..7a956b52 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -44,6 +44,12 @@ export interface DispenserParams { allowedSwapper?: string // only account that can ask tokens. set address(0) if not required } +export interface PublishingMarketFee { + publishMarketFeeAddress: string + publishMarketFeeToken: string + publishMarketFeeAmount: number +} + export class Datatoken { public GASLIMIT_DEFAULT = 1000000 public factoryAddress: string @@ -1362,10 +1368,10 @@ export class Datatoken { * @dev setPublishingMarketFee * Only publishMarketFeeAddress can call it * This function allows to set the fee required by the publisherMarket - * @param {String} datatokenAddress Datatoken adress - * @param publishMarketFeeAddress new publish Market Fee Address - * @param publishMarketFeeToken new publish Market Fee Token - * @param publishMarketFeeAmount new fee amount + * @param {string} datatokenAddress Datatoken adress + * @param {string} publishMarketFeeAddress new publish Market Fee Address + * @param {string} publishMarketFeeToken new publish Market Fee Token + * @param {number} publishMarketFeeAmount new fee amount * @param {String} address user adress */ public async setPublishingMarketFee( @@ -1386,4 +1392,24 @@ export class Datatoken { ) .call() } + + /** + * @dev getPublishingMarketFee + * Get publishingMarket Fee + * This function allows to get the current fee set by the publishing market + * @param {String} datatokenAddress Datatoken adress + * @param {String} address user adress + * @return {Promise} Current fee set by the publishing market + */ + public async getPublishingMarketFee( + datatokenAddress: string, + address: string + ): Promise { + const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { + from: address + }) + + const publishingMarketFee = await dtContract.methods.getPublishingMarketFee().call() + return publishingMarketFee + } } From 44db9db5a4a1c44c752d02c7ef91d827d9f72c1c Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 20 Apr 2022 14:42:51 +0200 Subject: [PATCH 04/17] Writting tests for setPublishingMarketFee --- src/tokens/Datatoken.ts | 6 +++--- test/unit/tokens/Datatoken.test.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 7a956b52..a9c69f02 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -47,7 +47,7 @@ export interface DispenserParams { export interface PublishingMarketFee { publishMarketFeeAddress: string publishMarketFeeToken: string - publishMarketFeeAmount: number + publishMarketFeeAmount: string } export class Datatoken { @@ -1371,14 +1371,14 @@ export class Datatoken { * @param {string} datatokenAddress Datatoken adress * @param {string} publishMarketFeeAddress new publish Market Fee Address * @param {string} publishMarketFeeToken new publish Market Fee Token - * @param {number} publishMarketFeeAmount new fee amount + * @param {string} publishMarketFeeAmount new fee amount * @param {String} address user adress */ public async setPublishingMarketFee( datatokenAddress: string, publishMarketFeeAddress: string, publishMarketFeeToken: string, - publishMarketFeeAmount: number, + publishMarketFeeAmount: string, address: string ) { const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 8c84e8b0..9e8eea2b 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -552,4 +552,30 @@ describe('Datatoken', () => { const key = web3.utils.keccak256(datatokenAddress) assert((await nftDatatoken.getData(nftAddress, key)) === OldData) }) + + it('#setPublishingMarketFee - nftOwner should be able to set the Publishing Market Fee', async () => { + const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( + datatokenAddress, + nftOwner + ) + try { + await datatoken.setPublishingMarketFee( + datatokenAddress, + nftOwner, + contracts.daiAddress, + web3.utils.toWei('10'), + nftOwner + ) + } catch (e) { + console.log('Error', e) + } + const newPublishingMarketFee = await datatoken.getPublishingMarketFee( + datatokenAddress, + nftOwner + ) + assert(newPublishingMarketFee !== originalPublishingMarketFee) + assert(newPublishingMarketFee.publishMarketFeeAddress === nftOwner) + assert(newPublishingMarketFee.publishMarketFeeToken === contracts.daiAddress) + assert(newPublishingMarketFee.publishMarketFeeAmount === web3.utils.toWei('10')) + }) }) From ee90d58cdef749e71381ebd1374df2581431d928 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 20 Apr 2022 15:24:33 +0200 Subject: [PATCH 05/17] Fix linting --- test/unit/tokens/Datatoken.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 9e8eea2b..889ab46f 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -552,7 +552,7 @@ describe('Datatoken', () => { const key = web3.utils.keccak256(datatokenAddress) assert((await nftDatatoken.getData(nftAddress, key)) === OldData) }) - + it('#setPublishingMarketFee - nftOwner should be able to set the Publishing Market Fee', async () => { const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, From 257d1aeeead876922b526f7e70f415794ec3bc9c Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 20 Apr 2022 16:44:15 +0200 Subject: [PATCH 06/17] Adding extra test --- test/unit/tokens/Datatoken.test.ts | 44 ++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 889ab46f..8c0cbc9f 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -553,11 +553,34 @@ describe('Datatoken', () => { assert((await nftDatatoken.getData(nftAddress, key)) === OldData) }) + it('#setPublishingMarketFee - User should not be able to set the Publishing Market Fee', async () => { + const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( + datatokenAddress, + user2 + ) + try { + await datatoken.setPublishingMarketFee( + datatokenAddress, + user2, + contracts.daiAddress, + web3.utils.toWei('10'), + user2 + ) + } catch (e) { + console.log('Error', e) + } + const newPublishingMarketFee = await datatoken.getPublishingMarketFee( + datatokenAddress, + user2 + ) + assert(newPublishingMarketFee === originalPublishingMarketFee) + }) it('#setPublishingMarketFee - nftOwner should be able to set the Publishing Market Fee', async () => { const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, nftOwner ) + console.log('originalPublishingMarketFee', originalPublishingMarketFee) try { await datatoken.setPublishingMarketFee( datatokenAddress, @@ -573,9 +596,24 @@ describe('Datatoken', () => { datatokenAddress, nftOwner ) + + console.log('newPublishingMarketFee', newPublishingMarketFee) + console.log( + newPublishingMarketFee.publishMarketFeeAddress, + originalPublishingMarketFee.publishMarketFeeAddress, + nftOwner + ) + console.log( + newPublishingMarketFee.publishMarketFeeToken, + originalPublishingMarketFee.publishMarketFeeToken, + contracts.daiAddress + ) + console.log( + newPublishingMarketFee.publishMarketFeeAmount, + originalPublishingMarketFee.publishMarketFeeAmount, + web3.utils.toWei('10') + ) + assert(newPublishingMarketFee !== originalPublishingMarketFee) - assert(newPublishingMarketFee.publishMarketFeeAddress === nftOwner) - assert(newPublishingMarketFee.publishMarketFeeToken === contracts.daiAddress) - assert(newPublishingMarketFee.publishMarketFeeAmount === web3.utils.toWei('10')) }) }) From 5cedb37d80267c30f9608bafdd701ad472e387b5 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 11:18:45 +0200 Subject: [PATCH 07/17] Adding additional assert to tests --- test/unit/tokens/Datatoken.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 8c0cbc9f..a109ba2c 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -558,6 +558,7 @@ describe('Datatoken', () => { datatokenAddress, user2 ) + console.log('originalPublishingMarketFee', originalPublishingMarketFee) try { await datatoken.setPublishingMarketFee( datatokenAddress, @@ -568,11 +569,13 @@ describe('Datatoken', () => { ) } catch (e) { console.log('Error', e) + assert(e.message === 'ERC20Template: not publishMarketFeeAddress') } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, user2 ) + console.log('newPublishingMarketFee', newPublishingMarketFee) assert(newPublishingMarketFee === originalPublishingMarketFee) }) it('#setPublishingMarketFee - nftOwner should be able to set the Publishing Market Fee', async () => { From d99662580954a7831207be5355a050aa2bfac0be Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 11:47:47 +0200 Subject: [PATCH 08/17] Updating assert statements --- test/unit/tokens/Datatoken.test.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index a109ba2c..476256c7 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -576,7 +576,18 @@ describe('Datatoken', () => { user2 ) console.log('newPublishingMarketFee', newPublishingMarketFee) - assert(newPublishingMarketFee === originalPublishingMarketFee) + assert( + newPublishingMarketFee.publishMarketFeeAddress === + originalPublishingMarketFee.publishMarketFeeAddress + ) + assert( + newPublishingMarketFee.publishMarketFeeAmount === + originalPublishingMarketFee.publishMarketFeeAmount + ) + assert( + newPublishingMarketFee.publishMarketFeeToken === + originalPublishingMarketFee.publishMarketFeeToken + ) }) it('#setPublishingMarketFee - nftOwner should be able to set the Publishing Market Fee', async () => { const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( From 74f4642ad0899816d8d20bf438c5851755efb4ec Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 12:22:31 +0200 Subject: [PATCH 09/17] Adding additional assert statements --- test/unit/tokens/Datatoken.test.ts | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 476256c7..4e7a59e6 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -558,7 +558,6 @@ describe('Datatoken', () => { datatokenAddress, user2 ) - console.log('originalPublishingMarketFee', originalPublishingMarketFee) try { await datatoken.setPublishingMarketFee( datatokenAddress, @@ -568,14 +567,12 @@ describe('Datatoken', () => { user2 ) } catch (e) { - console.log('Error', e) assert(e.message === 'ERC20Template: not publishMarketFeeAddress') } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, user2 ) - console.log('newPublishingMarketFee', newPublishingMarketFee) assert( newPublishingMarketFee.publishMarketFeeAddress === originalPublishingMarketFee.publishMarketFeeAddress @@ -612,22 +609,13 @@ describe('Datatoken', () => { ) console.log('newPublishingMarketFee', newPublishingMarketFee) - console.log( - newPublishingMarketFee.publishMarketFeeAddress, - originalPublishingMarketFee.publishMarketFeeAddress, - nftOwner - ) - console.log( - newPublishingMarketFee.publishMarketFeeToken, - originalPublishingMarketFee.publishMarketFeeToken, - contracts.daiAddress - ) - console.log( - newPublishingMarketFee.publishMarketFeeAmount, - originalPublishingMarketFee.publishMarketFeeAmount, - web3.utils.toWei('10') - ) + console.log(newPublishingMarketFee.publishMarketFeeAddress, nftOwner) + console.log(newPublishingMarketFee.publishMarketFeeToken, contracts.daiAddress) + console.log(newPublishingMarketFee.publishMarketFeeAmount, web3.utils.toWei('10')) assert(newPublishingMarketFee !== originalPublishingMarketFee) + assert(newPublishingMarketFee.publishMarketFeeAddress === nftOwner) + assert(newPublishingMarketFee.publishMarketFeeAmount === web3.utils.toWei('10')) + assert(newPublishingMarketFee.publishMarketFeeToken === contracts.daiAddress) }) }) From c6ddaa094a27d536e2b7f1717a71f2db6a8fbf0a Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 12:40:27 +0200 Subject: [PATCH 10/17] Updating return values --- src/tokens/Datatoken.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index a9c69f02..7b499dda 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1410,6 +1410,11 @@ export class Datatoken { }) const publishingMarketFee = await dtContract.methods.getPublishingMarketFee().call() - return publishingMarketFee + const returnValues = { + publishMarketFeeAddress: publishingMarketFee[0], + publishMarketFeeToken: publishingMarketFee[1], + publishMarketFeeAmount: publishingMarketFee[2] + } + return returnValues } } From a81cdddc30935771f821186bb6facd7f9adef7f7 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 12:48:28 +0200 Subject: [PATCH 11/17] Updating tests --- src/tokens/Datatoken.ts | 2 ++ test/unit/tokens/Datatoken.test.ts | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 7b499dda..9048fe2d 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1410,11 +1410,13 @@ export class Datatoken { }) const publishingMarketFee = await dtContract.methods.getPublishingMarketFee().call() + console.log('publishingMarketFee', publishingMarketFee) const returnValues = { publishMarketFeeAddress: publishingMarketFee[0], publishMarketFeeToken: publishingMarketFee[1], publishMarketFeeAmount: publishingMarketFee[2] } + console.log('returnValues', returnValues) return returnValues } } diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 4e7a59e6..d933aab5 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -586,19 +586,20 @@ describe('Datatoken', () => { originalPublishingMarketFee.publishMarketFeeToken ) }) - it('#setPublishingMarketFee - nftOwner should be able to set the Publishing Market Fee', async () => { + it('#setPublishingMarketFee - Marketplace fee address should be able to set the Publishing Market Fee', async () => { + console.log('users: ', user1, user2, user3, nftOwner, erc20DeployerUser) const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, - nftOwner + user1 ) console.log('originalPublishingMarketFee', originalPublishingMarketFee) try { await datatoken.setPublishingMarketFee( datatokenAddress, - nftOwner, + user1, contracts.daiAddress, web3.utils.toWei('10'), - nftOwner + user1 ) } catch (e) { console.log('Error', e) From 4eefc083e2a96d5302be5426b913e85df4a7ce68 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 12:58:31 +0200 Subject: [PATCH 12/17] Updating user addresses --- test/unit/tokens/Datatoken.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index d933aab5..03bd4f47 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -556,22 +556,22 @@ describe('Datatoken', () => { it('#setPublishingMarketFee - User should not be able to set the Publishing Market Fee', async () => { const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, - user2 + user3 ) try { await datatoken.setPublishingMarketFee( datatokenAddress, - user2, + user3, contracts.daiAddress, web3.utils.toWei('10'), - user2 + user3 ) } catch (e) { assert(e.message === 'ERC20Template: not publishMarketFeeAddress') } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, - user2 + user3 ) assert( newPublishingMarketFee.publishMarketFeeAddress === @@ -590,23 +590,23 @@ describe('Datatoken', () => { console.log('users: ', user1, user2, user3, nftOwner, erc20DeployerUser) const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, - user1 + user2 ) console.log('originalPublishingMarketFee', originalPublishingMarketFee) try { await datatoken.setPublishingMarketFee( datatokenAddress, - user1, + user2, contracts.daiAddress, web3.utils.toWei('10'), - user1 + user2 ) } catch (e) { console.log('Error', e) } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, - nftOwner + user2 ) console.log('newPublishingMarketFee', newPublishingMarketFee) @@ -615,7 +615,7 @@ describe('Datatoken', () => { console.log(newPublishingMarketFee.publishMarketFeeAmount, web3.utils.toWei('10')) assert(newPublishingMarketFee !== originalPublishingMarketFee) - assert(newPublishingMarketFee.publishMarketFeeAddress === nftOwner) + assert(newPublishingMarketFee.publishMarketFeeAddress === user2) assert(newPublishingMarketFee.publishMarketFeeAmount === web3.utils.toWei('10')) assert(newPublishingMarketFee.publishMarketFeeToken === contracts.daiAddress) }) From 8c9e46a8ddea90b672272a27a6cb51159434b873 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Thu, 21 Apr 2022 15:14:32 +0200 Subject: [PATCH 13/17] Adding estimate gas method and fixing tests --- src/tokens/Datatoken.ts | 51 ++++++++++++++++++++++++++++-- test/unit/tokens/Datatoken.test.ts | 22 ++++++------- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 9048fe2d..59e13fe9 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1364,6 +1364,42 @@ export class Datatoken { return this.web3.utils.fromWei(balance) } + /** + * @dev estGasSetPublishingMarketFee + * Estimating gas for publishMarketFeeAddress method + * @param {string} datatokenAddress Datatoken adress + * @param {string} publishMarketFeeAddress new publish Market Fee Address + * @param {string} publishMarketFeeToken new publish Market Fee Token + * @param {string} publishMarketFeeAmount new fee amount + * @param {String} address user adress + */ + public async estGasSetPublishingMarketFee( + datatokenAddress: string, + publishMarketFeeAddress: string, + publishMarketFeeToken: string, + publishMarketFeeAmount: string, + address: string + ): Promise { + // Estimate gas cost for publishMarketFeeAddress method + const gasLimitDefault = this.GASLIMIT_DEFAULT + const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { + from: address + }) + let estGas + try { + estGas = await dtContract.methods + .setPublishingMarketFee( + publishMarketFeeAddress, + publishMarketFeeToken, + publishMarketFeeAmount + ) + .estimateGas({ from: address }, (err, estGas) => (err ? gasLimitDefault : estGas)) + } catch (error) { + estGas = gasLimitDefault + } + return estGas + } + /** * @dev setPublishingMarketFee * Only publishMarketFeeAddress can call it @@ -1384,13 +1420,24 @@ export class Datatoken { const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { from: address }) + const estGas = await this.estGasSetPublishingMarketFee( + datatokenAddress, + publishMarketFeeAddress, + publishMarketFeeToken, + publishMarketFeeAmount, + address + ) await dtContract.methods .setPublishingMarketFee( publishMarketFeeAddress, publishMarketFeeToken, publishMarketFeeAmount ) - .call() + .send({ + from: address, + gas: estGas + 1, + gasPrice: await getFairGasPrice(this.web3, this.config) + }) } /** @@ -1410,13 +1457,11 @@ export class Datatoken { }) const publishingMarketFee = await dtContract.methods.getPublishingMarketFee().call() - console.log('publishingMarketFee', publishingMarketFee) const returnValues = { publishMarketFeeAddress: publishingMarketFee[0], publishMarketFeeToken: publishingMarketFee[1], publishMarketFeeAmount: publishingMarketFee[2] } - console.log('returnValues', returnValues) return returnValues } } diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 03bd4f47..48e45f9c 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -556,23 +556,28 @@ describe('Datatoken', () => { it('#setPublishingMarketFee - User should not be able to set the Publishing Market Fee', async () => { const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, - user3 + user1 ) try { await datatoken.setPublishingMarketFee( datatokenAddress, - user3, + user1, contracts.daiAddress, web3.utils.toWei('10'), - user3 + user1 ) } catch (e) { - assert(e.message === 'ERC20Template: not publishMarketFeeAddress') + console.log('Message:', e.message) + assert( + e.message === + 'Returned error: VM Exception while processing transaction: revert ERC20Template: not publishMarketFeeAddress' + ) } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, user3 ) + assert( newPublishingMarketFee.publishMarketFeeAddress === originalPublishingMarketFee.publishMarketFeeAddress @@ -587,12 +592,10 @@ describe('Datatoken', () => { ) }) it('#setPublishingMarketFee - Marketplace fee address should be able to set the Publishing Market Fee', async () => { - console.log('users: ', user1, user2, user3, nftOwner, erc20DeployerUser) const originalPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, user2 ) - console.log('originalPublishingMarketFee', originalPublishingMarketFee) try { await datatoken.setPublishingMarketFee( datatokenAddress, @@ -602,18 +605,13 @@ describe('Datatoken', () => { user2 ) } catch (e) { - console.log('Error', e) + console.log('Error:', e) } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, user2 ) - console.log('newPublishingMarketFee', newPublishingMarketFee) - console.log(newPublishingMarketFee.publishMarketFeeAddress, nftOwner) - console.log(newPublishingMarketFee.publishMarketFeeToken, contracts.daiAddress) - console.log(newPublishingMarketFee.publishMarketFeeAmount, web3.utils.toWei('10')) - assert(newPublishingMarketFee !== originalPublishingMarketFee) assert(newPublishingMarketFee.publishMarketFeeAddress === user2) assert(newPublishingMarketFee.publishMarketFeeAmount === web3.utils.toWei('10')) From 5979f97e6bd37ee95a94069be1d311b1d00c2237 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 18 May 2022 15:33:21 +0300 Subject: [PATCH 14/17] Moving PublishingMarketFee to @types/erc20.ts --- src/@types/Erc20.ts | 6 ++++++ src/tokens/Datatoken.ts | 9 ++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/@types/Erc20.ts b/src/@types/Erc20.ts index 9c133ff7..19643b47 100644 --- a/src/@types/Erc20.ts +++ b/src/@types/Erc20.ts @@ -15,3 +15,9 @@ export interface ConsumeMarketFee { consumeMarketFeeToken: string // address of the token marketplace wants to add fee on top consumeMarketFeeAmount: string } + +export interface PublishingMarketFee { + publishMarketFeeAddress: string + publishMarketFeeToken: string + publishMarketFeeAmount: string +} diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 59e13fe9..6ccc803c 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -17,7 +17,8 @@ import { ConsumeMarketFee, FreOrderParams, FreCreationParams, - ProviderFees + ProviderFees, + PublishingMarketFee } from '../@types' import { Nft } from './NFT' import { Config } from '../models/index.js' @@ -44,12 +45,6 @@ export interface DispenserParams { allowedSwapper?: string // only account that can ask tokens. set address(0) if not required } -export interface PublishingMarketFee { - publishMarketFeeAddress: string - publishMarketFeeToken: string - publishMarketFeeAmount: string -} - export class Datatoken { public GASLIMIT_DEFAULT = 1000000 public factoryAddress: string From cd8f892d3806c3b5ed61eaed7d255416fc7fefa5 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 18 May 2022 16:28:32 +0300 Subject: [PATCH 15/17] Using new generic gas estimate function --- src/tokens/Datatoken.ts | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 0a89d052..1e7143a9 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1330,23 +1330,16 @@ export class Datatoken { address: string ): Promise { // Estimate gas cost for publishMarketFeeAddress method - const gasLimitDefault = this.GASLIMIT_DEFAULT const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { from: address }) - let estGas - try { - estGas = await dtContract.methods - .setPublishingMarketFee( - publishMarketFeeAddress, - publishMarketFeeToken, - publishMarketFeeAmount - ) - .estimateGas({ from: address }, (err, estGas) => (err ? gasLimitDefault : estGas)) - } catch (error) { - estGas = gasLimitDefault - } - return estGas + return estimateGas( + address, + dtContract.methods.setPublishingMarketFee, + publishMarketFeeAddress, + publishMarketFeeToken, + publishMarketFeeAmount + ) } /** From 4b9f6c9c004494a225116f29f2bbdff4e2f1aa70 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 18 May 2022 17:01:05 +0300 Subject: [PATCH 16/17] Checking if the caller is Publishing Market Fee Address before calling the smart contract --- src/tokens/Datatoken.ts | 6 ++++++ test/unit/tokens/Datatoken.test.ts | 5 +---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 1e7143a9..8ab3588e 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1362,6 +1362,12 @@ export class Datatoken { const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { from: address }) + const publishingMarketFeeAddress = ( + await dtContract.methods.getPublishingMarketFee().call() + )[0] + if (publishingMarketFeeAddress !== address) { + throw new Error(`Caller is not the Publishing Market Fee Address`) + } const estGas = await this.estGasSetPublishingMarketFee( datatokenAddress, publishMarketFeeAddress, diff --git a/test/unit/tokens/Datatoken.test.ts b/test/unit/tokens/Datatoken.test.ts index 709bf869..261c237b 100644 --- a/test/unit/tokens/Datatoken.test.ts +++ b/test/unit/tokens/Datatoken.test.ts @@ -611,10 +611,7 @@ describe('Datatoken', () => { ) } catch (e) { console.log('Message:', e.message) - assert( - e.message === - 'Returned error: VM Exception while processing transaction: revert ERC20Template: not publishMarketFeeAddress' - ) + assert(e.message === 'Caller is not the Publishing Market Fee Address') } const newPublishingMarketFee = await datatoken.getPublishingMarketFee( datatokenAddress, From 729a60f9a97c8effa2ee08411a1e20b9dca30ab5 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Wed, 18 May 2022 17:07:53 +0300 Subject: [PATCH 17/17] Fixing codeclimate issue --- src/tokens/Datatoken.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/tokens/Datatoken.ts b/src/tokens/Datatoken.ts index 8ab3588e..5c155d5d 100644 --- a/src/tokens/Datatoken.ts +++ b/src/tokens/Datatoken.ts @@ -1362,10 +1362,8 @@ export class Datatoken { const dtContract = new this.web3.eth.Contract(this.datatokensAbi, datatokenAddress, { from: address }) - const publishingMarketFeeAddress = ( - await dtContract.methods.getPublishingMarketFee().call() - )[0] - if (publishingMarketFeeAddress !== address) { + const mktFeeAddress = (await dtContract.methods.getPublishingMarketFee().call())[0] + if (mktFeeAddress !== address) { throw new Error(`Caller is not the Publishing Market Fee Address`) } const estGas = await this.estGasSetPublishingMarketFee(