原本来自实习公司的技术分享,有一个区块链的浅谈,于是我问了一些有关底层原理的问题,但是没有很好的解答。所以整理了一下问题,问下大家。
去中心化存储,每个节点存储全部区块 如果像 BTC 那样区块很多的情况下,一个节点存储全部区块,那存储空间会不会被占满?占满了如何操作?
分布式账本无中心节点 如果分布式账本没有中心节点,那一个节点启动后是如何和其他节点联系的?
工作量证明 如果同一时间两个节点工作量证明的结果相同,应该算谁的?
节点攻击 很早的时候看到一种利用时间差的攻击方式,大概是这样的:A 向 B 转“钱”的时候,又同时在另一个时区向“ C ”转钱,利用一个时间差成功了,这种攻击方式现在是怎么防护的?
以前都是看帖,这是第一次发帖,有不对的希望大家见谅,谢谢大家~
1
nfroot 2018-08-20 20:16:34 +08:00 via Android
1.节点自己判断咯,客户端自己实现
2.未尝试实现,不过一般你的软件会连入一个服务器,去中心化不是没有服务器,是 |
2
nfroot 2018-08-20 20:25:16 +08:00 via Android
点错了
2.去中心化应该是:不是没有服务器,而是谁都可以是服务器(应该是多个服务器吧,猜的,而每个人都可以突然有一天拿这些数据去单独做一个服务器),因为每个节点都有所有数据 3.不知道,不过当概率够低时则可忽略 4.这个情况会发生分叉,就是多了一个平行时空,但是区块链记账是每个记录一个个连接起来验证的,假的验证人数会少一点,但是一旦其中一个用的人多,其他的分叉就会自动失效(可以理解为,选举制度,投票不是第一就抛弃,如果没有第一,就会多个分叉同时存在) |
3
nfroot 2018-08-20 20:28:13 +08:00 via Android 1
以上有一部分是自己的理解,也不一定正确,如果错了请谅解,不过估计也差不了太多,一般解说只会说个大概,不可能教你去实现服务端,客户端
|
4
nfroot 2018-08-20 20:35:30 +08:00 via Android
想起来了,问题三其实很好解决,验证数据的时候,加入自己的 id 值进去
|
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 问题表述地不够清晰,无法回答。 |
7
hyyou2010 2018-08-20 21:13:19 +08:00 1
不一定对:
1,逻辑上某个节点存储了完整的数据,但在底层实现上可以分布存储。 2,底层是 p2p 网络,有几个固定存在的节点。 3,算谁都不要紧,因为不会每次都碰巧相等。 4,不懂。 |
8
w9ay OP @nfroot
@dbw9580 @hyyou2010 谢谢各位的解答,不过旧的问题解决了新的问题又有了。 对于 1 可以理解为程序会自动判定让你全部存储或者只存储一部分吗 对于 3 搜索了下好像是双重支付( double-spend )但是被证明不现实了 http://www.hualian.me/archives/52243 |
9
benjix 2018-08-20 23:44:27 +08:00 via iPhone
之前看的这个视频基本可以解答楼主的疑问
|