初识以太坊

    这篇文章只是简单的认识一下以太坊,目的是快速地进入以太坊应用智能合约开发;随着以太坊应用开发的不断深入,再深入研究以太坊底层机制。(我认为学习技术就是要边学边用,边用边学,这样才能理论与实践相结合,实践对理论才能产生正反馈;------自己的愚论,请大家多多指教,哈哈)

    以太坊白皮书中文版如下:

    以太坊 (Ethereum ):下一代智能合约和去中心化应用平台

0. 什么是以太坊?

    引用以太坊白皮书对以太坊的定义如下:

    “以太坊的目的是基于脚本、竞争币和链上元协议(on-chain meta-protocol)概念进行整合和提高,使得开发者能够创建任意的基于共识的、可扩展的、标准化的、特性完备的、易于开发的和协同的应用。以太坊通过建立终极的抽象的基础层-内置有图灵完备编程语言的区块链-使得任何人都能够创建合约和去中心化应用,并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。”

    什么是竞争货和链上元协议还不太清楚,只是简单的从网络上找到了一些解释:

    “山寨币是指以比特币代码为模板,对其底层技术区块链进行了一些修改的区块链资产,其中有技术性创新或改进的又称为竞争币。”

    链上元协议(on-chain meta-protocol)这个概念在网络上没有找到解释,还请各位读者给出解释。

    比特币系统是为了比特币交易而设计的,骨子里到处都是货币的影子,把这种区块链架构应用到其他领域存在一些问题;个人认为以太坊成功地把区块链技术从比特币系统抽离出来应用到其他领域,尤其脚本系统是图灵完备的,提供了四种高级语言来编写自己的智能合约。以太坊的出现标志区块链技术进入了2.0时代。

    以上是以太坊的设计目的?那么以太坊提出了哪些机制来实现该系统?下面将一一展开。

1. 以太坊账户

    “在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。以太坊的账户包含四个部分:

    a. 随机数,用于确定每笔交易只能被处理一次的计数器--(不太明天怎样实现的)

    b. 账户目前的以太币余额 --以太坊中的流通货币“以太币”

    c. 账户的合约代码,如果有的话 -- 智能合约中的代码

    d. 账户的存储(默认为空)-- 合约账户

    ”

    以太坊有两种类型的账户:外部账户(由私钥控制的)和合约账户(由合约代码控制,创建一个智能合约后产生的地址)。

    a. 外部账户没有代码,人们可以通过创建和签名一笔交易从一个外部账户发送消息。

    b. 每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取和写入,和发送其它消息或者创建合约。

2. 消息和交易

    以太坊的消息可以由外部实体或者合约创建,发给另外一个外部账户或者合约账户;如果发给合约账户,可以携带数据,合约账户可以反馈消息确认,有点类似于RPC(不知道是否准确)。

    以太坊中“交易”是指存储从外部账户发出的消息的签名数据包。交易包含消息的接收者、用于确认发送者的签名、以太币账户余额、要发送的数据和两个被称为STARTGAS和GASPRICE的数值。

    消息与交易的概念有点弄不清楚,举个例子说明一下:Alice写一封信给Bob,包括信封和信纸内容,信封上包括Bob的地址、邮票等内容;可以认为信封和信纸内容为交易,但是信纸具体内容为消息。

3. 状态转换函数

    比特币系统也可以看多是多次状态转换的机制,具体可以参考以太坊 (Ethereum ):下一代智能合约和去中心化应用平台。以太坊白皮书这部分内容讲得非常简单易懂,这里直接抄过来了。(有没有感觉到现在互联网学习好多内容都不需要自己整理,只是拿来去用;现在好多项目也是这样,拿来开源资源(工具或者源代码),加上自己的业务,一个项目的框架就搭建好了,哈哈,本人认为资源整合能力 也是一个工程师具有的基本能力)


ETH State Transfer

    以太坊的状态转换函数:APPLY(S,TX) -> S’,可以定义如下:

    a. 检查交易的格式是否正确(即有正确数值)、签名是否有效和随机数是否与发送者账户的随机数匹配。如否,返回错误。

    b. 计算交易费用:fee=STARTGAS * GASPRICE,并从签名中确定发送者的地址。从发送者的账户中减去交易费用和增加发送者的随机数。如果账户余额不足,返回错误。

    c. 设定初值GAS = STARTGAS,并根据交易中的字节数减去一定量的燃料值。

    d. 从发送者的账户转移价值到接收者账户。如果接收账户还不存在,创建此账户。如果接收账户是一个合约,运行合约的代码,直到代码运行结束或者燃料用完。

    e. 如果因为发送者账户没有足够的钱或者代码执行耗尽燃料导致价值转移失败,恢复原来的状态,但是还需要支付交易费用,交易费用加至矿工账户。

    f. 否则,将所有剩余的燃料归还给发送者,消耗掉的燃料作为交易费用发送给矿工。

    例如,假设合约的代码如下:

    if !contract.storage[msg.data[0]]:

    contract.storage[msg.data[0]] = msg.data[1]

    需要注意的是,在现实中合约代码是用底层以太坊虚拟机(EVM)代码写成的。上面的合约是用我们的高级语言Serpent语言写成的,它可以被编译成EVM代码。假设合约存储器开始时是空的,一个值为10以太,燃料为2000,燃料价格为0.001以太并且两个数据字段值为[ 2, ‘CHARLIE’ ] [3]的交易发送后,状态转换函数的处理过程如下:

    a.检查交易是否有效、格式是否正确。

    b. 检查交易发送者至少有2000*0.001=2个以太币。如果有,从发送者账户中减去2个以太币。

    c. 初始设定gas=2000,假设交易长为170字节,每字节的费用是5,减去850,所以还剩1150。

    d.从发送者账户减去10个以太币,为合约账户增加10个以太币。

    e. 运行代码。在这个合约中,运行代码很简单:它检查合约存储器索引为2处是否已使用,注意到它未被使用,然后将其值置为CHARLIE。假设这消耗了187单位的燃料,于是剩余的燃料为1150 – 187 = 963。

    f.  向发送者的账户增加963*0.001=0.963个以太币,返回最终状态。

    如果没有合约接收交易,那么所有的交易费用就等于GASPRICE乘以交易的字节长度,交易的数据就与交易费用无关了。另外,需要注意的是,合约发起的消息可以对它们产生的计算分配燃料限额,如果子计算的燃料用完了,它只恢复到消息发出时的状态。因此,就像交易一样,合约也可以通过对它产生的子计算设置严格的限制,保护它们的计算资源。

4. 以太坊虚拟机(EVM)

    相对于比特币系统,以太坊引入了图灵完备的脚本系统--以太坊虚拟机。比特币脚本系统只能执行很少的指令,以太坊虚拟机底层是通过字节码执行命令(就像JVM执行java字节码类似),上层采用高级语言开发智能合约,如solidity语言逐渐成为以太坊智能合约的标准语言。

    代码操作可以访问三种存储数据的空间:

    a. 堆栈,一种后进先出的数据存储,32字节的数值可以入栈,出栈。

    b. 内存,可无限扩展的字节队列。---这里感觉“内存”翻译不太准确

    c. 合约的长期存储,一个秘钥/数值的存储,其中秘钥和数值都是32字节大小,与计算结束即重置的堆栈和内存不同,存储内容将长期保持。

    以上即为以太坊的基本概念,目的是快速学习以太坊的基本知识,以尽快加入到智能合约的开发。哈哈,这篇文章记录了自己学习区块链的轨迹,也欢迎大家加入区块链学习的大家庭中。

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

推荐阅读更多精彩内容