Solidity

外部 Javascript 未更新帳戶餘額

  • February 21, 2018

我有一個簡單的智能合約,它應該使用事件在區塊鏈上記錄輸入字元串:

pragma solidity 0.4.19;

contract Recorder{
 event Record(
   address _from,
   string _message,
   uint _cash
 );

 function record(string message) public payable {
   Record(msg.sender,message,msg.value);
 }

 function () public payable {} 
}

我已經在我的 testrpc 網路上部署了它,它工作正常。我有這個執行視圖松露控制台的外部javascript程式碼:

module.exports = function(callback) {
const Recorder = artifacts.require('Recorder');
//const artifacts = require('./build/contracts/Recorder.json');


recorder = Recorder.at(Recorder.address);


recorder.record.sendTransaction("123",{from: web3.eth.accounts[0],value: 70}).then(console.log(web3.eth.getBalance(Recorder.address)));

console.log(web3.eth.getBalance(Recorder.address));

}

它工作正常,但帳戶餘額不會在腳本中更新。console.log 部分在地址處顯示余額為 0。

如果我在執行此外部腳本後 console.log 在松露控制台中記錄帳戶餘額,它會顯示正確的餘額。

如果我再次執行外部腳本,它會顯示未更新的帳戶餘額。如果我執行腳本一次它顯示余額為 0。我第二次執行 console.log 部分僅顯示 70,等等。

truffle 控制台總是最新的,但外部腳本總是落後。這不是什麼大問題,我只是想擴展我對後台發生的事情的理解。

嘗試這個在事務被探勘後執行日誌

module.exports = function(callback) {
 const Recorder = artifacts.require('Recorder');
 const recorder = Recorder.at(Recorder.address);

 recorder.record("123",{from: web3.eth.accounts[0],value: 70}).then(function () {
   console.log(web3.eth.getBalance(Recorder.address)); 
 });
}

在松露中,你有這個可能性

  • myContract.method(params)將等到交易被添加到區塊鏈中。
  • myContract.method.sendTransaction(params)將立即返回交易雜湊,無需等待。
  • myContract.method.call(params)將執行該功能不會對契約進行任何更改(即就像它是一個吸氣劑)。
  • myContract.method.estimateGas(params)將估計將消耗多少氣體。

引用自:https://ethereum.stackexchange.com/questions/40237