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

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

因此本篇我们就以开发者的角度入手,快速解读以太坊的白皮书,以快速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让矿工确认。

小结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容