V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
w9ay
V2EX  ›  问与答

关于区块链原理的一些问题

  •  
  •   w9ay · 2018-08-20 18:45:33 +08:00 · 1579 次点击
    这是一个创建于 2278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原本来自实习公司的技术分享,有一个区块链的浅谈,于是我问了一些有关底层原理的问题,但是没有很好的解答。所以整理了一下问题,问下大家。

    1. 去中心化存储,每个节点存储全部区块 如果像 BTC 那样区块很多的情况下,一个节点存储全部区块,那存储空间会不会被占满?占满了如何操作?

    2. 分布式账本无中心节点 如果分布式账本没有中心节点,那一个节点启动后是如何和其他节点联系的?

    3. 工作量证明 如果同一时间两个节点工作量证明的结果相同,应该算谁的?

    4. 节点攻击 很早的时候看到一种利用时间差的攻击方式,大概是这样的:A 向 B 转“钱”的时候,又同时在另一个时区向“ C ”转钱,利用一个时间差成功了,这种攻击方式现在是怎么防护的?

    以前都是看帖,这是第一次发帖,有不对的希望大家见谅,谢谢大家~

    9 条回复    2018-08-20 23:44:27 +08:00
    nfroot
        1
    nfroot  
       2018-08-20 20:16:34 +08:00 via Android
    1.节点自己判断咯,客户端自己实现
    2.未尝试实现,不过一般你的软件会连入一个服务器,去中心化不是没有服务器,是
    nfroot
        2
    nfroot  
       2018-08-20 20:25:16 +08:00 via Android
    点错了
    2.去中心化应该是:不是没有服务器,而是谁都可以是服务器(应该是多个服务器吧,猜的,而每个人都可以突然有一天拿这些数据去单独做一个服务器),因为每个节点都有所有数据
    3.不知道,不过当概率够低时则可忽略
    4.这个情况会发生分叉,就是多了一个平行时空,但是区块链记账是每个记录一个个连接起来验证的,假的验证人数会少一点,但是一旦其中一个用的人多,其他的分叉就会自动失效(可以理解为,选举制度,投票不是第一就抛弃,如果没有第一,就会多个分叉同时存在)
    nfroot
        3
    nfroot  
       2018-08-20 20:28:13 +08:00 via Android   ❤️ 1
    以上有一部分是自己的理解,也不一定正确,如果错了请谅解,不过估计也差不了太多,一般解说只会说个大概,不可能教你去实现服务端,客户端
    nfroot
        4
    nfroot  
       2018-08-20 20:35:30 +08:00 via Android
    想起来了,问题三其实很好解决,验证数据的时候,加入自己的 id 值进去
    dbw9580
        5
    dbw9580  
       2018-08-20 20:52:34 +08:00 via Android
    1 fully-blown nodes 会存储所有的历史,典型的如矿池里的矿工,交易所和在线钱包的提供者等;还有 thin nodes,不保存或者只留很少一部分历史,依赖网络里的 full nodes 做验证。另外,10 年到目前为止 btc 的全部历史纪录数据量大约 173GB,对于一般的矿工来说都完全可以接受
    2 有用于 bootstrap 的种子节点列表,写进 btc 客户端里的
    3 产生新块的间隔时间是泊松分布的,也就是间隔时间越短生成块的概率越低。如果真的发生同时有两个矿工各自找到 valid block,那不同的节点根据它们得知这两个 valid block 的先后分别跟随某一个 block 在其后继续挖块,网络会因此暂时分裂成两条链;在长期来看这种情况是极小概率的,因此马上会有一条链超过另一条链,得到大多数节点的认可。
    4 问题表述地不够清晰,无法回答。
    dbw9580
        6
    dbw9580  
       2018-08-20 20:59:40 +08:00 via Android
    @dbw9580 有个笔误,间隔时间是指数分布的
    hyyou2010
        7
    hyyou2010  
       2018-08-20 21:13:19 +08:00   ❤️ 1
    不一定对:
    1,逻辑上某个节点存储了完整的数据,但在底层实现上可以分布存储。
    2,底层是 p2p 网络,有几个固定存在的节点。
    3,算谁都不要紧,因为不会每次都碰巧相等。
    4,不懂。
    w9ay
        8
    w9ay  
    OP
       2018-08-20 22:20:51 +08:00
    @nfroot
    @dbw9580
    @hyyou2010
    谢谢各位的解答,不过旧的问题解决了新的问题又有了。
    对于 1 可以理解为程序会自动判定让你全部存储或者只存储一部分吗
    对于 3 搜索了下好像是双重支付( double-spend )但是被证明不现实了 http://www.hualian.me/archives/52243
    benjix
        9
    benjix  
       2018-08-20 23:44:27 +08:00 via iPhone
    之前看的这个视频基本可以解答楼主的疑问
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3763 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:20 · PVG 18:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.