Я пытаюсь протестировать простой платежный контракт в соответствии с учебным пособием по трюфелям, но не могу заставить его работать. Буду признателен за ваше руководство о том, как получить остатки на счетах (это, кажется, неработающий шаг)?
Pay.sol
pragma solidity ^0.4.17;
/// @title Pay - Facilitates payments.
contract Pay {
event Payment(
address _from,
address _to,
uint amount
);
/// @dev Makes a payment.
/// @param _to Address to pay to.
function pay(address _to) public payable {
require(msg.value > 0);
// Does this transfer the right amount of ether (msg.value measured in wei)?
_to.transfer(msg.value);
Payment(msg.sender, _to, msg.value);
}
}
2_pay_migration.js
var Pay = artifacts.require("Pay");
module.exports = function(deployer) {
deployer.deploy(Pay);
}
pay.js
var Pay = artifacts.require("./Pay.sol");
contract('Pay', function(accounts) {
it("should put 10000 wei in the first account", function() {
return Pay.deployed().then(function(instance) {
pay = instance;
//console.log(pay.estimateGas());
return pay.getBalance.call(accounts[0]);
}).then(function(balance){
startingBalance = balance;
return pay.pay(accounts[1], 2500, {from: accounts[0]});
}).then(function() {
return pay.getBalance.call(accounts[0]);
}).then(function(balance) {
assert.equal(startingBalance, balance);
})
});
});
При запуске трюфельного теста код прерывается следующей ошибкой:
1) Contract: Pay should put 10000 wei in the first account:
TypeError: Cannot read property 'call' of undefined
at test/pay.js:8:35
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:118:7)
getBalance
это не функция, содержащаяся в вашем контракте, а функция web3. Чтобы получить баланс, вы можете использовать, web3.eth.getBalance(contractAddress)
где contractAddress в вашем случае pay.address
. web3 уже доступен в тестовых файлах трюфеля, поэтому вам не нужно его включать.
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgetbalance