【发布时间】:2018-03-18 13:51:45
【问题描述】:
我对如何使用 web3 1.0 库执行合约方法感到困惑。
此代码有效(只要我先手动解锁帐户):
var contract = new web3.eth.Contract(contractJson, contractAddress);
contract.methods
.transfer("0x0e0479bC23a96F6d701D003c5F004Bb0f28e773C", 1000)
.send({
from: "0x2EBd0A4729129b45b23aAd4656b98026cf67650A"
})
.on('confirmation', (confirmationNumber, receipt) => {
io.emit('confirmation', confirmationNumber);
});
我收到此错误(如果我没有先手动解锁):
返回错误:需要验证:密码或解锁
以上代码是 node.js 中的一个 API 端点,所以我希望它以编程方式解锁或验证。
web3.js 1.0 中没有解锁账号的方法。
我也不认为这是必要的(至少我对此感到困惑)。因为我在管理账户,所以我知道私钥是什么。
我认为交易需要用私钥签名??它是否正确?这实际上与“解锁帐户”相同吗?
我试过这样做:
var contract = new web3.eth.Contract(contractJson, contractAddress);
var tx = {
from: "...{fromAddress -- address that has the private key below}",
to: "...",
value: ...
};
var signed = web3.eth.accounts.signTransaction(tx,
"...{privateKey}");
console.log(signed);
var promise = web3.eth.sendSignedTransaction(signed);
我得到这个错误:
返回错误:方法net_version不存在/不可用
验证和提交交易的最简单方法是什么?
理想情况下,我想在我的代码示例中使用第一种方法,因为它是最干净的。
【问题讨论】:
-
我会使用 Parity,它会创建一个使用 ETH 运行的默认帐户(没有密码)用于开发,这是我放在一起的一个示例:github.com/leopoldjoy/react-ethereum-dapp-example
-
这样你就不用解锁账户了。下面是一个使用方法的例子:github.com/leopoldjoy/react-ethereum-dapp-example/blob/master/…
-
感谢您的示例。不过,我正在编写生产代码,并且需要对通过我正在构建的门户以编程方式创建的帐户进行操作。我设法弄清楚了......希望这是正确的做事方式。
标签: ethereum web3js web3 go-ethereum