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描述了以太坊代币智能合约必须实现的功能和事件,目的是为了方便检查代币分发的合理性以及钱包兼容等问题。

  • 相关阅读:
    C博客01——分支,顺序结构
    博客园,我昔日的精神家园
    201720182 20179207 《网络攻防技术》第二周作业
    python 面试题(2)
    python 面试题(1)
    201720182 20179207 《网络攻防技术》第一周作业
    201720182 20179207 《网络攻防技术》第三周作业
    201720182 20179207 《网络攻防技术》黑客与工具
    python socket和简单tcp通信实现
    201720182 20179207 《网络攻防技术》python简明教程(110)
  • 原文地址:https://www.cnblogs.com/redheat/p/13885958.html
Copyright © 2011-2022 走看看