Arouse Blockchain [Unity独立区块链]
- 这是一个学习性质的项目,使用了Unity进行独立区块链游戏的开发。
- 使用此项目,将默认你有一定的Unity基础,如果你是Unity小白,可以先学习Unity,B站有大量的教材。
内容列表
项目的状态说明
- 徽章
- 维护者
- 如何贡献
- 使用许可
项目的使用说明
如果你是区块链小白,请跳转 [区块链概念简述] 或者其他区块链概念解说的文章。
- 背景
- 安装
- 使用说明
- 生成器
区块链概念简述
- 徽章
未来趋势
- 徽章
项目说明
对 项目背景、开发环境、整体架构、文件结构、关键插件、关键代码和功能解释方面进行展示说明。
背景
都2023年了,区块链在这此时代热浪下都已经是即将燃尽的火苗了,市面上关于区块链相关新闻咨询少了很多,而ChatGPT、Stable Diffusion等AI产品已经完成无缝接力,成为当下风口和热浪。
而区块链作为上一任浪热下的余晖,被打上“衍金融产品“的标签后,并没有对我们普通人的生活有什么改变。但潮水退去,不代表着它不会留下任何痕迹,目前区块链在国内更多作为信用链存在,用于法律签约、物流运输、商务合作、加密合约等等公共底层方面。
然而除了以艺术藏品方式可以被C端用户直接接触外,还有其他什么方向可以利用呢?其次作为产品经理,我需要对这些崭新的技术保持强力的热度与了解力。但买了很多区块链的书籍,也搜了很多文章,那些似是而非的内容,用了大量非技术的角度解说区块链,加上时间有限,总感觉自己对它的了解不够深刻,深刻到那种我可以一听到需求,就知道如何改进如果调整他们。那么如何深刻理解,我选择的方式即是:直接自己编程。
自己编程除了能深度了解技术原理,更重要的是你会容易沉浸其中,精力和时间不会容易分散,是适合短时间内深度了解一个事物的一种方式。当然,你还可以通过写书、开设论坛、融入相关群体天天交流等方式,都可以达到这个目的。
基于背景,这个项目也赋予了以下特性:
- 属于自学型项目,使用Unity和相关Unity插件重头编辑一个自己的区块链和P2P网络。
- 属于教学型项目,对于Unity、C#开发人员有很好的教学价值。
- 属于非专业的项目,给予教学目标,代码无法直接用于专业的商用。
- 属于非完全的项目,项目还在开发中,加上我并不是特别强的开发人员,所以项目中会有大量的瑕疵,请勿喷。
项目的目的:
- 国内技术能力日益增长,希望有更多开发者在闲暇之余,能研究区块链或其他的技术,做处一些有意义的项目,实现自身价值。
- 以及交流学习,提升自身。
如果你也是开发人员,如果你恰好还是Unity开发人员,那么同学,请收藏此仓库🌟,给个星星🌟。虽然当前项目不算完善,但你的一个小小的赞,是我们继续完善下去的最直接最强有力的动力。也希望这个鼓励❤️能延续传递下去,让更多的技术人员作出有意义的项目。
环境说明🏃
为了避免不必要的错误,使用的Unity版本请不要大于或者小于此项目版本的2个版本。
基础说明 | 版本 | 其他 |
---|---|---|
Unity版本 | 2021.3.18f1c1 | |
数据库 | LiteDB.5.0.16 | 区块链数据都是保存在Peer设备的本地,区别与哪些设备有权保存 |
P2P网络协议 | UDP | 以太坊也是使用的UDP协议 |
多线程工具 | UniTask | 关于UniTask |
网络插件 | SuperNet | 关于SuperNet |
整体架构
核心模块
区块链概念中的“区块“,即是指一种数据结构,传统的数据在物理结构上就是把数据分别保存在不同的集中式数据服务器上,数据呈现是扁平型类,好处是数据统一管理方便存取,坏处是数据量增大时,就得增大对应的服务器设施。而区块链是把特定的数据一批批的打包加密好之后进行保存,并且包和包之间存在着不可断开的强联系,这种链式的数据结构称为区块链,而每次打包的数据体称为区块。这种链式结构的好处是每个包体相对独立又强烈依赖,每个包体的容量有限方便传输,但同时也带来了更多的难点,而区块链的其他模块即是针对这些问题而采取的技术手段。
其中“区块“模块,需要负责每个区块(也就是数据包)的打包、认证、加密、解析等等操作。
“交易/通讯“模块,主要负责用户之间的数据交互,只所以也用了“通讯“的命名,是因为“交易“是金融型区块链常用的命名,但其实对于程序来说它只是一种通讯数据类型,既然我们的是使用区块链应用于其他行业,所以用通讯交换更加贴切。
“交易/通讯池“模块,区块的打包只能去打包有效、正确合法的数据,所以用户之间的通讯信息不能直接就打包,需要先缓存在讯通池中,等有用户完成了特定事件,进行打包的时候再统一从池子里面获取通讯数据,进行验证后再打包。
“质押“模块,质押模块是POS权益证明类型的概念,属于区块链共识机制之一。无论是POW工作量证明还是POS权益,本质都是为了解决一个问题,谁有权益去打包,如果大家都可以无时间无条件限制的打包,那就产生了先用谁的谁的对的问题。而共识机制即通过算法规则,让这种权利自动化的方式。在本项目代码中,你可以同时看到POW相关算法代码,也可以看到POW相关代码,且由于POW太消耗设备,所以此项目采用POS机制,当前我们知道了它的作用,你用其他机制甚至自研机制也可以,但是切记一个好的机制是赏罚分明且平衡,并且最主要是无法被恶意破坏。还有其他机制可以自行搜索。
“Peer节点“模块,区块链中重要的三个重要角色:用户、矿工、节点。这三个角色中由于权限、责任和保存数据的不同进行了划分。其中节点即是区块链P2P网络中的Peer,代表着网络中的一个节点,它有根据保存数据的多少分为全节点和SPV节点,全节点很好理解就是保存所以区块的数据,而SPV节点只是保存区块的索引信息,就好像是全节点保存了所有的书,而SPV只是保存了书的名字和位置,但没有书里面的内容。而矿工也是节点的一种类似,区块链会有一些社区自建的节点,而社区的扩展需要发展更多的节点,所有有了矿工,他们通过平台的共识机制通过付出一些成本,然后获取保存数据称为节点的存在,然后获取到对应的报酬。并且节点还其中中继器的左右,中继器就是一个中间人,在P2P网络中我要去和B进行通信,需要一个公网的中继服务帮我联系到对应的B,从而进行通信。最后就是用户了,用户很简单,即是区块链应用层的使用者。
再次学习项目中,我们将不区分用户、矿工、和节点,他们统一都是以节点存在,有着节点的责任和义务。
“Peer储仓“模块,储仓是此项目的概念,此项目希望区块链不只是保存数字类型的数据,同时可以保存字符、图片、模型、动画等等这些游戏中使用的数据。那传统的金融区块链的金额保存和计算方式将无法使用,金融区块链计算一个人的资金额度数据,需要通过获取所有区块内交易的数据进行统计,实质上就是通过区块中所有的交易数额的加减的方式进行计算。而加减只适合数字,像字符、图片、模型等等属于唯一性质的虚拟物品文件,就无法通过区块的数字加减得出,所以有了储仓的概念。它的目的是保存非数字类型无法加减计算的数据,并且进行对物品文件数据进行加密打包和映射的工作。当然NFT等数字藏品也使用了类似的方式,只是它们不这么命名,而且区块链的储仓 最好是保存物品数据的唯一映射索引,而物品文件数据保存在传统数据服务中即可,不然庞大的数据量会让区块链臃肿无法使用。区块链它并不能代替什么什么结构,它只是一种新的细分产业的技术方案,就像C#、Python、C++都是一种编程方案,它们各有千秋,各有自己擅长的领域,所以不要陷入技术和舆论的误区,错误认为区块链是一种什么巅峰性的方案。
“钱包“模块,所有玩过区块链的用户,应该都知道钱包,其实就是钱包就是保存你进去区块链的一个凭证,更简单的说就是保存了你的银行卡号,它可以让你方便的访问区块链中属于你的数据。这里的钱包也相对比较简单,项目本意是想通过“BIP44规范“来实现钱包功能的,但是基于时间和需求量,暂时还是简单的钱包功能。而且这里的钱包生成的助记词采用的是“中文“🇨🇳。 (那必须得是中文!!)
业务层
业务层需要结合下文的文件结构来阅读。
上面讲述了区块链中几个关键的模块,而在Base文件夹下的代码即是对这几个模块的封装。具体功能需要查看代码,代码大部分都是中文注释。
数据层
数据层也需要结合下文的文件结构来阅读。
数据层和业务层承上启下,代码均在“DB文件夹“中,是对应模块进行数据库操作的对应代码。
由于区块链概念中没有中央服务器,那更没有中央数据库,这也是为什么区块链采用的P2P网络形式,所有的数据都是保存在各个节点的本地。而此项目的所有终端都是节点,所以都需要本地数据库,而这里采用了LiteDB数据库,它是一种简洁快捷本地数据库方案,更多关于此数据库的信息可以阅览对应官网。
通讯层
网络通讯协议采用的是UDP,不用担心它会导致数据丢失,基于Unity插件社区的强大,使用的SuperNet网络插件,它提供了可靠的UDP链接,再保留了部分传输速度和传输便捷性的同时也保存了数据的稳定性。
根据GRPC通讯以及Unity Unet通讯的架构,这里对通讯层的代码进行了二次封装,使其更好的区分请求和响应的业务,程序会自动处理数据的分发和解析,开发者只需要完善业务逻辑处理即可,当然想要完善特殊业务,还是需要进一步修改的。
其中Services
文件夹保存的对应的数据字段定义,这些定义的类,即用于数据库的保存,同时也用于网络传输,同时这里面也需要定于对于业务的处理机制,机制包括请求和响应的数据。
[弃用,由于请求接口相对业务逻辑简单,直接可在Services文件夹定义脚本的时候根据固定方式实现]。ClientImpl
文件夹保存了对应请求接口的实现。
ServiceImpl
文件夹保存了对应的业务和数据的响应与处理脚步,简单说就是实现了Services
文件夹中对应类的抽象响应方法。
事务层
事务管理层主要就是使用了简单的Facade模式来实现区块链的高层接口,方便后续开发方便对接。除了区块链对应的几个核心模块的功能,还有本身数据库事务管理、矿工挖矿的事务管理和应用层面用户直观看到的到的钱包相关管理。
应用层
更多区块链信息可以直接跳转到区块链概念简述,了解区块链基本概念。
如果你对区块链有了一定的了解了,就会知道它其实就是一种采用P2P网络的新式网络服务架构,不依赖于中央服务器和数据库,可以更好的把数据的权利分发给用户,也可以减少企业的服务器运营和维护成本。但最大的劣势很明显,不适合保存体积过大的数据。
但不管它怎么改变,他其实还是一种网络服务。对于我们用户,数据保存在哪里?怎么保存?怎么链接网络?我们是无法直接感受到变化的。我们注重还是产品本身的价值,比如它是能帮我节省流量?还是它能让我的账户更安全?还是它能让我的权益得道更好的保证?还是它能给我生活提升什么便利?亦或是它能让我通过数据挣钱?而恰恰我们在意的点在目前的区块链技术中无法体验。 区块链的金融属性比较特殊,这里不加评论,但简单来说它不具有传统的用户价值,至少目前是的。除非哪天赌博属于有价值的致富方式。
这一无法给用户带来直观价值的要素决定了区块链的局限性,它目前以信任链的作用更多用于一些政府或者大厂的基础设施的改革和实验,但也是局部范围的。
当然这一呈否定的认知,只是让我们站在落地的角度认清区块链就是一种网络服务,而不去过度神化,这样才能保持冷静的思考它的可用性。并且我们还没有说 智能合约
这一利器,并不能彻底否定它的存在。
这里也给出了一些应用方面的可能性:
积分权益: 区块链的共识机制和不可破坏的社区规则,恰恰可以用于社区服务,目前行业内社区服务的权益激励确实还存在很大的空缺。如果针对社区权益使用区块链进行Saas化,方便其他三方平台进行参与,为社区用户提供更多的生态转化、更多样的价值体现,将会有联合社区一样的形态存在,集合起来服务用户。当然这也需要区块链具备
智能合约
的功能。当然这里只是提供假设,具体实施肯定有更多问题。但假设你开发的产品进行宣传的时候告知用户,你继承了XXX社区链可以共享权益,应该会有很多用户因为之前的存量权益特意去你的产品里面进行体现的。提现有金融性质,体现是通过某种性质或现象通过某一事物具体表达表现出来,可能会更宽泛的形容这一兑换的行为
。
正负奖励训练数据: AI实在是太火了,而且由于AI的特性,未来数据的价值会越显重要。假设我们想要开发一套AI无人驾驶飞行算法,传统的方式即是通过大量的现实实验和少量的虚拟实验进行训练。而如果使用游戏化的方式,通过让玩家在游戏中操作无人机进行娱乐,并且在这个过程中收集操作数据,并且给予训练服务进行训练,可能会极大的节省AI训练的成本也就是数据来源的成本。当然这只是不专业的假设,具体实施起来,会发现实际的AI无法驾驶和虚拟的驾驶环境相差过大,模型的泛化能会很低很低,并且还涉及到摄像头的视觉识别,导致虚拟化可能性降低和成本变高。但目前仅是假设,具体实施可行性需要交给未来。
[最新咨询显示英伟达NVLink互连技术已经实现了144 TB内存的共享显卡的调用,对于未来AI领域的发展有着重要的推动作用]
用户行为数据: 也是一种能为用户带来直接利益的方式,基于未来数据的价值,如果企业需要进行新市场的研究,或者新运营手段,用户数据能为相关策略提供直接价值。而目前行业中并没有这种用户通过出售个人数据来进行盈利的产品,一是你的数据其实不是你的数据,它们都是保存是对应企业的中央服务器,二是他们会把数据归于他们所有,其实理论上不归你所有,因为你无法利用到它,其次就算你的数据可以交易,但目前也没有网络架构无法为此提供保障。而区块链可以很好的提供此服务,对于任意方,大家数据不可篡改,即保护了数据的完整和真实性,也确保用户的权益。如果有天,你可以通过下载一个APP,然后APP有一个收集你健康数据的征集任务,任务标明了收集的数据明细以及最终收益,你是否会卖自己的数据呢?
个体价值数据: 这个和积分权益差不多,就是把个体用户的数据价值体验出来。也是这个游戏项目想要实现的目标,设想你购买的王者荣耀的皮肤、装备、特效、模型以及你的游戏好友数据真是意义上是属于你的,你还可以把它用于吃鸡或者其他游戏 ,是不是感觉很酷。
文件结构
文件/文件夹 | 路径 | 说明 |
---|---|---|
ArouseBlockchain/ | …/Assets/ArouseBlockchain/… | 区块链核心代码,核心代码尽量和Unity代码分离开来,很小的工作量就可以彻底独立出来,方便你用于其他非Unity的C#项目 |
Base/ | …/ArouseBlockchain/Scripts/… | 区块链核心代码 |
Common/ | 同上 | 区块链公共代码 |
DB/ | 同上 | 数据保存业务处理 |
P2PNet/ | 同上 | P2P网络通信类 |
Solve/ | 同上 | Facade模式的高层接口类,用于统筹和对公业务 |
ArouseBlockchain.unity | …/ArouseBlockchain/Scenes/… | 客户端场景 |
Server.unity | 同上 | 服务端运行场景,如何使用? |
生成器
区块链简述
区块链的基础知识简述
- 背景
未来趋势
区块链未来趋势的展望
- 背景
想要使用生成器的话,请看 generator-standard-readme。
有一个全局的可执行文件来运行包里的生成器,生成器的别名叫 standard-readme
。
徽章
如果你的项目遵循 Standard-Readme 而且项目位于 Github 上,非常希望你能把这个徽章加入你的项目。它可以更多的人访问到这个项目,而且采纳 Stand-README。 加入徽章并非强制的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiwejzP6-1686712315271)(null)]
为了加入徽章到 Markdown 文本里面,可以使用以下代码:
[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
示例
想了解我们建议的规范是如何被应用的,请参考 example-readmes。
相关仓库
- Art of Readme — 💌 写高质量 README 的艺术。
- open-source-template — 一个鼓励参与开源的 README 模板。
维护者
@RichardLitt。
如何贡献
非常欢迎你的加入!提一个 Issue 或者提交一个 Pull Request。
标准 Readme 遵循 Contributor Covenant 行为规范。
贡献者
感谢以下参与项目的人:
使用许可
MIT © Richard Littauer