Contrôler le coût des transactions Ethereum que nos utilisateurs ont à payer est crucial dans le développement de nos dApps. Puisque nous implémentons de toute façons des tests de nos contrats, habituellement avec Truffle, pourquoi ne pas en profiter pour afficher le coût de chaque ?

Comment implémenter les coûts dans les tests

D'abord on a besoin de ça :

npm install crypto-price --save-dev

Ensuite on peut écrire quelque chose comme :

var myContract = artifacts.require('./contracts/MyContract.sol');
var cryptoPrice = require('crypto-price');

var ethPrice;
var cost;

contract('myContract', function(accounts) {

  before( () => {
    return cryptoPrice.getCryptoPrice('EUR', 'ETH').then( (result) => {
      ethPrice = result.price;
    });
  });

  beforeEach( () => {
    cost = 0;
  });

  it('It should do thing1', function() {
    var contract;
    return myContract.deployed().then(function(instance) {
      contract = instance;
      return contract.mySendFunction({from: accounts[0]});
    }).then(function(result) {
      cost = ((web3.fromWei((result.receipt.gasUsed) * (web3.eth.gasPrice), 'ether')) * ethPrice).toFixed(2);
    }).then(function() {
      return contract.myCallfunction.call(accounts[1]);
    }).then(function(result) {
      assert.equal(result, true, 'It did not do thing1');
    });
  });

  afterEach( () => {
    console.log('Cost: ' + cost + '€');
  });

});

Ajouter un commentaire