day06

链上和链下

oracle先知

pragma solidity ^0.4.11;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";

contract ExampleContract is usingOraclize {
    string public EURGBP;
 function __callback(bytes32 myid, string result) {
      EURGBP =  result;
    }
    function updatePrice() payable {
oraclize_query("URL",
  "json(https://www.therocktrading.com/api/ticker/BTCEUR).result.0.last");
  }
}

oracle官方文档

http://docs.oraclize.it/#ethereum-quick-start

event和emit

contract Test{
   event Demo (string log);
   function haha() public {
       emit Demo("ahaha");
   }  
}

数字货币的发行编写

https://www.ethereum.org/token
编写转账的前端逻辑
添加数字token到metamask

数字交易所原理分析

day06_第1张图片

中心化交易所

1.开户:用户在交易所注册, 交易所给用户创建一个新的地址(用户无私钥);

2.充值:用户打钱到交易所分配的地址里面。用户只享有地址,却不拥有对应密钥,密钥仍在交易所手中!(核心)

3.自动转账:交易所分配地址得到钱后,自动转账到中心交易所地址.

4.交易:内部币币交易. 效率很高.类似于现在的证券中心.

5.提现或提币:提币的过程是由交易所的地址转向用户钱包地址。

中心化交易所费用分析

1.充值时,用户钱包地址充值到交易所分配给用户的地址,需要消耗GAS,费用由用户直接承担;

2.自动转账时,交易所分配给用户的地址自动转入交易所地址,也需要消耗GAS,费用由交易所直接承担,目前基本上主流交易所均采用充值免费的模式;

3.交易时,交易所会收取手续费,一般是总交易金额的0.1% (个别交易所为0.2%,使用交易所代币打5折),费用由用户直接承担;

4.提现时,交易所地址充值到用户钱包地址,也需要消耗GAS,交易所一般直接收取用户0.01ETH作为手续费。

由此可见,中心化交易所交易和体现过程都是收手续费的。

三、中心化交易所优势:

1.中心化交易所在技术实现上是有传统成熟解决方案的,即使面对海量大并发实时交易,依旧可以给用户提供很好的服务体验。

2.中心化交易所庞大的用户量和交易量,也带来了足够的交易深度,提供了充分的流动性。

3.中心化交易所的交易成本从经济上看是由市场环境和监管政策决定的。它可以根据运营策略来制定变化的手续费规则。为了鼓励用户高频交易,甚至可以不收取交易手续费。但一般都会对资产提现进行收取手续费。

4.由于中心化交易所的所有交易实质都是IOU记账,所以从技术上看交易成本是非常低的。

四、中心化交易所劣势:

1.人为因素——中心化信用背书,会面临包括内部运营风险、商业道德风险、资产盗用等严重影响用户资产安全的风险。有名的案例也比比皆是,如:

2013年10月比特币交易所GBL突然关闭,负责人捐款跑路,用户损失2000万美元资产。

2014年2月Mt.Gox85万比特币监守自盗,大名鼎鼎的门头沟事件

2015年2月3日台湾比特币交易所Yes-BTC被盗435个比特币,网站声明其董事长何兆翼不知去向。

2016年4月7日交易所ShapeShift的钱包被黑客盗窃,后证实该盗窃行为是监守自盗,黑客受一名离职员工的指使。

2017年1月比特币亚洲闪电交易中心卷款跑路,卷走上亿资金。

2017年7月BTC-e交易所下线,随后域名被封禁,运营者Alexander Vinnik涉嫌洗钱、盗窃被捕。

2017年12月10日加密货币交易平台币集网网站关闭,疑似跑路,用户已报案维权。

2.技术因素——资产的第三方背书集中式托管,会招致巨大的黑客攻击风险,相当考验网站技术能力和紧急应对能力,有名的案例也比比皆是,如:

2014年3月1日美国加密货币交易所Poloniex被盗,损失总量12.3%的比特币。

2014年8月15日加密货币交易所比特儿微博称被黑客盗走5000万个NXT,价值约1000多万元人民币。

2015年1月10日比特币交易所Bitstamp遭受黑客攻击,损失价值510万美元的比特币。

2016年5月香港数字交易所Gatecoin被盗18万个ETH,250个比特币。

2016年6月众筹项目The Dao因智能合约漏洞遭黑客攻击被盗360万个ETH。

2016年8月香港Bitfinex由于网站出现安全漏洞,12万个比特币被盗,当时价值6500万美元。

2017年7月韩国加密货币交易所Bithumb被盗,据评估损失达数十亿韩元。

2017年7月加密货币交易所CoinDash遭黑客盗走大量以太坊,损失达700万美元。戏剧性的是黑客分别于2017年9月与与今年2月,分两次将被盗以太坊原数返还。

2017年12月19日Youbit第二次遭受黑客攻击,损失17%的数字资产,并宣告破产,用户补偿工作暂无后续进展。

2018年1月26日加密货币交易所Coincheck被黑客盗走大量NEM,损失约5.3亿美元。

2018年2月10日意大利交易所BitGrail遭黑客攻击,损失了1700万个NANO币,总价值约1.7亿美元。

2018年3月7日 加密货币交易所Binance遭受黑客攻击,所幸没有出现丢币情况。

去中心化币交所

day06_第2张图片

以太坊钱包简介

https://github.com/ethereum/mist/releases/tag/v0.11.1

day06_第3张图片

两个图形化版本,都是基于命令行版本的geth

以太坊私链搭建

1、创建工作目录
新建目录 geth
创建配置文件 gensis.json
2、配置创世区块配置文件

{
    "config": {
          "chainId": 123123,
          "homesteadBlock": 0,
          "eip155Block": 0,
          "eip158Block": 0
      },
    "coinbase"   : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData"  : "",
    "gasLimit"   : "0xffffffff",
    "nonce"      : "0x0000000000000042",
    "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp"  : "0x00",
    "alloc": {
    }
  }
注:chainid 为区块链网络id,对应启动时的networkid
chainid 1为主网 2为Morden 3为ropsten 4为rankybe 这些id保留

3、创建存储目录及初始化创世区块
创建目录用于存放区块链数据
创建 blockdb
执行初始化命令

geth --datadir "./blockdb" init gensis.json
Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix into Go struct field Genesis.extraData of type hexutil.Bytes
若执行过程中出现以上错误提示,请检查==gensis.json==文件。
其中 chaindata 中存放的时 区块数据,keystore 中存放的是 账户数据。

4、启动私链初始节点
执行以下命令启动私链

geth --datadir "./blockdb" --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 123123 --port 30303  --verbosity 4 console

rpccorsdomain 这里配置 “ * ”是允许通过任意域名访问,也可以指定具体的域名。
verbosity 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)。
==error==

Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified

出现场景,gensis.json中节点alloc未配置账号,而启动私链时需指定一个矿工账号,否则回出现该错误。

Error: etherbase missing: etherbase address must be explicitly specified

原因是当前环境没有账户,需要建立一个账户

error:Fatal: Unable to attach to remote geth: no known transport for URL scheme "c",解决办法使用如下命令行链接console

geth attach \\.\pipe\geth.ipc

5、常用命令
以太坊的JavaScript控制台中内置了一些对象,通过这些对象我们可以很方便的和以太坊进行交互,这些内置对象包括:

eth:提供了操作区块链项目的方法
net:提供了查看p2p网络状态的相关方法
admin:提供了管理节点相关方法
miner:提供了启动和停止挖矿的方法
personal:提供了管理账户的方法
txpool:提供了查看交易内存池的方法
web3:除了包含以上对象中有的方法外,还包含一些单位换算的方法。
下面几个步骤以一个完整的流程介绍一些常用命令,即创建用户->查看用户->挖矿->交易。

创建账户
personal.newAccount('123456')
查看账户
eth.accounts
eth.accounts[0]
查看余额
eth.getBalance(eth.accounts[0])
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
此时账户数据为0
挖矿命令:
miner.start()
miner.stop()
交易
首先交易需2个账户,所以使用newAccount命令再创建一个账户;
其次交易之前需先解锁,否则会报错。
解锁命令:
personal.unlockAccount(eth.accounts[0],'123456')
转账命令:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether")})
此时查看另一个账户,可以看到已存在1eth。
若转账时若未开启挖矿,此时交易处于待打包交易,所以另一个账户查不到转账的数据,可以通过==txpool.status== 查看状态。

