大致在网络上整理了区块链常见问答题,有需要可以参考学习下。
问答来源:
1、中本聪是哪里人?D
A.中国人 B.美国人 C.日本人 D.不确定
2、下面哪种共识机制效率最低?A
A.PoW B.PoS C.DPoS D.PBFT
3、如果同时收到两份合法的账本如何处理?A
A.以当前最长分支作为主账本,但是保留其它分支
B.只保留当前最长分支作为主账本
C.以保留交易时间最早的分支作为主账本,但是保留其它分支
D.只保留本次挖矿手续最多的交易分支作为主账本
4、拜占庭将军问题解决了哪个问题?C
A.分布式通讯 B.内容加密 C.共识机制 D.投票机制
5、在保障你区块链公链如比特币上账户的隐私,哪种说法是正确的?B
A.比特币本身是匿名地址,已经可以保护隐私
B.要真正保护隐私,只使用一次的比特币地址
C.除非点对点交易,不对外公开比特币地址
D.采用冷钱包存储
6、关于数字货币矿工及其挖矿程序的说法哪种是正确的?B
A.都是由原生数字货币开发者配套提供
B.一般是定制开发的
C.一般统一由矿池提供标准的挖矿程序
D.假如同一笔UTXO构造了两笔分别付给A和B的交易,矿工不可以自主任意选择这两笔交易里的一笔
1、 区块链上的数据默认加密的 N
2、 区块链上的记录都是真实的 N
3、 区块链记录所有事件是不可篡改的 Y
4、 区块链没有拒绝服务攻击(DDOS)的问题 N
5、 加密数字货币都是使用区块链技术 N
6、 比特币的每个节点同步的账本都是全账本 Y
7、 当最后一个比特币挖出来后,比特币不需要继续挖矿了 N
8、 区块链的签名加密技术一般采用对称加密技术 N
9、 所有区块链技术的每一个节点都没有差别、都是平等的 N
10、 区块链等同于分布式账本 N
1、下面哪些对于区块链的描述是正确的?ABD
A.去中心 B.弱中心 C.单中心 D.多中心
2、比特币是?BC
A. 一堆加密代码 B. 全球同步账本 C.加密数字货币 D.区块
3、下面哪些属于当前区块链技术的应用场景?ABCE
A.物联网 B.预测 C.股票交易 D.支付宝 E.供应链管理
4、一般来说,联盟链相对于公链的优势在哪里?BCD
A.不存在51%攻击 B.低能耗 C.高扩展性 D.高性能 E.信任问题更好解决
5、对于基于区块链的数字货币资产的拥有者来说,最重要是保护好自己的?B
A.公钥 B.私钥 C.账号密码 D.数字签名 E.钱包
6、比特币在区块链中记录的是?CD
A.账户信息 B.账户余额 C.交易记录 D.未花费的输出
7、下面哪些是比特币和以太坊1.0两种区块链技术的区别?BCDE
A.共识机制 B.挖矿算法 C.智能合约 D.开发中心化 E.通胀通缩
1.问:你认为区块链技术中的区块意味着什么?
区块链由所有金融交易的信息组成。一个块只不过是一个记录列表。当这些列表相互结合时,它们被称为区块链。例如,一个组织有100个分类账簿,其中的组合被称为区块链,单个分类账将被视为一个区块。
2.问:为什么区块链是一种值得信赖的方法
有很多原因,区块链可以被信任。第一个原因是它与其他商业应用程序有良好的兼容性,因为它是开源的。其次是它的安全性,因为它是为了在线交易而开发的,所以开发人员在保证安全性的同时也特别关注它的数据同步。由于其拥有的业务类型无关,所以在选择的时候区别链很容易地被考虑。
3.问:区块链中是否有可能从网络中删除一个或多个区块?
当然可以,如果只考虑该在线分类帐的特定部分的时候。借助默认选项和过滤器,可以轻松完成此任务,而不需要付出太多。
4.问:你对区块链了解多少?
这是一种实际上为比特币设计的技术,后来因为监控和记录网络上所有金融交易而带来的多种好处而获得了大量的推广。这是一种值得信赖的方法,目前情况下有很多组织正在使用它。由于一切都是十分安全的,并且它是一种开源方式,所以从长远来看,它可以轻松获得大家的信任。
5.问:区块链方法如何识别区块?
在线分类帐中的每个块基本上都包含一个哈希指针,该指针指向它之前的块并形成链接,块中包含交易数据和时间戳。
6.问:你认为一个区块的安全性究竟是什么?
网络上的所有用户都不能修改块。因此它提供了极好的安全级别。除此之外,每个区块都使用加密技术进行保护,这是另一项措施。因此,不需要担心块中存在的数据的安全性和安全性。
7.问:在组织中使用区块链技术是否有网络特定的条件?
使用它没有特定的条件。但是,网络必须是有关协议下的对等网络。它实际上很简单地验证了新块,并帮助组织在不投资第三方应用程序的情况下保持同步。
8.问:什么是加密?它在区块链中的作用是什么?
数据安全始终很重要。加密基本上是一种帮助组织保持数据安全的方法。在这种技术中,数据在被发送者发送到网络之前被编码或者在一定程度上被改变。唯一的接收器可以理解如何对其进行解码。在区块链中,这种方法很有用,因为它增加了区块的整体安全性和真实性,并有助于保护区块的安全。
9.问:一旦写入数据块后,是否可以修改数据?
不,这是不可能的。如果需要进行任何修改,组织只需删除所有其他块的信息。这是因为没有其他方法,数据在使用这种方法时必须非常谨慎。
10.问:区块链中可以保存哪些类型的记录?有什么限制吗?
区块链方法中没有任何类型记录的限制。目前,世界各地的许多组织正在使用这种方法,事实是医疗交易记录,与组织相关的事件,管理活动,交易处理,身份管理以及文件记录都是常见的可以使用区块链的记录类型。而且记录保存并不仅限于这些应用程序。
11.问:什么是双重支出?
这是与数字货币有关的主要问题之一。 事实上,这是一个数字通证被多次使用的条件,因为通证通常由易于克隆的数字文件组成。它只会导致通货膨胀,组织不得不承受巨大的损失。 区块链技术的主要目标之一是尽可能地消除这种方法。
12.问:解释盲签名的重要性以及它如何有用?
它实际上是一种数字签名形式,密码学的一个重要组成部分,其中所有信息在实际考虑或签署之前都是盲目的。 这是经过验证的方法,通常在作者和签署方都不同的隐私相关协议中考虑。 数字货币设计是最常见的例子之一。
13.问:什么是密钥分享?区块链技术有什么好处吗?
众所周知的事实是,数字交易中的安全问题非常重要。密钥分享是一种类似的方法。在区块链技术中,这是一种将密钥密或个人信息划分为不同单元并将其发送给网络上的用户的方法。原始信息只能在分配了密钥的参与者同意将他们与其他人结合在一起时才能结合使用。它可以在区块链技术中提供多种与安全相关的好处。
14.问:超级账本是什么?区块链支持吗?
超级账本只不过是一种特殊的账本,为给人们提供服务的企业而设计。没有严格的服务上限,企业可以通过超级账本进行管理。区块链拥有专门用于处理超级账本的算法。事实上,它减少了许多与此相关的问题。
15.问:命名区块链项目实施中涉及的步骤?
这个过程共涉及六个步骤,它们是:
1.需求识别
2.筛选并确认需求
3.区块链项目开发
4.安全性的可行性研究
5.实施
6.控制和监测项目
16.问:你所知道区块链的好处是什么?
它鼓励安全的在线交易,这是它最大的好处之一。基本上,作为一个密切关注所有交易记录的分布式分散账本,它不会让记录被任何人改变,这增强了安全性。除此之外,参与者和企业主可以始终确保最终的成本审计。区块链始终可以保证的一件事是每个区块或单元只能传输一次,这样可以消除双重支出问题。
17.问:将区块链数据库中存在的两种记录命名为?
这些记录是块记录和交易记录。这两个记录都可以轻松访问,最好的方式是可以将它们彼此集成,而无需遵循复杂的算法。
18.问:你了解的信息威胁有哪些?
目前情况下信息面临很多威胁。由于互联网在线交易的增加,许多黑客已经变得活跃,正在采用新方法来破解包含财务信息的数据和服务器。主要的威胁是软件攻击,身份盗窃,信息勒索以及破坏。除此之外,特洛伊木马,蠕虫和病毒也是麻烦的创造者。
19.问:信息泄漏对组织可能造成什么挑战?
信息泄露可以极大地降低组织的声誉。除此之外,这可能是组织承受巨大损失的原因。许多未能实施安全协议来保证其数据安全的组织已经失去了客户的信任,并且正在努力争取再次获得相同的声誉。如果不关注在线交易安全,任何组织的总体利润可降低80%。
20.问:有那些可以使用区块链技术的组织?
可以考虑这种方法的商业类别没有严格的上限。事实上,几乎所有的企业都在进行在线或财务交易,而这些交易需要他们顺利的执行完整的流程。大型公司,金融机构,私营企业,政府部门乃至国防组织都可以非常轻松地信任这项技术。
21.问:什么是信息处理?与此相关的关键挑战是什么?
这些信息通常在网络上共享。在通过网络实际发送之前,需要将其改变为适合频道标准的格式(频道是发送者和接收者之间的链接)。在发送端和接收端进行信息转换所做的工作通常被认为是信息处理。信息处理所面临的最大挑战就是在这段时间保护它。另一个挑战是处理批量信息会对性能造成限制。
22.问:BIP代表什么?
这意味着比特币改善建议。
23.问:区块链中的哪些关键原则有助于消除需要遵循的安全威胁?
是的,在时间方面需要遵循一些原则。他们是:
1.审计
2.保护应用程序
3.确保测试和类似的方法
4.数据库安全
5.连续性计划
6.数字劳动力培训
所有这些原则都是基本的,并且易于实施。它们有助于使交易记录有用。
24.问:区块链技术的基础是什么?
它使信息能够在用户之间分发而不被复制。
25.问:区块链是不可破坏的分类账吗?
根据开发商的说法,区块链分类帐不能损坏。
26.问:什么是安全策略?
安全策略定义了系统上确切需要确保的内容。它根据一些核心协议绑定网络用户,他们都必须同意并遵循以提高整体安全性。当涉及到组织的信息或财务记录时,多个安全策略的实施不止一个。
27.问:在确保交易记录时,您将如何处理风险管理?
它基本上是一个查找组织的财务记录的威胁和所有漏洞的过程。对付这种做法最好的办法是立即采取正确的对策。另一种方法是注意备份计划。根据信息的价值,可以简单地考虑购买新风险管理软件等更多方法。信息的主要风险来自黑帽黑客。
28.问:请列出区块链中用户可以考虑的普通类型的分类帐?
这些是:
1.集中式分类账
2.分散式分类帐
3.分布式分类帐
29.问:区块链分类账与普通分类账的区别?
第一个,其实最主要的区别是区块链是一个可以非常容易分散的数字分类帐。这种方法出错的几率远远低于普通分类账中的错误率。普通账本就是用手或人工努力准备的,而区块链自动执行所有任务。你只需要以适当的方式配置它,并遵循所有的指导原则。
30.问:分布式数字分类帐用于在BlockChain中记录交易。系统依赖于什么?
它依赖于网络节点。
以上问答问题出自:https://mindmajix.com/blockchain-interview-questions
31.问:陷门函数的功能是什么,为什么它是区块链所需要的?
一个陷门函数是在一个方向上容易计算但难以在相反方向的计算,除非你有特殊的信息。陷门函数是必不可少的公共密钥加密,所以他们常用在blockchain发展代表思想的地址和私有密钥。
32.问:比特币实现中的交易和块是如何加密的?
比特币块不以任何方式加密:每个块都是公开的。阻止修改和保证数据完整性的是一个称为块哈希的值。块的内容是使用在比特币的一种特殊Hash函数来处理,它的实现和得到的值包含在区块链中。
33.问 :解释为什么区块链需要通证。
代币/通证用于实现状态之间的变化。当有人做交易时,这是一种状态的改变,代币从一个地址移到另一个地址。除此之外,交易可以包含额外的数据和状态的变化来改变数据,来做这一个不变的定义区块链的唯一途径。从技术上讲,区块链不需要代币为其主要业务,但没有他们,其他方式需要引进管理链状态和验证交易。
34.问:对等网络(P2P)网络中对等体是如何工作的?
当一个新的节点启动时,它对网络一无所知,因为没有中央服务器。通常开发人员提供可信节点的列表,这些节点直接写入可用于初始对等点发现的代码中。
35.问:如何验证检查一个块是有效的?
网络上的每个完整节点都进行块验证。当一个新的块被宣布时,接收它的每个节点都会执行一个检查列表。两个最重要的检查是工作证明(如果一个块提供足够的工作要包含在链中)和所有事务的有效性(每个事务必须是有效的)。
36.问:一个ScriptPubKey是什么?解释如何使用P2SH地址就可以了。
一个是所谓的锁定ScriptPubKey脚本。它出现目的是阻止交易的输出,在输出过程中必须满足。
P2SH是一种特殊类型的地址,代替复杂的锁定脚本的hash值。当一个试图花费输出的交易稍后显示时,除了解锁脚本之外,它还必须包含与哈希匹配的脚本。
37.问:使用脚本,编写一个redeem script脚本,允许用户仅在用户知道魔术数字1234567时才使用输出。
OP_EQUALVERIFY
scriptPubKey: 1234567 OP_EQUALVERIFY
scriptSig: 1234567
38.问:使用脚本,编写一个redeem script脚本,允许任何人在一次老化后最少花费30天的时间。
scriptPubKey: "30d" OP_CHECKSEQUENCEVERIFY OP_VERIFY
scriptSig: empty
39.问:什么是挖矿?
挖矿是在区块链网络达成共识的过程。挖矿有两个目的。首先,它在生成的块中创建新的代币。其次,它通过向网络提供工作证明,包括分布式计费中的交易;也就是说,证明所生成的块是有效的。
40.问:什么是软分叉?
在分类帐中的块包括以建立最长链的方式,即具有最大累积难度的链。分叉是有两个候选块竞争形成最长的区块链,两个矿工发现工作问题的证明方法在很短的时间内没有同步对方的情况。造成网络分割,因为某些节点得到块从矿工#1和而另外一些得到矿工#2。
分叉通常在一个块中得到解决,因为这种情况再次发生的概率变得非常低,因为下一个块出现,所以很快有一个新的最长链,将被认为是主要的。
(注:这种叉不同于硬叉,这是一些开发商决定创建一个不向后兼容的改变到区块链协议,导致两个永远不同区块链。)
以上问题出自:https://www.toptal.com/blockchain/interview-questions
41.问:在以太坊中,Wei和Ether(以太币)有什么区别?
答:Wei是以太币的最小面值,就好比说人民币的最小面值是分,英镑的最小面值是便士。 其换算关系为1以太币 =10^18Wei。
42.问:以太坊的平均区块间隔时间是多少?
答:平均区块间隔时间为14秒,当然了这只是理论值,你可以在Etherscan
(https://etherscan.io/chart/blocktime)
中查到每日的平均区块时间间隔。
43.问:以太坊的平均区块大小是多少?
答:区块大小视情况而定,大约是2KB。不同于比特币使用区块大小来规定区块的交易量上限,以太坊使用燃料(gas)限制。燃料限制决定了每个区块中处理的交易量、存储/带宽的上限,因为交易和智能合约中函数的执行都要根据指令的复杂度多少来付出相应的燃料,所以使用燃料限制来约束区块大小是可行的。
燃料限制会随网络的波动和矿工的意愿变化,每个矿工都可以选择自己愿意接受的燃料价格。燃料价格就像是比特币中的交易费,只是这里的价格是最小单位燃料的价格,而不是每笔交易的价格。
想要算出一个区块中可以容纳多少笔交易,你不需要清楚地知道燃料的价格,只需知道平均每笔交易使用多少燃料并用整个燃料限制除以它即可。
去年以太猫的发行造成了以太坊网络的大拥堵,整个网络中充斥着大量未被处理的交易。在这种情况下矿工有两种选择。他们可以投票提高燃料限制来处理更多交易,也可以开始提高自己的燃料价格标准并拒绝处理燃料费用过低的交易。
与比特币一样,即使燃料价格很低的交易也可能会被处理加入区块链中,但矿工肯定会先处理完燃料价格高的交易再处理它。如果你的交易并没有那么紧急,设置一个很低的燃料价格也不是不可以,就像我们现实生活中的“花时间来节省金钱”。
如果有恶意用户持续地发起海量交易堵塞网络,全网的交易成本就会越来越高,直到这个恶意用户用完资金或者矿工赚足了交易费并决定扩大网络容量。
44.问:以太币是如何产生的?
答:2014年以太坊项目以众筹的形式创建并预售了6000万个以太币,除此之外,矿工挖矿也会生成新的以太币。
45.问:以太坊中的节点是什么?
答:从本质上来说,节点是一台连接到区块链、可以处理交易的计算机。
46.问:以太坊都有哪些网络?
答:以太坊共有三种类型的网络:以太坊主链(就是我们平时用的以太坊)、以太坊测试网络(如Ropsten和Rinkeby,供开发人员的学习和测试)和以太坊私有链(也叫以太坊私有网络,任何人都能用以太坊的代码部署自己的私有链)。
47.问:与以太坊网络交互都哪些方法?
答:你可以使用电子钱包或DApp。
48.问:你是否能在以太坊中“隐藏”一笔交易?
答:不能。以太坊区块链中所有的交易都是公开可见的。
49.问:以太坊的交易记录存放在哪里?
答:在公共可见的账本中,这个帐本通常被称为区块链。
50.问:以太坊主链已经很强大了,为什么还要使用以太坊私有链?
答:原因有很多,主要是因为数据涉及隐私,将数据库去中心化,权限控制和测试。
51.问:如何查看一笔交易或一个区块的详细信息?
答:你可以使用区块链浏览器,如etherscan.io或live.ether.camp。
52.问:如何查看私有链中一笔交易或一个区块的详细信息?
答:一些开源的区块链浏览器满足这种需求,如etherparty推出的区块链浏览器
(https://github.com/etherparty/explorer)。
53.问:区块链的共识过程是什么?
答:共识是按照特定的协议(如以太坊的协议)验证交易,将交易打包进区块并加入区块链的过程。
54.问:以太坊挖矿操作的工作原理是什么呢?
答:从原理上说,以太坊中的挖矿操作几乎与比特币相同。简单地说,就是对于每个包含交易的区块,矿工使用计算机反复且非常快速地试验谜题的答案,直到有一个矿工猜对谜题。
更具体地说,矿工将当前区块唯一的区块头元数据(包括时间戳和软件版本)和一个随机数(nonce value)作为哈希函数的输入,函数将返回一个固定长度、看起来像是由数字和字母随机组成的乱码,叫做哈希值。哈希函数的特性是不同输入对应不同的哈希值,因此矿工仅需改变随机数的值,就会得到一个完全不同的哈希值。
如果算出来的哈希值小于当前的目标值(挖矿难度),则这个矿工就挖出了一个区块,他会获得一些以太币奖励,然后通过向全网络广播该区块,其他节点可以验证该区块中的交易,验证通过后将该区块加入到本地区块链的副本中。也就是说,如果矿工B算出了一个哈希值,矿工A将立刻停止当前区块的哈希值计算,把B挖出的区块加入区块链中并开始新一轮的哈希值计算。
矿工们很难在这场算力竞争中作弊。为了得到迷题的答案,除了一个个试没有更好的办法,也没有伪造这些计算工作的可能,这就是该解谜方法被称为“工作量证明”的原因。
从另一方面来说,用户不需要来验证哈希值是否正确,因为每个节点都已验证过。
一般来说,每12到15秒就会有一个矿工挖出一个新区块。如果矿工解谜的时间开始出现更快或更慢的倾向,算法会自动调整问题的难度,以使矿工解谜的时间稳定在14秒左右。
矿工有一定几率能挖到新区块赚取以太币奖励,他们的赚钱能力取决于运气和他们投入的计算能力。
以太坊使用的工作量证明算法被称为“ethash”,它被设计的需要更多内存,从而增大了使用昂贵的ASIC矿机挖矿的难度,因为ASIC矿机的出现严重压榨了使用其他设备矿工的收益,以至于在比特币中唯一能盈利的挖矿形式就是使用这种定制化的芯片。
从某种意义上来说,ethash可能已经成功实现了这一目标,因为专用的ASIC矿机不能用于挖掘以太坊(至少目前还没有)。
此外,由于以太坊将要从工作量证明挖矿逐步过渡到权益证明挖矿,因而购买ASIC矿机可能不是一个明智的选择,因为一旦以太坊转向权益证明它必将被淘汰。
55.问:区块链中最常用的两种共识协议是什么?
答:工作量证明(PoW)和权益证明(PoS),业界也在不断涌现新的共识协议,比如说活动证明(Proof-of-Activity,PoA)。
56.问:请简述权益证明的工作原理。
答:权益证明就是根据持有货币的数量和时间随机选择区块的创建者,它不是计算密集型的挖矿形式。
57.问:以太坊使用哪种共识协议呢?
答:截至2018年初,以太坊使用工作量证明建立共识,但在未来它将转向权益证明。
活动证明在比特币的工作量证明中引入了一种新形式的激励结构,这种混合结构结合了工作量证明和权益证明。为避免系统出现恶性通货膨胀,应该停发新的加密货币,也就是说矿工的挖矿行为不再能拿到挖矿奖励。
这样系统中的加密货币数量就恒定了。在活动证明中,矿工使用工作量证明产生区块,加密货币的持有者通过权益证明签署区块,交易费将按比例分给矿工和签署该块的验证人。
58.问:签署一笔交易需要用到什么工具?
答:用户的私钥。
59.问:在私钥丢失后,用户是否还可以恢复以太坊帐户?
答:是的,用户可以使用12字助记词恢复。
60.问:用什么方法可以连接到以太坊节点?
答:IPC-RPC,JSON-RPC和WS-RPC(RPC指Remote Procedure Call,远程过程调用)。
61.问:以太坊中异常火爆的Geth是什么呢?
答:Geth是以太坊的一个命令行客户端。
62.问:连接到Geth客户端的默认方式是什么?
答:默认情况下使用IPC-RPC,禁用其他所有的RPC。
63.问:Geth客户端中都有哪些API(Application Programming Interface,应用程序编程接口)?
答:Admin(管理员)、 eth(以太币)、web3、miner(矿工)、net(网络)、personal(个人)、shh、debug(调试)和 txpool(工具)。
64.问:你可以使用哪些RPC通过网络连接到Geth客户端?
答:你可以使用JSON-RPC或WS-RPC通过网络连接到Geth客户端。 IPC-RPC只能用来连接本地部署的Geth客户端。
65.问:如果你输入命令“--rpc”,启用的是哪一个RPC?
答:JSON-RPC。
66.问:默认情况下哪些RPC API是启用的?
答:eth(以太币)、 web3和net(网络)。
67.问:如何为JSON-RPC启用admin api?
答:输入命令“--rpcapi”。
68.问:命令“--datadir”有什么功能?
答:它指定了区块链的存储位置。
69.问:Geth的“快速”同步是什么,为什么它更快速呢?
答: “快速”同步仅下载收款交易所在的区块,并拉取(pull)整个最近状态数据库,而不是像普通同步一样,下载整个区块链的数据并重放所有发生的交易。
70.问:命令“--testnet”有什么功能?
答:它将客户端连接到以太坊Ropsten测试网络。
71.问:启动Geth客户端会在屏幕上打印大量的输出信息,如果不想被这些繁杂信息干扰该怎么办?
答:使用“--verbosity”命令调低输出信息复杂度的值(默认值为3)。
72.问:如何使用IPC-RPC连接两个Geth客户端?
答:首先启动一个Geth客户端,复制其管道位置(pipe location),然后使用相同的数据文档存储目录(datadir)启动另一个Geth客户端,并使用”--attach”命令传递复制的管道位置。
73.问:如何将自定义javascript文件加载到Geth控制台?
答:输入”--preload”命令和文件的路径即可。
74.问:Geth客户端中帐户存储在哪里?
答:存储在密钥库(keystore)目录中。
75.问:如何使用给定的账户发起一笔交易?
答:首先你要在“--unlock”命令中传入帐户地址或索引来解锁账户。然后你需要使用“--password”命令指定一个此账户的密码文件。
76.问:我们刚才说到了有关索引的内容。账户的索引取决于什么?
答:取决于你添加帐户的顺序。
77.问:Geth客户端是否能用来挖矿?
答:是的,输入“--mine”命令即可。
78.问:挖矿选项中的“etherbase”是什么?
答:这是接受挖矿奖励的帐户地址,该帐户的索引为0。
79.问:ABI是什么?
答:简单来说,“ABI”就是低级别的“API”。
ABI(Application Binary Interface)应用程序二进制接口,从本质上讲就是你调用智能合约中的函数并获取它返回值的方式。
ABI中定义了如何调用智能合约中的函数以及应该选用哪种二进制格式将信息从一个程序组件传递到下一个程序组件的详细信息。
以太坊智能合约以字节码的形式部署在以太坊区块链上,一个智能合约中可能会有多个函数。所以说,有了ABI你才可以指定调用智能合约中的哪个函数,才能保证函数的返回值是你期望的格式。
80.问:智能合约是什么?
答:从本质上说,智能合约就是用多种语言编写的计算机代码。智能合约存在于区块链网络上,它们按照自身嵌入的规则执行相关操作,可以看做是参与者之间的契约。
81.问:智能合约可以用哪种语言编写?
答:最常用的语言是Solidity,除此之外还有一些小众的语言,比如说Serpent和类Lisp语言。
82.问:智能合约都有什么样的使用场景呢?
答:举一个简单的商品买卖场景,买方在以太坊中部署一个智能合约并向其中存入资金,卖方看到存入的资金后发送商品,买方收到商品后通过智能合约支付货款。这里的智能合约可以看作是一个保障淘宝交易的去中心化的支付宝。
83.问:什么是MetaMask?
答:Metamask是一款插件类型的以太坊钱包,可以帮助用户在浏览器中与以太坊网络进行交互。
84.问:Metamask使用什么节点?
答:它使用infura.io。
85.问:相比于传统以太坊钱包,有哪些功能是Metamask不支持的?
答:它不支持采矿和部署智能合约。
86.问:智能合约的执行是免费的吗?
答:不,只能通过执行交易来调用智能合约,而交易需要燃料费用。
87.问:查看智能合约的状态是免费的吗?
答:是的,查询状态不需要执行交易。
88.问:谁来执行智能合约?
答:矿工。
89.问:为什么调用智能合约中的函数需要花钱?
答:除了一些不会改变智能合约状态,除了返回值之外没有其他逻辑的函数之外,调用智能合约中的函数都是需要花钱的。
这笔花费中,除了向智能合约中转入以太币执行调用之外,调用改变智能合约状态的函数需要花费燃料来执行。
90.问:为什么以太坊中要引入燃料费用呢?
答:因为矿工使用自己的计算机(矿机)执行智能合约代码,矿工如果能收回购买机器的成本并获得盈利才能保证整个系统生态的安全性,所以以太坊设计使得矿工可以通过执行调用者请求的代码来赚取燃料费用,从而维持一个健康的生态。
91.问:燃料价格是否能决定交易被处理的时间?
答:是的,也不全是。一般来说,你支付的燃料价格越高,交易越有可能被加入区块链。尽管如此,燃料价格并不能保证交易更快地被处理。
92.问:交易中的燃料使用量取决于什么?
答:燃料使用量取决于存储的用量,指令(操作码)的类型和数量。每一条以太坊虚拟机的操作码都明确规定了所需燃料的数量。
93.问:交易费该如何计算?
答:交易费 = 使用的燃料数量 * 燃料价格(燃料价格由交易者指定)。
94.问:如果执行智能合约的花费少于交易者支付的燃料费用,他是否会获得退款?
答:是的。
95.问:如果执行智能合约的花费超过了交易者支付的燃料费用,这时会发生什么?
答:用户不会获得退款,并且一旦所有燃料耗尽执行就会停止,智能合约的状态就不会改变。
96.问:谁来支付调用智能合约的费用?
答:调用智能合约的用户。
97.问:节点在哪里运行智能合约的代码呢?
答:节点在以太坊虚拟机(EVM)中运行智能合约的代码。以太坊虚拟机规范是以太坊协议的一部分。以太坊虚拟机只是节点运行的一个进程。
98.问:以太坊虚拟机需要什么工具来运行智能合约?
答:它需要智能合约的字节码,它由高级别语言(如Solidity)编译生成。
99.问:以太坊虚拟机都包含哪些部分?
答:内存区域,堆栈和执行引擎。
100.问:Remix是什么?
答:Remix是一个用于开发,测试和部署智能合约的在线工具。它非常适合快速构建和测试轻量级的智能合约,但不适用于复杂的智能合约。
101.问:在Remix中,你可以连接哪些节点?
答:你可以使用Metamask钱包连接到公共节点,使用Geth钱包连接到本地节点以及使用Javascript虚拟机连接到内存中模拟的节点。
102.问:什么是DApp,它与普通App有什么不同?
答:应用程序通常包含一个与某些中心化资源(由组织拥有)交互的客户端,通常有一个与中心化数据层相连的中间层。如果中心化数据层中的数据丢失,则无法(轻松)恢复。
DApp表示去中心化的应用程序。DApp通过智能合约与区块链网络交互,它们使用的数据驻留在智能合约的实例中,与中心化的数据相比,去中心化的数据安全性更高。
103.问:Solidity是静态类型语言(类型的检查是在运行前做的,如编译阶段)还是动态类型语言(类型的检查是在运行时做的)?
答:Solidity是静态类型语言,这意味着类型在编译阶段是已知的。
104.问:Solidity中的什么结构与Java中的类(Class)相对应?
答:智能合约。
105.问:智能合约的实例是什么?
答:智能合约的实例就是在区块链上部署的一个智能合约。
106.问:Java和Solidity之间存在哪些差异。
答:相比于Java,Solidity支持多继承(multiple inheritance),但不支持方法重载(Overloading)。
107.问:在Solidity文件中需要指定的第一个参数是什么?
答:第一个参数是Solidity编译器的版本,需要指定为^ 0.4.8。不要小看了这一步,因为它可以避免出现在使用其他版本编译器进行编译时引入的不兼容错误。
108.问:一个智能合约包含什么?
答:智能合约主要由存储变量,函数和事件组成。
109.问:智能合约中都有哪些类型的函数?
答:有构造函数(constructor),回退函数(fallback function),常量函数(constant functions)和修改智能合约状态的函数。
110.问:如果我将多个智能合约定义放入单个Solidity文件中,会出现什么样的错误?
答:将多个智能合约定义放入单个Solidity文件中是完全可行的。
111.问:两个智能合约可以通过哪些方式进行交互?
答:一个智能合约可以调用、创建和继承另一个智能合约。
112.问:当你尝试部署具有多个智能合约的文件时会发生什么?
答:编译器只会部署该文件中的最后一个智能合约,也就是说,其他所有智能合约都被忽略了。
113.问:如果我有一个庞大的项目,我是否需要将所有相关的智能合约保存在一个文件中?
答:不需要,你可以使用import语句导入文件。
114.问:我是否只能导入本地文件?
答:不,你也可以使用HTTP导入文件(甚至是Github上的文件)
115.问:以太坊虚拟机的内存都有哪些部分?
答:存储(Storage)、内存(Memory)和Calldata。
116.问:请解释一下存储(Storage)。
答:可以把存储想象成一个数据库。每个智能合约都管理自己的存储变量,从而得到一个键值对数据库(256位的键和值)。存储与普通数据库的唯一区别就是,由于存在燃料费用的问题它读取和写入操作的成本更高。
117.问:请解释一下内存(Memory)。
答:内存是一个临时性的存储。当函数调用执行完毕后,内存中的数据将会被释放。你可以在内存中分配各种复杂的数据类型,如数组和结构体。
118.问:请解释一下Calldata。
答:Calldata可以理解为一个函数调用堆栈(Callstack)。它是临时的,不可修改的,它存储着以太坊虚拟机的执行数据。
119.问:存储区和内存区分别存储了哪些变量?
答:状态变量和局部变量(通常局部变量都是对状态变量的引用)位于存储区中,而函数的参数位于内存区中。
120.问:EVM调用和非EVM调用之间有什么区别呢?
答:
EVM调用是智能合约中的函数调用,它触发函数执行并需要燃料。
非EVM调用读取公开可见的数据,不需要燃料。
121.问:如何在智能合约帐户中设置msg.val的值?
答:msg.val => msg.value =
随消息发送的wei的个数。
122.问:DApp是什么?
答:去中心化应用程序(DApp)是在点对点网络的计算机上而不是单台计算机上运行的应用程序。去中心化应用程序自点对点网络出现以来就已经存在,它是一种旨在以不受任何实体控制的方式存在于Internet上的软件工具。
去中心化应用程序不一定需要在区块链网络上运行。 BitTorrent(去中心化下载软件)、Popcorn Time(去中心化视频软件)、BitMessage(去中心化通信协议)、Tor(洋葱路由)都是在点对点网络上运行的传统去中心化应用程序,它们都没有在区块链上运行(区块链是一种特殊的点对点网络)。
与简单的智能合约相反,在比特币的经典使用场景,即用户A向用户B汇款,去中心化应用程序的参与者可以是市场中的任意一个人。
123.问:DApp与智能合约有何不同?
答:去中心化应用程序是一个基于区块链的网站,其中智能合约允许它连接到区块链中。说起来有点绕,为了更好地理解去中心化应用程序和智能合约,让我们先来了解传统网站的工作方式。
传统的Web(网络)应用程序在前端使用HTML,CSS和Javascript来呈现页面,在后端它需要利用API从数据库中获取一些详细信息,比如用户的用户名和头像。当你进入网页版的新浪微博时,该页面将调用API来获取你的个人数据并将其显示在页面上。也就是说,传统网站的工作方式为:前端→API→数据库。
去中心化应用程序类似于传统的Web应用程序。它在前端使用完全相同的技术来呈现页面。一个关键的区别是,去中心化应用程序不使用API来连接到数据库,而是使用智能合约连接到区块链。所以说,基于去中心化应用程序的网站的工作方式为:前端→智能合约→区块链。
在传统的中心化应用程序中,后端代码在中心化的服务器上运行。而去中心化应用程序与之相反,它的后端代码在去中心化的点对点网络上运行。去中心化应用程序包括从后端到前端的整个软件包,智能合约只是去中心化应用程序的一部分。
也就是说,DApp包括:
前端(你能看到的页面),和
后端(应用程序后台的逻辑)。
另一方面,智能合约仅包含后端,通常只是整个DApp的一小部分。这意味着如果你想在智能合约系统上创建去中心化的应用程序,你必须与多个智能合约相结合并依赖第三方系统作为前端。
124.问:前端使用什么工具连接到后端的智能合约?
答:Web3 API程序库。
125.问:请列几个你所知道的DApp。
答:Golem(单词含义:傀儡),Golem项目旨在创建业界首个闲置计算机算力的全球市场;Augur(单词含义:预兆),Augur项目旨在将预测市场与去中心化网络相结合,创建一个预测工具,以获得潜在的收益;Aragon Network,它旨在充当一个方便用户的数字化管理组织。
126.问:你需要什么工具与DApp的智能合约进行交互?
答:需要智能合约的ABI和字节码。
127.问:ABI的作用是什么?
答:ABI是智能合约公共接口的描述,DApp用这个公共接口来调用智能合约。
128.问:字节码的作用是什么?
答:每个节点上的以太坊虚拟机都需要智能合约的字节码来运行智能合约。
129.问:为什么要使用大数运算程序库(BigNumber library)?
答:因为Javascript无法正确处理大数字。
130.问:为什么要始终检查DApp代码的开头是否设置了web3提供程序(provider)?
答:因为如果不这样,Metamask会用自己的web3提供程序覆盖掉它。
131.问:为什么使用web3 js的1.x版本而不是0.2x.x版本?
答:主要是因为1.x版本的异步调用使用promise对象(承诺将来会执行,比回调对象更合理和更强大)而不是回调对象,promise对象也是javascript中的首选。
132.问:在web3 1.x版本中如何列出所有帐户?
答:使用命令:“web3.eth.getAccounts”
133.问:“.call”和“.send”有什么区别?
答:“.send”发起交易并且产生费用,而“.call”仅查询智能合约的状态不产生费用。
134.问:是否可以通过这样的命令“.send({value:1})”发送一个以太币?
答:不可以,实际上这样你只送了1wei(1以太币 =10^18Wei)。交易中的单位是wei,而不是以太币。
135.问:那是否意味着,为了发送一个以太币,我需要将值设置为10^18?
答:不用,这样太麻烦。你可以使用util方法,即:
web3.utils.toWei(1,'ether')。
136.问:调用“.send()”时我需要指定什么?
答:你必须指定其中的发件人地址“from”。其他一切都是可选的。
137.问:将以太币发送到特定地址的函数是否只有
web3.eth.sendTransaction()一个?
答:不,你还可以调用智能合约中的函数。
138.问:以太坊的可扩展性问题有什么解决方案?
答:解决可拓展性问题的思路是使用链下交易机制。具体的解决方案有状态通道(state channels)和plasma。
磨链mochain:区块链技术社区。
公众号:磨链mochain社区