shower 发表于 2023-6-19 19:40

开源游戏区块链项目分享:Unity开发的独立区块链

Arouse Blockchain





Arouse徽章

http://pic2.zhimg.com/v2-5a8d9fc5c0cfd787a1f7251340264815_b.gif

在这里插入图片描述

http://pic1.zhimg.com/v2-561fd59d278e6561d6ae1649e8bfb7b4_b.gif

在这里插入图片描述

http://pic4.zhimg.com/v2-45b1d6ef630c1998e8f9a11f2a39021b_b.gif

在这里插入图片描述

❗️千万别被误导,上图内容虽然都在项目中可寻,但与目前区块链的业务代码关联不大,仅供宣传感化(总得放些图看着都雅)。之所以有以上内容是项目有个方针功能是但愿每个用户在区块链上都有一个并世无双的AI虚拟角色,目前角色出来了,但AI还没有训练 ,也没有完全接入区块链 。So, 至少目前此项目更多的还是以区块链的纯代码为核心,也但愿你把代码作为核心学习方针。

[*]这是一个学习性质的项目,使用了Unity进行独立区块链的开发。
[*]使用此项目,将默认你有必然的Unity基础,如果你是Unity小白,可以先学习Unity,B站有大量的教材。

快捷链接

Gitee

http://pic2.zhimg.com/v2-cb701963e5f2e47999b478cebc2be1f9_b.jpg

Gitee源码地址

CSDN

http://pic2.zhimg.com/v2-32d647a7b31c327a2a83f3898d283375_b.jpg

CSDN文章地址

<hr/>

二. 项目使用说明

对 项目布景、开发环境、整体架构、文件布局、关键代码和功能解释方面进行展示说明。1. 布景

      都2023年了,区块链在当下的时代热浪下都已经是即将燃尽的火苗了,市面上关于区块链相关新闻咨询少了很多,而ChatGPT、Stable Diffusion等AI产物已经完成无缝接力,成为当下风口和热浪。
      而区块链作为上一任浪热下的余晖,被打上“衍金融产物“的标签后,并没有对我们普通人的生活有什么改变。但潮水退去,不代表着它不会留下任何陈迹,目前区块链在国内更多作为信用链存在,用于法令签约、物流运输、商务合作、加密合约等等公共底层方面。
      然而除了以艺术藏品方式可以被C端用户直接接触外,还有其他什么标的目的可以操作呢?其次作为产物经理,我需要对这些崭新的技术保持强力的热度与了解力。但买了很多区块链的册本,也搜了很多文章,那些似是而非的内容,用了大量非技术的角度解说区块链,加上时间有限,总感觉本身对它的了解不够深刻,深刻到那种我可以一听到需求,就知道如何改良如果调整他们。那么如何深刻理解,我选择的方式便是:直接本身编程。
本身编程除了能深度了解技术道理,更重要的是你会容易沉浸此中,精力和时间不会容易分手,是适合短时间内深度了解一个事物的一种方式。当然,你还可以通过写书、开设论坛、融入相关群体天天交流等方式,都可以达到这个目的。基于布景,这个项目也赋予了以下特性: 1. 属于自学型项目,使用Unity和相关Unity插件重头编纂一个本身的区块链和P2P网络。 2. 属于教学型项目,对于Unity、C#开发人员有很好的教学价值。 3. 属于非专业的项目,赐与教学方针,代码无法直接用于专业的商用。 4. 属于非完全的项目,项目还在开发中,加上我并不是出格强的开发人员,所以项目中会有大量的瑕疵,请勿喷。
项目的目的:

[*]国内技术能力日益增长,但愿有更多开发者在闲暇之余,能研究区块链或其他的技术,做处一些有意义的项目,实现自身价值。
[*]以及交流学习,提升自身。
如果你也是开发人员,如果你恰好还是Unity开发人员,那么同学,请保藏此仓库 ,给个星星 。虽然当前项目不算完善,但你的一个小小的赞,是我们继续完善下去的最直接最强有力的动力。也但愿这个鼓励❤️能延续传递下去,让更多的技术人员作出有意义的项目。
<hr/>
2. 开发环境说明

为了避免不必要的错误,使用的Unity版本请不要大于或者小于此项目版本的2个版本。
基础说明版本其他Unity版本2021.3.18f1c1数据库LiteDB.5.0.16区块链数据都是保留在Peer设备的当地,区别与哪些设备有权保留。关于LiteDBP2P网络协议UDP以太坊也是使用的UDP协议多线程东西UniTask关于UniTask网络插件SuperNet关于SuperNet
3. 整体架构





