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'))