风险提示:理性看待区块链,提高风险意识!
区块链技术(六):以太坊核心概念(二)
首页 > 币界资讯 > 竞争币新闻 2016-05-26 10:12:00

文章摘要图:

区块链技术(六):以太坊核心概念(二)_meitu_1

上一篇文章介绍了以太坊5个核心概念:以太坊虚拟机(EVM)、账户(Accounts)、交易(Transactions)、Gas、存储,主存和栈(Storage, Memory and the Stack)。这篇文章将谈谈其他几个核心概念。

指令集(Instruction Set)

EVM的指令集被刻意保持在最小规模,以尽可能避免可能导致共识问题的错误实现。所有的指令都是针对256比特这个基本的数据类型的操作。具备常用的算术,位,逻辑和比较操作。也可以做到条件和无条件跳转。此外,合约可以访问当前区块的相关属性,比如它的编号和时间戳。

消息调用(Message Calls)

合约可以通过消息调用的方式来调用其它合约或者发送以太币到非合约账户。消息调用和交易非常类似,它们都有一个源,一个目标,数据负载,以太币,gas和返回数据。事实上每个交易都可以被认为是一个顶层消息调用,这个消息调用会依次产生更多的消息调用。

一个合约可以决定剩余gas的分配。比如内部消息调用时使用多少gas,或者期望保留多少gas。如果在内部消息调用时发生了out-of-gas异常(或者其他异常),合约将会得到通知,一个错误码被压在栈上。这种情况只是内部消息调用的gas耗尽。在solidity中,这种情况下发起调用的合约默认会触发一个人工异常。这个异常会打印出调用栈。

就像之前说过的,被调用的合约(发起调用的合约也一样)会拥有崭新的主存并能够访问调用的负载。调用负载被存储在一个单独的被称为calldata的区域。调用执行结束后,返回数据将被存放在调用方预先分配好的一块内存中。

调用层数被限制为1024,因此对于更加复杂的操作,我们应该使用循环而不是递归。

代码调用和库(Delegatecall / Callcode and Libraries)

存在一种特殊类型的消息调用,被称为callcode。它跟消息调用几乎完全一样,只是加载自目标地址的代码将在发起调用的合约上下文中运行。

这意味着一个合约可以在运行时从另外一个地址动态加载代码。存储,当前地址和余额都指向发起调用的合约,只有代码是从被调用地址获取的。

这使得Solidity可以实现”库“。可复用的库代码可以应用在一个合约的存储上,可以用来实现复杂的数据结构。

日志(Logs)

在区块层面,可以用一种特殊的可索引的数据结构来存储数据。这个特性被称为日志,Solidity用它来实现事件。合约创建之后就无法访问日志数据,但是这些数据可以从区块链外高效的访问。因为部分日志数据被存储在布隆过滤器(Bloom filter) 中,我们可以高效并且安全的搜索日志,所以那些没有下载整个区块链的网络节点(轻客户端)也可以找到这些日志。

创建(Create)

合约甚至可以通过一个特殊的指令来创建其他合约(不是简单的向零地址发起调用)。创建合约的调用跟普通的消息调用的区别在于,负载数据执行的结果被当作代码,调用者/创建者在栈上得到新合约的地址。

自毁(Selfdestruct)

只有在某个地址上的合约执行自毁操作时,合约代码才会从区块链上移除。合约地址上剩余的以太币会发送给指定的目标,然后其存储和代码被移除。 注意,即使一个合约的代码不包含自毁指令,依然可以通过代码调用(callcode)来执行这个操作。

好了,通过前面的2篇文章,我们了解了以太坊的核心概念,接下来就可以通过编程来深入理解这些概念了。

本文并非原创,文章来自于@rink1969, @jan, @shaoping的翻译和校对,系统的介绍以太坊绕不开这些概念,因此转载过来,特此感谢。

上一篇: 比特币VS以太币:从两方面看有何不同
下一篇: DAO众筹即将结束 BTC市场率先公布其代币上线日期
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥267,580.79
37,491.53 USDT
+5.36%
ETH以太坊
¥14,664.95
2,054.75 USDT
+3.94%
USDT泰达币
¥7.24
1.01 USDT
+0.18%
BNB币安币
¥1,802.40
252.54 USDT
+2.91%
XRP瑞波币
¥4.65
0.65120 USDT
+2.55%
USDC
¥7.14
0.99980 USDT
-0.02%
SOLSolana
¥468.73
65.68 USDT
+15.19%
OKBOK币
¥426.75
59.79 USDT
+2.36%
ADA艾达币
¥2.73
0.38270 USDT
+7.32%
DOGE狗狗币
¥0.54690
0.07664 USDT
+5.21%
热搜币种
更多
币种
价格
24H涨跌幅
dYdX
¥29.59
4.0749 USDT
+5.77%
Filecoin
¥38.55
5.3092 USDT
+9.52%
FTX Token
¥26.56
3.6583 USDT
-0.05%
PancakeSwap
¥19.13
2.6352 USDT
+4%
Solana
¥476.84
65.6763 USDT
+15.19%
奇亚
¥198.57
27.3499 USDT
+3.54%
Yield Guild Games
¥3.08
0.4238 USDT
+3.44%
Conflux
¥1.25
0.1716 USDT
+7.12%
火必积分
¥21.92
3.0188 USDT
+4.59%
Terra Classic
¥0.00
8.293E-5 USDT
+3.33%
阿童木
¥72.93
10.0449 USDT
+11.23%
Avalanche
¥163.70
22.5467 USDT
+26.85%
最新快讯
更多
SushiSwap“部署SUSHI新代币经济学”的提案开启民意调查投票
2023-11-16 12:36:38
Polytrade与OndoFinance、OpenEden建立合作伙伴关系
2023-11-16 12:25:46
Polytrade与OndoFinance等建立合作伙伴关系
2023-11-16 12:25:46
Arbitrum链上提案拟将STIP激励总预算增至7140万枚ARB
2023-11-16 12:19:30
币安与Gulf合资企业GulfBinance将于明年在泰国向公众开放服务
2023-11-16 12:10:35
Arbitrum新提案拟将STIP激励总预算增加2140万枚ARB
2023-11-16 12:08:39
币安合约将于12月15日停用WebSocket旧域名
2023-11-16 12:05:45
下载币界网APP