区块链之以太坊学习

以太坊

区块链通常被定义为去中心的分布式记账系统,该系统中的节点无需互相信任,通过统一的共识机制共同维护一份账本。在前几年,大家会关注比特币而不会单独谈论区块链这个技术。直到2015年,区块链这一概念才被单独提出来为更多人所了解,且向着更广泛的应用场景发展。发生在这个时间点的主要原因之一是以太坊的出现和日益成熟。

简单地说,以太坊是一个有智能合约(Smart Contract)功能的公共区块链平台。用智能手机打个比方,如果说以太坊是智能手机的操作系统,那么智能合约就是上面搭载的应用(App)。有了以太坊,用户可以直接开发自己的区块链应用。

以太币(ETH)

以太币是以太坊发行的一种数字货币, 在以太坊上发起任何一笔交易都需要支付一定的以太币.

以太币来源包括: 矿前 + 区块奖励 + 叔区块奖励 + 数区块引用奖励, 具体分配大致如下:

  • 预付款的贡献者总共有6000万个ETH

  • 新区块的挖矿奖励5ETH

  • 如果一个矿工挖出一个新区块, 但不是在主链中,则该区块称为叔区块. 如果该叔区块在之后的区块链中被引用, 每个叔区块挖矿者有4.375个ETH, 引用者有0.15ETH.

以太币发行:

  • 以太币发行使用GHOST协议, 每年发1800w ETH

  • 2018年开始,以太坊将使用Casper来替代目前的Pow, 该协议运行效率更高且需要更少的挖矿补贴. 此时ETH的发行率可能会有所降低

交易(Transactions)

以太坊的交易指的是一个外部账户发送到区块链上另一账户的消息的签名数据包,该消息中主要包含 发送者签名, 接收者地址, 交易的ETH数量等内容.在以太坊上的每一笔交易都需要支付一定的费用, 该费用主要用于支付执行交易所需要的计算开销. 以太坊中Gas是执行开销的基本单位.

交易费用

以太坊中采用Gas和GasPrice来对交易所需的手续费进行定价:

  • Gas

    用来衡量一笔交易所需要消耗计算资源的基本单位, 当执行一笔交易所需的计算步骤越多或者需要消耗更多的内存,那么这笔交易就需要越多的Gas.一般,一个普通的转账交易会消耗 21000Gas, 而创建一个智能合约交易可能会消耗几万甚至几百万的Gas

  • GasPrice

    是指1 Gas所需要的以太币, 如果一个转账交易消耗21000Gas, 假设GasPrice为 0.000000001 wei/Gas,那么这笔交易的手续费为0.000021Ether.

  • GasLimit

    对于单个交易, GasLimit表示交易者愿意为这笔交易所支付的最大Gas数量,其可以保护用户可能由于错误的代码影响而支付过多的交易费;

    对于区块来说, GasLimit表示单个区块所允许包含的最大Gas数量, 其由矿工决定大小. 区块的GasLimit设置的越大, 那么矿工就可以获得越多的交易费,但是需要更多的带宽, 同时会加叔数区块出现的概率, 造成挖出的区块无法形成最长的交易链.根据以太坊协议, GasLimit只能在1到1024之间.

交易内容

一笔交易会包含一下内容:

  • from: 交易发送者地址
  • to: 交易接受者地址, 如果为空,则意味这是一个创建智能合约的交易
  • value:转移的ETH数量
  • data: 如果存在data字段,表明这是一个创建或者调用智能合约的交易
  • GasLimit: 这个交易允许消耗的最大Gas数量
  • GasPrice: 发送者愿意支付给矿工的Gas价格
  • nonce:用来区别同一用户发出不同交易的标志
  • hash:由以上信息生成的散列值,作为交易的id
  • r s v: 交易签名的三个部分, 由发送者的私钥对交易的hash进行签名生成

不同场景下, 交易的三种类型:

  • 转账交易

web3.eth.sendTransaction(from:sendAddress, to:receiveAddress, value:10000000000)

  • 创建智能合约

web3.eth.sendTransaction(from:sendAddress,data:“contract binary code”)

  • 执行智能合约

web3.eth.sendTransaction(from:sendAddress, to:“contract address”, data:“hash of the invoked method signature and encoded parameters”)

智能合约

现实生活中经常遇到这样的场景:买家与卖家要进行一笔交易,为了保证交易的顺利进行,双方签订了一份合约,合约中声明双方各自的身份、权利和义务(买家付钱、卖家交货的时间节点和方式等),一式两份,各自保存。这样,当交易出现纠纷时,合约将成为寻求法律援助的依据,而法律将成为确保合约执行的强制力保障。

虽然合约为交易的顺利进行提供了一些保障,但是也存在很多不足之处。一旦交易中发生了纠纷,比如卖家拖延发货或者买家拒绝付款,即使在法律的援助下解决了纠纷,交易的效率也会大大降低。甚至在一些情况下,合约将会失去约束效力,比如合约中存在歧义或者合约丢失等。

那么有没有一种更有效的方式来保证交易的进行呢?假设有一个绝对可信和公正的交易代理人,卖家将商品交给代理人,买家与代理人进行一手交钱一手交货的当面交易。如果买家拒绝购买,卖家可以从代理人手中取回商品;买家也不会存在付钱后拿不到商品的风险。

智能合约就可以充当这样一个代理人。简单地说,智能合约就是区块链上一个包含合约代码和存储空间的虚拟账户,智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。

相比较传统合约,区块链智能合约在很多方面具有优势:

  • 智能合约的条款是由代码确定的。由于代码逻辑的明确性,比起自然语言,更加不容易产生歧义。

  • 智能合约存储和部署在区块链网络中,而网络中的节点相互独立,都拥有同一份副本,因此合约内容几乎不可能被篡改。同时区块链中也保存了合约的执行记录,可以作为永久的交易凭证。

  • 合约的创建和执行都依赖于区块链协议,所以合约执行的强制力可以保证。

理论上讲,任意计算复杂度的金融交互过程均可以由智能合约安全、自动地完成。除了金融方面的应用,以太坊平台还可以在如财产登记、投票、智能交通、物联网等任何需要信任、安全和性能兼顾的环境中进行部署和使用。

以太坊虚拟机(EVM)

在以太坊平台上,智能合约的代码运行在以太坊虚拟机(EVM)中,EVM是一个图灵完备的虚拟机,是以太坊协议的核心。在以太坊的点对点(P2P)网络中,每个全节点上都包含一个以太坊虚拟机,当节点需要打包或验证区块时,便将交易相关的可执行代码送入EVM中执行,执行的结果更新了以太坊账户的状态并被记录在区块链上。

以太坊网络中的每个节点都需要在各自的EVM中执行代码,这就导致了两个问题:

  • 一是这样会产生__大量的平行化计算__,每个节点都必须执行代码以验证区块中的结果状态。这虽然牺牲了一定的计算效率,但保证了分布式网络中更高的安全性。

  • 二是__EVM的执行结果必须有严格的确定性__,所有节点必须得到同样的运行结果。这就对智能合约以及EVM造成了一定的局限性,智能合约目前仍无法实现一些可能会带来不确定结果的简单操作,如生成随机数、调用操作系统API等,因为这些操作会因时间、系统等执行环境的差异而产生不同的结果,进而使以太坊节点无法对区块中的账户状态达成共识。

更多区块链技术请参考:
Love-Ethereum

猜你喜欢

转载自blog.csdn.net/XFORG1992/article/details/88920198