[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)

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

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

4065 次点击
所在节点    分享创造
30 条回复
ichirou
2017-12-18 13:38:14 +08:00
mysql 从入门到跑路 233
bydmm
2017-12-18 19:32:41 +08:00
@cocona 嘘…
kwkwkkk
2017-12-19 09:41:57 +08:00
还差 1 个 27.。。。。
kwkwkkk
2017-12-19 16:59:52 +08:00
集齐全套。。。。
ichirou
2017-12-19 17:05:05 +08:00
0,1,27 脸啊
heidan
2017-12-20 15:39:16 +08:00
有没有兴趣 商业化?
Chrics
2017-12-22 09:54:24 +08:00
@bydmm 服了服了,舅服你
Chrics
2017-12-22 09:55:42 +08:00
卡属性自定义这点,还有待商榷。是不是加一个根据时间戳签名生成的算法,进行属性分配?
bydmm
2017-12-22 11:06:34 +08:00
@Chrics 新版(在另一个分支上)改成区块链了,中心化认证,多人抢卡。

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

(还能百合生孩子?)
ichirou
2017-12-26 09:41:33 +08:00
脸黑啊,0 还没出来。。

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

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

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

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

© 2021 V2EX