https://ethereum.gitbooks.io/frontier-guide/content/web3.html#web3ethsyncing

1240

truffle介绍

https://truffleframework.com/

6天课技能总结

  • 熟悉solidity智能合约的开发
  • 熟练使用solc, ganache, web3.js, mocha, truffle工具和框架
  • 熟练使用remix-ide
  • 熟练使用nodejs和react, 与以太坊网络智能合约进行交互
  • 对solidity代码安全审计有经验
  • 对密码学,安全协议和加密算法有一定的研究
  • 有基于以太坊货币的开发经验
  • 有良好的团队协作精神和执行力,较强的分析问题和解决问题能力
  • 能编写智能合约的自动化测试脚本
  • 在github有java版/kotlin版开源比特币实现项目
  • 具备一定的产品经验.

以太坊面试题详解

1.以太币和比特币有哪些区别?

* 区块时间。比特币出块时间是平均10分钟,而以太坊约是15-30秒。

* 挖矿奖励: 以太币奖励为5以太币,并且每次出块奖励不减少,大都会后改为了3个以太币。比特币是每次减半,第一块的是50个比特币。之后每一块都减半

* 叔块(uncle block)奖励。因为以太坊的出块时间很短,很容易出现两个节点同时出块的情况,为了使得所有同时出块的节点都可以得到奖励,减少无用矿工。

2.智能合约是什么?目前应用到什么行业?有什么特点?

在区块中传递的合约,或者说是传递的字符串,不过不是单纯的字符串和信息,而是一段可执行的脚本,比如说,有触发条件,有交互能力

1:公信力好,代码是公开透明的,庄家是不能作弊的(也可以说没有庄家),而且没有中央服务器;2:赌博过程很难被监控被追踪,一旦入局不可逆转,而且金额走向无法追踪

特点:1、公开透明的策略,任何人都可以检查其代码逻辑可靠性;2、即时与区块链代币支付结合,典型如以太坊。3、去中心化和持续生命力,代码发布后,即便发布方倒闭,解散,其产品依然会在链上运行。

3.以太坊虚拟机 EVM和JVM有什么差别?

虚拟机都是跨平台的
以太坊实现了一个叫Ethereum Virtual Machine(EVM)的运行时环境,类似JVM,它的主要工作是执行智能合约的字节码,EVM“位于区块链之上”,而JVM主要是执行目标代码(字节码),内存回收机制好像也不一样

4.Solidity编程语言有哪些特点?和Javascript、Python有什么区别?

强类型编程语言, javascript和python是弱类型编程语言
Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。
Solidity是以太坊的首选语言,语法接近于Javascript,是一种面向对象的语言,这降低了学习门槛,易于被掌握和使用,因为JavaScript是Web开发者的常用语言。因此,Solidity充分利用了现有数以百万程序员已掌握JavaScript这一现状。
但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些:

以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的Address的类型。用于定位用户,定位合约,定位合约的代码(合约本身也是一个帐户)。
由于语言内嵌框架是支持支付的,所以提供了一些关键字,如payable,可以在语言层面直接支持支付,而且超级简单。
存储是使用网络上的区块链,数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还是区块链。
运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。

5. 以太坊目前需要解决的难题有哪些?未来的需求是什么?

Vitalik Buterin:目前的挑战主要是技术性问题,大体分为以下三类:

第一,可扩展性。我们要增加区块链的容量,这一性能主要反映在每秒可处理的原始交易数。目前以太坊每秒钟可处理15笔交易左右,但要满足主流采用,还需要数千倍的提升。

第二,隐私性。我们需要努力确保在使用区块链应用时不会泄露个人隐私数据。

第三,安全性。 我们需要在技术上帮助社区最大程度地降低数字资产被盗的风险,私钥遗失、智能合约代码漏洞等风险也要最小化。

在实用性方面也存在着一些挑战,但相较于核心协议和平台本身,每个单独应用的开发团队对实用性有着更大的影响 。

但目前我们已经有很多可靠的解决方案来应对以上所有的挑战 。例如,我们有专门的团队在研究状态通道技术,分片技术和Plasma技术来解决可扩展性方面的问题。拜占庭硬分叉已经完成,而且它的加密功能也达到可用状态,但在构建基础设施以及利用它们的方面还有很多细节工作要做。

