005:以太坊交易|《ETH原理与智能合约开发》笔记

待字闺中开发了一门区块链方面的课程:《深入浅出ETH原理与智能合约开发》,马良老师讲授。此文集记录我的学习笔记。

课程共8节课。其中,前四课讲ETH原理,后四课讲智能合约。
第二课分为三部分:

  1. 以太坊交易
  2. MPT与RLP
  3. MPT与RLP实验

这篇文章是第二课第一部分的学习笔记:以太坊交易。


关于以太坊的交易,课程中讲了三部分的内容,分别是以太坊交易模型、交易的结构和交易的生命周期。

1. 以太坊交易模型

交易模型部分分别讲解了比特币的UTXO交易模型,以太坊的Account交易模型,并通过对比来说明两者的优劣。

1.1 比特币的 UTXO 交易模型

比特币的交易采用了UTXO模型,其中UTXO 代表 Unspent Transaction Output,即未花费的交易输出。通过下图来说明。

005:以太坊交易|《ETH原理与智能合约开发》笔记_第1张图片
UTXO交易模型

图中使用的比特币单位是聪(satoshi),交易费都按10k计算。

  • 交易0表示,某个地址有100k的未花费交易输出(UTXO),向另外两个地址分别转账40k和50k,这样那两个地址就分别有了40k和50k的UTXO。

  • 交易1表示,一个含有40k的UTXO的某地址向外转账,除去10k的交易费,接收地址就得到了30k的UTXO。

  • 其它的交易依次类推。

这样,整个系统的收支状态信息都保存在UTXO中。每一个UTXO都由私钥控制,解锁后才能使用。

这种设计的好处是,有一定的保密性,如果一个用户经常更换地址,外界就不容易判断他的身份。但这对智能合约系统来说,就是不利的地方,因为智能合约需要一个确定的身份来操作。

它的缺点是会影响区块的尺寸,如果在某个交易中,有1000个交易输入,那就需要1000个解锁,这会造成区块的尺寸增大,尺寸大的区块就需要多的交易费。交易费在这里就是控制因素,使得交易尽量采用少的输入。

它还有一个缺点很难精细地控制使用哪些输入,假如要花费5个比特币,有50种排列组合,到底选哪个呢,不易控制。以太坊则没有这个缺点,因为它是采用的账户模型。一个账户对应一个余额。

下面是以太坊账户交易模型的介绍。

1.2 以太坊的 Account 交易模型

在以太坊中采用账户模型,这种设计不易于隐藏身份,通过合约来混淆。

这种模型节省空间;实现比较简单。

DAPP(分布式应用)也需要这种模型,在应用中,合约的发起、调用都需要特定的人来执行。而在比特币中,如果输入比较多,则不易控制。

历史信息获取也比较简单,可以只检查更新的部分。

同时签名验证次数少,不像比特币要依赖输入的多少。

2. 以太坊交易的结构

2.1 账户类型

以太坊中有两种类型的账户:

外部账户(Externally Owned Accounts 或EOA):被私钥控制,没有与合约代码相关联,有余额。可以发起和签名交易,可以创建合约。
其地址长度为公钥的Keccak256散列值的最后20个字节。

合约账户:被合约代码控制,同样有余额。能被外部账户调用来激活,也可以通过另外一个合约账户来激活。
合约账号一经创建,存在于区块链中。一旦接收到消息,其包含的代码被激活开始运行,它修改全局状态或向其它合约继续发送消息。

2.2 交易的内部结构

交易中的几个参数介绍:

  • To: 交易接收方地址(20Bytes)
  • Value: 交易发送的ether数量(wei)
  • Startgas:交易者愿意花费的最大Gas数量
  • Gasprice: 交易者愿意支付的Gas价格
  • startgas*gasprice = 最终ether数值
  • nonce: 交易发起者填写的序列号,防止重放攻击
  • Data:可变长度的二进制数据载荷
  • V,R,S: ECDSA数字签名信息

2.3 注意事项

  • 不要发送到无效地址!这样会丢失以太币。
  • 发往合约账号的交易一般需要符合调用规范,否则会调用合约fallback函数,如果正常则调用并转账到该函数。
  • 地址0用来创建合约,合约编译结果是data。创建合约需要消耗Gas。
  • 专有的销毁以太币地址0xdead,一般用不到。

3. 以太坊交易的生命周期

这里有一个交易执行过程的例子。如图,有三个节点,Alice节点,Charlie节点,矿工节点。

005:以太坊交易|《ETH原理与智能合约开发》笔记_第2张图片
交易示例1

005:以太坊交易|《ETH原理与智能合约开发》笔记_第3张图片
交易示例2
  1. Alice发布一笔交易,给Bob转账 1 ether。
  2. 交易广播到所有的节点。
  3. 矿工节点开始挖矿,赢得竞争后,记录新区块,Alice 的余额变为 18.98** ether,比 19 少的那部分是交易费,Bob 的余额变为 6 ether。
  4. 矿工将新区块广播出去,其它节点更新区块。

经过若干个区块,Alice 的交易被认为是安全的。


你可能感兴趣的:(005:以太坊交易|《ETH原理与智能合约开发》笔记)