我为本文中描述的最基本的示例创建了一个契约(在Ropsten测试网中):http://solidity.readthedocs.io/en/develop/introduction-to-smart-contracts.html
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData;
function set(uint x) {
storedData = x;
}
function get() constant returns (uint) {
return storedData;
}
}以下Javascript调用该合同:
var abi = [{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}];
var MyContract = web3.eth.contract(abi);
var myContractInstance = MyContract.at('0x51a5846DB9DEb1Cd72ccab36F825C06328a21b8C');
myContractInstance.set.call(1, function(error, result){
if(!error) {
console.log("#" + result + "#")
} else {
console.error(error);
}
})
myContractInstance.get.call(function(error, result){
if(!error) {
console.log("##" + result + "##")
} else {
console.error(error);
}
})"set“调用不起作用,因为它需要"sendTransaction”而不是“调用”。
我尝试了web3.eth.sendTransaction中的每一个参数组合,并不断地收到以下错误消息:"sendTransaction无效的Solidity函数参数数“
我已经阅读了API文档(https://github.com/ethereum/wiki/wiki/JavaScript-API),它没有为web3.eth.sendTransaction提供一个很好的示例。请不要只提供一个理论解释,或要求安装额外的工具。
请提供一个经过测试的特定javascript代码示例,以说明我如何使用javascript来执行上述契约中的"set“函数。
发布于 2017-08-31 13:20:16
可以直接调用set函数,如下所示:
myContractInstance.set(2,{from:eth.coinbase}, function(error, result){
if(!error) {
console.log("#" + result + "#")
} else {
console.error(error);
}
})或按以下方式调用sendTransaction函数:
myContractInstance.set.sendTransaction(1,{from:eth.coinbase}, function(error, result){
if(!error) {
console.log("#" + result + "#")
} else {
console.error(error);
}
})希望能帮上忙~
https://ethereum.stackexchange.com/questions/25585
复制相似问题