6.一般钱包 Transaction 的流程是什么?

day06_第4张图片

7. 转账的详细描述

nonce:发送者发送交易数的计数

gasPrice:发送者愿意支付执行交易所需的每个gas的Wei数量

gasLimit:发送者愿意为执行交易支付gas数量的最大值。这个数量被设置之后在任何计算完成之前就会被提前扣掉

to:接收者的地址。在合约创建交易中,合约账户的地址还没有存在,所以值先空着

value:从发送者转移到接收者的Wei数量。在合约创建交易中,value作为新建合约账户的开始余额

v,r,s:用于产生标识交易发生着的签名

data(可选域,只有在消息通信中存在):消息通话中的输入数据(也就是参数)。
day06_第5张图片

8.合约能够向其他合约发送消息,那么如何理解这个消息?

在以太坊状态全局范围内的合约可以与在相同范围内的合约进行通信。他们是通过“消息”或者“内部交易”进行通信的。我们可以认为消息或内部交易类似于交易,不过与交易有着最大的不同点—它们不是由外部拥有账户产生的。相反,他们是被合约产生的。
参考众筹项目的fundingFactory , 由智能合约部署智能合约.

9.以太坊客户端是钱包吗?目前常用的有哪些?各有什么优缺点?

  1. Mist
    说到以太坊钱包,第一个要说的当然就是Ethereum官方钱包+浏览器 Mist。Mist是一个钱包(全节点钱包通俗的来说就是同步了全部的以太坊区块信息的钱包)。也就是说打开钱包后,电脑会自动同步全部的以太坊区块信息,如果设备和网络的条件过关的情况下,目前(17年9月8日)大概需要半天左右的时间。
    优势:
    安全度高,不需要经过第三方发起交易
    节点未同步完成之前无法查看地址余额
    劣势:
    无法调整Gas Price
    对网络要求高,需要连接节点,才能发起交易

  2. ethereum wallet
    优势:
    安全度高,不需要经过第三方发起交易
    劣势:
    对网络要求高,需要连接节点才能发起交易

  3. MyEtherWallet

MyEtherWallet 作为一个轻钱包,上手难道不大,无需下载,在直接在网页上就可以完成所有的操作。在MyEtherWallet上生成的私钥由用户自我保管,平台方并无备份。

优势:

方便快捷,连网即可发起交易

劣势:

