1.以太币(Ether)产生规则和比特币有哪些区别?
1. 出块时间。
比特币出块时间是平均10分钟,而以太坊约是15秒。
2.奖励。
以太币奖励为5以太币,并且每次出块奖励不减少,大都会后改为了3个以太币。比特币是每次减半,第一块的是50个比特币。之后每一块都减半
3.区块记录量。
以太币记录量远高于比特币
4.有叔块(uncle block)奖励。
因为以太坊的出块时间很短,很容易出现两个节点同时出块的情况,为了使得所有同时出块的节点都可以得到奖励,减少无用矿工。
2.智能合约是什么?目前应用到什么行业?有什么特点?
在区块中传递的合约,或者说是传递的字符串,不过不是单纯的字符串和信息,而是一段可执行的脚本,比如说,有触发条件,有交互能力
应用:第一个成功应用的就是电子猫,发布方一旦发布出去,后面自己都不能修改;之后应用最多的就是电子赌场了,1:公信力好,代码是公开透明的,庄家是不能作弊的(也可以说没有庄家),而且没有中央服务器;2:赌博过程很难被监控被追踪,一旦入局不可逆转,而且金额走向无法追踪
特点:1、公开透明的策略,任何人都可以检查其代码逻辑可靠性;2、即时与区块链代币支付结合,典型如以太坊。3、去中心化和持续生命力,代码发布后,即便发布方倒闭,解散,其产品依然会在链上运行。
3.以太坊虚拟机 EVM和JVM有什么差别?JVM能做以太坊虚拟机吗?
虚拟机都是跨平台的
以太坊实现了一个叫Ethereum Virtual Machine(EVM)的运行时环境,类似JVM,它的主要工作是执行智能合约的字节码,EVM“位于区块链之上”,而JVM主要是执行目标代码(字节码),内存回收机制好像也不一样。
可以,银行私有链用JVM,安全机制高。
4.Solidity编程语言有哪些特点?和Javascript、Python有什么区别?
以太坊的软件开发语言是其最大特性之一,因为对区块链进行编程是一项首要目标。以太坊具有四种专用语言:Serpent (受Python启发)、 Solidity (受JavaScript 启发)、 Mutan(受Go 启发) 和 LLL (受Lisp 启发),都是为面向合约编程而从底层开始设计的语言。
Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。
Solidity是以太坊的首选语言,它内置了Serpent的所有特性,它的语法接近于Javascript,是一种面向对象的语言,这降低了学习门槛,易于被掌握和使用,因为JavaScript是Web开发者的常用语言。因此,Solidity充分利用了现有数以百万程序员已掌握JavaScript这一现状。
但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些:
以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的Address的类型。用于定位用户,定位合约,定位合约的代码(合约本身也是一个帐户)。
由于语言内嵌框架是支持支付的,所以提供了一些关键字,如payable,可以在语言层面直接支持支付,而且超级简单。
存储是使用网络上的区块链,数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还是区块链。
运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。
5.Serpent和Python有什么区别?有什么缺陷?
Serpent与Python之间的主要区别有:
Python中的数字类型没有大小限制,Serpent的数字类型则会在2256溢出。例如,在Serpent中计算3^(2^254)的结果是1,虽然事实上这是一个天文数字。
Serpent没有Decimal类型。
Serpent没有list comprehensions (例如[x**2 for x in my_list]这样的表达式),字典(Hash/Map),和其它一些高级特性。
Serpent没有first-class函数的概念。虽然合约中可以定义函数, 合约也可以调用这些函数,但是在两次函数调用之间变量(除了持久变量)是会丢失的。
Serpent有一个被称作”持久变量“(persistent storage variables)的概念。
在Serpent中可以使用extern语句来调用其他合约中定义的函数。
缺陷: 最近Zeppelin Solution团队发现其编译器有一个严重的bug
提示:升级Serpent的时候,需要先pip uninstall ethereum-serpent然后python setup.py install。避免使用pip install ethereum-serpent,因为pypi上的包八成已经过时了。
6.Vyper比Solidity有哪些优势?
提升以太坊上应用程序的安全性
谈着之前需要了解以太坊目前需要解决的难题有哪些?未来的需求是什么?
Vitalik Buterin:目前的挑战主要是技术性问题,大体分为以下三类:
第一,可扩展性。我们要增加区块链的容量,这一性能主要反映在每秒可处理的原始交易数。目前以太坊每秒钟可处理15笔交易左右,但要满足主流采用,还需要数千倍的提升。
第二,隐私性。我们需要努力确保在使用区块链应用时不会泄露个人隐私数据。
第三,安全性。 我们需要在技术上帮助社区最大程度地降低数字资产被盗的风险,私钥遗失、智能合约代码漏洞等风险也要最小化。
在实用性方面也存在着一些挑战,但相较于核心协议和平台本身,每个单独应用的开发团队对实用性有着更大的影响 。
但目前我们已经有很多可靠的解决方案来应对以上所有的挑战 。例如,我们有专门的团队在研究状态通道技术,分片技术和Plasma技术来解决可扩展性方面的问题。拜占庭硬分叉已经完成,而且它的加密功能也达到可用状态,但在构建基础设施以及利用它们的方面还有很多细节工作要做。
安全性分为两个方面。首先,要保证以太坊本身是安全的。这将通过Casper权益证明算法(PoS)得到改进。目前算法已经接近完成,测试网已经运行,而且其他语言的算法实现也已经在编写。 其次,是以太坊上应用程序的安全性。这将通过一系列技术手段来解决,包括以太坊上编程语言的创新,比如Vyper(https://vyper.online),以及形式化验证的改进,和更完善的智能合约开发标准
7.Transaction 交易技术实现步骤有哪些?
1.部署一个合约,合约地址为:
0x2bda4364bb076187f0ef0067a61ccb95d636e383
2.通过 geth js 交互控制台从 coinbase 账户转 1 个 ether 给合约地址
查看合约地址中 ether 数量:
web3.fromWei(web3.eth.getBalance("0x2bda4364bb076187f0ef0067a61ccb95d636e383"),"ether") 0
3.解锁 coinbase 账号
personal.unlockAccount(eth.coinbase, "account_pwd", 10000000000)
4.转账
eth.sendTransaction({from:eth.coinbase,to:"0x2bda4364bb076187f0ef0067a61ccb95d636e383",value:web3.toWei(1,"ether")})
5.当 geth 中的地址发生交易时,geth 服务的日志(请查看Ethereum 私有链和 web3.js 使用如何设置 geth 日志) 会打印出类似下面这样的日志:
I1112 11:51:15.338680 eth/api.go:1185] Tx(0xb3515f0245f0f14f2756e45f402a8dd058b387e596ca50fb3ec9213390596c17) to: 0x2bda4364bb076187f0ef0067a61ccb95d636e383
6.此时说明交易已经发生了,等待被区块链确认状态(pending)
7.可以开启挖矿miner.start(1)来确认这笔交易
8.确认后关闭挖矿 miner.stop()
9.此时再查看合约地址上的 ether 数量,你就可以发现增加了一个
不管什么类型的交易,都包含:
nonce:发送者发送交易数的计数
gasPrice:发送者愿意支付执行交易所需的每个gas的Wei数量
gasLimit:发送者愿意为执行交易支付gas数量的最大值。这个数量被设置之后在任何计算完成之前就会被提前扣掉
to:接收者的地址。在合约创建交易中,合约账户的地址还没有存在,所以值先空着
value:从发送者转移到接收者的Wei数量。在合约创建交易中,value作为新建合约账户的开始余额
v,r,s:用于产生标识交易发生着的签名
init(只有在合约创建交易中存在):用来初始化新合约账户的EVM代码片段。init值会执行一次,然后就会被丢弃。当init第一次执行的时候,它返回一个账户代码体,也就是永久与合约账户关联的一段代码。
data(可选域,只有在消息通信中存在):消息通话中的输入数据(也就是参数)。例如,如果智能合约就是一个域名注册服务,那么调用合约可能就会期待输入域例如域名和IP地址
8.合约能够向其他合约发送消息,那么如何理解这个消息?
在以太坊状态全局范围内的合约可以与在相同范围内的合约进行通信。他们是通过“消息”或者“内部交易”进行通信的。我们可以认为消息或内部交易类似于交易,不过与交易有着最大的不同点—它们不是由外部拥有账户产生的。相反,他们是被合约产生的。它们是虚拟对象,与交易不同,没有被序列化而且只存在与以太坊执行环境。
当一个合约发送一个内部交易给另一个合约,存在于接收者合约账户相关联的代码就会被执行
9.以太坊客户端是钱包吗?目前常用的有哪些?各有什么优缺点?
1. Mist
说到以太坊钱包,第一个要说的当然就是Ethereum官方钱包+浏览器 Mist。Mist是一个钱包(全节点钱包通俗的来说就是同步了全部的以太坊区块信息的钱包)。也就是说打开钱包后,电脑会自动同步全部的以太坊区块信息,如果设备和网络的条件过关的情况下,目前(17年9月8日)大概需要半天左右的时间。
优势:
安全度高,不需要经过第三方发起交易
节点未同步完成之前无法查看地址余额
劣势:
无法调整Gas Price
对网络要求高,需要连接节点,才能发起交易
2. Parity
原以太坊基金会部分成员,开发的钱包。功能强大,也是一个全节点钱包。 PS:主要掌握这个钱包就行了
优势:
安全度高,不需要经过第三方发起交易
劣势:
对网络要求高,需要连接节点才能发起交易
下载地址: http://ethfans.org/wikis/Ethcore-Parity-Mirror
3. MyEtherWallet
MyEtherWallet 作为一个轻钱包,上手难道不大,无需下载,在直接在网页上就可以完成所有的操作。在MyEtherWallet上生成的私钥由用户自我保管,平台方并无备份。
优势:
方便快捷,连网即可发起交易
劣势:
交易时需要上传私钥(使用时认准唯一网址: https://www.myetherwallet.com 谨防钓鱼网站 )
4. imToken
移动端钱包,操作简便,容易上手,功能齐全,在imToken上生成的钱包私钥保存在手机本地,平台方并无备份。
优势:
移动端钱包,操作界面十分友好,连网即可发起交易
中国团队,客服好沟通,反应速度快
劣势:
未开源
下载地址: https://token.im/
5. MetaMask
MetaMask的钱包属性偏弱,更多的是起到使Chrome浏览器兼容以太坊网络的作用
优点:
通过添加钱包插件将Chrome变成兼容以太坊的浏览器
(公司的狐狸logo很可爱)
缺点:
不支持自动显示Erc20代币。(需要用户自己添加代币的智能合约地址)
下载地址: https://metamask.io/
6. Legder
硬件钱包,安全性颇高的钱包,官方提供的软件功能较为局限。可以配合MyEtherWallet使用。
优点:
安全性高
缺点:
官方软件功能差,无法调整gas limit 和 gas price
价格贵并且较难买到
10.Geth是什么?有哪些命令?
以太坊客户端Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。
命令用法
geth [选项] 命令 [命令选项] [参数…]
版本:
1.7.3-stable
命令:
account 管理账户
attach 启动交互式
JavaScript环境(连接到节点)
bug 上报bug Issues
console 启动交互式JavaScript环境
copydb 从文件夹创建本地链
dump Dump(分析)一个特定的块存储
dumpconfig 显示配置值
export 导出区块链到文件
import 导入一个区块链文件
init 启动并初始化一个新的创世纪块
js 执行指定的JavaScript文件(多个)
license 显示许可信息
makecache 生成ethash验证缓存(用于测试)
makedag 生成ethash 挖矿DAG(用于测试)
monitor 监控和可视化节点指标
removedb 删除区块链和状态数据库
version 打印版本号
wallet 管理Ethereum预售钱包
help,h 显示一个命令或帮助一个命令列表
11.Parity是什么?有什么命令?
是以太坊钱包
这个钱包的特点有几个,一个是它因为是重新写的代码,所以跑起来更快,占用系统的资源更少。第二个特点是它的同步功能做得更好,所以其他钱包很久不能同步的的时候,它还是能够很快同步。第三个特点,它虽然是一个全节点钱包,但是它把那些很早的区块只留下了区块头,其他内容删减了,所以同步好的区块的大小也就几个G,而如果是用以太坊的官方全节点钱包,光区块大概就得有40个G。第四个特点,这个对ICO特别有用,就是它能够设置定时发送交易,能够在到达某个区块数的时候自动发送转账交易。
12.web3.js是什么?有什么优缺点?
web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。
Web3.js 在 npm 里作为一个节点模块,在 bower 和 component 里作为一个可嵌入的 js 和一个 meteor.js 包。
优缺点 ?这个我暂时还不是很清楚,先留这里
13.Gas是什么?在以太坊上有什么作用?和智能合约有什么关系?
ps:gas可以有效的防止恶意攻击,因为拥有gas的大部分都是以太坊的内部人员。
智能合约,就是一些代码,运行整个分布式网络中。由于网络中的每一个节点都是一个全节点。这样的好处是容错性强,坏处是效率低,消耗资源与时间(译者注:原来只在一个节点执行一次就行,现在所有节点中每一个,都要执行一模一样的运算)。因为执行计算要花钱,而要执行的运算量与代码直接相关。所以,每个在网络运行的底层操作都需要一定量的gas。gas只是一个名字,它代表的是执行所需要花费的成本(注:由于以太坊是图灵完备的,随便一个死循环就将导致网络不可用,所以引入了gas的概念)。整个分布式网络引入了强制限制,来避免停机问题。因此如果你写一个死循环,当gas耗尽后,网络就会拒绝执行接下来的操作,并且回滚你之前的所有操作。
gas的价格由市场决定,类似于比特币的交易费机制。如果你的gas价格高,节点则将优先因为利益问题打包你的交易。
一般来说,在Ethereum中计算和存储东西比在传统环境中做的更为昂贵,但是,Ethereum为您的代码提供了上述我们讨论过的那些好的属性,这可能是一样有价值的。
一般来说,在以太坊网上读取状态是免费的,只有写入状态是收费的
在以太坊中一个比较重要的概念就是费用(fees),由以太坊网络上的交易而产生的每一次计算,都会产生费用—没有免费的午餐。这个费用是以称之为”gas”的来支付。
gas就是用来衡量在一个具体计算中要求的费用单位。gas price就是你愿意在每个gas上花费Ether的数量,以“gwei”进行衡量。“Wei”是Ether的最小单位,1Ether表示10^18Wei. 1gwei是1,000,000,000 Wei。
对每个交易,发送者设置gas limit和gas price。gas limit和gas price就代表着发送者愿意为执行交易支付的Wei的最大值。
例如,假设发送者设置gas limit为50,000,gas price为20gwei。这就表示发送者愿意最多支付50,000*20gwei = 1,000,000,000,000,000 Wei = 0.001 Ether来执行此交易。
记住gas limit代表用户愿意花费在gas上的钱的最大值。如果在他们的账户余额中有足够的Ether来支付这个最大值费用,那么就没问题。在交易结束时任何未使用的gas都会被返回给发送者,以原始费率兑换。
在发送者没有提供足够的gas来执行交易,那么交易执行就会出现“gas不足”然后被认为是无效的。在这种情况下,交易处理就会被终止以及所有已改变的状态将会被恢复,最后我们就又回到了交易之前的状态—完完全全的之前状态就像这笔交易从来没有发生。因为机器在耗尽gas之前还是为计算做出了努力,
所以理论上,将不会有任何的gas被返回给发送者。
这些gas的钱到底去了哪里?发送者在gas上花费的所有钱都发送给了“受益人”地址,通常情况下就是矿工的地址。因为矿工为了计算和验证交易做出了努力,所以矿工接收gas的费用作为奖励。
通常,发送者愿意支付更高的gas price,矿工从这笔交易总就能获得更多的价值。因此,矿工也就更加愿意选择这笔交易。这样的话,矿工可以自由的选择一笔交易自己愿意验证或忽略。为了引导发送者应该设置gas price为多少,矿工可以选择建议一个最小的gas值他们愿意执行一个交易。
存储也有费用
gas不仅仅是用来支付计算这一步的费用,而且也用来支付存储的费用。存储的总费用与所使用的32位字节的最小倍数成比例。
存储费用有一些比较细微的方面。比如,由于增加了的存储增加了所有节点上的以太坊状态数据库的大小,所以激励保持数据存储量小。为了这个原因,如果一个交易的执行有一步是清除一个存储实体,那么为执行这个操作的费用就会被放弃,并且由于释放存储空间的退款就会被返回给发送者。
费用的作用是什么?
以太坊可以运作的一个重要方面就是每个网络执行的操作同时也被全节点所影响。然而,计算的操作在以太坊虚拟机上是非常昂贵的。因此,以太坊智能合约最好是用来执行最简单的任务,比如运行一个简单的业务逻辑或者验证签名和其他密码对象,而不是用于复杂的操作,比如文件存储,电子邮件,或机器学习,这些会给网络造成压力。施加费用防止用户使网络超负荷。
以太坊是一个图灵完备语言(短而言之,图灵机器就是一个可以模拟任何电脑算法的机器。对于图灵机器不太熟悉的人可以看看这个 和这个 )。这就允许有循环,并使以太坊受到停机问题 的影响,这个问题让你无法确定程序是否无限制的运行。如果没有费用的话,恶意的执行者通过执行一个包含无限循环的交易就可以很容易的让网络瘫痪而不会产生任何反响。因此,费用保护网络不受蓄意攻击。
你也许会想,“为什么我们还需要为存储付费?”其实就像计算一样,以太坊网络上的存储是整个网络都必须要负担的成本。
14.etherbase是什么?有什么用?
为了赚取以太币,你必须有etherbase(或coinbase)地址。这个etherbase默认为你生成的第一个账户。如果你没有etherbase地址,geth –mine就不会开启。
你可以在命令行重新设置etherbase:
1
2
geth --etherbase 1 --mine 2>> geth.log // 1 is index: second account by creation order OR
geth --etherbase '0xa4d8e9cae4d04b093aac82e6cd355b6b963fb7ff' --mine 2>> geth.log
你也可以在控制台重新设置etherbase:
1miner.setEtherbase(eth.accounts[2])
注意你的etherbase不必是本地账户地址,只要是现存的就可以。
15.coinbase和etherbase相同吗?
不同 coinbase是指本地账户,意思是你设置的 etherbase是默认给你生成的
16.balance(余额)最多可以显示小数点后几位?
18位
17.GHOST协议是什么?有什么作用?
不论什么时候只要多个路径产生了,一个”分叉“就会出现。我们通常都想避免分叉,因为它们会破坏系统,强制人们去选择哪条链是他们相信的链。
为了确定哪个路径才是最有效的以及防止多条链的产生,以太坊使用了一个叫做“GHOST协议(GHOST protocol.)”的数学机制。
GHOST = Greedy Heaviest Observed Subtree
简单来说,GHOST协议就是让我们必须选择一个在其上完成计算最多的路径。一个方法确定路径就是使用最近一个区块(叶子区块)的区块号,区块号代表着当前路径上总的区块数(不包含创世纪区块)。区块号越大,路径就会越长,就说明越多的挖矿算力被消耗在此路径上以达到叶子区块。使用这种推理就可以允许我们赞同当前状态的权威版本。
18.梅克尔帕特里夏树(MPT:Merkle Patricia Tree)如何散列?作用是什么?
一种数据结构,它会存储每个帐户的状态(存储键值对关系)。这个树的建立是通过从每个节点开始,然后将节点分成多达16个组,然后散列每个组,然后对散列结果继续散列,直到整个树有一个最后的“根散列”。
19.Frontier(前沿)是什么?
「前沿」是以太坊的最初版本, 只有命令行界面,主要使用者是开发者
20.Homestead(家园)是什么?
「家园」增加了类似 Windows系统那样的图形界面普通用户也可以方便地体验以太坊的功能
21.Metropolis(大都会)是什么?
「大都会」加入了—个像谷歌浏览器那样的浏览器,除了使用方便之外,它还拥有一个强大的应用商店,可以安装插件实现更多功能。第三个版本在2017年年底发布了出来
22.拜占庭是什么?在以太坊上如何解决怎么问题?
拜占庭硬分叉在第437万个区块高度发生,时间是2017年10月16日,引入了zk-Snarks 及 抽象账户等。
23.君士坦丁堡是什么?能够解决什么问题?
预计在2018年实施, 主要的特性就是平滑处理掉所有由于"拜占庭"所引发的问题,并引入 PoW 和 PoS 的混合链模式。
24.Serenity(宁静)是什么?
「宁静」目前还没有确定发布时间,预计它会将前三个版本采用的工作量证明(Pow) 共识机制切换到混合的共识机制
25.零知识证明是什么?有哪些零知识证明的例子?
简单说就是,在不透露交易细节的情况下验证了交易记录。零知识证明可以有效保护交易隐私,隐藏交易来源并防止追溯,同时也能保证交易是安全的,因为任何试图修改交易的行为都无法通过验证。
例子:零知识证明应用最广的就是洗钱和跨境支付。
1)A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法:
①A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。
②B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。
后面的②方法属于零知识证明。好处在于在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。
2)A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天2人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B,也有2个方法。
①B把自己的私钥给A,A用这个私钥对某个数据加密,然后用B的公钥解密,如果正确,则证明对方确实是B。
②A给出一个随机值,并使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则证明对方是B。后面的方法属于零知识证明。
3)有一个缺口环形的长廊,出口和入口距离非常近(在目距之内),但走廊中间某处有一道只能用钥匙打开的门,A要向B证明自己拥有该门的钥匙。采用零知识证明,则B看着A从入口进入走廊,然后又从出口走出走廊,这时B没有得到任何关于这个钥匙的信息,但是完全可以证明A拥有钥匙。
25.PoS是什么?和POW有什么区别?缺点是什么?
POS 就是基于拥有的数量和时间获得证明的共识算法,它不像POW注重算力竞争,而是强化了拥有的意义,比如在银行存的钱越多,存的越长 则收益越大
缺点:POS也存在一些问题,比如马太效应,最后系统决策和收益依然会集中在少数寡头手里,除此之外,当矿工热潮退却后,如何保证有效的工作节点数量来完成运算,也是值得观察的
26.Casper 的共识算法是什么样的?
以太坊中PoS协议的实现, 刚开始每100个区块将有一个采用PoS协议挖出
25.抽象账户是什么?有什么作用?
在的以太坊有两类账户:即外部账户和合约账户,以太坊正在试图模糊二者的界限,即你可以同时拥有合约账户和外部账户,这种做法本质上就是让用户按照合约账户的格式来定义外部账户。
26.难度炸弹是什么?有什么作用?
为了确保以太坊的矿工能加入到新链条中来,开发团队引入了"难度炸弹"机制。它会使难度系数呈指数增加以至于让挖矿变得几乎不可能的。
27.以太坊硬分叉是什么?能解决什么问题?有什么缺点?
所谓硬分叉是分叉方约定,在某个区块节点开始,启用新的系统架构继续前进,不再和主链保持一致,但同时继承了该节点前的所有区块。在这个节点之后,双方各自挖各自的矿,各自爆各自的区块,各走各的路。比如:公司有一本对公账本,有一本内部账本,两个账本完全独立
能解决什么问题:在我看来有两点:1.黑客发起针对The DAO智能合约多个漏洞的攻击,其中也包含了递归调用漏洞,并向一个匿名地址转移了3600万个以太币,导致以太坊选择硬分叉启用新的系统架构;2.很多人为了发行ICO通过以太坊割点韭菜的钱
缺点:硬分叉不需要主链允许或通过,任何人都可以发起硬分叉,都可以基于自己的理解和判断发起一个新的分支,但对于信仰者来说,每个分叉都是对共识的撕裂,是在破坏共识。共识算法本身就是防范故障或者恶意分叉的,而人为强行分叉显然是算法所不能处理的。
28.ERC-20是什么?在什么地方会用到?
代币合约标准,一系列通过以太坊智能合约发布的代币制定了代币发放的通用规则。该标准是目前通过ICO发行代币的基础准则。
该标准能够确保基于以太坊的代币在整个生态系统中以一种可预测的方式进行,使去中心化应用程序和智能合约可以在整个平台上彼此协作,所有代币都遵循一个固定的安全标准。
ERC-20 标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式。简单地说,任何 ERC-20 代币都能立即兼容以太坊钱包(几乎所有支持以太币的钱包,包括Jaxx、MEW、imToken等,也支持 erc-20的代币),由于交易所已经知道这些代币是如何操作的,它们可以很容易地整合这些代币。这就意味着,在很多情况下,这些代币都是可以立即进行交易的。
ERC20 是各个代币的标准接口。ERC20 代币仅仅是以太坊代币的子集。为了充分兼容 ERC20,开发者需要将一组特定的函数(接口)集成到他们的智能合约中,以便在高层面能够执行以下操作:
获得代币总供应量
获得账户余额
转让代币
批准花费代币
ERC20 让以太坊区块链上的其他智能合约和去中心化应用之间无缝交互。一些具有部分但非所有ERC20标准功能的代币被认为是部分 ERC20兼容,这还要视其具体缺失的功能而定,但总体是它们仍然很容易与外部交互。
ERC-20标准还有待完善。其中一个障碍是,将令牌直接发送给令牌的智能合同将导致资金损失。这是因为一个令牌的合同只会跟踪和分配资金。例如,当您从钱包中向另一个用户发送令牌时,该钱包将调用令牌的合约来更新数据库。所以如果您试图将令牌直接传输到令牌的合约中,那么由于该令牌的合约无法响应,所以金钱就“丢失”了。
ERC223要解决的首要问题是什么?
自从引入ERC20令牌标准以来,几乎所有的基于以太坊的令牌都成功的接受了这个新标准。然而其自身的缺点需要及时解决,这便是ERC223令牌诞生的原因。
ERC20标准无法通过接收方合同处理传入的交易。这是该令牌存在的最大问题,也是开发者一直希望改进的地方。ERC20令牌无法将令牌发送给一个与这些令牌不兼容的契约,也正因为这样,部分资金存在丢失的风险。
Reddit上的一篇文章指出,由于被发送到“错误”的合同上,大约价值40万美元的ERC20令牌被困,这对整个以太坊生态系统而言是一个巨大的威胁。幸运的是,ERC223令牌可以解决这一难题,前提是该令牌能够获得批准并被引入。
ERC223令牌标准将向现有的ERC20标准引入一个新功能,以防止意外转移的发生。ERC223令牌标准可以防止令牌在以太坊网络上丢失。
假设 ERC223 令牌标准能够取代ERC20成为新的标准,现有令牌的发行方需要做一些艰难的决定。因为,从现实情况来看,不管用何种方式,从ERC20转换到ERC223是不可能的,同样的,所有ERC20令牌都需要在ERC223标准下重新部署。这也意味着任何交易平台的上市都需要更新他们的信息和地址。这是一个艰苦的过程,这也就意味着,在未来很少有现有的令牌被有效地转换为ERC223。
正如Alex van de Sande在Reddit上指出的那样,“更方便”的过程可能是创建新的令牌,它们是通过持有旧令牌的合同支持的。这可能是大多数项目最合理的选择,但只有时间才能确定哪些选项将被实施
29.EIPs是什么?比原有旧协议有哪些改进?
Ethereum Improvement Proposals - 以太坊改进协议
2017年10月16日下午1点22分,全球市值排名第二的加密货币以太坊执行了第5次硬分叉。这次硬分叉将带来一系列的以太坊改进提案(EIPs)。
具体而言:硬分叉带来的改变包括以下方面:
1、增加‘REVERT’操作符,允许处理错误不需要花费掉所有的gas(EIP 140)
2、现在交易接收方可以包括一个状态字段,用以指出交易成功还是失败(EIP 658)
3、在alt_bn128 (EIP 196)和配对检查上 (EIP197)增加椭圆曲线和标量乘法,允许ZK-Snarks和其它加密数
4、支持大数模幂 (EIP 198),实现RSA签名验证和其它加密应用。
5、支持可变长度返回值 (EIP 211)
6、增加‘STATICCALL’操作符,允许对其它合约进行非状态改变调用(EIP 214)
7、修改难度调整公式,将叔块计算在内(EIP100)
8、冰河期/难度炸弹延期一年,区块奖励从5个以太坊降到3个以太坊 (EIP 649)
30.Ommer是什么?有什么缺点?
是一个区块的父区块与当前区块父区块的父区块是相同的。
由于以太坊区块生产时间(大概15秒左右)比比特币(大概10分钟左右)要快很多。更短的区块生产时间的一个缺点就是:更多的竞争区块会被矿工发现。
这些竞争区块同样也被称为“孤区块”(也就是被挖出来但是不会被添加到主链上的区块)
Ommers的目的就是为了帮助奖励矿工纳入这些孤区块,Ommer区块会收到比全区块少一点的奖励。
31.预言机是什么?有什么作用?
通过向智能合约提供数据,它现实世界和区块链之间的桥梁
32.公有链是什么?
公有链是目前我们熟知的比特币,以太坊,瑞波币这些,每个人都可以参与,每个人都可以在上面进行交易,如果支持智能合约,每个人也都可以发布自己的应用。
33.联盟链是什么?
联盟链是指一些愿意彼此实现共信的机构和组织共同组建的,为各自机构提供共识信用和价值传递的平台,这样只要联盟不存在一家独大的情况,还是可以实现共识基础,而且相对来说可能价值更大一些,我其实觉得联盟链是有一些市场机会的。
34.私有链是什么?
私有链目前是很多金融机构正在考虑的,在自己的体系内搭建一套区块链系统极速快三源码出售(www.1159880099.com)QQ1159880099,不公开对外服务,但是提供内部的共识网络,解决诸如信用证书,合同管理等问题。但私有链缺乏共识,也需要公权机构背书,与传统中心化相比价值有限,只能说防黑客篡改可能略微有点意义。
35.测试网络有哪几种?各自在什么情况下使用?如何使用?
以太坊用来测试功能的网络,比如拜占庭分叉之前先在测试网络(Ropsten)上运行一段时间,稳定后再发布到公有链(正式网络)。
以太坊测试网络有:
Olympic测试网络 - 早期的一个测试网络,已不再使用
Ropsten测试网络 - 使用Pow,和当前的公有链环境一致,2016/11发布。
Kovan测试网络 - 仅parity钱包支持,使用PoA共识
Rinkeby测试网络 - 仅parity钱包支持,使用PoA共识
36.DAO(decentralized autonomous organization)去中心自治组织作用是什么?有什么局限性?
这是一个组织(就像,一群人),其中,使用代码来保证最终的强制执行,而不是使用传统的法律文件。这群人使用智能合约来做常见组织做的所有的事情,比如在某件事上进行投票,比如决定是否对什么进行投资等等。
副作用是决策,管理,以及对什么进行投资的结果将会不可改变的存储在区块链上。
之前slock.it创建了标准的DAO框架来说明这个理念。在这里有对DAO概念的总览,以及如何使用框架来实现一个自己的DAO(注:这个项目由于bug被黑客攻击了)。
网友评论