从开发者的角度快速解读以太坊白皮书

最近有一个以太坊项目,需要紧急充电。我个人一贯认为直接从上层入手开发反而会一脸懵逼,从底层原理入手可能枯燥,但是对于学习和理解来说却至关重要,底层基础不牢靠,永远走不远。

因此本篇我们就以开发者的角度入手,快速解读以太坊的白皮书,以快速get到技术关键点为目的,提炼技术要点,这样实际开发中就会少走很多弯路,完整的以太坊白皮书见官方wiki: https://github.com/ethereum/wiki/wiki/White-Paper。本篇文章不以普及区块链概念为目的,所以需要读者有一定的区块链基础概念。

以太坊的账户

以太坊通过账户转移价值,完成状态转换的。以太币(Ether)是以太坊内部的主要加密燃料,用于支付交易费用(后续会描述交易费的计算方法)。以太坊的账户包含四
个部分:

  • 随机数,用于确定每笔交易只能被处理一次的计数器
  • 账户目前的以太币余额
  • 账户的合约代码,如果有的话
  • 账户的存储(默认为空)

以太坊有两种账户类型:外部所有账户(由私钥控制的)和合约账户(由合约代码控制)。交易是通过发送消息触发的,当发送到合约账户时,内部的合约代码被执行。合约可以对内部存储进行读写,可以发送消息或创建其他合约。

TIPS: 关于以太坊钱包的备份: https://ethfans.org/topics/595

以太坊的消息与交易

以太坊的交易是通过外部储户发送带有签名的消息触发的。交易包含消息的接收者、用于确认发送者的签名、以太币账户余额、要发送的数据和两个被称为STARTGASGASPRICE 的数值。STARTGAS为最大消耗的GAS限制,GASPRICE为每一步需要支付旷工的费用。当STARTGAS消耗光后,所有状态改变恢复初始,但是不退手续费(GAS)。如果GAS还有剩余,则返还剩余GAS到发送方账户。

以太坊的交易将账户价值从发送方转移到接收方,如果接收方账户不存在,则创建目标账户,如果接收账户是合约账户,则执行合约代码,直到执行完毕或消耗光GAS停止执行。

交易手续费的计算

首先GAS的价格不是一成不变的,他的价格和交易过程中类似于股票交易的过程。当前行情在很多地方可以查看,比如这里: https://ethgasstation.info/

交易的时候可以自行设置GASPRICE,和股票交易一样,如果你的手续费太低,是会迟迟得不到交易确认的,叫价太高自己会亏。因此需要合理评估交易手续费。

要估算消耗的GAS,可以调用web3提供的估算方法estimateGas

目前供参考的一个GAS消耗简表,鼓励设计更高效的智能合约以减少GAS浪费:

step    1   Default amount of gas to pay for an execution cycle.
stop    0   Nothing paid for the SUICIDE operation.
sha3    20  Paid for a SHA3 operation.
sload   20  Paid for a SLOAD operation.
sstore  100     Paid for a normal SSTORE operation (doubled or waived sometimes).
balance     20  Paid for a BALANCE operation
create  100     Paid for a CREATE operation
call    20  Paid for a CALL operation.
memory  1   Paid for every additional word when expanding memory
txdata  5   Paid for every byte of data or code for a transaction
transaction     500     Paid for every transaction

关于智能合约

目前以太坊的只能合约使用Solidity语言编写,编译为字节码部署在以太坊,通过EVM执行。部署合约的过程基本类似于创建账户的过程,成功部署之后会返回合约的地址,需要记录这个地址以便于未来的调用。

合约也是有生命周期的,可以调用kill方法销毁合约。注意这里的销毁只是将合约地址标记为僵尸地址,访问僵尸地址将抛出错误。合约本身还是存储在区块链上的,因此痕迹不会被抹除。

关于发币

以太坊允许发行自己的代币(token),它们也是内置在以太坊上的数字资产,通过智能合约发行和控制。符合ERC20标准的代币将直接兼容以太坊,因此鼓励代币系统尽可能兼容ERC20标准: https://theethereum.wiki/w/index.php/ERC20_Token_Standard

发行代币的过程本质上还是执行智能合约的过程,因此同样需要按照智能合约的执行过程,消耗GAS让矿工确认。

小结

本篇文章通过快速阅读以太坊的白皮书,摘录出部分技术要点,最近有项目开发需求,在之前疑惑的一些技术要点,通过阅读白皮书将其补上,故有此一文记录要点。

你可能感兴趣的:(从开发者的角度快速解读以太坊白皮书)