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

[Golang] Encryptcard - 区块娘 - 使用区块链的计算力工作证明去挖 SRR,会产生怎么样的火花?

  •  4
     
  •   bydmm ·
    bydmm · 2017-12-15 14:04:03 +08:00 · 4226 次点击
    这是一个创建于 2535 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Encryptcard - 区块娘

    使用区块链的计算力工作证明去挖 SRR,会产生怎么样的火花?

    项目简述

    本项目使用 Golang 编写,参照了比特币白皮书的内容,只实现了区块,但是没有实现链。

    本项目验证了比特币区块的产生和验证技术,并将其应用到了喜闻乐见的抽卡环节中。

    用户可以通过挂机的方式获得卡片,比比谁的 CPU 更强

    PS: 看看代码你就会明白,其实工作证明也是有运气的成分的。即使是比特币,只要你特别欧洲,你也是有概率用普通电脑几分钟就挖到的。只是这个概率嘛。。。。

    项目地址

    https://github.com/bydmm/encryptcard

    下载地址

    新版本都会发布在 releases 里的: https://github.com/bydmm/encryptcard/releases

    项目进度

    • 计算力工作证明 ✓

    • 私钥和公钥的产生 ✓

    • 数字签名 ✓

    • 交易(✗)

    • 抽卡动画 ✓

    • 登场台词 ✓

    • 在线验证(✗)

    项目展望

    以后会不会有一种基于区块的分布式存档技术,用户存档不需要完全存在服务器端,而是也放一份在本地,服务器根据签名机制可以信任这份存档,并且加载数据。

    这样做有一些可能的好处:

    • 换代理商之后,用户可以自主上传存档,而不会出现被上家公司拒不交出存档的问题。

    • 一些单机游戏为了防破解做了全程联网,这样很影响游戏体验。那能不能将存档放在本地,但是由服务器商签名,这样即使被破解了,也无法存档。

    • 刀剑神域这样的跨游戏的存档实现,比如用户至少可以继承自己的人物名称和捏脸设定之类的,不过具体的继承内容的决定权在网游开发商。

    基本结构

    {
      "Version": "v0.0.1",
      "PubKey": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANB.......pXBzV4QOMxBl5C\nrwIDAQAB\n-----END RSA PUBLIC KEY-----\n",
      "Timestamp": "1513263844677925384",
      "RandNumber": "725",
      "Hard": "4",
      "CardID": "35d859ed1f30d9e19b76b120ca7d706506edfdd35ed7c88feafccb0003601050",
      "Signature": "8c79aa73e105fad3479......eb5b0f2a1aa5e2493a1"
    }
    

    Version

    区块娘版本,不同版本的区块可能挖矿难度不一样,核心算法也不同

    PubKey

    用户公钥(yue 四声)

    Timestamp

    卡被挖出的时间戳

    RandNumber

    随机数,某个时间戳内为了多次重试,没有时间戳就无法挖卡了

    Hard

    难度系数,

    CardID

    CardID = 哈希(Version + PubKey + Timestamp + RandNumber + Hard)

    任何人都可以通过这个验证这张卡的真实性,到底是不是挖出来的,还是随便乱写的。

    这个也算是这个挖卡概念的技术核心,控制了出卡率只和用户的硬件水平有关。

    假设 CardID 为:15c9c6c3afb2b2ff612c5ea37b563c50dac4e95d7a93695bc5d680000000199

    • 0000000 基础难度系数,0 越多总体的难度提升(这个位数,不同的版本可能会变)

    • 001 卡 id,设定为 0 越多卡越稀有, 这是一张 SSR

    • 9 攻击, 纯属娱乐,未来对战系统可以自行实践

    • 9 防御,纯属娱乐,未来对战系统可以自行实践

    按照设想,挖卡程序只负责让卡有序产生,各种各样的应用可以根据这个卡的属性去自行设计任何游戏。

    算是个神奇的开源社区的设想?

    PS: 缺点是现在的 hash 算法 sha256 已经被 ASIC 矿机给优化。。但是我想那群挖币的应该不至于有空挖这个。。

    PS2: 如果矿机挖这个,那么说明挖这卡的价值要大于挖比特币。。。

    Signature

    普通的数字签名

    首先是拥有者对卡(区块)签名

    Signature = 签名函数(private_key, CardID)

    交易者验证这张卡是不是真的来自于拥有者

    CardID = 验证函数(PubKey, Signature)

    卡交易(未实现)

    {
    	"pubkey": "1ccfce1ed647ec3b12c398f4791a1adb3285cfff85ce7d382362c321a1a1df2",
    	"timestamp": 1974545345345,
    	"randNumber": 6653,
    	"cardBlock": "15c9c6c3afb2b2ff612c5ea37b563c50dac4e95d7a93695bc5d6800000009004",
    	"signature": "dsfsdf34515c9c6c3afb2b2ff612c5ea37b563c50dac4e95d7a93695bc5d6800",
    	"ownerPubkey": "1ccfce1ed647ec3b12c398f4791a1adb3285cfff85ce7d382362c321a1a1df2"
    }
    

    交易过的卡多一个字段:ownerPubkey

    二次签名

    signature = 签名函数(创造者的 private_key, (ownerPubkey + CardID))

    验证函数

    ownerPubkey + cardBlock = 验证函数(pubkey, signature)

    由于这个项目只是区块,不是链,也没有全局分布式账本,所以一张卡只允许交易一次了。。

    因为第二次交易这张卡,很明显需要第一个用户的私钥,那不太现实。。。

    第 1 条附言  ·  2017-12-15 14:35:22 +08:00
    ![]( https://image.iqing.in/show.gif)

    哈哈,SSR 写错了,还不让编辑!
    第 2 条附言  ·  2017-12-15 15:28:03 +08:00

    鸣谢

    动画生成:

    https://github.com/pjobson/movie2ascii

    本项目可以将视频转为字符(用到了jp2a+ffmpge)

    https://github.com/jteeuwen/go-bindata

    本项目可以把资源文件,也就是动画,作为二进制资源打包到项目里

    第 3 条附言  ·  2017-12-22 19:09:05 +08:00
    新版本采用区块链技术,使用中心化认证完成区块链冷启动。

    后期可以改成分布式 P2P 的,数据类型和架构无关
    30 条回复    2017-12-26 09:41:33 +08:00
    ety001
        1
    ety001  
       2017-12-15 14:15:30 +08:00
    SRR 是啥?
    Thiece
        2
    Thiece  
       2017-12-15 14:17:41 +08:00
    持续关注
    timwei
        3
    timwei  
       2017-12-15 14:18:56 +08:00
    SSR 笔误吧

    SSR 现已泛指行动游戏中的稀有转蛋奖品
    bydmm
        4
    bydmm  
    OP
       2017-12-15 14:39:53 +08:00
    ```go
    // 0 和 27 最稀有,越靠近两边越稀有
    var CardPrototypes = map[int]CardPrototype{
    0: CardPrototype{ID: 0, name: "Zero", Lines: "我是开始,我是结束,我是阿赖耶,我是真理之门,我是一切的根源,我,是 Zero", rarity: 5},
    27: CardPrototype{ID: 27, name: "42", Lines: "宇宙的奥秘,从此揭开", rarity: 5},

    1: CardPrototype{ID: 1, name: "新桓结衣", Lines: "我不是你的老婆", rarity: 3},
    26: CardPrototype{ID: 26, name: "樱宁宁", Lines: "CPP 又崩溃啦", rarity: 3},

    2: CardPrototype{ID: 2, name: "《计算机程序的构造和解释》(SICP)", Lines: "做完我的习题,再说你读过", rarity: 4},
    3: CardPrototype{ID: 3, name: "《黑客与画家》", Lines: "先实现一门语言,然后再开始实现功能。", rarity: 4},
    4: CardPrototype{ID: 4, name: "《代码大全》", Lines: "在挡子弹这件事情上,我很有自信", rarity: 4},
    5: CardPrototype{ID: 5, name: "《设计模式》", Lines: "四老外激动地站了起来", rarity: 4},
    6: CardPrototype{ID: 6, name: "《 Unix 网络编程》", Lines: "万物皆文件", rarity: 4},
    7: CardPrototype{ID: 7, name: "《 TCP/IP 详解》", Lines: "01111110", rarity: 4},
    8: CardPrototype{ID: 8, name: "《重构》", Lines: "写好测试,敏捷的重构你的微服务吧", rarity: 3},
    9: CardPrototype{ID: 9, name: "《编译原理技术和工具》", Lines: "屠龙之术不在乎有无龙可屠", rarity: 4},

    10: CardPrototype{ID: 10, name: "《 C++ Primer 》", Lines: "上个号称要七天精通 C++的人造出了时光机", rarity: 3},
    11: CardPrototype{ID: 11, name: "《 Python 基础教程》", Lines: "人生苦短,我用大蟒蛇", rarity: 3},
    12: CardPrototype{ID: 12, name: "《 Thinking in Java 》", Lines: "老铁,来杯爪哇咖啡么", rarity: 3},
    13: CardPrototype{ID: 13, name: "《七天学会 HTML 》", Lines: "HTML 是宇宙最好的语言", rarity: 3},
    14: CardPrototype{ID: 14, name: "《 MYSQL 从入门到跑路》", Lines: "DROP TABLE users;", rarity: 3},
    15: CardPrototype{ID: 15, name: "《 React 中文指南》", Lines: "尤雨溪给你多少钱?我马克扎波给你双倍", rarity: 3},
    16: CardPrototype{ID: 16, name: "《 PHP 和 MySQL Web 开发》", Lines: "我不是针对谁,我是说...", rarity: 3},
    17: CardPrototype{ID: 17, name: "《 Web 开发敏捷之道》", Lines: "听说硅谷的红宝石必须跑在轨道上", rarity: 3},
    18: CardPrototype{ID: 18, name: "《从 0 到 1 》", Lines: "作为村里唯一可以卖意大利炒面的餐馆,在几万亿的餐饮市场里我所向无敌", rarity: 3},
    19: CardPrototype{ID: 19, name: "《禅与摩托车维修艺术》", Lines: "你们程序员能不能不要再围观我修车了,该死,我说的是摩托车", rarity: 3},

    20: CardPrototype{ID: 20, name: "《复变函数》", Lines: "正在对你进行傅里叶展开", rarity: 4},
    21: CardPrototype{ID: 21, name: "《线性代数》", Lines: "He is the one", rarity: 4},
    22: CardPrototype{ID: 22, name: "《微积分学教程》", Lines: "抑制了房价快速上涨的趋势", rarity: 4},
    23: CardPrototype{ID: 23, name: "《数学分析》", Lines: "少年,你渴望力量吗?", rarity: 4},
    24: CardPrototype{ID: 24, name: "《实变函数》", Lines: "少年,你渴望力量吗?", rarity: 4},
    25: CardPrototype{ID: 25, name: "《泛函分析》", Lines: "少年,你渴望力量吗?", rarity: 4},
    }
    ```

    来个欧皇,凑齐一套撒!
    dangge
        5
    dangge  
       2017-12-15 15:05:30 +08:00
    居然还抄了 fgo 的抽卡动画。。。
    关注一下看怎么实现的。
    i4oolish
        6
    i4oolish  
       2017-12-15 15:09:19 +08:00
    以后会不会有一种基于区块的分布式存档技术,用户存档不需要完全存在服务器端,而是也放一份在本地,服务器根据签名机制可以信任这份存档,并且加载数据

    这个目前不是已经有了吗,什么 sc,还是 blk 来着
    timwei
        7
    timwei  
       2017-12-15 15:26:03 +08:00
    ANSI 动画真是 666
    sennes
        8
    sennes  
       2017-12-15 16:36:19 +08:00
    挖了两本《微积分学教程》哈哈
    bydmm
        9
    bydmm  
    OP
       2017-12-15 16:41:19 +08:00
    @sennes 最稀有的是 0 和 42,加油。根据计算掉率为 0.2%
    CatCode
        10
    CatCode  
       2017-12-15 20:03:47 +08:00
    《编译原理技术和工具》: 屠龙之术不在乎有无龙可屠
    23333333
    CatCode
        11
    CatCode  
       2017-12-15 20:04:12 +08:00
    Win10 上动画没有,是我的问题嘛?
    bydmm
        12
    bydmm  
    OP
       2017-12-15 21:35:18 +08:00
    @CatCode powershell 才能看到动画,而且最新版因为挖的太快,暂时没动画,你可以下 https://github.com/bydmm/encryptcard/releases/tag/v0.2
    LevineChen
        13
    LevineChen  
       2017-12-15 23:00:06 +08:00
    已经这么难挖了嘛 挂了 20 多分钟了 还是努力挖掘中
    bydmm
        14
    bydmm  
    OP
       2017-12-15 23:59:29 +08:00
    @LevineChen 抱歉,老版本的随机数产生器写错了。https://github.com/bydmm/encryptcard/releases/tag/v0.5
    LevineChen
        15
    LevineChen  
       2017-12-16 00:01:53 +08:00 via iPhone
    @bydmm ....挂了一个来小时了
    cctvsmg
        16
    cctvsmg  
       2017-12-16 02:31:54 +08:00
    赞一个,楼主有执行力,这才是 v2 该有的帖子
    AshesFish
        17
    AshesFish  
       2017-12-16 10:48:24 +08:00 via Android
    大佬
    anasplrt34
        18
    anasplrt34  
       2017-12-16 23:37:23 +08:00
    你这是扶她狗的抽卡召唤么 ww
    bydmm
        19
    bydmm  
    OP
       2017-12-17 11:06:58 +08:00 via iPhone
    @anasplrt34 视频转的字符画。

    似乎有 i7 大佬凑齐一套了
    cocona
        20
    cocona  
       2017-12-17 17:36:58 +08:00 via iPhone
    发现了用公司 CDN 当图床的大佬
    ichirou
        21
    ichirou  
       2017-12-18 13:38:14 +08:00
    mysql 从入门到跑路 233
    bydmm
        22
    bydmm  
    OP
       2017-12-18 19:32:41 +08:00 via iPhone
    @cocona 嘘…
    kwkwkkk
        23
    kwkwkkk  
       2017-12-19 09:41:57 +08:00
    还差 1 个 27.。。。。
    kwkwkkk
        24
    kwkwkkk  
       2017-12-19 16:59:52 +08:00
    集齐全套。。。。
    ichirou
        25
    ichirou  
       2017-12-19 17:05:05 +08:00
    0,1,27 脸啊
    heidan
        26
    heidan  
       2017-12-20 15:39:16 +08:00
    有没有兴趣 商业化?
    Chrics
        27
    Chrics  
       2017-12-22 09:54:24 +08:00
    @bydmm 服了服了,舅服你
    Chrics
        28
    Chrics  
       2017-12-22 09:55:42 +08:00
    卡属性自定义这点,还有待商榷。是不是加一个根据时间戳签名生成的算法,进行属性分配?
    bydmm
        29
    bydmm  
    OP
       2017-12-22 11:06:34 +08:00
    @Chrics 新版(在另一个分支上)改成区块链了,中心化认证,多人抢卡。

    卡属性应该读取整个区块的哈希值,然后根据一个算法去生成,再搞下去我感觉我就可以云养美少女了。

    (还能百合生孩子?)
    ichirou
        30
    ichirou  
       2017-12-26 09:41:33 +08:00
    脸黑啊,0 还没出来。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2839 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:39 · PVG 16:39 · LAX 00:39 · JFK 03:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.