BTC是基于交易的账本
BTC系统是基于交易的账本,系统中并未显示记录账户有多少钱,只能通过UTXO进行推算。
但实际中,使用起来较为别扭:A转给B钱的时候,需要说明币的来源。账户中的钱在花的时候,必须一次性全部花出去。
如图1,B收到A的10个BTC,他想要给C3个BTC,如果按照1中方式,其余7个比特币会以交易费的形式给挖出区块的矿工。因此,为了避免这种情况,便吸引采用2中方式,将3个BTC转给C,将剩余7个BTC转到自己的另一账户D上面。
以太坊的账户
以太坊系统则采用了基于账户的模型,与现实中银行账户相似。系统中显示记录每个账户以太币的数量,转账是否合法只需要查看转账者账户中以太币是否足够即可,同时也不需要每次全部转账。同时,这也也天然地防范了双花攻击。
当然,以太坊发这种模式也存在缺点,这种模式存在重放攻击的缺陷。A向B转账,过一段时间,B将A的交易重新发布,从而导致A账户被扣钱两次。
为了防范重放攻击,给账户交易添加计数器记录该账户交易过多少次,转账时候将转账次数计入交易的内容中,然后对整个内容签名。系统中全节点维护账户余额和该计数器的交易数,从而防止本地篡改余额或进行重放攻击。
以太坊系统中存在两类账户:外部账户和合约账户
- 外部账户:类似于BTC系统中的账户,用公私钥控制,谁有私钥就掌握了控制权。存在账户余额balance和计数器nonce
- 合约账户:并非通过公私钥对控制,不能主动发起交易,只能接收到外部账户调用后才能发起交易或调用其他合约账户。其除了balance和nonce之外还有code(代码)、storage(相关状态-存储)
创建合约时候会返回一个地址,就可以对其调用。调用过程中,代码不变但存储状态会发生改变。
为什么要做以太坊
比特币基于交易的账户模型的好处是隐私保护好一点,支持每次更换账户。
但以太坊是为了支持智能合约,而合约签订双方是需要明确且较少变化的。尤其是对于合约账户来说,需要保持稳定状态。
标签:转账,账户,以太,BTC,ETH,区块,合约,交易 来源: https://www.cnblogs.com/klgzyq/p/15544054.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。