区块链100讲:从开发者的角度快速解读以太坊白皮书

Posted by

区块链100讲:从开发者的角度快速解读以太坊白皮书

本文作者:HiBlock区块链技术布道群-冯宇Ops

原文发布于简书

原文链接:https://www.jianshu.com/p/41ae276ae65e

加微信baobaotalk_com,加入技术布道群

区块链100讲:从开发者的角度快速解读以太坊白皮书

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

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

1

以太坊的账户

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

  • 随机数,用于确定每笔交易只能被处理一次的计数器

  • 账户目前的以太币余额

  • 账户的合约代码,如果有的话

  • 账户的存储(默认为空)

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

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

2

以太坊的消息与交易

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

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

3

交易手续费的计算

首先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

4

关于智能合约

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

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

5

关于发币

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

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

— 线上课程推荐—

【线上课程】4节课8小时培训,《白话区块链》作者蒋勇教你快速掌握区块链智能合约开发

揭开神秘的数字货币交易——2节课建立一个数字货币交易所

区块链100讲:从开发者的角度快速解读以太坊白皮书

区块链100讲:从开发者的角度快速解读以太坊白皮书

始发于微信公众号: 区块链社区HiBlock