调用 web3.eth.personal.unlockAccount 会抛出错误

Posted

技术标签:

【中文标题】调用 web3.eth.personal.unlockAccount 会抛出错误【英文标题】:Calling web3.eth.personal.unlockAccount throws error 【发布时间】:2018-06-24 09:09:00 【问题描述】:

我在web3 1.0.0-beta.27,我运行了一个私有区块链: geth --identity "node" --nodiscover --maxpeers 0 --datadir path/to/data --networkid 123 --ws --wsport 8546 --wsorigins "*" 控制台

然后在app.ts 文件中我有:

import * as Web3 from 'web3';

var web3   = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546'));

web3.eth.getAccounts().then(accounts => 
    var sender = accounts[0];
    web3.eth.personal.unlockAccount(sender, 'password');
);

但我得到错误:

Unhandled rejection Error: Returned error: The method personal_newAccount does not exist/is not available

在网上搜索这个问题,我应该用--rpcapi="db,eth,net,web3,personal,web3" 启动geth 进程,但是添加这个标志并没有帮助,即使rpc 只是ipc 的一种,对吗?

此外,在 geth 控制台上,我可以使用以下方式解锁帐户

personal.unlockAccount(sender, 'password')

【问题讨论】:

【参考方案1】:

您已将 personal 添加到 rpcapi,但正在通过 WS 进行连接。您需要将其添加到wsapi

rpc 只是一种 ipc 对吗?

三种连接协议是 IPC-RPC、JSON-RPC 和 WS-RPC。 rpc* 配置参数用于 JSON-RPC(通过 HTTP),而不是 IPC/WS。

【讨论】:

以上是关于调用 web3.eth.personal.unlockAccount 会抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用

深入理解Java虚拟机——方法调用(解析调用)