比特币这个分布式系统,是怎么保证节点之间互通的的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lysS
V2EX    Bitcoin

比特币这个分布式系统,是怎么保证节点之间互通的的?

  •  
  •   lysS 2021-12-16 16:14:33 +08:00 2185 次点击
    这是一个创建于 1461 天前的主题,其中的信息可能已经有所发展或是发生改变。
    包含两个意思:
    1. 逻辑层面的分布式,用的什么算法
    2. 网络上的互通:a.一个新的节点想加入比特币系统,它应该怎么做喃?广播?
    b.矿机、交易双方是怎么解决广泛使用的 NAT 带来的网络隔离的

    不太了解这个,贱笑了
    10 条回复    2022-04-26 19:04:52 +08:00
    acess
        1
    acess  
       2021-12-22 11:50:32 +08:00 via Android   1
    1.工作证明,如果有分叉链,首先排除违反规则的(比如凭空瞎造币的,以及把已经花掉的钱再花一次,等效于凭空造币的),然后如果还有分叉就选取积累工作量最大的。(不单纯看最长,因为挖矿难度在变,基本趋势是上升,按照历史上的低难度很显然能高速爆块,这个漏洞是中本聪早期亲自修正过的)
    acess
        2
    acess  
       2021-12-22 11:56:57 +08:00 via Android
    (第 1 问我也不确定楼主的意思,大概是问共识算法,所以我就那么答了。另外别想得太高大上,比特币很简单粗暴低效的,就是从头把整条区块链账本全部下载回来捋一遍而已,现在已经攒到好几百 GB 了。所谓“trustless”(无需信任)其实就是因为每个全节点都把这几百 GB 亲自验证了一遍。另外白皮书里的裁剪其实也没有什么意义,因为“剪枝”后就无法“自证清白”了,不是完整的账本,就无法排除是不是被恶意挑选过 merkle 分支(比如把没花掉的币“修剪”掉,或者反之),所以实际实现的修剪就是简单粗暴删掉老区块,删掉不影响正常同步,因为继续同步只需要 utxo 集合,只有需要扫描旧区块找回交易历史的时候才会碰到问题)
    acess
        3
    acess  
       2021-12-22 12:02:22 +08:00 via Android
    2a.新节点可以通过 DNS seed 找到其他节点,说白了就是歪用 DNS 协议查询默认写到软件代码里的 DNS seed 服务器。虽然这个服务器你可以换成别的,或者不用 DNS seed 、自己指定导入节点 IP ,但这还是被批评为没有完全去中心化的一个点。另外听说过有可能直接扫端口( IPv4 还能扫,v6 估计扫不了了),不过不太清楚这方面。
    新节点加入后,其他节点会“认识”你(同理你也会“认识”别人),尤其是可以被 seed 服务器记住,然后别人(无论是不是 seed 服务器)可以把你“介绍”给其他人,具体比特币 P2P 协议里有规定。
    acess
        4
    acess  
       2021-12-22 12:05:42 +08:00 via Android   1
    2b.在 NAT 后面(而且如果没办法端口映射)确实会导致别人没办法主动连接到你,于是你就没有传入连接了,只能传出连接到别人(都是 TCP )。但连接都是双向的,所以不影响你正常使用,无论是同步、发送交易还是挖矿(当然挖矿需要对接算力,全节点本身没有挖矿能力)。
    acess
        5
    acess  
       2021-12-22 12:12:50 +08:00 via Android
    另外比特币只有极早期是“节点”“钱包”“矿机”三个功能或角色全部整合到一个软件里的。现在这三个角色早就分离开了。
    (全)节点没有挖矿能力(虽然还集成钱包,但其实编译期间就可以选择不编译钱包功能);
    钱包呢,说实话全节点虽然可以做钱包服务器,但是效率很低下( BIP37 协议还被默认禁用了,查询历史交易需要扫区块,太过低效),因为缺乏完备的索引,只有像 electrs/esplora 之类钱包服务器 /区块浏览器服务软件才会编制完备的索引,然后才能实现秒速出结果;
    矿机也是,通过 stratum 之类协议,其实矿机压根不知道自己挖了啥,都是矿池喂什么就挖什么,矿工自己可能也不在乎,只要能赚钱挖啥都 ok 。(这方面有 stratumv2 之类协议试图改善,但貌似矿工对此大都不怎么 care )
    acess
        6
    acess  
       2021-12-22 12:17:06 +08:00 via Android
    说到 SPV ,其实 SPV 是盲信算力的,SPV 本身只能证明一条链确实打包了那个交易,但并不能证明那个交易里的币有没有被花掉(这方面也许未来也许可以打补丁增补上),另外最根本的,无法证明那条链本身是否违反规则。
    这方面争议一直很大,有人认为盲信其实是正常的,因为如果多数算力都开始作弊不可信了,那也没啥其他可以依靠的了;有人则认为必须有“经济上的大多数”仍然跑着全节点验证链上的交易内容约束着矿工、矿工才没有动机去作弊。
    lysS
        7
    lysS  
    OP
       2021-12-22 18:22:38 +08:00
    万分感谢老哥,打这么多字也是辛苦了
    lysS
        8
    lysS  
    OP
       2021-12-22 18:26:33 +08:00
    第一个问题,我看了李永乐老师的视频,大概是明白了。
    而第二个问题,我看你提到 DNS, 估计也确实是这样的了。目前我想不到解决办法,就像种子一样,还是需要”中心“的,当然这样的话肯定就不是绝对的分布式的系统了。
    akriafly01
        9
    akriafly01  
       2022-01-09 07:54:34 +08:00
    @lysS 初始状态如果是完全分布式的,启动周期就太长了。比特币的代码是完全公开的,如果你不喜欢内置的几个域名,完全可以替换成自己的 ip 或者直接导入一个 ip 列表。
    acess
        10
    acess  
       2022-04-26 19:04:52 +08:00
    @akriafly01 不需要改源码,有命令行或配置选项。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1471 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:36 PVG 00:36 LAX 08:36 JFK 11:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86