Arouse Blockchain [Unity獨立區(qū)塊鏈]
??千萬別被誤導,上圖內(nèi)容雖然都在項目中可尋,但與目前區(qū)塊鏈的業(yè)務代碼關(guān)聯(lián)不大,僅供宣傳作用(總得放些圖看著好看)。之所以有以上內(nèi)容是項目有個目標功能是希望每個用戶在區(qū)塊鏈上都有一個獨一無二的AI虛擬角色,目前角色出來了,但AI還沒有訓練??,也沒有完全接入?yún)^(qū)塊鏈??。So, 至少目前此項目更多的還是以區(qū)塊鏈的純代碼為核心,也希望你把代碼作為核心學習目標。
- 這是一個學習性質(zhì)的項目,使用了Unity進行獨立區(qū)塊鏈的開發(fā)。
- 使用此項目,將默認你有一定的Unity基礎(chǔ),如果你是Unity小白,可以先學習Unity,B站有大量的教材。
快捷鏈接
??? ???
二. 項目使用說明??
對 項目背景、開發(fā)環(huán)境、整體架構(gòu)、文件結(jié)構(gòu)、關(guān)鍵代碼和功能解釋方面進行展示說明。
1. 背景
??????都2023年了,區(qū)塊鏈在當下的時代熱浪下都已經(jīng)是即將燃盡的火苗了,市面上關(guān)于區(qū)塊鏈相關(guān)新聞咨詢少了很多,而ChatGPT、Stable Diffusion等AI產(chǎn)品已經(jīng)完成無縫接力,成為當下風口和熱浪。
??????而區(qū)塊鏈作為上一任浪熱下的余暉,被打上“衍金融產(chǎn)品“的標簽后,并沒有對我們普通人的生活有什么改變。但潮水退去,不代表著它不會留下任何痕跡,目前區(qū)塊鏈在國內(nèi)更多作為信用鏈存在,用于法律簽約、物流運輸、商務合作、加密合約等等公共底層方面。
??????然而除了以藝術(shù)藏品方式可以被C端用戶直接接觸外,還有其他什么方向可以利用呢?其次作為產(chǎn)品經(jīng)理,我需要對這些嶄新的技術(shù)保持強力的熱度與了解力。但買了很多區(qū)塊鏈的書籍,也搜了很多文章,那些似是而非的內(nèi)容,用了大量非技術(shù)的角度解說區(qū)塊鏈,加上時間有限,總感覺自己對它的了解不夠深刻,深刻到那種我可以一聽到需求,就知道如何改進如果調(diào)整他們。那么如何深刻理解,我選擇的方式即是:直接自己編程。
自己編程除了能深度了解技術(shù)原理,更重要的是你會容易沉浸其中,精力和時間不會容易分散,是適合短時間內(nèi)深度了解一個事物的一種方式。當然,你還可以通過寫書、開設(shè)論壇、融入相關(guān)群體天天交流等方式,都可以達到這個目的。
基于背景,這個項目也賦予了以下特性:
- 屬于自學型項目,使用Unity和相關(guān)Unity插件重頭編輯一個自己的區(qū)塊鏈和P2P網(wǎng)絡。
- 屬于教學型項目,對于Unity、C#開發(fā)人員有很好的教學價值。
- 屬于非專業(yè)的項目,給予教學目標,代碼無法直接用于專業(yè)的商用。
- 屬于非完全的項目,項目還在開發(fā)中,加上我并不是特別強的開發(fā)人員,所以項目中會有大量的瑕疵,請勿噴。
項目的目的:
- 國內(nèi)技術(shù)能力日益增長,希望有更多開發(fā)者在閑暇之余,能研究區(qū)塊鏈或其他的技術(shù),做處一些有意義的項目,實現(xiàn)自身價值。
- 以及交流學習,提升自身。
如果你也是開發(fā)人員,如果你恰好還是Unity開發(fā)人員,那么同學,請收藏此倉庫??,給個星星??。雖然當前項目不算完善,但你的一個小小的贊,是我們繼續(xù)完善下去的最直接最強有力的動力。也希望這個鼓勵??能延續(xù)傳遞下去,讓更多的技術(shù)人員作出有意義的項目。
2. 開發(fā)環(huán)境說明??
為了避免不必要的錯誤,使用的Unity版本請不要大于或者小于此項目版本的2個版本。
基礎(chǔ)說明 | 版本 | 其他 |
---|---|---|
Unity版本 | 2021.3.18f1c1 | |
數(shù)據(jù)庫 | LiteDB.5.0.16 | 區(qū)塊鏈數(shù)據(jù)都是保存在Peer設(shè)備的本地,區(qū)別與哪些設(shè)備有權(quán)保存。關(guān)于LiteDB |
P2P網(wǎng)絡協(xié)議 | UDP | 以太坊也是使用的UDP協(xié)議 |
多線程工具 | UniTask | 關(guān)于UniTask |
網(wǎng)絡插件 | SuperNet | 關(guān)于SuperNet |
3. 整體架構(gòu)
3.1 核心模塊
??????區(qū)塊鏈概念中的“區(qū)塊“,即是指一種數(shù)據(jù)結(jié)構(gòu),傳統(tǒng)的數(shù)據(jù)在物理結(jié)構(gòu)上就是把數(shù)據(jù)分別保存在不同的集中式數(shù)據(jù)服務器上,數(shù)據(jù)呈現(xiàn)是扁平型類,好處是數(shù)據(jù)統(tǒng)一管理方便存取,壞處是數(shù)據(jù)量增大時,就得增大對應的服務器設(shè)施。而區(qū)塊鏈是把特定的數(shù)據(jù)一批批的打包加密好之后進行保存,并且包和包之間存在著不可斷開的強聯(lián)系,這種鏈式的數(shù)據(jù)結(jié)構(gòu)稱為區(qū)塊鏈,而每次打包的數(shù)據(jù)體稱為區(qū)塊。這種鏈式結(jié)構(gòu)的好處是每個包體相對獨立又強烈依賴,每個包體的容量有限方便傳輸,但同時也帶來了更多的難點,而區(qū)塊鏈的其他模塊即是針對這些問題而采取的技術(shù)手段。
??????其中“區(qū)塊“模塊,需要負責每個區(qū)塊(也就是數(shù)據(jù)包)的打包、認證、加密、解析等等操作。
??????“交易/通訊“模塊,主要負責用戶之間的數(shù)據(jù)交互,之所以也用了“通訊“的命名,是因為“交易“是金融型區(qū)塊鏈常用的命名,但其實對于程序來說它只是一種通訊數(shù)據(jù)類型,既然我們的是使用區(qū)塊鏈應用于其他行業(yè),所以用通訊交換更加貼切。
??????“交易/通訊池“模塊,區(qū)塊的打包只能去打包有效、正確合法的數(shù)據(jù),所以用戶之間的通訊信息不能直接就打包,需要先緩存在訊通池中,等有用戶完成了特定事件,進行打包的時候再統(tǒng)一從池子里面獲取通訊數(shù)據(jù),進行驗證后再打包。
??????“質(zhì)押“模塊,質(zhì)押模塊是POS權(quán)益證明類型的概念,屬于區(qū)塊鏈共識機制之一。無論是POW工作量證明還是POS權(quán)益,本質(zhì)都是為了解決一個問題,誰有權(quán)益去打包,如果大家都可以無時間無條件限制的打包,那就產(chǎn)生了“先用誰的“和“誰的對“的問題。而共識機制即通過算法規(guī)則,讓這種權(quán)利自動化的方式。在本項目代碼中,你可以同時看到POW相關(guān)算法代碼,也可以看到POW相關(guān)代碼,且由于POW太消耗設(shè)備,所以此項目采用POS機制,當前我們知道了它的作用,你用其他機制甚至自研機制也可以,但是切記一個好的機制是賞罰分明且平衡,并且最主要是無法被惡意破壞。還有其他機制可以自行搜索。
??????“Peer節(jié)點“模塊,區(qū)塊鏈中重要的三個重要角色:用戶、礦工、節(jié)點。這三個角色中由于權(quán)限、責任和保存數(shù)據(jù)的不同進行了劃分。其中節(jié)點即是區(qū)塊鏈P2P網(wǎng)絡中的Peer,代表著網(wǎng)絡中的一個節(jié)點,它有根據(jù)保存數(shù)據(jù)的多少分為全節(jié)點和SPV節(jié)點,全節(jié)點很好理解就是保存所以區(qū)塊的數(shù)據(jù),而SPV節(jié)點只是保存區(qū)塊的索引信息,就好像是全節(jié)點保存了所有的書,而SPV只是保存了書的名字和位置,但沒有書里面的內(nèi)容。而礦工也是節(jié)點的一種類似,區(qū)塊鏈會有一些社區(qū)自建的節(jié)點,而社區(qū)的擴展需要發(fā)展更多的節(jié)點,所以有了礦工,他們通過平臺的共識機制通過付出一些成本,然后獲取保存數(shù)據(jù)稱為節(jié)點的存在,然后獲取到對應的報酬。并且節(jié)點還其中中繼器的左右,中繼器就是一個中間人,在P2P網(wǎng)絡中我要去和B進行通信,需要一個公網(wǎng)的中繼服務幫我聯(lián)系到對應的B,從而進行通信。最后就是用戶了,用戶很簡單,即是區(qū)塊鏈應用層的使用者。
在此學習項目中,我們將不區(qū)分用戶、礦工、和節(jié)點,他們統(tǒng)一都是以節(jié)點存在,有著節(jié)點的責任和義務。
??????“Peer儲倉“模塊,儲倉是此項目的概念,此項目希望區(qū)塊鏈不只是保存數(shù)字類型的數(shù)據(jù),同時可以保存字符、圖片、模型、動畫等等這些游戲中使用的數(shù)據(jù)。那傳統(tǒng)的金融區(qū)塊鏈的金額保存和計算方式將無法使用,金融區(qū)塊鏈計算一個人的資金額度數(shù)據(jù),需要通過獲取所有區(qū)塊內(nèi)交易的數(shù)據(jù)進行統(tǒng)計,實質(zhì)上就是通過區(qū)塊中所有的交易數(shù)額的加減的方式進行計算。而加減只適合數(shù)字,像字符、圖片、模型等等屬于唯一性質(zhì)的虛擬物品文件,就無法通過區(qū)塊的數(shù)字加減得出,所以有了儲倉的概念。它的目的是保存非數(shù)字類型無法加減計算的數(shù)據(jù),并且進行對物品文件數(shù)據(jù)進行加密打包和映射的工作。當然NFT等數(shù)字藏品也使用了類似的方式,只是它們不這么命名,而且區(qū)塊鏈的儲倉 最好是保存物品數(shù)據(jù)的唯一映射索引,而物品文件數(shù)據(jù)保存在傳統(tǒng)數(shù)據(jù)服務中即可,不然龐大的數(shù)據(jù)量會讓區(qū)塊鏈臃腫無法使用。區(qū)塊鏈它并不能代替什么傳統(tǒng)的結(jié)構(gòu),它只是一種新的細分產(chǎn)業(yè)的技術(shù)方案,就像C#、Python、C++都是一種編程方案,它們各有千秋,各有自己擅長的領(lǐng)域,所以不要陷入技術(shù)和輿論的誤區(qū),錯誤認為區(qū)塊鏈是一種什么巔峰性的方案。
??????“錢包“模塊,所有玩過區(qū)塊鏈的用戶,應該都知道錢包,其實就是錢包就是保存你進去區(qū)塊鏈的一個憑證,更簡單的說就是保存了你的銀行卡號,它可以讓你方便的訪問區(qū)塊鏈中屬于你的數(shù)據(jù)。這里的錢包也相對比較簡單,項目本意是想通過“BIP44規(guī)范“來實現(xiàn)錢包功能的,但是基于時間和需求量,暫時還是簡單的錢包功能。而且這里的錢包生成的助記詞采用的是“中文“????。 (那必須得是中文?。。?/p>
3.2 業(yè)務層
業(yè)務層需要結(jié)合下文的[文件結(jié)構(gòu)](#文件結(jié)構(gòu))來閱讀。
??????上面講述了區(qū)塊鏈中幾個關(guān)鍵的模塊,而在Base文件夾下的代碼即是對這幾個模塊的封裝。具體功能需要查看代碼,代碼大部分都是中文注釋。
3.3 數(shù)據(jù)層
數(shù)據(jù)層也需要結(jié)合下文的[文件結(jié)構(gòu)](#文件結(jié)構(gòu))來閱讀。
??????數(shù)據(jù)層和業(yè)務層承上啟下,代碼均在“DB文件夾“中,是對應模塊進行數(shù)據(jù)庫操作的對應代碼。
??????由于區(qū)塊鏈概念中沒有中央服務器,那也沒有中央數(shù)據(jù)庫,這也是為什么區(qū)塊鏈采用的P2P網(wǎng)絡形式,所有的數(shù)據(jù)都是保存在各個節(jié)點的本地。而此項目的所有終端都是節(jié)點,所以都需要本地數(shù)據(jù)庫,而這里采用了LiteDB數(shù)據(jù)庫,它是一種簡潔快捷本地數(shù)據(jù)庫方案,更多關(guān)于此數(shù)據(jù)庫的信息可以閱覽對應官網(wǎng)。
3.4 通訊層
網(wǎng)絡通訊協(xié)議采用的是UDP,不用擔心它會導致數(shù)據(jù)丟失,基于Unity插件社區(qū)的強大,使用的SuperNet網(wǎng)絡插件,它提供了可靠的UDP鏈接,再保留了部分傳輸速度和傳輸便捷性的同時也保存了數(shù)據(jù)的穩(wěn)定性。
??????根據(jù)GRPC通訊以及Unity Unet通訊的架構(gòu),這里對通訊層的代碼進行了二次封裝,使其更好的區(qū)分請求和響應的業(yè)務,程序會自動處理數(shù)據(jù)的分發(fā)和解析,開發(fā)者只需要完善業(yè)務邏輯處理即可,當然想要完善特殊業(yè)務,還是需要進一步修改的。
??????其中Services
文件夾保存的對應的數(shù)據(jù)字段定義,這些定義的類,即用于數(shù)據(jù)庫的保存,同時也用于網(wǎng)絡傳輸,同時這里面也需要定于對于業(yè)務的處理機制,機制包括請求和響應的數(shù)據(jù)。
?????? [棄用,由于請求接口相對業(yè)務邏輯簡單,直接可在Services文件夾定義腳本的時候根據(jù)固定方式實現(xiàn)]。ClientImpl
文件夾保存了對應請求接口的實現(xiàn)。
??????ServiceImpl
文件夾保存了對應的業(yè)務和數(shù)據(jù)的響應與處理腳步,簡單說就是實現(xiàn)了Services
文件夾中對應類的抽象響應方法。
3.5 事務層
??????事務管理層主要就是使用了簡單的Facade模式來實現(xiàn)區(qū)塊鏈的高層接口,方便后續(xù)開發(fā)方便對接。除了區(qū)塊鏈對應的幾個核心模塊的功能,還有本身數(shù)據(jù)庫事務管理、礦工挖礦的事務管理和應用層面用戶錢包業(yè)務的相關(guān)管理。
3.6 應用層
更多區(qū)塊鏈信息可以直接跳轉(zhuǎn)到區(qū)塊鏈概念簡述,了解區(qū)塊鏈基本概念。
??????如果你對區(qū)塊鏈有了一定的了解了,就會知道它其實就是一種采用P2P網(wǎng)絡的新式網(wǎng)絡服務架構(gòu),不依賴于中央服務器和數(shù)據(jù)庫,可以更好的把數(shù)據(jù)的權(quán)利分發(fā)給用戶,也可以減少企業(yè)的服務器運營和維護成本。但最大的劣勢很明顯,不適合保存體積過大的數(shù)據(jù)。
??????但不管它怎么改變,他其實還是一種網(wǎng)絡服務。對于我們用戶,數(shù)據(jù)保存在哪里?怎么保存?怎么鏈接網(wǎng)絡?我們是無法直接感受到變化的。我們注重還是產(chǎn)品本身的價值,比如它是能幫我節(jié)省流量?還是它能讓我的賬戶更安全?還是它能讓我的權(quán)益得道更好的保證?還是它能給我生活提升什么便利?亦或是它能讓我通過數(shù)據(jù)掙錢?而恰恰我們在意的點在目前的區(qū)塊鏈技術(shù)中無法體驗。 區(qū)塊鏈的金融屬性比較特殊,這里不加評論,但簡單來說它不具有傳統(tǒng)的用戶價值,至少目前是的。除非哪天賭博屬于有價值的致富方式。
??????這一無法給用戶帶來直觀價值的要素決定了區(qū)塊鏈的局限性,它目前以信任鏈的作用更多用于一些ZhengFu或者大廠的基礎(chǔ)設(shè)施的改革和實驗,但也是局部范圍的。
??????當然這一呈否定的認知,只是讓我們站在落地的角度認清區(qū)塊鏈就是一種網(wǎng)絡服務,而不去過度神化,這樣才能保持冷靜的思考它的可用性。并且我們還沒有說 智能合約
這一利器,并不能徹底否定它的存在。
這里也給出了一些應用方面的可能性:
??????積分權(quán)益: 區(qū)塊鏈的共識機制和不可破壞的社區(qū)規(guī)則,恰恰可以用于社區(qū)服務,目前行業(yè)內(nèi)社區(qū)服務的權(quán)益激勵確實還存在很大的空缺。如果針對社區(qū)權(quán)益使用區(qū)塊鏈進行Saas化,方便其他三方平臺進行參與,為社區(qū)用戶提供更多的生態(tài)轉(zhuǎn)化、更多樣的價值體現(xiàn),將會有聯(lián)合社區(qū)一樣的形態(tài)存在,集合起來服務用戶。當然這也需要區(qū)塊鏈具備智能合約
的功能。當然這里只是提供假設(shè),具體實施肯定有更多問題。但假設(shè)你開發(fā)的產(chǎn)品進行宣傳的時候告知用戶,你繼承了XXX社區(qū)鏈可以共享權(quán)益,應該會有很多用戶因為之前的存量權(quán)益特意去你的產(chǎn)品里面進行體現(xiàn)的。提現(xiàn)有金融性質(zhì),體現(xiàn)是通過某種性質(zhì)或現(xiàn)象通過某一事物具體表達表現(xiàn)出來,可能會更寬泛的形容這一兌換的行為
。
??????正負獎勵訓練數(shù)據(jù): AI實在是太火了,而且由于AI的特性,未來數(shù)據(jù)的價值會越顯重要。假設(shè)我們想要開發(fā)一套AI無人駕駛飛行算法,傳統(tǒng)的方式即是通過大量的現(xiàn)實實驗和少量的虛擬實驗進行訓練。而如果使用游戲化的方式,通過讓玩家在游戲中操作無人機進行娛樂,并且在這個過程中收集操作數(shù)據(jù),并且給予訓練服務進行訓練,可能會極大的節(jié)省AI訓練的成本也就是數(shù)據(jù)來源的成本。當然這只是不專業(yè)的假設(shè),具體實施起來,會發(fā)現(xiàn)實際的AI無法駕駛和虛擬的駕駛環(huán)境相差過大,模型的泛化能會很低很低,并且還涉及到攝像頭的視覺識別,導致虛擬化可能性降低和成本變高。但目前僅是假設(shè),具體實施可行性需要交給未來。
[最新咨詢顯示英偉達NVLink互連技術(shù)已經(jīng)實現(xiàn)了144 TB內(nèi)存的共享顯卡的調(diào)用,對于未來AI領(lǐng)域的發(fā)展有著重要的推動作用]
??????用戶行為數(shù)據(jù): 也是一種能為用戶帶來直接利益的方式,基于未來數(shù)據(jù)的價值,如果企業(yè)需要進行新市場的研究,或者新運營手段,用戶數(shù)據(jù)能為相關(guān)策略提供直接價值。而目前行業(yè)中并沒有這種用戶通過出售個人數(shù)據(jù)來進行盈利的產(chǎn)品,一是你的數(shù)據(jù)其實不是你的數(shù)據(jù),它們都是保存是對應企業(yè)的中央服務器,二是他們會把數(shù)據(jù)歸于他們所有,其實理論上不歸你所有,因為你無法利用到它,其次就算你的數(shù)據(jù)可以交易,但目前也沒有網(wǎng)絡架構(gòu)無法為此提供保障。而區(qū)塊鏈可以很好的提供此服務,對于任意方,大家數(shù)據(jù)不可篡改,即保護了數(shù)據(jù)的完整和真實性,也確保用戶的權(quán)益。如果有天,你可以通過下載一個APP,然后APP有一個收集你健康數(shù)據(jù)的征集任務,任務標明了收集的數(shù)據(jù)明細以及最終收益,你是否會賣自己的數(shù)據(jù)呢?
??????個體價值數(shù)據(jù): 這個和積分權(quán)益差不多,就是把個體用戶的數(shù)據(jù)價值體驗出來。也是這個游戲項目想要實現(xiàn)的目標,設(shè)想你購買的王者榮耀的皮膚、裝備、特效、模型以及你的游戲好友數(shù)據(jù)真是意義上是屬于你的,你還可以把它用于吃雞或者其他游戲 ,是不是感覺很酷。
4. 文件結(jié)構(gòu)
方便開發(fā)者快速定位到項目中區(qū)塊鏈的代碼
以下??是所有Assets資源下的文件夾
文件夾 | 說明 |
---|---|
Adaptive Performance | Unity手機模版自帶,不解釋,自查 |
AMyML | 未來做AI訓練的測試文件夾 |
ArouseBlockchain | 本項目區(qū)塊鏈相關(guān)的所有代碼 |
Best HTTP | 未來做Http請求,方便網(wǎng)頁展示的 |
Editor | 不解釋,自查 |
InfinityPBR | 目前項目中那個果凍形象的相關(guān)資源文件夾 |
ML-Agents | Unity AI 角色訓練的相關(guān)代碼 |
MobileDependencyResolver | 不解釋,自查 |
Plugins | 不解釋,自查 |
Resources | 不解釋,自查 |
Scenes | 不解釋,自查 |
StreamingAssets | 不解釋,自查 |
SuperNet | 目前項目中網(wǎng)絡通信的核心代碼 |
TextMesh Pro | 不解釋,自查 |
TutorialInfo | 不解釋,自查 |
UltimateCleanGUIPack | 目前項目中UI的素材插件 |
Unity-Logs-Viewer | 用于手機平臺進行Log打印的插件 |
Unity.VisualScripting.Generated | 不解釋,自查 |
以下??是ArouseBlockchain/Scripts
腳步文件夾列表。
文件/文件夾 | 路徑 | 說明 |
---|---|---|
ArouseBlockchain/ | …/Assets/ArouseBlockchain/… | 區(qū)塊鏈核心代碼,核心代碼盡量和Unity代碼分離開來,很小的工作量就可以徹底獨立出來,方便你用于其他非Unity的C#項目 |
Base/ | …/ArouseBlockchain/Scripts/… | 區(qū)塊鏈核心代碼 |
Common/ | 同上 | 區(qū)塊鏈公共代碼 |
DB/ | 同上 | 數(shù)據(jù)保存業(yè)務處理 |
P2PNet/ | 同上 | P2P網(wǎng)絡通信類 |
Solve/ | 同上 | Facade模式的高層接口類,用于統(tǒng)籌和對公業(yè)務 |
…/Scenes/ArouseBlockchain.unity | …/ArouseBlockchain/Scenes/… | 客戶端場景 |
…/Scenes/Server.unity | 同上 | 服務端運行場景,如何使用? |
5. 功能清單
? 已完成 ?????? ???????? 進行中 ?????? ???????? 計劃中
現(xiàn)有特征 包括已有和在本期開發(fā)計劃中的 |
未來規(guī)劃 未來可能會實現(xiàn)的功能 |
---|---|
? 以及區(qū)塊鏈基本算法和功能(除了挖礦和礦工的概念) | ?? 開通三方接口給游戲方 (使用接口下載用戶3D素材,打通游戲壁壘,是否可以實現(xiàn)商業(yè)目的完全看用戶體量) |
? P2P網(wǎng)絡鏈接 (持續(xù)性檢索Peer對等端) | ?? 對接中心化服務器,托管與任何官方的管理體系 |
? UDP通信 | ?? 加入游戲類型AI,用戶幫助訓練AI模型 (賽車游戲、飛行器游戲等等機械操作類和其他) |
? 自定義NFT支持 (區(qū)塊支持模型、貼圖、動畫的交換) | ?? 加入更多中繼服務器 |
? 冷錢包支持 (BIP44分層HD規(guī)則的自定義錢包) | ?? 創(chuàng)建H5前段展示功能,可供查看區(qū)塊情況,以及H5進行區(qū)塊操作 |
? 中文助記詞采用 | …. (或者你來提議,我來選擇?) |
? 支持 IP6 通訊 | |
? 簡單游戲化運營思維的權(quán)益證明 | |
? 去貨幣概念 (不與數(shù)字貨幣有任何關(guān)聯(lián) ) | |
?? 虛擬形象的集成 | |
?? P2P雙人小游戲支持 | |
?? AI模塊集成 (Unity的機器學習ML-Agents) |
三. 代碼使用??
本教程只能把一些重點進行講解,無法對每個腳步和代碼都進行一行行說明,所以肯定會有遺漏,如有你無法明天的,可以留言私信。
1. 發(fā)布服務器版本
服務器版本需要選中且只能Server場景,然后切換到Dedicated Server
發(fā)布平臺,點擊Build
即可發(fā)布出沒有任何渲染畫面的服務器軟件,可以發(fā)布到 Linux、Window、Mac平臺。
發(fā)布成功后,即可以部署在對應公網(wǎng)服務設(shè)備后,并操作設(shè)備的防護墻,打開特定的端口44824
,端口號可以在對應腳步中修改??
- 關(guān)于如果部署自己的服務設(shè)備,需要自己學習,可行的方案是阿里云 + 寶塔 即可,把打包后的代碼上傳,作為程序運行即可。如果端口權(quán)限無誤,應該就可以直接訪問了。當然如果作為測試,也可以本地運行。
- 其中
44824
是所有中繼節(jié)點的唯一端口號,客戶端Peer通過此端口訪問公共的中繼節(jié)點,以此作為橋梁,和其他客戶端Peer進行P2P網(wǎng)絡通訊。 - 客戶端Peer是不需要固定的端口號的,都是隨機的。其中 端口號為
0
即是代表著端口隨機。
2. 運行客戶端
依據(jù)上圖的文件路徑找到,客戶端場景,運行即可。
區(qū)塊鏈的核心代碼均在ArouseBlockchain
對象上,主要代碼即ABlockChain
,可以看到上面會有一些測試按鈕,從上到下分別對應的 1. 通過公鑰地址發(fā)送交易(幣)
、2. 通過公鑰地址發(fā)送物品(圖片...)
、3. 獲取對應地址的余額和物品列表
、4. 獲取歷史的交易列表
、5. 展示錢包信息
、6. 展示創(chuàng)世區(qū)塊和最后一個塊的信息
。
而ANetworkHost 和 NetworkManager的配置說明可以查看相關(guān)文檔。
3. 在區(qū)塊鏈中添加定制的數(shù)據(jù)類型
如果需要定義自己的區(qū)塊數(shù)據(jù),需要在NetStorageItem.cs
中添加自己數(shù)據(jù)對象的類,目前已有了StorageNumberItem
數(shù)字型對象,可以進行積分、經(jīng)驗等等數(shù)字類型的數(shù)據(jù); 以及StorageObjItem
對象型對象,理論上你的數(shù)據(jù)類型不是特別復雜完全可以用此對象作為交易數(shù)據(jù)對象,當然也可以繼承重構(gòu)。
當你定制了你自己的數(shù)據(jù)類型之后,還要在AStorageItem.cs
??代碼中修改鑄造方法,讓代碼適應你的數(shù)據(jù)類型。這樣,區(qū)塊鏈上進行的數(shù)據(jù)交互就可以有更多的可能性。
4. 添加自定義的網(wǎng)絡消息體
其中P2P網(wǎng)絡中,服務器和客戶端的邊界是相對模糊的,這里代碼會進行分開命名主要是為了方便理解。但在業(yè)務處理中,服務和客戶端的業(yè)務處理和傳統(tǒng)的方式不同。理論上P2P的客戶端也可以是服務器,服務器也可以是客戶端,我們統(tǒng)一都稱呼為 Host。
4.1 自定義數(shù)據(jù)結(jié)構(gòu)和解析業(yè)務
??上圖所示是區(qū)塊模塊需要進行網(wǎng)絡通信的代碼。設(shè)計和構(gòu)造需要去NetBlock.cs
腳步中進行編寫,此腳步中代碼主要分為兩部分,一部分是數(shù)據(jù)傳輸過程中的結(jié)構(gòu)和類型定義,一部分是訊通請求和響應的業(yè)務處理。
其中數(shù)據(jù)定義需要同時符合數(shù)據(jù)庫和網(wǎng)絡接口的規(guī)范,具體規(guī)范可以看數(shù)據(jù)庫定義規(guī)范和網(wǎng)絡接口規(guī)范。
并且響應方法,如上圖的abstract class BlockServer
一定需要繼承INetServerSendComponent
接口,這樣主程序會根據(jù)你的數(shù)據(jù)類型自動識別業(yè)務方法進行調(diào)用,會少去一些工作量。
另外,這里的代碼框架是可以優(yōu)化的,最好的方式是像GRPC.Tools一樣解析.proto文件即可完成代碼的自動構(gòu)建。對此感興趣的話可以自行百度相關(guān)資料。
需要特別說明是網(wǎng)絡傳輸時數(shù)據(jù)類型的定義,如下。由于網(wǎng)絡通信的信息體需要表明類型,以此說明這個信息體是什么,才能方便業(yè)務進行處理。所以這些類型一定不能重復,也就是 byte的數(shù)值不能有重復,并且數(shù)值需要在 0~255之間。如下我們定義了TransferRequest = 246
意思是交易的請求類型的246,那么其他類型就不能再用246了。
//byte :0~255
public enum TransactionMessageType : byte
{
// 1.發(fā)送一筆交易,Host接受到之后,保存到交易池子中,并廣播出去
// 2.所有的Peer進行對交易的Pool保存
// 3.當其中一個Peer構(gòu)建塊的時候,把這個交易放入塊中,并同步塊。
TransferRequest = 246,
TransferResponse = 245,
TransactionListRequest = 244,
TransactionListResponse = 243,
}
4.2 編寫請求業(yè)務邏輯
其中請求業(yè)務邏輯相對比較固定,下面是進行交易的請求接口,作為案例講解。
CResponseAsyncComponent _TransferRequest_Obj;
public async Task<TransferResponse> TransferRequest_Obj(string sender, string recipient, string obj_Hash, int fee, CancellationTokenSource cancellationToken)
{
// 第一步:創(chuàng)建一個異步組建用于進行異步P2P訪問,并防止訪問失效之前重復訪問
if (_TransferRequest_Obj != null && _TransferRequest_Obj.IsWaitResponse_Connect)
{
ALog.Error("請勿重復訪問?。?);
return default;
}
if (_TransferRequest_Obj == null) _TransferRequest_Obj = new CResponseAsyncComponent();
// 第二步:開發(fā)進行P2P請求,并指定特定的請求數(shù)據(jù)類型和響應數(shù)據(jù)類型以及請求的Peer類
// 這里會進行異步等待,當有返回結(jié)果則返回 TransferResponse 類型的響應數(shù)據(jù)體,里面包含了你定義的數(shù)據(jù)內(nèi)容,解析即可。
// 其中cancellationToken是統(tǒng)籌管理線程,并用來控制線程的響應超時時間的。如果不設(shè)置此數(shù)值,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;
}
如上述代碼注釋:
- 第一步:創(chuàng)建一個異步組建用于進行異步P2P訪問,并防止訪問失效之前重復訪問
- 第二步:開始進行P2P請求,并指定特定的請求數(shù)據(jù)類型和響應數(shù)據(jù)類型以及請求的Peer類。
這里會進行異步等待,當有返回結(jié)果則返回 TransferResponse 類型的響應數(shù)據(jù)體,里面包含了你定義的數(shù)據(jù)內(nèi)容,解析即可。
其中cancellationToken是統(tǒng)籌管理線程,并用來控制線程的響應超時時間的。如果不設(shè)置此數(shù)值,Unity主線程不會幫助你釋放對應線程的,這會導致很多錯誤。
4.3 響應業(yè)務邏輯
響應的業(yè)務邏輯會繁雜,所以需要單獨的類中進行集成和實現(xiàn)。上圖是現(xiàn)實了NetTransaction.TransactionServer
交換服務響應業(yè)務的方法。根據(jù)此邏輯實現(xiàn)你的業(yè)務邏輯即可。
5. 添加自定義的配置文件
如上圖??,可以通過目前我自己的一個云服務器獲取到一個系統(tǒng)配置文件,以下是其中一個配置文件的內(nèi)容。如圖??所示,此配置文件記錄了一些社區(qū)管理人信任的初始節(jié)點BootSrtapPeers
列表(目前有些節(jié)點是本地測試的) ,它可以幫助新用戶提供初次接入?yún)^(qū)塊鏈,后面的節(jié)點程序會自己從新記錄更多有效的節(jié)點。其中PublicIPServices
是公網(wǎng)驗證的地址,目前是為了驗證用戶設(shè)備的公網(wǎng)地址,方便中繼服務進行P2P打洞鏈接,并且還可以幫助判斷是否多個設(shè)備處于同一局域網(wǎng),如果局域網(wǎng)的設(shè)備會自動進行局域網(wǎng)通信,而不是公網(wǎng),這對于游戲互動來說非常方便。
如果你需要添加自己的配置文件,也還是阿里云 + 寶塔 方案,可以方便的讓你部署自己的配置文件。
6. 完善Unity UI和業(yè)務代碼
為了更好的獨立區(qū)塊鏈的代碼,方便你移植用于其他用途,這里會把Unity的代碼放在單獨的文件夾,即../Assets/ArouseBlockchain/Unity..
中,里面包括了UI素材和大量UI的代碼。由于UI的工作量不是區(qū)塊鏈的核心,這里的UI并沒有很完善,只是做了適當?shù)恼故?,沒有進行美化。如果你有興趣可以進行修改。
7. 代碼聲明
- 我不確定會有多少人用的到此項目代碼,如果未來關(guān)注的人多了,大家提到關(guān)于代碼的問題也多了,這里會繼續(xù)完善。目前先寫這么多,由于初次發(fā)布,也不清楚大家會提什么問題。
- 我的開發(fā)能力不是很強,如果大大神路過,發(fā)現(xiàn)代碼中有不合適甚至很幼稚部分,請及時溝通。
- 我承認代碼中還有很多為完成的部分,包括多余的代碼、寫了一半的程序、沒有打通的業(yè)務、不夠嚴謹?shù)倪壿?。希望有喜歡此項目的大神也可以直接進行共同完善。畢竟一個人的時間不是那么多,為了生計已經(jīng)話費了太多時間。當然各位的支持也是完善下去的動力。
四. 區(qū)塊鏈關(guān)鍵概念??
關(guān)于區(qū)塊鏈概念中一些基礎(chǔ)內(nèi)容的簡述
1. ??P2P對等網(wǎng)絡
??????傳統(tǒng)的網(wǎng)絡通訊結(jié)構(gòu)是 C/S 形式的,S 就是一個以上負責通訊轉(zhuǎn)發(fā)的服務器Server,C就是我們一個個的客戶端Client。你現(xiàn)在手機上用的99%的APP都是這種網(wǎng)絡結(jié)構(gòu),比如聊天軟件,你要給朋友發(fā)送訊息,得先把訊息發(fā)給服務器,然后服務器找到你的朋友,再轉(zhuǎn)發(fā)給你的朋友,這種需要中心服務器轉(zhuǎn)發(fā)消息的網(wǎng)絡架構(gòu)就是C/S 架構(gòu)。而P2P則完全不同,”P”即是 “Peer”,這里我給予技術(shù)解釋為“對等端”,對等端可以理解為在一個業(yè)務體系中,同處于一個級別的所有端的全體的總稱,簡單來說的比如我們都是使用聊天工具的用戶,我們每個用戶就是同等級的對等端,而作為工作人員的聊天軟件的運營人員又有著不同的權(quán)限和職責,它們又成為了新的同等級的對等端,且這個不同的等級的分界并不是那么統(tǒng)一的,這取決于你服務的業(yè)務。
??????當然上面說的是P2P的宏觀定義,而P2P具體的技術(shù)實現(xiàn)架構(gòu)就是一個讓所有的對等端可以直接通訊,不需要中心服務器進行轉(zhuǎn)發(fā)的網(wǎng)絡架構(gòu)。這也并不是什么新的技術(shù)了,迅雷的視頻下載就提供了P2P,它的好處就是越多人下載,理論上你就有個越多的資源服務器,然后資源的下載速度就會快。這種方式一方面減少中心服務器的壓力,一方面提升了用戶的體驗。
??????P2P的網(wǎng)絡鏈接,也并不是完全不需要中心服務器,不然P和P一開始都不知道對方,也無從談鏈接了。所以這里還會有一個以上的中繼服務器的存在,中繼服務器的作用之一就是幫助每個對等端建立開始時的鏈接,之后的通訊它們自己完成就可以。[而理論上中繼服務器越多,整個業(yè)務系統(tǒng)也會更完善,這也預示著需要鼓勵一些對等端成為中繼,而這個問題則衍生了”共識機制”。虛擬**的解決方案就是礦工,用挖礦來激勵更多端作為中繼。]
2. ??不可逆加密
??????加密技術(shù)在目前行業(yè)里面已經(jīng)應用的很廣泛了,具體的技術(shù)細節(jié)就不多加贅述。簡單來說,加密本質(zhì)就是把一些人可以直接看懂的數(shù)據(jù),利用技術(shù)手段使其變?yōu)閬y碼。而目前行業(yè)里區(qū)塊鏈使用最多的是“SHA-256” 哈希算法,這種非對稱加密算法的最大特點就是,加密后的數(shù)據(jù)無法或者極其困難反向推算出原始數(shù)據(jù)。(公鑰私鑰暫時不加贅述)這也導致直接結(jié)果是哪怕我自己私鑰加密的數(shù)據(jù),我也無法把加密后的數(shù)據(jù)進行反向推算。這種加密方式雖然說是“數(shù)據(jù)加密”,而且常識情況下人們也容易理解成你的數(shù)據(jù)加密后讓別人無法看,但千萬記住其實你自己其實也無法看。但它的價值就是在當下技術(shù)瓶頸下會非常安全,而作為持有公鑰和私鑰的你,就相當有了唯一的憑據(jù),來證明這個數(shù)據(jù)是你的。
??????加密后,不可逆的特性也引申出了區(qū)塊鏈是一種 “信任鏈”的概念。目前國內(nèi)我們不知不覺的產(chǎn)業(yè)和業(yè)務都根據(jù)這一特性進行著改革。更多內(nèi)容可以看中科院的相關(guān)文獻。[上面還有量子通信、數(shù)字孿生、汽車行業(yè)等等相關(guān)行業(yè)技術(shù)發(fā)展的白皮書]
中國信通院:2022年區(qū)塊鏈白皮書
隨著數(shù)字經(jīng)濟時代到來,區(qū)塊鏈與其他新一代信息技術(shù)交叉融合,其 信任價值將被進一步激發(fā),通過充分融合公有鏈與聯(lián)盟鏈技術(shù)優(yōu)勢, 為信任科技積蓄能量。信任科技以區(qū)塊鏈等多技術(shù)融合為核心,著力 打造數(shù)字化信任基礎(chǔ)設(shè)施。其既是數(shù)字經(jīng)濟新時代對于數(shù)據(jù)要素全流 程可信管理的必然要求,也是 Web3.0 發(fā)展中解決互聯(lián)網(wǎng)數(shù)據(jù)要素權(quán) 屬和交易流通問題的重要創(chuàng)新。
3. ??共識機制
??????共識機制是整個區(qū)塊鏈里面最不算技術(shù)的技術(shù)方案了,但又是最最重要的內(nèi)容,涉及到你的區(qū)塊鏈要怎么改造?區(qū)塊鏈是否真的能幫助你的業(yè)務或產(chǎn)業(yè)等問題。當然,說它不是技術(shù),是因為本身共識機制是結(jié)合社會學、人性、責任、懲戒、激勵等等和人相關(guān)的內(nèi)容,更像是一系列的運營規(guī)則。(當然也并不只局限于人,機器和機器也可以,技術(shù)只是工具)
??????講一下共識機制,得再次著重聲明下“共識”,共識是指達成一個各個分歧方所接受的解決方案(即使有時只是勉強接受,甚至只是擱置爭議),而共識機制即這個方案的規(guī)則,當這個規(guī)則達成一致,會讓本來混亂無章的系統(tǒng)更加穩(wěn)定平衡且向上發(fā)展,這種機制我們生活中隨處可以,公司考勤機制、城市管理規(guī)章、王者榮耀的銘文機制、交通紅綠燈… 都是共識機制,且我們都默許并遵守著。由于目前行業(yè)沒有較好且資料很多的區(qū)塊鏈應用可以參考,我們可以先以虛擬**的共識機制進行討論。
??????在說明虛擬的共識機制之前,得科普一個技術(shù)要素,那就是任何互聯(lián)網(wǎng)產(chǎn)品,無論怎么更新迭代,都不能沒有 網(wǎng)絡通訊和數(shù)據(jù)庫兩個最基礎(chǔ)的東西。而虛擬是以去中心服務器和P2P網(wǎng)絡通訊的方式運行的互聯(lián)網(wǎng)產(chǎn)品,那數(shù)據(jù)庫保存在哪里很重要,但它又沒有中心服務器,那只能選擇保存在用戶的終端上,那選擇誰去保存呢?如果誰都可以隨便隨時無成本的保存,那它只需要購買N個服務器然后保存,就可以保存80%的數(shù)據(jù),那最終裁決權(quán)就歸屬這個人了,這打破了平等的規(guī)則,肯定不行。這個時候這就引申出了礦工這一用戶群體,行業(yè)里面說的質(zhì)押、挖礦、工作量證明Pow、權(quán)益證明Pos其實就是通過不同的機制篩選出一些用戶的終端,作為數(shù)據(jù)庫的作用,用一定的成本來為區(qū)塊鏈打工,并且換取更多的激勵,并且還有其他的機制,比如如何證明誰的區(qū)塊之間哪個是最新的,是正確的,誰付出的更多,如何解決區(qū)塊的沖突等問題,也有著相應的機制。
??????上述我們參考了虛擬的共識機制,可以看出 機制就是碰到一個阻擋目標的問題而衍生出的解決方案,每個程序里面都有的自己的機制。但還有最重要的“共識”,因為你必須讓參與解決方案的所有方認同并且依照這個規(guī)則,且也無法打破,才能更好的維護整個區(qū)塊。辦法也很簡單,虛擬的方式就是加密和計算機程序來判決,而不是人去控制和判定。所以你的產(chǎn)業(yè)或者業(yè)務機制如果需要區(qū)塊鏈來改進,那首先需要看本身業(yè)務的規(guī)則和規(guī)律是否穩(wěn)定統(tǒng)一,并且可以用技術(shù)的方式去自動化。
我在創(chuàng)建這個博客的時候,ChatGPT 已經(jīng)到了第四版本了,我有幸之前也參與過機器學習的項目,并且也在研究Unity的ML-Agents。結(jié)合區(qū)塊鏈,感覺未來區(qū)塊鏈結(jié)合AI一定是最強搭檔,AI如果充當區(qū)塊鏈共識機制檢察長,在機制和共識兩個方面都會有質(zhì)的改進。
4. ??分布式儲存
??????上文說到互聯(lián)網(wǎng)產(chǎn)品無法避免的兩大基礎(chǔ)要素,網(wǎng)絡和數(shù)據(jù)庫。由于P2P的網(wǎng)絡結(jié)構(gòu)把網(wǎng)絡通訊99%的對接直接交給了每個對等端自己,那沒有中心服務器,數(shù)據(jù)在哪里保存就是個問題了。這就對應了分布式儲存,其實就是既然對等端自己對接,那數(shù)據(jù)它們來保存吧。
??????而保存數(shù)據(jù)需要的條件和要求不同,就延伸出了不同的區(qū)塊鏈(聯(lián)盟鏈、私有鏈、公鏈、 作側(cè)鏈),其實它們主要區(qū)別就是保存數(shù)據(jù)的人/組織是誰有多少。但公鏈是最早由虛擬**引申出來的,但那時候這種顛覆傳統(tǒng)的網(wǎng)絡模式的改變,在利益的驅(qū)使下被賦予了敏感意義“去中心化”,因為公鏈就是所有人都有可以保存數(shù)據(jù),在某些領(lǐng)域沒有監(jiān)管和高緯度的制度,這帶來的只是另一種混亂。
??????那在講區(qū)塊鏈這種分布式儲存架構(gòu)之前,就得提到“集中式”和“分布式”概念,無論是系統(tǒng)和組織,都會面對集中式在系統(tǒng)擴張到一定規(guī)模后無法適應,分布式在又存在管理和成本的問題,系統(tǒng)小的時候無法支持。對于整體系統(tǒng),集中式在前期易于管理,可以產(chǎn)生更好更快速的同步,并且很少會有子系統(tǒng)之間信息的矛盾和丟失,但劣勢也很明顯,在體量大到一定程度,事務的量和復雜度成指數(shù)提升,就會加重整體系統(tǒng)的負擔,影響主系統(tǒng)的決策質(zhì)量,且整體再去調(diào)整和整頓會有較大成本,子系統(tǒng)的均衡性(積極主動)也會減弱,慢慢的會導致整體系統(tǒng)缺乏外部環(huán)境的適應能力。而分布式呢,通常都是有了一定體積之后采取的擴張途徑,太早期的話浪費成本又不會有太大價值,容易導致效率延緩,特別是前期不穩(wěn)定的情況下容易無法凝聚,但體量大了之后就會形成穩(wěn)固的規(guī)范規(guī)則,在這種規(guī)則規(guī)范下相對集中式會有效提高子系統(tǒng)參與和均衡,并且對于局部不斷變化的需求很是有利,同時減輕了主系統(tǒng)的負擔,使其精力更集中于重大事務的決策和處理。
??????所以長遠來看,分布式有著它獨有的價值,但代價也很明顯,成本很高。就服務器和數(shù)據(jù)庫來說,采用這種結(jié)構(gòu)的都是大廠。而區(qū)塊鏈恰恰是一種低成本的分布式解決方案,職責分散平等了,對應的成本也相應分散了,并且由于其透明公開、無法偽造的安全前提,更有助中心系統(tǒng)去觀察和管理,最終會更方便有效的幫助整體業(yè)務的流通和運營。
??????當然虛擬**由于其那方便的特性,他只能作為公鏈才能得以被大眾認同,但社會上其他業(yè)務和行業(yè)不同,可以根據(jù)區(qū)塊鏈幾大特點,可做拆解也可做加減 ,取能對自己有價值的即可。
一. 項目狀態(tài)說明??
1. 徽章
??????如果本項目對您的工作有著幫助,非常希望你能把這個徽章加入你的項目說明頁面中。放心,此項目完全開源,在你的項目說明中加入此徽章,只是方便其他人訪問到這個項目并也能使用到 Arouse Blockchain
,這對于行業(yè)內(nèi)的開發(fā)大環(huán)境有著積極的影響,也會促進更多獨立開發(fā)者有更強勁的動力做出好的項目。 ??加入徽章并非強制的。
加入徽章到 Markdown 文本里面,可以使用以下代碼:
//github倉庫
[](https://github.com/KitStarLee/ArouseBlockchain_Unity)
//gitee倉庫
[](https://gitee.com/KitStarLee_admin/arouse-blockchain)
2. 相關(guān)倉庫
- UbudKusCoin — ?? 使用C#進行區(qū)塊鏈編程的教程,給予了本項目很大的啟發(fā)。此文沒有針對編程有過多的教學,這個倉庫可以彌補,對于技術(shù)人員有很大幫助。
3. 如何貢獻????
非常歡迎你的加入!提一個 Issue、提交一個 Pull Request 或者給予重要的建議, 即可對此項目做出貢獻。
貢獻者
感謝以下參與項目的人:
4. 使用許可
Eclipse Public License ? KitStarLee
五、Call Me???
如果有需求,加我,學習溝通交友都可。文章來源:http://www.zghlxwxcb.cn/news/detail-489789.html
??? [metarouse] 或者 [lee_kitstar],優(yōu)先第一個,回復速度快。文章來源地址http://www.zghlxwxcb.cn/news/detail-489789.html
到了這里,關(guān)于開源游戲區(qū)塊鏈項目分享:Unity開發(fā)的獨立區(qū)塊鏈的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!