3.1 核心模块

      区块链概念中的“区块“,便是指一种数据布局,传统的数据在物理布局上就是把数据分袂保留在分歧的集中式数据处事器上,数据呈现是扁平型类,好处是数据统一打点便利存取,坏处是数据量增大时,就得增大对应的处事器设施。而区块链是把特定的数据一批批的打包加密好之后进行保留,而且包和包之间存在着不成断开的强联系,这种链式的数据布局称为区块链,而每次打包的数据体称为区块。这种链式布局的好处是每个包体相对独立又强烈依赖,每个包体的容量有限便利传输,但同时也带来了更多的难点,而区块链的其他模块便是针对这些问题而采纳的技术手段。
此中“区块“模块,需要负责每个区块(也就是数据包)的打包、认证、加密、解析等等操作。
“交易/通讯“模块,主要负责用户之间的数据交互,之所以也用了“通讯“的定名,是因为“交易“是金融型区块链常用的定名,但其实对于法式来说它只是一种通讯数据类型,既然我们的是使用区块链应用于其他行业,所以用通讯交换更加贴切。
“交易/通讯池“模块,区块的打包只能去打包有效、正确合法的数据,所以用户之间的通讯信息不能直接就打包,需要先缓存在讯通池中,等有用户完成了特定事件,进行打包的时候再统一从池子里面获取通讯数据,进行验证后再打包。
“质押“模块,质押模块是POS权益证明类型的概念,属于区块链共识机制之一。无论是POW工作量证明还是POS权益,本质都是为了解决一个问题,谁有权益去打包,如果大师都可以无时间无条件限制的打包,那就发生了“先用谁的“和“谁的对“的问题。而共识机制即通过算法法则,让这种权利自动化的方式。在本项目代码中,你可以同时看到POW相关算法代码,也可以看到POW相关代码,且由于POW太消耗设备,所以此项目采用POS机制,当前我们知道了它的感化,你用其他机制甚至自研机制也可以,但是切记一个好的机制是赏罚分明且平衡,而且最主要是无法被恶意粉碎。还有其他机制可以自行搜索。
“Peer节点“模块,区块链中重要的三个重要角色:用户、矿工、节点。这三个角色中由于权限、责任和保留数据的分歧进行了划分。此中节点便是区块链P2P网络中的Peer,代表着网络中的一个节点,它有按照保留数据的多少分为全节点和SPV节点,全节点很好理解就是保留所以区块的数据,而SPV节点只是保留区块的索引信息,就仿佛是全节点保留了所有的书,而SPV只是保留了书的名字和位置,但没有书里面的内容。而矿工也是节点的一种类似,区块链会有一些社区自建的节点,而社区的扩展需要成长更多的节点,所以有了矿工,他们通过平台的共识机制通过付出一些成本,然后获取保留数据的权限,最后获取到对应的酬报。而且节点还此中中继器的感化,中继器就是一个中间人,在P2P网络中我要去和B进行通信, 当地网络无法通行的,需要一个外围网络中间搭桥通信。最后就是用户了,用户很简单,便是区块链应用层的使用者。
在此学习项目中,我们将不区分用户、矿工、和节点,他们统一都是以节点存在,有着节点的责任和义务。“Peer储仓“模块,储仓是此项目的概念,此项目但愿区块链不只是保留数字类型的数据,同时可以保留字符、图片、模型、动画等等这些游戏中使用的数据。那传统的金融区块链的金额保留和计算方式将无法使用,金融区块链计算一个人的资金额度数据,需要通过获取所有区块内交易的数据进行统计,本色上就是通过区块中所有的交易数额的加减的方式进行计算。而加减只适合数字,像字符、图片、模型等等属于独一性质的虚拟物品文件,就无法通过区块的数字加减得出,所以有了储仓的概念。它的目的是保留非数字类型无法加减计算的数据,而且进行对物品文件数据进行加密打包和映射的工作。当然NFT等数字藏品也使用了类似的方式,只是它们不这么定名,而且区块链的储仓 最好是保留物品数据的独一映射索引,而物品文件数据保留在传统数据处事中即可,否则复杂的数据量会让区块链痴肥无法使用。区块链它并不能代替什么传统的布局,它只是一种新的细分财富的技术方案,就像C#、Python、C++都是一种编程方案,它们各有千秋,各有本身擅长的范围,所以不要陷入技术和舆论的误区,错误认为区块链是一种什么巅峰性的方案。
“钱包“模块,所有玩过区块链的用户,应该都知道钱包,其实就是钱包就是保留你进去区块链的一个凭证,更简单的说就是保留了你的银行卡号,它可以让你便利的访谒区块链中属于你的数据。这里的钱包也相对斗劲简单,项目本意是想通过“BIP44规范“来实现钱包功能的,但是基于时间和需求量,暂时还是简单的钱包功能。而且这里的钱包生成的助记词藻用的是“中文“。 (那必需得是中文!!)
3.2 业务层

