geth new account php,以太坊geth web3j personalNewAccount返回null

在通过web3j依赖包提供的api调用personalNewAccount方法返回null,也就是说并没有真正生成地址。这是什么原因导致的呢?

如下代码调用:

String password = EthereumConfiguration.getWalletPwd();

NewAccountIdentifier newAccountIdentifier;

try {

newAccountIdentifier = web3.personalNewAccount(password).send();

if (newAccountIdentifier.getAccountId() == null) {

throw new BaseException(ResultCodeConstants.RECHARGE_ADDR_GET_FAILED);

}

} catch (IOException e) {

logger.info(String.format("[eth wallet service]: 获取以太坊充值地址失败, message:%s", e.getMessage()));

throw new BaseException(ResultCodeConstants.RECHARGE_ADDR_GET_FAILED);

}

上面的业务逻辑中,先是获得密码、然后调用生成地址方法,检查返回值是否为null,来确定地址是否生成成功。调用web3j的相关personalNewAccount的代码如下:

public Request, NewAccountIdentifier> personalNewAccount(String password) {

return new Request("personal_newAccount", Arrays.asList(password), this.web3jService, NewAccountIdentifier.class);

}

也就是说通过json-rpc来调用personal_newAccount方法生成地址。

那么,为什么返回为null呢,常见的原因是以太坊geth节点启动之后,并没有开放personal操作的rpcapi。

对照以下启动geth的命令:

nohup ./geth --datadir ./data/ --cache 4096 --rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpcapi eth,net,web3,personal --ws --wsaddr 0.0.0.0 --wsport 8546 --wsapi eth,net,web3 --wsorigins "*" --allow-insecure-unlock --syncmode fast & > nohup.out

添加了–rpcapi eth,net,web3,personal参数,便可以正常访问了。

其中–allow-insecure-unlock参数允许调用personal.unlockAccount(“address”)命令。

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值