区块链以太坊以及hyperledger总结
1.什么是智能合约?它有什么特点?
就是具有交互能⼒⽽且能够在区块链中传递的合约
⼀个由计算机代码控制的以太币账户
特点: 公开透明、能即时与区块链结合、去中⼼化⽽且⽣命⼒顽强(即时公司倒闭, 产品依然可以在链上运⾏)
编译部署智能合约到真实的区块链⽹络:
1) 编译(compile)⽤到了solc, 通过solidity编译器与javascript的绑定,转换为utf-8可读格式, 导出去即可随时调⽤
2) ⽣成web3, 拿到metamask⾥⾯的provider, 也就是⽤户的provider, 让⽤户使⽤⽤户掏钱, 导出web3
3) 部署(deploy)⾸先导⼊web3, 取到compile⾥的interface以及bytecode, 在npm库⾥下载⼀个HDwalletProvider钱包, 默认有5个账户, 把⾃⼰的metamask账户(也就是助记词)也部署进来, 然后部署⼀
个infura(以太坊和区块链开发的总线系统), 使⽤infura就可以不⽤⾃⼰建节点, 接下来就是钱包账户的相互转账操作, 打印出来的地址可以到etherscan上查得到
2.以太币和⽐特币的区别?
以太坊相对于⽐特币出块时间是不⼀样的, 以太坊是15-30s, ⽐特币是10min左右,
以太坊没有采⽤⽐特币的utxo的模型,⽽是采⽤账户模型,效率本事就⾼⼀些. 另外以太坊采⽤了叔区块和默克树等⽅式优化了 出块的效率
3.说说Solidity编程语⾔的特点?和Javascript、Python有什么区别?
solidity是强类型编程语⾔, javascript和python是弱类型编程语⾔, 它运⾏在Ethereum虚拟机(EVM)之上
Solidity是以太坊的⾸选语⾔,语法接近于Javascript,是⼀种⾯向对象的语⾔,这降低了学习门槛,易于被掌握和使⽤,因为JavaScript 是Web开发者的常⽤语⾔。因此,Solidity充分利⽤了现有数以百万程序员已掌握JavaScript这⼀现状。
solidity基本数据类型:
类型说明⽰例
string字符串"hello solidity"
bool布尔true / false
int整型300 , 0 , -200
uint⾮负整数30
fixed/unfixed⼩数  3.14 / -3.14
address地址0xD53a291C6807eebCA371a3aF9Cb40Bb7556B7DC4
4.以太坊虚拟机EVM以及JVM有什么差别?
虚拟机都是跨平台的
以太坊实现了⼀个叫Ethereum Virtual Machine(EVM)的运⾏时环境,类似JVM,它的主要⼯作是执⾏智能合约的字节码,EVM“位于区块链之上”,⽽JVM主要是执⾏⽬标代码(字节码),内存回收机制也不⼀样
5.docker的原理?
docker相当于⼀个集装箱, ⽤container容器装好各种需求的东西, 当要使⽤这些东西的时候, 只需要通过container拿到⾥⾯的镜像即可, 所以也可以称他为虚拟机, 只要拉下来⼀个集装箱, 就可以运⾏集装箱⾥⾯的东西了
6.讲⼀下默克树以及⼆叉树?
默克尔树就是⼀个hash树, 可能是⼆叉的 也可以是多叉的, 默克树的基本原理就是将叶⼦节点两两配对做哈希运算  所以都是偶数
个. 如果碰到奇数个就 复制⼀个成偶数个, 默克树的作⽤ 就是不需要拿到全部区块 到部分区块 就可以验证数据是否正确.
go语⾔版的默克树
7.区块链是怎么加密的, 说⼀下它的加密步骤?
8.gas每次交易会不会发⽣变化?
gas(油)如果在做智能合约的时候值固定的话是不会发⽣变化的, ⽽没有固定的话会根据⽤户所给的gas量进⾏挖矿, 如果量多那么矿⼯会优先挖gas多的交易
9.发⾏⽐特币类⼭寨币的流程?
10.公钥地址怎么⽣成的?
- -
私钥⽣成的详细⽅法
11.交互以太坊⽹络⽤过什么协议?
rpc(Remote Procedure Call), 远程进程调⽤的协议, 可查看metamask测试⽹络下⼀栏的端⼝, rpc端⼝也是8545, rpc使得开发包括⽹络分布式应⽤更加的容易.
不论什么时候只要多个路径产⽣了,⼀个”分叉“就会出现。我们通常都想避免分叉,因为它们会破坏系统,强制⼈们去选择哪条链是他们相信的链。 为了确定哪个路径才是最有效的以及防⽌多条链的产⽣,
以太坊使⽤了⼀个叫做“GHOST协议(GHOST protocol.)”的数学机制。 简单来说,GHOST协议就是让我们必须选择⼀个在其上完成计算最多的路径。区块号越⼤,路径就会越长,就说明越多的挖矿算⼒被消耗在此路径上以达到叶⼦区块。使⽤这种推理就可以允许我们赞同当前状态的权威版本。
13.base64和base58是什么,解释⼀下?
js代码加密软件14.什么是mocha、solc、ganache、truffle?
在使⽤这些测试框架的时候, 必须要安装好node的环境
mocha: javascript的⼀套框架;
solc: ⽤来编译智能合约的 , 是⼀套测试框架;
ganache: ⼀套测试⽹络, 测试的时候不需要花费⼀分钱, ⽹络上已经把钱都准备好了, 执⾏起来效率也是特别⾼, 它相当于是testrpc的升级版, 是本地使⽤的, 不过是⽤来写做测试的, 部署到真实测试环境需要的还是rinkeby
truffle: 快速进⾏以太坊开发的⼯具集, 以太坊开发的瑞⼠军⼑  智能合约的甜蜜⼯具, 它可以编译、连接、部署智能合约, 管理智能合约的⼆进制代码, 可以测试智能合约⾥付钱的操作, 可以直接和智能合约进⾏交互, 增加我们的开发速度,
15.为什么要⽤DAPP, 它的好处?
收益⾼, 门槛低, 符合国情, 发展前景⾮常⼤, ⼯具也很全⾯, 可以做类似于以太猫的游戏...案例: 整个以太坊上只有这⼀只猫, 赶快来买, 只此⼀只
16.信息互联⽹和价值互联⽹?
信息互联⽹: ⼀个⼈讲笑话, ⼀堆⼈听笑话, 当那个⼈讲完笑话后, 那堆⼈也知道了这个笑话, 是属于复制的⽅式进⾏流动
价值互联⽹: 我兜⾥有⼀百块, 然后现在都给你了, 我就没钱了, ⽽你有100块,这就是价值互联⽹, 属于转移的⽅式进⾏流动
17.什么是以太坊?
1) 以太坊是⼀个区块链的⽹络, 由很多节点组成
2) 以太坊可以转账,可以做数据存储
3) 以太坊⽹络有很多个, 主⽹只有⼀个. 还有很多测试⽹络, 我们也可以⾃⼰搭建私链
4) 以太坊和⽐特币⼀样 有很多的node节点组成
5) ⼀个node节点其实就是⼀个运⾏以太坊客户端的计算机
6) 以太坊还是公有链, 每个⼈都可以加⼊以太坊⽹络, 后⾯学的hyperledger是私有链或者是联盟链
7) 每⼀个以太坊节点都可以同步全部的账本/区块链信息(blockchain)
8) 可以理解以太坊是⼀个数据库,存储了所有的转账信息(transaction信息)
18.什么是公有链、联盟链、私有链?
公有链: 以太坊就是⼀个公有链
私有链: 类似于创建⼀个只有⾃⼰的共和国, 只有⾃⼰
联盟链: hyperledger就是⼀个联盟链, 也是⼀个私有链, 联盟链本质上仍然是⼀种私有链,只不过它⽐单个⼩组织开发的私有链更⼤,却⼜没有公有链这么⼤的规模,可以理解为它是介于私有链和公有链之间的⼀种区块链。
19.web3.js是什么?有什么优缺点?
是⼀个开发环境, 与以太坊交互的javascript的⼀套SDK, 也可以理解为javascript编写的⼯具组合, 像metamask⾥⾯⽤的就是web3
0.20.3版本, 可以在控制台打印查看, 因为这个版本是他们⾃⼰进⾏改造过的, 很稳定, 我们⼀般⽤的话都是最新版, 当然也可以⾃⼰指定哪个版本
web3.js是以太坊提供的⼀个Javascript库,它封装了以太坊的JSON RPC API,提供了⼀系列与区块链交互的Javascript对象和函数,包括查看⽹络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调⽤智能合约等,其中最重要的就是与智能合约交互的API。
20.什么是对称加密和⾮对称加密?
对称加密: 加密算法是⼀个函数, 也可以⽐作⼀个钥匙, 通过使⽤⼀个加密的钥匙, 将明⽂或者数据转化为⼀串不可读的密⽂代码, 加密的流程不可逆, 必须要使⽤对应的解密钥匙才可以把这个加密信息转化为可以阅读的明⽂
⾮对称加密: 应⽤场景是私钥进⾏加密, 公钥进⾏数字签名, 也就是转账签名, 原理: 按照某种密钥⽣成算法, 将输⼊经过计算得出私钥, 然后采⽤另⼀个算法根据私钥⽣成公钥, 公钥的⽣成过程不可逆。就是说现有的算法是没办法经过计算穷举出私钥的, 所以说是⾮常安全
21.⽐特币的实现步骤
可以通过这样的⼀个⽹站进⾏实际体验以及理解
1) translation 交易
2) hash校验
3) ⼯作量证明 pow
4) block成链
5) 私钥转账签名
6) web接⼝
7) websocket分布式
--->sha256
---> block(⼀个块)
-
--> blockchain(后⾯的每⼀个区块都保存的上⼀个区块的hash, 只要改了其中⼀个⽇志内容, 那么后⾯的所有区块都不合法了, 想要篡改数据, 就需要把每个块进⾏挖矿算出来他们所对应的的hash, ⼯作量异常之⼤)
---> Distributed Blockchain(就算把⼀条节点上的区块链都修改了, 但是还有很多的节点数据都没法对的上, ⿊客篡改数据的⼯作量加⼤了节点个数的倍数)
---> token(数据token化, 数据是各种交易 ,增加了coinbase, 如果转账了100就只能显⽰100, 如果不是这个数值, 那么就是不合法的)
数字签名: 通过把原始数据加密⽣成私钥, 然后别⼈⽤公钥进⾏验证
22.以太坊账户系统的公钥和私钥
私钥 <==> 公钥  :  有了私钥就可以知道公钥, 只有公钥才能和私钥配对
公钥(长) ==> 地址(短)    :  有了公钥, 但是公钥太长了, 不⽅便直接观看, 所以就转化成了地址
创建账户也不需要联⽹, 因为只要有私钥privatekey和publickey, 并且可以配对成功, 那么就是⼀个账户
23.以太坊转账流程
1) 点击submit
2) 地址通过get请求发给了服务器
3) web3.js 创造了⼀个转账 (translation) (什么是转账,转账包含什么信息)
4) 为什么需要等待, 后台server发送translation 到rinkeby⽹络
5) 等待挖矿,30秒左右, 因为矿⼯在以太坊⽹络上挖矿是要耗费⼀定的时间
6) 后台服务器把成功信息反馈给前端
30秒详解:
1) translation提交给⼀个node(如何修改node,选择node?)
2) node可能在某个时间内收到很多个translation
3) node对translation排序,挖矿
4) node算好nonce就会将hash⼴播给全⽹
5) 最先算出nonce的node会得到挖矿奖励
24.通证经济学(了解即可, ⾯试⼀般⽤不到)
25.solidity开发项⽬最终步骤
编写javascript代码 ---> 听过ABI⼆进制接⼝ ---> 调⽤以太坊⼆进制数据0011的bytecode
这样做的原因是⼆进制显⽰出来是在太长了, 不⽅便程序员使⽤和查看
26.solidity的五个关键字修饰符, 以及它们的含义
public公有,任何⼈(拥有以太坊账户的)都可以调⽤
private私有, 只有智能合约内部可以调⽤
view/constant函数不会修改任何contract的数据
pure函数不使⽤任何智能合约的变量
payable调⽤函数需要付钱,钱付给了智能合约的账户
27.函数调⽤call和send的区别
函数调⽤call函数调⽤ send transaction
不修改智能合约的数据修改智能合约的数据
函数可以返回数据函数不能返回数据, 因为函数需要花时间执⾏
⽴刻执⾏需要⼏⼗秒才能执⾏完毕,返回值是transaction的hash
免费要花钱 钱
28.助记词的规范是什么
bip39协议, 它可以把private key转换为可读的英⽂助记词, 这样可以很⼤的避免⽤户记忆private key时候犯错, 导致⼀些财产问题29.怎么获取metamask测试⽹络的eth
进⼊这个⽹站, 将⾃⼰的rinkeby放⼊到Google+转发后⽣成的地址copy到这个⽹站, 就可以得到测试eth啦
30.软分叉、硬分叉

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。