我需要帮助来定位web3.js函数,该函数可以将参数发送到现有的智能合约函数,该函数会更改区块链的状态。在智能合约功能中,我返回一个需要使用web3.js捕获的返回值
例如,下面的节点文件调用web3.eth.sendRawTransaction,但是当它返回时,它仅获取交易哈希,而不获取函数“ addfund”的返回值。
使用交易哈希,我可以看到有关交易的详细信息,例如区块号等,但是,addfund的返回值未在任何地方捕获。有办法实现吗?我知道我可以使用
contract.methods.totalSupply().call((err, result) => { console.log(result) })
用于获取返回值的函数,但是这些方法不是状态更改函数,因此不适用于我的情况
我的File.js:
var contractAddress = '0x17a8fd94665bd5f73e7fede9c69f64959cefd8df';
var txOptions = {
nonce: web3.toHex(web3.eth.getTransactionCount(address)),
gasLimit: web3.toHex(800000),
gasPrice: web3.toHex(20000000000),
to: '0x17a8fd94665bd5f73e7fede9c69f64959cefd8df'
};
var rawTx = txutils.functionTx(interfaceABI, 'addfund',
['0xc66ed658f1e75c21df3e50890e983fda34b6052e',100], txOptions);
function sendRaw(rawTx) {
var privateKey = new Buffer(key, 'hex');
var transaction = new tx(rawTx);
console.log('transaction '+ JSON.stringify (transaction));
transaction.sign(privateKey);
var serializedTx = transaction.serialize().toString('hex');
console.log('serializedTx ' +serializedTx);
web3.eth.sendRawTransaction(
'0x' + serializedTx, function(err, result) {
if(err) {
console.log('error is' + err);
} else {
console.log('result is ' + result);
}
});
}`
sendRaw(rawTx);
Solidity函数:
function addfund(address sender, uint value ) payable public {
if (partifunded[msg.sender] == true) {
for ( uint i = 0; i < participants.length; i++) {
if (participants[i].partaddr == msg.sender)
{
participants[i].amount += msg.value;
totalamountcol = address(this).balance;
}
}
}
else
{
partifunded[msg.sender] = true;
participants.push(Participant(msg.value,msg.sender));
numberofparti = numberofparti+1;
totalamountcol = address(this).balance;
}
}
除此之外:是否有可用于捕获智能合约触发的web3.js中事件的样板代码?