购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.1 外部账户

外部账户(EOA)由私钥来控制,是由用户实际控制的账户。每个外部账户拥有一对公私钥,这对密钥用于签署交易,它的地址由公钥决定。外部账户不能包含以太坊虚拟机(EVM)代码。我们可以做一个简单的类比,把外部账户看作用户在某个银行办理的一个账户,公钥就是用户为该账户设置的卡号,而私钥则是用户设置的密码。一个外部账户具有以下特性:拥有一定的账户余额、可以发送交易、通过私钥控制,以及没有相关联的代码。

用户可以使用Geth 指令创建一个外部账户。生成一个账户地址的过程主要有三步。

1)设置账户的私钥,也就是通常意义的用户密码。

2)使用加密算法由私钥生成对应的公钥。

3)根据公钥得出相应的账户地址。

其中第2步中使用的加密算法是secp256k1椭圆曲线密码算法,而不是RSA加密算法,因为前者相对于后者更加高效安全。对于由公钥得到账户地址,在以太坊中使用SHA3方法。下面代码演示了使用JavaScript加密库CryptoJS,通过调用SHA3加密算法来生成一个以太坊账户地址。

//pubKey -> address
var pubKeyWordArray = CryptoJS.enc.Hex.parse(pubKey);
var hash = CryptoJS.SHA3(pubKeyWordArray, { outputLength: 256 });
var address = hash.toString(CryptoJS.enc.Hex).slice(24);

用户在创建好账户后一定要记住私钥!如果用户忘记了,那么用户就不能再访问这个账户了,私钥也不可能再找回,以太坊没有可以让用户重置或者找回私钥的功能。密钥文件通常保存在keystore目录下,用户可以经常性地备份密钥文件,以防止忘记或丢失。

在以太坊节点之间传输整个目录或者密钥文件是安全的。不过要注意的是当用户从另一个节点处添加密钥文件到自己的节点时,账户的顺序可能会发生改变。因此,用户须确保不要依赖或者更改脚本和代码段中的索引。用户自己列出自己创建的账户时,账户会按字典序排序显示,并按照账户的创建时间先后排序。

https://etherscan.io/address/0xb794f5ea0ba39494ce839613fffba74279579268 是一个显示以太币(ETH)的账户实例,其列出了该账户的以太币余额,以及该账户相关的所有历史交易。 xOZd9R3jkpkmk7Lgkr7mSiCH+6IPB1Xl1rD0dGkdu0XqvGSXrqJew42CJ8XBs/ko

点击中间区域
呼出菜单
上一章
目录
下一章
×