最近有一个以太坊项目,需要紧急充电。我个人一贯认为直接从上层入手开发反而会一脸懵逼,从底层原理入手可能枯燥,但是对于学习和理解来说却至关重要,底层基础不牢靠,永远走不远。
因此本篇我们就以开发者的角度入手,快速解读以太坊的白皮书,以快速get到技术关键点为目的,提炼技术要点,这样实际开发中就会少走很多弯路,完整的以太坊白皮书见官方wiki: https://github.com/ethereum/wiki/wiki/White-Paper。本篇文章不以普及区块链概念为目的,所以需要读者有一定的区块链基础概念。
以太坊通过账户转移价值,完成状态转换的。以太币(Ether)是以太坊内部的主要加密燃料,用于支付交易费用(后续会描述交易费的计算方法)。以太坊的账户包含四个部分:
随机数,用于确定每笔交易只能被处理一次的计数器
账户目前的以太币余额
账户的合约代码,如果有的话
账户的存储(默认为空)
以太坊有两种账户类型:外部所有账户(由私钥控制的)和合约账户(由合约代码控制)。交易是通过发送消息触发的,当发送到合约账户时,内部的合约代码被执行。合约可以对内部存储进行读写,可以发送消息或创建其他合约。
TIPS: 关于以太坊钱包的备份: https://ethfans.org/topics/595
以太坊的交易是通过外部储户发送带有签名的消息触发的。交易包含消息的接收者、用于确认发送者的签名、以太币账户余额、要发送的数据和两个被称为STARTGAS 和 GASPRICE 的数值。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让矿工确认。
本文作者:HiBlock区块链技术布道群-冯宇Ops
原文发布于简书
原文链接:https://www.jianshu.com/p/41ae276ae65e
加微信baobaotalk_com,加入技术布道群
以下是我们的社区介绍,欢迎各种合作、交流、学习:)