交易时需要上传私钥(使用时认准唯一网址: https://www.myetherwallet.com 谨防钓鱼网站 )

  1. MetaMask

MetaMask的钱包属性偏弱,更多的是起到使Chrome浏览器兼容以太坊网络的作用
优点:
通过添加钱包插件将Chrome变成兼容以太坊的浏览器
缺点:
不支持自动显示Erc20代币。(需要用户自己添加代币的智能合约地址)

10.Geth是什么?有哪些命令?

以太坊客户端Geth在以太坊智能合约开发中最常用的工具,一个多用途的命令行工具。
可以用来搭建以太坊私链. 具体指令见上面内容.

11.web3.js是什么?有什么优缺点?

web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。

12.Gas是什么?在以太坊上有什么作用?和智能合约有什么关系?

gas可以有效的防止恶意攻击,通证经济学.

智能合约,就是一些代码,运行整个分布式网络中。由于网络中的每一个节点都是一个全节点。这样的好处是容错性强,坏处是效率低,消耗资源与时间。因为执行计算要花钱,而要执行的运算量与代码直接相关。所以,每个在网络运行的底层操作都需要一定量的gas。gas只是一个名字,它代表的是执行所需要花费的成本(注:由于以太坊是图灵完备的,随便一个死循环就将导致网络不可用,所以引入了gas的概念)。整个分布式网络引入了强制限制,来避免停机问题。因此如果你写一个死循环,当gas耗尽后,网络就会拒绝执行接下来的操作,并且回滚你之前的所有操作。

gas的价格由市场决定,类似于比特币的交易费机制。如果你的gas价格高,节点则将优先因为利益问题打包你的交易。

一般来说,在Ethereum中计算和存储东西比在传统环境中做的更为昂贵,但是,Ethereum为您的代码提供了上述我们讨论过的那些好的属性,这可能是一样有价值的。

一般来说,在以太坊网上读取状态是免费的,只有写入状态是收费的

这些gas的钱到底去了哪里?发送者在gas上花费的所有钱都发送给了“受益人”地址,通常情况下就是矿工的地址。因为矿工为了计算和验证交易做出了努力,所以矿工接收gas的费用作为奖励。

通常,发送者愿意支付更高的gas price,矿工从这笔交易总就能获得更多的价值。因此,矿工也就更加愿意选择这笔交易。这样的话,矿工可以自由的选择一笔交易自己愿意验证或忽略。为了引导发送者应该设置gas price为多少,矿工可以选择建议一个最小的gas值他们愿意执行一个交易。

13.coinbase是什么?有什么用?

为了赚取以太币,你必须有coinbase 地址。这个etherbase默认为你生成的第一个账户。如果你没有etherbase地址,geth –mine就不会开启。

挖矿必须要设置 coinbase的.

14.balance(余额)最多可以显示小数点后几位?

18位 ERC20规范建议都是20位.

15.GHOST协议是什么?有什么作用?

不论什么时候只要多个路径产生了,一个”分叉“就会出现。我们通常都想避免分叉,因为它们会破坏系统,强制人们去选择哪条链是他们相信的链。
为了确定哪个路径才是最有效的以及防止多条链的产生,以太坊使用了一个叫做“GHOST协议(GHOST protocol.)”的数学机制。
简单来说,GHOST协议就是让我们必须选择一个在其上完成计算最多的路径。区块号越大,路径就会越长,就说明越多的挖矿算力被消耗在此路径上以达到叶子区块。使用这种推理就可以允许我们赞同当前状态的权威版本。

16.默克树是什么?作用是什么?

1240

17.Frontier(前沿)是什么?

「前沿」是以太坊的最初版本, 只有命令行界面,主要使用者是开发者

18.Homestead(家园)是什么?

「家园」增加了类似 Windows系统那样的图形界面普通用户也可以方便地体验以太坊的功能

19.Metropolis(大都会)是什么?

「大都会」加入了—个像谷歌浏览器那样的浏览器,除了使用方便之外,它还拥有一个强大的应用商店,可以安装插件实现更多功能。第三个版本在2017年年底发布了出来

20.Serenity(宁静)是什么?

「宁静」目前还没有确定发布时间,预计它会将前三个版本采用的工作量证明(Pow) 共识机制切换到混合的共识机制

21.零知识证明是什么?有哪些零知识证明的例子?

简单说就是,在不透露交易细节的情况下验证了交易记录。零知识证明可以有效保护交易隐私,隐藏交易来源并防止追溯,同时也能保证交易是安全的,因为任何试图修改交易的行为都无法通过验证。

22.PoS是什么?和POW有什么区别?缺点是什么?

POS 就是基于拥有的数量和时间获得证明的共识算法,它不像POW注重算力竞争,而是强化了拥有的意义,比如在银行存的钱越多,存的越长 则收益越大

缺点:POS也存在一些问题,比如马太效应,最后系统决策和收益依然会集中在少数寡头手里,除此之外,当矿工热潮退却后,如何保证有效的工作节点数量来完成运算,也是值得观察的

23.Casper 的共识算法是什么样的?

以太坊中PoS协议的实现, 刚开始每100个区块将有一个采用PoS协议挖出

24.以太坊账户的类型?

在的以太坊有两类账户:即外部账户和合约账户,以太坊正在试图模糊二者的界限,即你可以同时拥有合约账户和外部账户,这种做法本质上就是让用户按照合约账户的格式来定义外部账户。

25.难度炸弹是什么?有什么作用?

为了确保以太坊的矿工能加入到新链条中来,开发团队引入了"难度炸弹"机制。它会使难度系数呈指数增加以至于让挖矿变得几乎不可能的。

26.以太坊硬分叉是什么?能解决什么问题?有什么缺点?

所谓硬分叉是分叉方约定,在某个区块节点开始,启用新的系统架构继续前进,不再和主链保持一致,但同时继承了该节点前的所有区块。在这个节点之后,双方各自挖各自的矿,各自爆各自的区块,各走各的路。比如:公司有一本对公账本,有一本内部账本,两个账本完全独立

能解决什么问题:在我看来有两点:1.黑客发起针对The DAO智能合约多个漏洞的攻击,其中也包含了递归调用漏洞,并向一个匿名地址转移了3600万个以太币,导致以太坊选择硬分叉启用新的系统架构;2.很多人为了发行ICO通过以太坊割点韭菜的钱

缺点:硬分叉不需要主链允许或通过,任何人都可以发起硬分叉,都可以基于自己的理解和判断发起一个新的分支,但对于信仰者来说,每个分叉都是对共识的撕裂,是在破坏共识。共识算法本身就是防范故障或者恶意分叉的,而人为强行分叉显然是算法所不能处理的。

  • 软分叉:如果区块链的共识规则改变后,这种改变是向前兼容的,旧节点可以兼容新节点产生的区块,即为软分叉。
  • 硬分叉:如果区块链软件的共识规则被改变,并且这种规则改变无法向前兼容,旧节点无法认可新节点产生的区块,即为硬分叉

区块链的价值在于共识, 所有人达成一致,这种一致性带来的价值是无法衡量的, 为什么只有比特币有价值?现在事实给了你们一些答案,你可以复制比特币的代码,创造无数个比特币,但是比特币背后的生态(开发者、矿工、交易所、商家、用户)你无法复制。就像如果把淘宝、微信的源码给你,你能再造一个淘宝和微信吗?

27.ERC-20是什么?在什么地方会用到?

代币合约标准,一系列通过以太坊智能合约发布的代币制定了代币发放的通用规则。该标准是目前通过ICO发行代币的基础准则。

该标准能够确保基于以太坊的代币在整个生态系统中以一种可预测的方式进行,使去中心化应用程序和智能合约可以在整个平台上彼此协作,所有代币都遵循一个固定的安全标准。

ERC-20 标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式。简单地说,任何 ERC-20 代币都能立即兼容以太坊钱包, 由于交易所已经知道这些代币是如何操作的,它们可以很容易地整合这些代币。这就意味着,在很多情况下,这些代币都是可以立即进行交易的。

28 .叔块是什么?有什么缺点?

是一个区块的父区块与当前区块父区块的父区块是相同的。

由于以太坊区块生产时间(大概15秒左右)比比特币(大概10分钟左右)要快很多。更短的区块生产时间的一个缺点就是:更多的竞争区块会被矿工发现。

这些竞争区块同样也被称为“孤区块”(也就是被挖出来但是不会被添加到主链上的区块)

Ommers的目的就是为了帮助奖励矿工纳入这些孤区块,Ommer区块会收到比全区块少一点的奖励。

29 .Oracle预言机是什么?有什么作用?

通过向智能合约提供数据,它现实世界和区块链之间的桥梁

30.公有链是什么?

公有链是目前我们熟知的比特币,以太坊,瑞波币这些,每个人都可以参与,每个人都可以在上面进行交易,如果支持智能合约,每个人也都可以发布自己的应用。

31.联盟链是什么?

联盟链是指一些愿意彼此实现共信的机构和组织共同组建的,为各自机构提供共识信用和价值传递的平台,这样只要联盟不存在一家独大的情况,还是可以实现共识基础,而且相对来说可能价值更大一些,我其实觉得联盟链是有一些市场机会的。

32.私有链是什么?

用户自己搭建的私有链, 私有链缺乏共识,也需要公权机构背书,与传统中心化相比价值有限,只能说防黑客篡改可能略微有点意义。

33.测试网络有哪几种?各自在什么情况下使用?如何使用?

Ropsten
Kovan测试网络 - 仅parity钱包支持,使用PoA共识
Rinkeby测试网络 - 仅parity钱包支持,使用PoA共识

34.DAO(decentralized autonomous organization)去中心自治组织作用是什么?有什么局限性?

这是一个组织(就像,一群人),其中,使用代码来保证最终的强制执行,而不是使用传统的法律文件。这群人使用智能合约来做常见组织做的所有的事情,比如在某件事上进行投票,比如决定是否对什么进行投资等等。

副作用是决策,管理,以及对什么进行投资的结果将会不可改变的存储在区块链上。

35. storage和 memory

智能合约存储数据的位置
solidity编程中变量是值传递还是引用传递

36 .区块链的共识算法

共识算法是计算中的过程,其在区块链过程中达成单数据值的协议。这些算法旨在提供涉及众多不可靠节点的网络可靠性,以防止双重花费。
有不同类型的算法,如PoW,PoS,DPoS,PoA

37 .什么是以太坊节点?

一个节点本质上是一台有以太坊客户端连接到网络的计算机。

38 如何查看有关交易和区块的详细信息?

etherscan.io

39. 与来自DApp的合同进行交互,您需要什么?

合同的ABI和字节码。

40. ABI是什么有什么作用?

ABI是DApps用于调用合同的合同的公共接口的描述。ABI是合约的公开接口描述对象,被DApps用于调用合约的接口。

41.什么是字节码bytecode?

EVM需要字节码才能执行合同代码。

42. 跟以太坊网络交互的方式

web3.js web3j mist metamask

43. solidity的数据类型有哪些, 值类型引用类型的区别

44.DApp的前端是否局限于某些技术或框架?

不受限制。可以使用任何技术来开发DApp的前端,比如HTML,CSS,JS,Java,Python...

45.前端用什么库连接后端(智能合同)?

Web3.js库。

46.在DApp的前端需要哪些东西才能与指定的智能合约进行交互?

合约的ABI和字节码。

47.字节码有什么作用?

节点上的EVM只能执行合约的字节码。

48.为什么需要检查在Web DApp代码的开始部分是否设置了web3提供器(Provider)?

因为Metamask会注入一个web3对象,它覆盖其他的web3设置。

49.为什么要使用web3.js版本1.x而不是0.2x.x?

主要是因为1.x的异步调用使用Promise而不是回调,可以通过async和await的方式调用. Promise目前在javascript世界中 是处理异步调用的首选方案。

50. 如何在web3 1.x中列出账户?

web3.eth.getAccounts

51 .call和.send有什么区别?

.send发送交易并支付费用,而.call查询合约状态。

52. 这样发送1个以太对吗:.send({value:1})?

不对,这样发送的是1 wei。 交易中总是以wei为单位。

53.那么为了发送1个以太,我必须将这个值乘以10^18?

可以使用web3.utils.toWei(1,'ether')。

54.调用.send()时需要指定什么?

必须指定from字段,即发送账户地址。 其他一切都是可选的。

55. web3.eth.sendTransaction()的唯一功能是将以太发送到特定的地址,这个说法是否正确?

不对,也可以用它调用合约方法。

56. 你是否知道以太坊的可扩展性解决方案?

分片,分区。

57.solidity是静态类型的还是动态类型的语言?

它是静态类型语言,这意味着类型在编译时是已知的。

58.Solidity中与Java“Class”类似的是什么?

contract

59 什么是合约实例和智能合约的区别?

合约实例是区块链上已部署的合约。

60.请说出Java和Solidity之间的一些区别。

都是面向对象, 语法有些相同之处, Solidity支持多重继承,但是要慎用

61. 你必须在Solidity文件中指定的第一件事是什么?

Solidity编译器的版本,比如指定为^ 0.4.8。 这是必要的,因为这样可以防止在使用其他版本的编译器时引入不兼容性错误。

62. 合约中包含什么?

主要由存储变量、函数和事件组成。

63.合约中有哪些类型的函数?

有构造函数、payable函数、修改合约状态的函数和只读的view函数。

64.如果我将多个合约定义放入单个Solidity文件中,我会得到什么错误?

将多个合约定义放入单个Solidity文件是完全正确的。跟java内部类类似

65. 两个合约之间交互的方式有哪些?

一个合约可以调用另一个合约,也可以继承其他合约。

contract Animal {
    function eat() {  }
  }

contract dog is Animal {
    
}

66.看看下面的代码,并解释代码的哪一部分对应于哪个内存区域:

contract MyContract {
  // part 1
  uint count;
  uint[] totalPoints;
 
  function localVars(){
     // part 2
     uint[] localArr;
     // part 3
     uint[] memory memoryArr;
     // part 4
     uint[] pointer = totalPoints;
  }
}
第1部分 - Storage
第2部分 - memory
第3部分 - Memory
第4部分 - Storage

转载于:https://www.cnblogs.com/xiaocongcong888/p/9553169.html

你可能感兴趣的:(day06)