[Golang] Encryptcard - 区块娘 - 使用区块链的计算力工作证明去挖 SRR,会产生怎么样的火花? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bydmm
V2EX    分享创造

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

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

    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
    Enivel
        13
    Enivel  
       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
    Enivel
        15
    Enivel  
       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     Solana     5437 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 07:40 PVG 15:40 LAX 00:40 JFK 03:40
    Do have faith in what you're doing.
    ubao 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