zoukankan      html  css  js  c++  java
  • 区块链基础

    1、什么是私链,测试链,公链

    私链:私链和公链是相对的概念,所谓私有就是不对外开放,仅仅在组织内部使用。私链是联盟链的一种特殊形态,即联盟中只有一个成员。有些区块链的应用场景下,并不希望这个系统任何人都可以参与,任何人都可以查看所有数据,只有被许可的节点才可以参与并且查看所有数据,这种区块链结构我们称为私有链。
    公链:任何节点都是向任何人开放的,每个人都可以参与到这个区块链中进行计算,而且任何人都可以下载获得完整区块链数据(全部账本)。比特币就是最典型的公有链。
    测试链:测试链是对应主网具有相同功能,但主要目的用于测试的区块链。由于测试链是为了在不破坏主链的情况下尝试新想法而建立的,只作为测试用途,因此测试链上的测试币不具备交易价值。比特币的测试链已经历多次重置,以阻止将其测试币用作交易、投机用途的行为。


    2、什么是离线签名,冷钱包

    离线签名:就是在不联网的情况进行签名,随后将签名后的原始数据放在网络上进行广播,从而达到交易的目的。最主要的原因在于保护用户的私钥安全。一种是使用Armory处理离线交易签名,二是手动进行签名。
    我们以第二种手动进行签名方法为例,在整个操作过程中,需要两台电脑,一台完全脱离网络,也就是专门用来持有钱包并可以给交易签名的电脑;另一台电脑需要连接网络,主要用来创建未签名交易的可视钱包。
    再按照离线签名的方法安全发起交易,由于联网的电脑不能进行交易签名,因此即便是被黑客入侵,也不会导致数字资产被盗。
    冷钱包:区块链世界里有一个非常重要的概念:私钥。(有点像是一种拥有最高权限的密码)。当你拥有加密货币时,你真正拥有的其实是“私钥”,这是用于授权区块链网络上的关键信息。凡是知道这私钥的人都可以随意支配你区块链上的相关资金。有很多工具可以用来管理你的私钥,这些工具通常被称为“钱包”,但并不是所有的钱包工具都是安全的。冷钱包(Cold Wallet),与热钱包相对应,也称离线钱包、断网钱包或硬件钱包,区块链钱包种类之一,意指网络不能访问到用户私钥的钱包,比如QkBill、imToken。冷钱包通常依靠“冷”设备(不联网的计算机、手机等)确保数字资产私钥的安全,运用二维码通信让私钥不触网,避免了被黑客盗取私钥的风险,但是也可能面临物理安全风险(比如计算机丢失,损坏等)。

    3、详细解释btc和eth的交易字段
    以太坊:
    AccountNonce:此交易的发送者已发送过的交易数(可防止重放攻击)
    Price:此交易的 gas price
    GasLimit:本交易允许消耗的最大 gas 数量
    Recipient:交易的接收者地址,如果这个字段为 nil 的话,则这个交易为“合约创建”类型交易
    Amount:交易转移的以太币数量,单位是 wei
    Payload:交易可以携带的数据,在不同类型的交易中有不同的含义
    V R S:交易的签名数据
    BTC:
    txid:未使用的收钱账单地址
    接收方地址和金额
    签名数据

    4、怎么设置btc和eth交易手续费,怎么获取一笔交易的手续费
    btc: 发送交易时,账单-金额,剩余的钱都作为手续费,但手续费不可超过0.11BTC
    ETH: Gas Limit * Gas Price Gas limit一般是21000


    5、btc和eth模型有什么区别(btc是utxo)
    在比特币的世界里,并没有一个纪录所有帐户余额的帐本。那么要怎么确定一个地址现在有多少余额呢?简单的说,你要回顾以前所有的交易,并且找到所有寄给你的比特币,再把他们全都加起来,才会知道。
    在以太坊的世界中,每个地址就像是一个帐户,每一次的扣款,交易过后,都会将帐户的余额纪录在区块链当中。因此在认证交易时只要检查帐户是否有足够的余额就可以了。

    6、什么是双花问题,btc和eth是怎么防止双花的
    BTC:每次交易都会记录一个账单已使用。如果时间非常接近,也只有最长链有效。
    ETH:在刚生成地址时,nonce为0,该地址每发送一笔交易,nonce值加1。

    “双花”问题是指一笔数字现金在交易中被反复使用的现象。

    首先,比特币的每笔交易,总是由若干个输入和输出组成(vin和vout)
    一个vin指向的是前面一个区块的vout,并且只有矿工奖励没有vin,只有凭空输出。任何一笔交易,都可以从vin追溯到矿工奖励
    还没有被交易的vout被称为UTXO,即未花费交易输出
    钱包从创世区块开始扫描每一笔交易
    如果遇到某个vout是钱包管理的地址之一,那么钱包余额增加。如果vin是钱包管理地址之一,钱包余额减少。
    钱包余额总是钱包地址关联的所有UTXO之和

    矿工在生成区块的时候,会从网络上收集交易信息,交易信息中包含了付款人的私钥签名。
    矿工首先验证签名是不是正确的
    然后矿工会从以前区块中追溯,看付款人这次消费的比特币是不是以前没有被消费过

    如果用户用同一笔UTXO付给两个人,系统中的节点只确认先接收到的那一笔
    当两笔时间上很接近的交易被不同节点确认,区块链将发生分叉。剩余节点选择在他们认为的最长链上构建新的区块。
    当其中一笔交易被6个节点确认后,它将成为系统最长链,可以认为这笔交易获得了最终的确认。


    7、什么是共识算法,btc和eth的共识是什么,还有其他什么共识算法
    BTC:工作量证明/PoW(Proof of Work)
    ETH(Casper):股权证明/PoS(Proof of Stake) 注意:目前还是POW

    POW共识
    所有节点竞争记账权。对于每一个批次的记账,都赋予一个难题,只有解出这个难题的节点记账是有效的。
    同时,所有节点都不断地通过试图解决难题来产生自己的区块,并将自己的区块追加在现有区块链后,但全网只有最长链才被认为是合法的。
    采用的难题,难以解答,但很容易验证。同时,通过调整难度,可以控制平均解答出一个难题的时间。
    还保证了区块能够以更快的速度在全部节点之间传播,并得到其他节点的验证。
    但造成了电力巨大浪费


    8、什么是区块链回滚(又叫软分叉,区块链重构),区块链回滚会引发什么问题

    回滚,当某个块的下一个块发生了变化,我们就说发生了回滚。

    如果区块链的共识规则改变后,这种改变是向前兼容的,旧节点可以兼容新节点产生的区块,即为软分叉。
    以BIP34为例,要求coinbase data必须包含区块高度,同时将版本信息从1修改为2
    共分三个阶段:
    1.所有矿工按照旧规则验证,不关心coinbase data内容,不管是新规则还是旧规则,都可以被网络接受
    2.如果最新产生的1000个区块中,版本号为2的区块个数超过75%,要求版本号为2的矿工必须按照新规则打包区块,对于版本号为1的块不进行验证
    3.如果新产生的1000个区块中,版本号为2的区块个数超过95%,则升级的矿工只接受版本号为2的区块,并对coinbase data进行校验,版本号为1的区块不被接受。

    软分叉发生之后,因为块数据改变,相应的blockhash也发生了改变,因此部分块需要重新打包生成,这就造成了回滚,同时也造成了最长链变化。

    区块链回滚,会导致回滚块所包含的交易作废。我们的交易系统应该关注回滚情况,发生回滚后,更新系统中用户余额。

    9、什么是算力攻击

    51%攻击。
    攻击者如果想通过攻击比特币系统获益,那么就要掌控产生区块的权力。
    因为由谁产生一个是一个完全随机的事件,那么这个区块由击者产生也是完全可能的。
    但由于比特币中的正常节点会对产生区块中的交易进行验证,所以所有诚实节点都不会接受包含了无效交易的区块。
    这意味着攻击者无法凭空创造比特币,也无法对不属于自己的比特币进行掠夺。
    攻击者只能对自己发出的交易信息进行修改。
    一个典型的攻击场景就是双花攻击。
    攻击者先讲自己拥有的资产在一笔交易中支付给商家来购买商品,该交易被写入当前区块链的第N+1个区块。这时候攻击者准备一个不包含该交易的第N个区块后续链,去替换掉正常链。这样就消除了这笔交易的支出。
    同时,因为比特币的最长链胜出原则,攻击链要比原链更长,才能实现双花攻击。
    同时,因为POW机制,产生下一个区块的概率和节点算力占比成正比。所以双花攻击和手里的算力占比密切相关。
    因为比特币在等待后续X个区块生成后,才会对上述交易进行确认,那么假设p=诚实节点挖坑成功的概率,q=攻击节点挖坑成功的概率
    那么,在第X个区块成功攻击
    q/p)^X
    那么q=51时,概率为(51/49)^X,该值总是大于1.

    10、请给出一个方案,监控链上回滚
    如果某个块的下一个块发生了变化,那就是发生了回滚。
    每1小时记录从上次块到最高块的上下hash,判断是否发生改变。

    11、 什么是合约,erc20是什么

    满足一定条件时,就自动执行的计算机程序。
    在现实生活中的租赁合同、借条等,就可以看做是合约。智能合约的意义在于合约的执行由法律替换成了代码。

    erc20是以太坊区块链上的一种合约标准。
    erc20描述了以太坊代币智能合约必须实现的功能和事件,目的是为了方便检查代币分发的合理性以及钱包兼容等问题。

  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/redheat/p/13885958.html
Copyright © 2011-2022 走看看