业务层需要结合下文的[文件布局](#文件布局)来阅读。
      上面讲述了区块链中几个关键的模块,而在Base文件夹下的代码便是对这几个模块的封装。具体功能需要查看代码,代码大部门都是中文注释。
3.3 数据层

数据层也需要结合下文的[文件布局](#文件布局)来阅读。
      数据层和业务层承先启后,代码均在“DB文件夹“中,是对应模块进行数据库操作的对应代码。       由于区块链概念中没有中央处事器,那也没有中央数据库,这也是为什么区块链采用的P2P网络形式,所有的数据都是保留在各个节点的当地。而此项目的所有终端都是节点,所以都需要当地数据库,而这里采用了LiteDB数据库,它是一种简洁快捷当地数据库方案,更多关于此数据库的信息可以阅览对应官网。
3.4 通讯层

网络通讯协议采用的是UDP,不用担忧它会导致数据丢掉,基于Unity插件社区的强大,使用的SuperNet网络插件,它提供了可靠的UDP链接,再保留了部门传输速度和传输便捷性的同时也保留了数据的不变性。      按照GRPC通讯以及Unity Unet通讯的架构,这里对通讯层的代码进行了二次封装,使其更好的区分请求和响应的业务,法式会自动措置数据的分发和解析,开发者只需要完善业务逻辑措置即可,当然想要完善特殊业务,还是需要进一步改削的。
      此中Services文件夹保留的对应的数据字段定义,这些定义的类,即用于数据库的保留,同时也用于网络传输,同时这里面也需要定于对于业务的措置机制,机制包罗请求和响应的数据。
      ~~ClientImpl文件夹保留了对应请求接口的实现。~~ [弃用,由于请求接口相对业务逻辑简单,直接可在Services文件夹定义脚本的时候按照固定方式实现]。
ServiceImpl文件夹保留了对应的业务和数据的响应与措置脚步,简单说就是实现了Services文件夹中对应类的抽象响应方式。
3.5 事务层

      事务打点层主要就是使用了简单的Facade模式来实现区块链的高层接口,便利后续开发便利对接。除了区块链对应的几个核心模块的功能,还有本身数据库事务打点、矿工挖矿的事务打点和应用层面用户钱包业务的相关打点。
3.6 应用层

更多区块链信息可以直接跳转到区块链概念简述,了解区块链基本概念。      如果你对区块链有了必然的了解了,就会知道它其实就是一种采用P2P网络的新式网络处事架构,不依赖于中央处事器和数据库,可以更好的把数据的权利分发给用户,也可以减少企业的处事器运营和维护成本。但最大的劣势很明显,不适合保留体积过大的数据。
      但不管它怎么改变,他其实还是一种网络处事。对于我们用户,数据保留在哪里?怎么保留?怎么链接网络?我们是无法直接感到感染到变化的。我们注重还是产物本身的价值,比如它是能帮我节省流量?还是它能让我的账户更安全?还是它能让我的权益得道更好的保证?还是它能给我生活提升什么便当?亦或是它能让我通过数据挣钱?而恰恰我们在意的点在目前的区块链技术中无法体验。 区块链的金融属性斗劲特殊,这里不加评论,但简单来说它不具有传统的用户价值,至少目前是的。除非哪天赌钱属于有价值的致富方式。
      这一无法给用户带来直不雅观价值的要素决定了区块链的局限性,它目前以信任链的感化更多用于一些ZhengFu或者大厂的基础设施的鼎新和尝试,但也是局部范围的。
      当然这一呈否认的认知,只是让我们站在落地的角度认清区块链就是一种网络处事,而不去过度神化,这样才能保持沉着的思考它的可用性。而且我们还没有说 智能合约这一利器,并不能彻底否认它的存在。
这里也给出了一些应用方面的可能性:
积分权益: 区块链的共识机制和不成粉碎的社区法则,恰恰可以用于社区处事,目前行业内社区处事的权益激励确实还存在很大的空缺。如果针对社区权益使用区块链进行Saas化,便利其他三方平台进行参与,为社区用户提供更多的生态转化、更多样的价值浮现,将会有联合社区一样的形态存在,调集起来处事用户。当然这也需要区块链具备 智能合约的功能。当然这里只是提供假设,具体实施必定有更多问题。但假设你开发的产物进行宣传的时候奉告用户,你担任了XXX社区链可以共享权益,应该会有很多用户因为之前的存量权益特意去你的产物里面进行浮现的。提现有金融性质,浮现是通过某种性质或现象通过某一事物具体表达表示出来,可能会更宽泛的形容这一兑换的行为。
正负奖励训练数据: AI实在是太火了,而且由于AI的特性,未来数据的价值会越显重要。假设我们想要开发一套AI无人驾驶飞翔算法,传统的方式便是通过大量的现实尝试和少量的虚拟尝试进行训练。而如果使用游戏化的方式,通过让玩家在游戏中操作无人机进行娱乐,而且在这个过程中收集操作数据,而且赐与训练处事进行训练,可能会极大的节省AI训练的成本也就是数据来源的成本。当然这只是不专业的假设,具体实施起来,会发现实际的AI无法驾驶和虚拟的驾驶环境相差过大,模型的泛化能会很低很低,而且还涉及到摄像头的视觉识别,导致虚拟化可能性降低和成本变高。但目前仅是假设,具体实施可行性需要交给未来。
[最新咨询显示英伟达NVLink互连技术已经实现了144 TB内存的共享显卡的调用,对于未来AI范围的成长有着重要的敦促感化]用户行为数据:也是一种能为用户带来直接利益的方式,基于未来数据的价值,如果企业需要进行新市场的研究,或者新运营手段,用户数据能为相关策略提供直接价值。而目前行业中并没有这种用户通过出售个人数据来进行盈利的产物,一是你的数据其实不是你的数据,它们都是保留是对应企业的中央处事器,二是他们会把数据归于他们所有,其实理论上不归你所有,因为你无法操作到它,其次就算你的数据可以交易,但目前也没有网络架构无法为此提供保障。而区块链可以很好的提供此处事,对于任意方,大师数据不成篡改,即庇护了数据的完整和真实性,也确保用户的权益。如果有天,你可以通过下载一个APP,然后APP有一个收集你健康数据的征集任务,任务标明了收集的数据明细以及最终收益,你是否会卖本身的数据呢?
个体价值数据: 这个和积分权益差不多,就是把个体用户的数据价值体验出来。也是这个游戏项目想要实现的方针,设想你采办的王者荣耀的皮肤、装备、特效、模型以及你的游戏好友数据真是意义上是属于你的,你还可以把它用于吃鸡或者其他游戏 ,是不是感觉很酷。
4. 文件布局

便利开发者快速定位到项目中区块链的代码以下⬇️是所有Assets资源下的文件夹



文件夹说明Adaptive PerformanceUnity手机模版自带,不解释,自查AMyML未来做AI训练的测试文件夹ArouseBlockchain本项目区块链相关的所有代码Best HTTP未来做Http请求,便利网页展示的Editor不解释,自查InfinityPBR目前项目中阿谁果冻形象的相关资源文件夹ML-AgentsUnity AI 角色训练的相关代码MobileDependencyResolver不解释,自查Plugins不解释,自查Resources不解释,自查Scenes不解释,自查StreamingAssets不解释,自查SuperNet目前项目中网络通信的核心代码TextMesh Pro不解释,自查TutorialInfo不解释,自查UltimateCleanGUIPack目前项目中UI的素材插件Unity-Logs-Viewer用于手机平台进行Log打印的插件Unity.VisualScripting.Generated不解释,自查
以下⬇️是ArouseBlockchain/Scripts脚步文件夹列表。

http://pic1.zhimg.com/v2-63cc3c54ffb5c342f5b7ee623f85240c_r.jpg

在这里插入图片描述

文件/文件夹路径说明ArouseBlockchain/../Assets/ArouseBlockchain/..区块链核心代码,核心代码尽量和Unity代码分分开来,很小的工作量就可以彻底独立出来,便利你用于其他非Unity的C#项目Base/../ArouseBlockchain/Scripts/..区块链核心代码Common/同上区块链公共代码DB/同上数据保留业务措置P2PNet/同上P2P网络通信类Solve/同上Facade模式的高层接口类,用于统筹和对公业务../Scenes/ArouseBlockchain.unity../ArouseBlockchain/Scenes/..客户端场景../Scenes/Server.unity同上处事端运行场景,如何使用?
5. 功能清单

✅ 已完成                ⏯️ 进行中                打算中
现有特征
包罗已有和在本期开发打算中的未来规划
未来可能会实现的功能✅ 以及区块链基本算法和功能(除了挖矿和矿工的概念)开通三方接口给游戏方 (使用接口下载用户3D素材,打通游戏壁垒,是否可以实现商业目的完全看用户体量)✅ P2P网络链接 (持续性检索Peer对等端)对接中心化处事器,托管与任何官方的打点体系✅ UDP通信插手游戏类型AI,用户辅佐训练AI模型 (赛车游戏、飞翔器游戏等等机械操作类和其他)✅ 自定义NFT撑持 (区块撑持模型、贴图、动画的交换)插手更多中继处事器✅ 冷钱包撑持 (BIP44分层HD法则的自定义钱包)创建H5前段展示功能,可供查看区块情况,以及H5进行区块操作✅ 中文助记词藻用…. (或者你来提议,我来选择?)✅ 撑持 IP6 通讯✅ 简单游戏化运营思维的权益证明✅ 去货币概念 (不与数字货币有任何关联 )⏯️ 虚拟形象的集成⏯️ P2P双人小游戏撑持⏯️ AI模块集成 (Unity的机器学习ML-Agents)

<hr/>
三. 代码使用

本教程只能把一些重点进行讲解,无法对每个脚步和代码都进行一行行说明,所以必定会有遗漏,如有你无法明天的,可以留言私信。1. 发布处事器版本





处事器版本需要选中且只能Server场景,然后切换到Dedicated Server发布平台,点击Build 即可发布出没有任何衬着画面的处事器软件,可以发布到 Linux、Window、Mac平台。
发布成功后,即可以部署在对应公网处事设备后,并操作设备的防护墙,打开特定的端口44824,端标语可以在对应脚步中改削⬇️

http://pic1.zhimg.com/v2-b81f744533a0644be23e3292dd9448b8_r.jpg


[*] 关于如果部署本身的处事设备,需要本身学习,可行的方案是阿里云 + 浮图 即可,把打包后的代码上传,作为法式运行即可。如果端口权限无误,应该就可以直接访谒了。当然如果作为测试,也可以当地运行。
[*] 此中 44824 是所有中继节点的独一端标语,客户端Peer通过此端口访谒公共的中继节点,以此作为桥梁,和其他客户端Peer进行P2P网络通讯。
[*] 客户端Peer是不需要固定的端标语的,都是随机的。此中 端标语为 0 便是代表着端口随机。
2. 运行客户端



http://pic3.zhimg.com/v2-c688a4a6d237d21f1c143cee6f04b232_r.jpg

依据上图的文件路径找到,客户端场景,运行即可。

http://pic1.zhimg.com/v2-b559632899230693de0c65a6e61736dc_r.jpg

区块链的核心代码均在ArouseBlockchain对象上,主要代码即ABlockChain,可以看到上面会有一些测试按钮,从上到下分袂对应的 1. 通过公钥地址发送交易(币)、2. 通过公钥地址发送物品(图片...)、3. 获取对应地址的余额和物品列表、4. 获取历史的交易列表、5. 展示钱包信息、6. 展示创世区块和最后一个块的信息。 而ANetworkHost 和 NetworkManager的配置说明可以查看相关文档。
3. 在区块链中添加定制的数据类型

如果需要定义本身的区块数据,需要在NetStorageItem.cs中添加本身数据对象的类,目前已有了StorageNumberItem数字型对象,可以进行积分、经验等等数字类型的数据; 以及StorageObjItem对象型对象,理论上你的数据类型不是出格复杂完全可以用此对象作为交易数据对象,当然也可以担任重构。



当你定制了你本身的数据类型之后,还要在AStorageItem.cs ⬆️代码中改削锻造方式,让代码适应你的数据类型。这样,区块链长进行的数据交互就可以有更多的可能性。
4. 添加自定义的网络动静体

此中P2P网络中,处事器和客户端的边界是相对模糊的,这里代码会进行分隔定名主要是为了便利理解。但在业务措置中,处事和客户端的业务措置和传统的方式分歧。理论上P2P的客户端也可以是处事器,处事器也可以是客户端,我们统一都称号为 Host。



4.1 自定义数据布局和解析业务

⬆️上图所示是区块模块需要进行网络通信的代码。设计和构造需要去NetBlock.cs脚步中进行编写,此脚步中代码主要分为两部门,一部门是数据传输过程中的布局和类型定义,一部门是讯通请求和响应的业务措置。 此中数据定义需要同时符合数据库和网络接口的规范,具体规范可以看数据库定义规范和网络接口规范。 而且响应方式,如上图的abstract class BlockServer 必然需要担任INetServerSendComponent接口,这样主法式会按照你的数据类型自动识别业务方式进行调用,会少去一些工作量。
此外,这里的代码框架是可以优化的,最好的方式是像GRPC.Tools一样解析.proto文件即可完成代码的自动构建。对此感兴趣的话可以自行百度相关资料。需要出格说明是网络传输时数据类型的定义,如下。由于网络通信的信息体需要表白类型,以此说明这个信息体是什么,才能便利业务进行措置。所以这些类型必然不能反复,也就是 byte的数值不能有反复,而且数值需要在 0~255之间。如下我们定义了TransferRequest = 246 意思是交易的请求类型的246,那么其他类型就不能再用246了。
//byte :0~255
public enum TransactionMessageType : byte
{
    // 1.发送一笔交易,Host接受到之后,保留到交易池子中,并广播出去
    // 2.所有的Peer进行对交易的Pool保留
    // 3.当此中一个Peer构建块的时候,把这个交易放入块中,并同步块。
    TransferRequest = 246,
    TransferResponse = 245,

    TransactionListRequest = 244,
    TransactionListResponse = 243,
}4.2 编写请求业务逻辑

此中请求业务逻辑相对斗劲固定,下面是进行交易的请求接口,作为案例讲解。
CResponseAsyncComponent _TransferRequest_Obj;
public async Task<TransferResponse> TransferRequest_Obj(string sender, string recipient, string obj_Hash, int fee, CancellationTokenSource cancellationToken)
{
    // 第一步:创建一个异步组建用于进行异步P2P访谒,并防止访谒掉效之前反复访谒
   if (_TransferRequest_Obj != null && _TransferRequest_Obj.IsWaitResponse_Connect)
   {
         ALog.Error(”请勿反复访谒!!”);
         return default;
   }

   if (_TransferRequest_Obj == null) _TransferRequest_Obj = new CResponseAsyncComponent();

    // 第二步:开发进行P2P请求,并指定特定的请求数据类型和响应数据类型以及请求的Peer类
    // 这里会进行异步等待,当有返回成果则返回 TransferResponse 类型的响应数据体,里面包含了你定义的数据内容,解析即可。
    // 此中cancellationToken是统筹备理线程,并用来控制线程的响应超不时间的。如果不设置此数值,Unity主线程不会辅佐你释放对应线程的,这会导致很多错误。
   TransferResponse _ResponseMessage = await _TransferRequest_Obj.CRequest<TransferRequest, TransferResponse>(Peer,
         new TransferRequest()
         {
               Sender = sender,
               Recipient = recipient,
               item_type = StorageItemType.NumberBase,
               num_Amount = 0,
               obj_Hash = obj_Hash,
               Fee = fee
         },
         cancellationToken.Token);
   return _ResponseMessage;

}如上述代码注释: 1.第一步:创建一个异步组建用于进行异步P2P访谒,并防止访谒掉效之前反复访谒 2. 第二步:开始进行P2P请求,并指定特定的请求数据类型和响应数据类型以及请求的Peer类。   这里会进行异步等待,当有返回成果则返回 TransferResponse 类型的响应数据体,里面包含了你定义的数据内容,解析即可。   此中cancellationToken是统筹备理线程,并用来控制线程的响应超不时间的。如果不设置此数值,Unity主线程不会辅佐你释放对应线程的,这会导致很多错误。
4.3 响应业务逻辑



http://pic1.zhimg.com/v2-0c5559c9f78dced5ca56f274d1f35664_r.jpg

响应的业务逻辑会繁杂,所以需要单独的类中进行集成和实现。上图是现实了NetTransaction.TransactionServer 交换处事响应业务的方式。按照此逻辑实现你的业务逻辑即可。
5. 添加自定义的配置文件



http://pic2.zhimg.com/v2-89e14a6e995778fbe35b57fee18123d1_r.jpg

如上图⬆️,可以通过目前我本身的一个云处事器获取到一个系统配置文件,以下是此中一个配置文件的内容。如图⬇️所示,此配置文件记录了一些社区打点人信任的初始节点BootSrtapPeers列表(目前有些节点是当地测试的) ,它可以辅佐新用户提供初度接入区块链,后面的节点法式会本身从新记录更多有效的节点。此中PublicIPServices是公网验证的地址,目前是为了验证用户设备的公网地址,便利中继处事进行P2P打洞链接,而且还可以辅佐判断是否多个设备处于同一局域网,如果局域网的设备会自动进行局域网通信,而不是公网,这对于游戏互动来说非常便利。



如果你需要添加本身的配置文件,也还是阿里云 + 浮图 方案,可以便利的让你部署本身的配置文件。
6. 完善Unity UI和业务代码





为了更好的独立区块链的代码,便利你移植用于其他用途,这里会把Unity的代码放在单独的文件夹,即../Assets/ArouseBlockchain/Unity..中,里面包罗了UI素材和大量UI的代码。由于UI的工作量不是区块链的核心,这里的UI并没有很完善,只是做了适当的展示,没有进行美化。如果你有兴趣可以进行改削。
7. 代码声明


[*]我不确定会有多少人用的到此项目代码,如果未来存眷的人多了,大师提到关于代码的问题也多了,这里会继续完善。目前先写这么多,由于初度发布,也不清楚大师会提什么问题。
[*]我的开发能力不是很强,如果大大神路过,发现代码中有不合适甚至很幼稚部门,请及时沟通。
[*]我承认代码中还有很多为完成的部门,包罗多余的代码、写了一半的法式、没有打通的业务、不够严谨的逻辑。但愿有喜欢此项目的大神也可以直接进行共同完善。毕竟一个人的时间不是那么多,为了生计已经话费了太多时间。当然各位的撑持也是完善下去的动力。

<hr/>
四. 区块链关键概念

关于区块链概念中一些基础内容的简述1.P2P对等网络

      传统的网络通讯布局是 C/S 形式的,S 就是一个以上负责通讯转发的处事器Server,C就是我们一个个的客户端Client。你此刻手机上用的99%的APP都是这种网络布局,比如聊天软件,你要给伴侣发送讯息,得先把讯息发给处事器,然后处事器找到你的伴侣,再转发给你的伴侣,这种需要中心处事器转动员静的网络架构就是C/S 架构。而P2P则完全分歧,”P”便是 “Peer”,这里我赐与技术解释为“对等端”,对等端可以理解为在一个业务体系中,同处于一个级此外所有端的全体的总称,简单来说的比如我们都是使用聊天东西的用户,我们每个用户就是同等级的对等端,而作为工作人员的聊天软件的运营人员又有着分歧的权限和职责,它们又成为了新的同等级的对等端,且这个分歧的等级的分界并不是那么统一的,这取决于你处事的业务。
      当然上面说的是P2P的宏不雅观定义,而P2P具体的技术实现架构就是一个让所有的对等端可以直接通讯,不需要中心处事器进行转发的网络架构。这也并不是什么新的技术了,迅雷的视频下载就提供了P2P,它的好处就是越多人下载,理论上你就有个越多的资源处事器,然后资源的下载速度就会快。这种方式一方面减少中心处事器的压力,一方面提升了用户的体验。
      P2P的网络链接,也并不是完全不需要中心处事器,否则P和P一开始都不知道对方,也无从谈链接了。所以这里还会有一个以上的中继处事器的存在,中继处事器的感化之一就是辅佐每个对等端成立开始时的链接,之后的通讯它们本身完成就可以。[而理论上中继处事器越多,整个业务系统也会更完善,这也预示着需要鼓励一些对等端成为中继,而这个问题则衍生了”共识机制”。虚拟**的解决方案就是矿工,用挖矿来激励更多端作为中继。]
2.不成逆加密

      加密技术在目前行业里面已经应用的很广泛了,具体的技术细节就不多加赘述。简单来说,加密本质就是把一些人可以直接看懂的数据,操作技术手段使其变为乱码。而目前行业里区块链使用最多的是“SHA-256” 哈希算法,这种非对称加密算法的最大特点就是,加密后的数据无法或者极其困难反向推算出原始数据。(公钥私钥暂时不加赘述)这也导致直接成果是哪怕我本身私钥加密的数据,我也无法把加密后的数据进行反向推算。这种加密方式虽然说是“数据加密”,而且常识情况下人们也容易理解成你的数据加密后让别人无法看,但千万记住其实你本身其实也无法看。但它的价值就是在当下技术瓶颈下会非常安全,而作为持有公钥和私钥的你,就相当有了独一的凭据,来证明这个数据是你的。
      加密后,不成逆的特性也引申出了区块链是一种 “信任链”的概念。目前国内我们不知不觉的财富和业务都按照这一特性进行着鼎新。更多内容可以看中科院的相关文献。[上面还有量子通信、数字孪生、汽车行业等等相关行业技术成长的白皮书]
中国信通院:2022年区块链白皮书 随着数字经济时代到来,区块链与其他新一代信息技术交叉融合,其 信任价值将被进一步激发,通过充实融合公有链与联盟链技术优势, 为信任科技积蓄能量。信任科技以区块链等多技术融合为核心,出力 打造数字化信任基础设施。其既是数字经济新时代对于数据要素全流 程可信打点的必然要求,也是 Web3.0 成长中解决互联网数据要素权 属和交易畅通问题的重要创新。3. ⚖️共识机制

      共识机制是整个区块链里面最不算技术的技术方案了,但又是最最重要的内容,涉及到你的区块链要怎么改造?区块链是否真的能辅佐你的业务或财富等问题。当然,说它不是技术,是因为本身共识机制是结合社会学、人性、责任、惩戒、激励等等和人相关的内容,更像是一系列的运营法则。(当然也并不只局限于人,机器和机器也可以,技术只是东西)
      讲一下共识机制,得再次着重声明下“共识”,共识是指达成一个各个不合方所接受的解决方案(即使有时只是勉强接受,甚至只是搁置争议),而共识机制即这个方案的法则,当这个法则达成一致,会让本来混乱无章的系统更加不变平衡且向上成长,这种机制我们生活中到处可以,公司考勤机制、城市打点规章、王者荣耀的铭文机制、交通红绿灯… 都是共识机制,且我们都默许并遵守着。由于目前行业没有较好且资料很多的区块链应用可以参考,我们可以先以虚拟**的共识机制进行讨论。
      在说明虚拟的共识机制之前,得科普一个技术要素,那就是任何互联网产物,无论怎么更新迭代,都不能没有 网络通讯和数据库两个最基础的东西。而虚拟是以去中心处事器和P2P网络通讯的方式运行的互联网产物,那数据库保留在哪里很重要,但它又没有中心处事器,那只能选择保留在用户的终端上,那选择谁去保留呢?如果谁都可以随便随时无成本的保留,那它只需要采办N个处事器然后保留,就可以保留80%的数据,那最终裁决权就归属这个人了,这打破了平等的法则,必定不行。这个时候这就引申出了矿工这一用户群体,行业里面说的质押、挖矿、工作量证明Pow、权益证明Pos其实就是通过分歧的机制筛选出一些用户的终端,作为数据库的感化,用必然的成本来为区块链打工,而且换取更多的激励,而且还有其他的机制,比如如何证明谁的区块之间哪个是最新的,是正确的,谁付出的更多,如何解决区块的冲突等问题,也有着相应的机制。
      上述我们参考了虚拟的共识机制,可以看出 机制就是碰到一个否决方针的问题而衍生出的解决方案,每个法式里面都有的本身的机制。但还有最重要的“共识”,因为你必需让参与解决方案的所有方认同而且依照这个法则,且也无法打破,才能更好的维护整个区块。法子也很简单,虚拟的方式就是加密和计算机法式来判决,而不是人去控制和判定。所以你的财富或者业务机制如果需要区块链来改良,那首先需要看本身业务的法则和规律是否不变统一,而且可以用技术的方式去自动化。
我在创建这个博客的时候,ChatGPT 已经到了第四版本了,我有幸之前也参与过机器学习的项目,而且也在研究Unity的ML-Agents。结合区块链,感觉未来区块链结合AI必然是最强搭档,AI如果充任区块链共识机制查察长,在机制和共识两个方面城市有质的改良。4.分布式储存

      上文说到互联网产物无法避免的两大基础要素,网络和数据库。由于P2P的网络布局把网络通讯99%的对接直接交给了每个对等端本身,那没有中心处事器,数据在哪里保留就是个问题了。这就对应了分布式储存,其实就是既然对等端本身对接,那数据它们来保留吧。
      而保留数据需要的条件和要求分歧,就延伸出了分歧的区块链(联盟链、私有链、公链、 作侧链),其实它们主要区别就是保留数据的人/组织是谁有多少。但公链是最早由虚拟**引申出来的,但那时候这种颠覆传统的网络模式的改变,在利益的差遣下被赋予了敏感意义“去中心化”,因为公链就是所有人都有可以保留数据,在某些范围没有监管和高纬度的制度,这带来的只是另一种混乱。
      那在讲区块链这种分布式储存架构之前,就得提到“集中式”和“分布式”概念,无论是系统和组织,城市面对集中式在系统扩张到必然规模后无法适应,分布式在又存在打点和成本的问题,系统小的时候无法撑持。对于整体系统,集中式在前期易于打点,可以发生更好更快速的同步,而且很少会有子系统之间信息的矛盾和丢掉,但劣势也很明显,在体量大到必然程度,事务的量和复杂度成指数提升,就会加重整体系统的承担,影响主系统的决策质量,且整体再去调整和整顿会有较大成本,子系统的均衡性(积极主动)也会减弱,慢慢的会导致整体系统缺乏外部环境的适应能力。而分布式呢,凡是都是有了必然体积之后采纳的扩张途径,太早期的话浪费成本又不会有太大价值,容易导致效率延缓,出格是前期不不变的情况下容易无法凝聚,但体量大了之后就会形成安靖的规范法则,在这种法则规范下相对集中式会有效提高子系统参与和均衡,而且对于局部不竭变化的需求很是有利,同时减轻了主系统的承担,使其精力更集中于重大事务的决策和措置。
      所以长远来看,分布式有着它独有的价值,但代价也很明显,成本很高。就处事器和数据库来说,采用这种布局的都是大厂。而区块链恰恰是一种低成本的分布式解决方案,职责分手平等了,对应的成本也相应分手了,而且由于其透明公开、无法伪造的安全前提,更有助中心系统去不雅察看和打点,最终会更便利有效的辅佐整体业务的畅通和运营。
      当然虚拟**由于其那便利的特性,他只能作为公链才能得以被大众认同,但社会上其他业务和行业分歧,可以按照区块链几大特点,可做拆解也可做加减 ,取能对本身有价值的即可。

<hr/>
一. 项目状态说明⛳️

1. 徽章

      如果本项目对您的工作有着辅佐,非常但愿你能把这个徽章插手你的项目说明页面中。安心,此项目完全开源,在你的项目说明中插手此徽章,只是便利其他人访谒到这个项目并也能使用到 Arouse Blockchain,这对于行业内的开发大环境有着积极的影响,也会促进更多独立开发者有更强劲的动力做出好的项目。 ⚠️插手徽章并非强制的。



Arouse徽章

插手徽章到 Markdown 文本里面,可以使用以下代码:
//github仓库
[<img src=”https://bed.metarouse.work/img/log_h.jpeg” alt=”Arouse徽章” width=”200;” />](https://github.com/KitStarLee/ArouseBlockchain_Unity)

//gitee仓库
[<img src=”https://bed.metarouse.work/img/log_h.jpeg” alt=”Arouse徽章” width=”200;” />](https://gitee.com/KitStarLee_admin/arouse-blockchain)2. 相关仓库


[*]UbudKusCoin —   使用C#进行区块链编程的教程,赐与了本项目很大的启发。此文没有针对编程有过多的教学,这个仓库可以弥补,对于技术人员有很大辅佐。
3. 如何贡献❤️

非常欢迎你的插手!提一个 Issue、提交一个 Pull Request 或者赐与重要的建议, 即可对此项目做出贡献。
贡献者

感激以下参与项目的人:



Arouse徽章

4. 使用许可

Eclipse Public License© KitStarLee
页: [1]
查看完整版本: 开源游戏区块链项目分享:Unity开发的独立区块链