eth.sendTransaction是如何对交易进行签名的?
发布于 1 个月前 作者 mysql2017 254 次浏览 来自 以太坊

我发起了一笔转账交易,命令如下:

eth.sendTransaction({from:‘149d9fa9a8a5d2dfab30e531158bf2041ea5b8f6’,to:‘3c4a2cd93dabb2a705e132de633335e37368cd60’,value:1})

这两个账号的私钥文件在节点的keystore目录中 从一个账号转一个wei到另一个账号

这里没有输入from账号的密码,为什么交易能够发起成功

eth.sendTransaction 这种方式是节点自动给交易签名,但是,节点没有密码,是如何解析from账号的私钥文件拿到私钥key进行签名?

5 回复

eth.sendTransaction()会根据你from的地址,在kestore中自动寻找到对应的account,并尝试使用该账号对交易进行签名,如果account处于解锁状态,那么该条交易会被成功签名,如:

  1. 之前调用过personal.unlock(),对账号进行解锁
  2. 命令行启动geth时,使用了–unlock 对账户进行解锁
    代码位置

@manxiaqu 我的意思是说,签名总的要私钥key吧,现在节点只有一个私钥文件(没有密码,解析不出私钥key)

@mysql2017 你上面有提到"这两个账号的私钥文件在节点的keystore目录中",如果私钥不在keystore,不清楚你的交易是如何签名的。

先用eth_signTransaction方法生成签名的交易,这个过程可以是离线的,但是需要私钥解锁。再用eth_sendRawTransaction方法对已经签了名的交易进行广播

eth.sendTransaction方法肯定是要先用私钥解锁form账号的,否则会报错

回到顶部