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

2017-12-15 14:04:03 +08:00
 bydmm

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

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

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

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)

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

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

4257 次点击
所在节点    分享创造
30 条回复
ety001
2017-12-15 14:15:30 +08:00
SRR 是啥?
Thiece
2017-12-15 14:17:41 +08:00
持续关注
timwei
2017-12-15 14:18:56 +08:00
SSR 笔误吧

SSR 现已泛指行动游戏中的稀有转蛋奖品
bydmm
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
2017-12-15 15:05:30 +08:00
居然还抄了 fgo 的抽卡动画。。。
关注一下看怎么实现的。
i4oolish
2017-12-15 15:09:19 +08:00
以后会不会有一种基于区块的分布式存档技术,用户存档不需要完全存在服务器端,而是也放一份在本地,服务器根据签名机制可以信任这份存档,并且加载数据

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

似乎有 i7 大佬凑齐一套了
cocona
2017-12-17 17:36:58 +08:00
发现了用公司 CDN 当图床的大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/415016

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX