Solidity
外部 Javascript 未更新帳戶餘額
我有一個簡單的智能合約,它應該使用事件在區塊鏈上記錄輸入字元串:
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)
將估計將消耗多少氣體。