如果想要探索乙太坊的世界,肯定需要创建一个账户,乙太币开户就如同在银行开户一样,是安全地进行乙太坊交易的基础。与在银行开户不同的是,乙太坊的账户可以离线生成而不需要得到任何工作人员的许可,并且这些账户是完全匿名的。下面我们就来讲述一下乙太币账户的原理,希望对你有所帮助。
一、账户与账户状态
1、乙太币账户
适用于生成账户的开源工具有很多,如网页工具、桌面软件、手机APP等。它们遵循同一套账户生成标准。一个用户也可以同时生成、保存、持有多个账户。
乙太坊的账户共分成两类:外部账户(Externally Owned Account,EOA)与智能合约(Contract Account,CA)。
外部账户由一把私钥与该私钥对应的公开地址来表示。在一般情况下,私钥掌握在用户的手中。智能合约账户没有私钥,仅有公开的地址,它的行为由合约自身包含的代码逻辑来控制。
2、账户状态
账户的状态(Account State)描述了一个账户当前的情况。乙太坊公链时时刻刻跟踪并维护着每一个账户的状态。一个账户在初次接收或者发出交易后,都会形成初始状态。随着时间的推移,每次针对该账户的交易将不断修改其状态。总结而言,每一个账户在数据结构上具有两个元素:一个公开地址,一个与该地址关联的状态,
那么,具体的账户状态包含一些什么呢?账户状态包含四大元素:
nonce已执行交易总数,用来标示该账户发出的交易数量;
balance持币数量,记录用户的乙太币余额;
storagehash存储区的哈希值,指向智能合约账户的存储数据区;
codehash代码区的哈希值,指向智能合约账户存储的智能合约代码。
二、外部账户与智能合约账户的结构对比
外部账户是由公钥/私钥对控制的标准账户,可以拥有加密货币并与其他外部账户进行交互。 它们可通过交易和签名来实现转账。 智能合约账户则由智能合约代码控制,可存储和处理数据,执行预先编程的逻辑,并根据特定条件自动执行操作。 智能合约账户可以接收加密货币,但无法直接控制加密货币。 总的来说,这两种账户类型在功能和用途上略有不同,但都是区块链技术中重要的账户类型。
1、已执行交易总数
该值会随着用户不断发送交易而递增,保障用户发出的交易是按照顺序被收纳入最终的区块链。因为在同一个账户中,已执行交易总数不可以在区块链中再次出现。当用户创建智能合约时,要指定合约地址,该地址是由用户账户的已执行交易总数和用户账户地址联合计算而得出的。
2、持币数量
持币数量包含了该账户当下可花费的乙太币的数量。外部账户和智能合约都可以持有乙太币。指定了可以接收乙太币的智能合约也可以像自然人一样持有乙太币。
3、存储区的哈希值
该值为智能合约独有,外部账户不包含该值。存储区即为智能合约在运行中,产生的数据的存储地。在合约的生命周期里,该区域的内容被合约代码不断写入、读取。存储区存放于乙太坊网络节点的硬盘上。存储区的内容通过散列函数得出校验哈希值,该值即为存储区的哈希值。放存储区相当于智能合约的“小硬盘”。
4、代码区的哈希值
该值为智能合约独有,外部账户不包含该值。代码区即为智能合约代码本身。在合约的生命周期中,该区域的内容是不可更改的只读状态。代码区存放于乙太坊网络节点的硬盘中,当运行时被读入虚拟机执行。代码区的内容通过散列函数得出校验哈希值,该值即为代码区的哈希值。
代码区相当于智能合约的“程序”部分。
哈希算法就是通过一定的数学算法y=Ϝ(x)的单向函数,将不定长的输入值,经过函数变换后变成定长的哈希值。这个数学算法是不可逆向运算操作的(意即不可通过输出推断输入,却可通过输入轻松运算出输出),并具有良好的抗碰撞特性。唯一的输入对应了唯一输出,哪怕是改动一个输入字符,都可以让输出哈希值产生翻天覆地的变化。在数据校验领域中,哈希算法被用来对文档进行签名,以防止文档中途被篡改或者丢失字符。在区块链中常用的安全哈希算法是SHA3-256算法,即输出定长为256位的第三代哈希算法。
三、小结
本文基本覆盖讲解了乙太币账户与账户状态,以及外部账户与智能合约账户结构对比,这些在大家深入探索乙太币世界时都会或多或少地接触到,提前了解有备无患,在此还要再次提醒大家加强学习的同时保持良好的心态与风险管理意识。