ethereum开发笔记(二):关于以太坊账户

以太坊账户是以太坊交易过程中的实体,账户中包含了账户余额、密钥等信息。

关于以太坊账户的管理,如创建、解锁、更新等信息参考 https://github.com/ethereum/go-ethereum/wiki/Managing-Your-Accounts

一个以太坊账户对应着一个钥匙文件,这个文件存储在以太坊数据keystore文件夹内。比较有意思的是,实际上这个钥匙文件的产生和使用是和具体的以太坊私链或公链节点没有直接联系的,例如,我们生成一个账户时,可能用到有如下几种方式:

1、可以在启动一个以太坊节点后的控制台内使用personal的方法创建

1
personal.newAccount()

2、在启用节点的rpc接口以后通过rpc接口的personal_newAccount接口创建
1
{"method": "personal_newAccount", "params": [string]}

3、直接在命令行中使用geth程序创建
1
geth account new

4、其他如以太坊钱包、web3j等应用创建

上述方法中,第四种方法我理解中应该属于是上层应用对前三种方法的封装,而前三种方法中,1和2两种方法是需要启动一个以太坊链的一个节点后才能使用,但是第三种方式,实际上任何一台机器、任何人都可以创建这么一个以太坊账户,因此,以太坊账户其实是和具体的链、节点是没有关系的,一个账户以钥匙文件的形式存在,不属于任何一个节点,也可以属于任何一个节点。

如上所述,一个节点或者说一个人持有一个账户,实际上是对一个账户钥匙文件的持有,大家可以尝试和一个不存在的账户进行交易,以太坊是可以交易成功的。某一个链内正常有余额的账户,如果把这个账户的钥匙文件复制到另外一个链中,有趣的是,我们也可以用原来的密钥解锁并使用这个账户,只不过账户的余额是0而已。

所以账户的余额这些信息,是存储在各个区块链节点的数据文件中的,而账户的密钥地址等信息是存在账户的钥匙文件中的。因此,如果我们做一些需要自动管理账户自动交易的应用时,实际上可能更多的是对这些钥匙文件的管理。