区块链学习思考与解答

问题1:区块链原理、机制是什么?

    答1:摘自知乎https://www.zhihu.com/question/31112808

  • 使用了具有 "哈希链" (下文有解释) 形式的数据结构保存基础数据
  • 有多个结点参与系统运行(分布式)
  • 通过一定的协议或算法对于基础数据的一致性达成共识(共识协议/算法)

    答2:区块链(Block Chain)是指通过去中心化和去信任化的方式集体维护一个可靠数据库的技术方案

问题2:区块链开发技能有哪些?

问题3:区块链的基本特征?

    答:1.不可篡改(去信任化,哈希链应用的结果) 2.去中心化(弱中心化)和3.可靠性(非对称加密技术和分布式存储(p2p网络)应用的结果)4.稳定性(共识算法的一致性证明)

问题4:比特币(bitcoin)、以太坊(ethereum)以及超级账本(hypeledger)是分别体现(实现)这些基本特征的?

    答:不可篡改特性使用密码学Hash函数单向特性,y=Hash(x),知道y很难知道x;哈希链(h0->h1->h2)的产生:h0=Hash(A),h1=Hash(B+h0),h2=Hash(C+h1); 当你计算出h2之后,过去的历史交易无法被改变,因为一旦被改变,计算出来的h2将千差万别。所以,其区块一旦生成,交易即被永久不可篡改。bitcoin在这个函数中加入了一个工作量证明,即h0=Hash(A+Nonce0),h1=Hash(B+h0+Nonce0),h2=Hash(B+h1+Nonce0)h0, h1, h2 必须都得是以指定数目的0 bit开头的,例如要求每个哈希值都必须以5个0开头,则h0,h1,h2都应该是这样的形式(00000*****************)h0, h1, h2 必须都得是以指定数目的0 bit开头的,例如要求每个哈希值都必须以5个0开头,则h0,h1,h2都应该是这样的形式(00000*****************)

问题5:智能合约的实现原理?

问题6:一致性共识算法基本原理?

问题7:区块链能解决什么样的一个问题?

    答:信任!金融的本质是价值的流动,金融机构的核心则是交易投资和风险控制,而区块链技术有望可以提供一种更低成本的解决信任问题的方式,所以区块链技术目前最容易与金融产生巨大的化学反应。

问题8:公链、私链、侧链、联盟链是什么,又是怎么产生和实现的?

    答:公链:世界上任何团体或个人都可以参与并发起交易,且交易能够获得该区块链的有效确认,任何节点都可以参与其共识过程。 如bitcoin

          联盟链:由某个群体内部指定多个预选节点为记账人,每个块的生成由所有的预选节点共同决定(即所有的预选节点参与共识过程)。其他节点只参与交易,但不过问记账过程,其他任何节点可以通过该区块链开放的API进行限定查询。

          私链:仅仅使用区块链的总账技术进行记账,它可以是公司或个人,独享该区块链的写入权限。

问题9:共识和一致性算法的原理及如何实现?

    答:bitcoin:POW(Proof Of Work,工作量证明),即一个符合要求区块哈希值有N个前导0组成,0的个数取决于网络的难度值(这意味着当区块长时间不能被计算出来时,0的个数会被减少,具体多久进行一次,需要继续研究)。

           POS(Proof Of Stake,股权证明),即

问题10:区块链目前的缺陷?

    答:   

  •     交易速度。每次交易所有节点都需要确认,所以节点一多,速度根本上不来。

问题11:硬分叉和软分叉的原理和区别?

    答:硬分叉:区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。所谓的硬分叉需要修改的“共识”就是指的是修改区块数据结构格式,或修改交易数据结构格式。

           软分叉:当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉。所谓的软分叉需要修改的“共识”就是指修改区块数据结构格式,或修改交易数据结构格式。

            软分叉和硬分叉主要区别是新旧节点相互兼容性。区别是对新旧节点的兼容方面。软分叉修改数据结构后,新节点生产的交易和区块能够被旧节点验证并接受,硬分叉就不能。

            详细见:http://www.8btc.com/tan90d97


问题12:solidity 和 java 的一些基本语法差异?

    答:

  • 基本类型有差异。Solidity:字符串类型-string,整型-uint,256位整型-uint256,kv型-mapping(address => uint256),布尔类型-bool,32位字节类型-bytes32;Java:字符串类型-String,整型-int,kv型-Map,布尔类型-boolean,字节类型-byte
    Solidity还多了一些Java没有的:地址类型-address,构造类-struct(类c++)
  • 声明变量访问控制符相反。Solidity:string public name;Java:public String name
  • Solidity只能有一个构造函数;而Java可以有多个构造函数,即java支持重载,而solidity不支持重载
  • Solidity除了函数(function)类型,还有一个事件类型-event;
  • Solidity的函数可以被指定为4种,外部的,公共的,内部的或私有的,默认是公共的。对于状态变量外部是不可能的,默认是内部的。external:外部功能是合约接口的一部分,这意味着它们可以通过其他合约和交易进行调用。 外部函数f不能在内部调用(即f()不起作用,但this.f()可以正常工作);public:公共功能是合同接口的一部分,可以在内部或通过消息进行调用。 对于公共状态变量,生成自动Getters函数;internal:这些功能和状态变量只能在内部进行访问(即从当前合约或从其中获得的合约),而不使用这些变量;private:私有函数和状态变量只对其中定义的合约而不是衍生合约可见。
  • Solidity继承使用关键字is,Java使用关键字extends


           


问题12:solidity 和 java 的一些基本语法差异?

    

问题12:solidity 和 java 的一些基本语法差异?

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值