V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cr4fun
V2EX  ›  分享创造

直观感受,为什么区块链的数据不可篡改?我做了一个页面

  •  1
     
  •   cr4fun · 2019-01-07 16:37:31 +08:00 · 6341 次点击
    这是一个创建于 2173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直接做成 github 的 page 了。

    https://hashfish.github.io/blockchain/

    53 条回复    2019-06-20 15:17:13 +08:00
    darmau
        1
    darmau  
       2019-01-07 16:46:53 +08:00 via iPhone   ❤️ 2
    我曾经也是笃信不疑,区块链不可修改,牛逼

    没想到人家直接分叉
    cr4fun
        2
    cr4fun  
    OP
       2019-01-07 17:18:17 +08:00
    @darmau 分叉不是也挺好的吗?
    Martox
        3
    Martox  
       2019-01-07 17:30:48 +08:00
    其实没看懂耶
    darmau
        4
    darmau  
       2019-01-07 17:33:28 +08:00
    @cr4fun 就这样还想打败法币呢?一般人持有“货币”图的是什么,不就是个稳定吗?不然为啥都用美元。如果一个持有比特币的人只是想老老实实的拿着当货币用,结果一言不合就分叉,站错方向就成废代码。所以就老实承认了吧,币圈为啥不反对分叉?因为他们没想着要让虚拟币变成货币,他们就想翻几百倍,然后换成法币。
    maichael
        5
    maichael  
       2019-01-07 17:37:06 +08:00
    @darmau #4 如果全世界大部分的人(包括美国人),都支持废掉美元,那美元不还是一样会变成废纸。有什么区别?
    maichael
        6
    maichael  
       2019-01-07 17:41:35 +08:00
    @darmau #1 另外,不可篡改和不可修改是完全不一样的意思。
    Sweden
        7
    Sweden  
       2019-01-07 17:42:41 +08:00 via Android
    @maichael
    因为废掉美元在你我有生之年看不到
    你顶多看到一个非洲或者南美小国的货币被废然后用美元替代
    而分叉已经发生过多次了
    这就是有没有国家信誉背书的区别
    maichael
        8
    maichael  
       2019-01-07 17:44:23 +08:00
    @Sweden #7 袁大头呢?
    newtype0092
        9
    newtype0092  
       2019-01-07 17:46:06 +08:00
    确实挺直观啊,就是把所有数据串起来,每一个都在前一个的基础上做 hash。
    这样每次校验都要从串的根部开始遍历一遍?
    SuperMild
        10
    SuperMild  
       2019-01-07 17:56:31 +08:00
    @maichael 所以说的是美元而不是别的国家货币,地球上最强大的国家,其货币被废弃的可能性比我猝死还低。
    l00t
        11
    l00t  
       2019-01-07 17:56:42 +08:00
    @maichael #8 袁大头很值钱的啊。
    maichael
        12
    maichael  
       2019-01-07 18:01:30 +08:00
    @SuperMild #10 这个例子其实和可能性没什么关系。指的是就算对于法币而言,只要出现两波人有分歧,一波人认,一波人不认,那也会有“分叉”的问题,不是数字货币独有的。
    imshf
        13
    imshf  
       2019-01-07 18:02:28 +08:00
    看到一个 bug ?
    darmau
        14
    darmau  
       2019-01-07 18:11:37 +08:00 via iPhone
    @maichael 假设一个在你有生之年不可能的事情有意思?美元几十年美崩,比特币已经至少两次分叉了
    darmau
        15
    darmau  
       2019-01-07 18:15:37 +08:00 via iPhone
    @maichael 法币发生了分歧,比如委内瑞拉,也不是直接印新币解决的,人们会要美元,要黄金。因为直接印钱并没有解决问题。而分叉很容易就能发生
    SeaRecluse
        16
    SeaRecluse  
       2019-01-07 18:16:49 +08:00
    @maichael 高中政治没好好写吧 XD
    SuperMild
        17
    SuperMild  
       2019-01-07 18:47:05 +08:00
    @maichael 可能性的大小在这里是重点、是关键啊,两个都不是绝对稳定的东西,比的就是谁更稳定一些。

    你不能破罐子破摔,说反正美国大厦也有可能倒塌,那我住进危房里也一样。
    Antidictator
        18
    Antidictator  
       2019-01-07 18:52:15 +08:00 via iPhone
    @imshf 我怎么觉得是你浏览器自动翻译了😂
    jadec0der
        19
    jadec0der  
       2019-01-07 19:33:01 +08:00   ❤️ 1
    直观感受,为什么不需要区块链就可以让数据不可篡改:

    https://github.com/hashfish/hashfish.github.io/commits/master
    murmur
        20
    murmur  
       2019-01-07 19:37:47 +08:00
    @maichael 那就是第三次世界大战了 以后的货币就是贝壳了
    geelaw
        21
    geelaw  
       2019-01-07 20:06:28 +08:00 via iPhone
    @jadec0der #13 虽然我个人并不是区块链爱好者,但是你没意识到 git commits 是区块链吗?
    dreamwar
        22
    dreamwar  
       2019-01-07 20:28:21 +08:00
    @geelaw #21 并不是,你没有数据的控制权而已,git 的程序员操作下数据库就改了
    dreamwar
        23
    dreamwar  
       2019-01-07 20:31:10 +08:00
    决定货币价值的是信用背书

    决定美元价值的是美国
    决定比特币价值的是数学
    jadec0der
        24
    jadec0der  
       2019-01-07 20:47:19 +08:00   ❤️ 2
    @geelaw 当然,从数据结构的角度来讲,git 就是 chain of blocks。blockchain 也没有比 git 更多的东西。如果只是需要一个分布式的 append-only 账本,它很早就开发好了,而且免费。

    但是区块链拥趸并不承认这一点,他们坚持 blockchain 并不只是一个数据结构,blockchain 需要共识算法,blockchain 有超过这十个字母的更多内涵。所以我认为 lz 在开发这个玩意儿的时候并不想承认他用的 git 早就实现了他需要的所有功能。

    git 是不是 blockchain 是一个老问题,你 Google 一下就能看到很多讨论,而据我的观察,"blockchain 专家"都在否认 git 是 blockchain 这个论点,因为这个论点让集资几十亿买个区块链显得很滑稽。
    jadec0der
        25
    jadec0der  
       2019-01-07 20:48:58 +08:00
    @dreamwar 把 git 当联盟链使用是没有问题的,pull 的时候如果前面被篡改了 git 会报错。
    ooh
        26
    ooh  
       2019-01-07 20:57:17 +08:00 via Android
    @dreamwar 分布式,至少是一个私链
    dreamwar
        27
    dreamwar  
       2019-01-07 21:08:17 +08:00
    @jadec0der #25 还是那个点,数据库可以直接被篡改
    felixlong
        28
    felixlong  
       2019-01-07 22:09:17 +08:00
    @dreamwar 谁告诉你 决定比特币价值的是数学? 决定比特币价值的是那群来玩比特币的那群人。 我们这些没有比特币的人干嘛要来加进来被割韭菜?
    bullfrog
        29
    bullfrog  
       2019-01-07 22:20:16 +08:00   ❤️ 1
    把 pre_hash 也改了不就行了。。
    不能篡改不是区块链的特性,是分布式的特性。。
    KgM4gLtF0shViDH3
        30
    KgM4gLtF0shViDH3  
       2019-01-07 22:25:50 +08:00 via iPhone
    反正那些奶粉机油什么的溯源我是不信的,直接
    返回一个正品的页面,后面的逻辑你也不知道
    loading
        31
    loading  
       2019-01-07 22:44:36 +08:00 via Android
    那些所谓溯源的,是不能改,但是他们用的是自己官方控制的链,写的就是假东西。
    yinqi025
        32
    yinqi025  
       2019-01-08 09:19:32 +08:00
    @cr4fun 分叉走不远~~~~
    cr4fun
        33
    cr4fun  
    OP
       2019-01-08 10:07:39 +08:00
    @jadec0der 我写的这个例子,只是直观感受一下改变数据后,链式结构就断了呀,因为首尾相接的两个 hash 值对不上了。至于你说的 git,它明显是一个可追溯的 fork 系统,所以我认为大部分商业用的追溯系统用 git 比区块链更实用。

    这个就是我写的例子: https://github.com/trackwithgit/demo/commits/master/lamp.md
    jadec0der
        34
    jadec0der  
       2019-01-08 11:52:42 +08:00
    @dreamwar 「还是那个点,数据库可以直接被篡改」还是不懂,能否展开讲讲?

    比如现在你有个 git 库里面的 commits 是 A-B-C,我用 git clone 把它们都复制到了本地。如果你要偷偷篡改 B commit,让我下次 git pull 的时候把本地的 B commit 也改掉,你要怎么做呢?
    binux
        35
    binux  
       2019-01-08 13:37:22 +08:00 via Android
    @jadec0der 按照你这个复制到了本地的说法,你就算用记事本,别人偷偷篡改,你下次再下载的时候不是一样能发现
    jadec0der
        36
    jadec0der  
       2019-01-08 14:39:47 +08:00
    @binux 文本文件不是 append-only 的。对 git 来说,只有在把改动在后续 commit 中提交才是合法修改,直接改前面 commit 中的内容是非法修改。文本文件没有这种区分。

    除非你把 txt 当账本用,规定前面的不能改,每次下载新文件的时候扫描前面的每一行比较,再额外维护个 UTXO 表。那你确实可以用文本文件防篡改。
    dreamwar
        37
    dreamwar  
       2019-01-08 14:46:34 +08:00
    @jadec0der #36 没关系啊,线上数据库都已经篡改过了,又没有别人复制,1:99。

    “所以有问题的是你手里那份数据,请以线上为准。”

    除非,你让超过 51%的 git 用户都复制一份(这就是区块链了)
    binux
        38
    binux  
       2019-01-08 15:29:44 +08:00 via Android
    @jadec0der 扫描每一行又如何,能防篡改就行了,所以防篡改根本不是 git 带来的特性。
    jadec0der
        39
    jadec0der  
       2019-01-08 15:38:59 +08:00
    @binux Bitcoin 现在三亿七千万条交易,每十分钟更新一次,扫描每一行又如何? O(n) 和 O(1) 在你看来没区别?
    jadec0der
        40
    jadec0der  
       2019-01-08 15:40:25 +08:00
    @dreamwar 呵呵,说错了就认错,胡搅蛮缠有意思么,blocked
    dreamwar
        41
    dreamwar  
       2019-01-08 18:26:40 +08:00
    @jadec0der #40 胡搅蛮缠?你怕不是有病?节点共识懂吗?
    dreamwar
        42
    dreamwar  
       2019-01-08 18:29:03 +08:00
    @jadec0der #40 区块链上数据的正确与否取决于大部分人的认同,不认同的就分叉,你自己电脑里面存一份文件有个 P 用?
    dreamwar
        43
    dreamwar  
       2019-01-08 18:31:08 +08:00
    @jadec0der #40 按照你的说法,git 如果就是区块链,那你告诉我大部分人认同的是线上的数据,还是你手里的那份数据,你在跟我说什么 P 话?
    binux
        44
    binux  
       2019-01-09 00:09:39 +08:00 via Android
    @jadec0der 对于防篡改这个功能来说,没区别。速度不是必要条件,数据分布才是。
    jadec0der
        45
    jadec0der  
       2019-01-09 11:37:08 +08:00
    @binux 不,防篡改这个目标,防止的就是篡改本地数据,这是前提,不是条件。要么你在本地有摘要,要么有公钥验证,在本地没有知识的情况下是没有防篡改可谈的。

    如果说防篡改有什么必要条件的话,append-only 的账本式数据结构才是。
    binux
        46
    binux  
       2019-01-09 11:53:20 +08:00
    @jadec0der 我看不出 git 怎么能防止篡改你本地的数据,你在本地有完整数据不比你有摘要要强?
    你要求 append-only 是因为你对篡改的定义是只能 append,但是可以有其他“篡改”的定义。
    jadec0der
        47
    jadec0der  
       2019-01-09 12:09:34 +08:00
    @binux 那要看你对篡改和修改怎么定义了。

    我的想法是,如果你在数据库里定义一个余额,那有权限的人可以直接改掉这个余额,日志被删除之后就不知道这个余额是怎么改出来的了,这个叫篡改。

    如果你的余额是记录在 git 或者 blockchain 上的,那无论谁改了,这个改动都会被保存下来,可以追溯,那就谈不上「篡」。
    binux
        48
    binux  
       2019-01-09 12:24:02 +08:00
    @jadec0der #46 你在数据库里有一个余额,我在我数据库里面也有一个余额。如果我两同意,我的余额-100,你的余额+100,然后我们在我们的数据库里面都修改一下。假如你偷偷改掉了,那么我两的数据就不一致了,这就发生了分叉(只要引入第 3456 个人,少数服从多处就行了)。不需要 append-only 不需要摘要不需要 git 不需要 blockchain。

    相反即使你的余额是记录在 git 或者 blockchain 上的,而只有你有这个 git 或者 blockchain,我没有,你还不是想改就改,大不了摘要一起改不就完了。

    可见 git 或者 blockchain 和防篡改没有关系,防篡改来源于我们都有这个数据。
    jadec0der
        49
    jadec0der  
       2019-01-09 13:21:37 +08:00
    @binux well,你的「都修改一下」是需要双方验证的,所以你的修改建立在同意的前提上,除了数据同步还有业务逻辑,目标是让每次修改都是合法修改。当然这没问题,传统的系统都是这么运行的。

    而 append-only 的系统在同步数据的时候可以不验证,直接同步。因为用户有所有的变更记录,所以他不担心某次修改里有非法的修改。

    举个例子,你用 git 管理代码,每次都是 git pull 直接拉的,发现问题你才去找哪个 commit 出问题了。如果 git 不是 append-only 的,只保存所有文件当前的状态,你就得在 pull 之前 review 别人的变更有没有问题。
    binux
        50
    binux  
       2019-01-09 13:31:04 +08:00
    @jadec0der #48 git 同步数据的时候怎么就不验证了,你 pull 一个有冲突的分支试试。
    jadec0der
        51
    jadec0der  
       2019-01-09 14:16:28 +08:00
    @binux 不做「业务逻辑」的验证啊,不对 git 里文件的内容做验证
    binux
        52
    binux  
       2019-01-09 14:44:47 +08:00
    @jadec0der #50 对比数据库也不需要做「业务逻辑」的验证啊,你按字节验证不就完了。而且如果你要用 git 做账单,你还是要做「业务逻辑」的验证,不然你要怎么发现 bill 大于余额,推迟验证还是验证呀。
    h1159711040
        53
    h1159711040  
       2019-06-20 15:17:13 +08:00
    不是说区块链不是不可篡改而是很难篡改吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1428 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:26 · PVG 01:26 · LAX 09:26 · JFK 12:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.