無論比特幣、以太坊還是其他公共區(qū)塊鏈項目,為了業(yè)務(wù)邏輯、技術(shù)實現(xiàn)的簡單,對于生成的區(qū)塊都只有一種類型區(qū)塊,首尾相鏈,形成區(qū)塊鏈,于是帶來幾個普遍而又難以回避和解決的問題:
· 數(shù)據(jù)臃腫:數(shù)據(jù)量越來越大,到最后會達到無比的龐大,目前比特幣的區(qū)塊大約180G,以太坊的區(qū)塊已超過200G,同步需要數(shù)周甚至數(shù)月的時間,目前的解決辦法是采用輕錢包,可是輕錢包的問題是向輕錢包的提供商的服務(wù)器端請求數(shù)據(jù),失去了去中心化的意義,不可避免的會帶來安全隱患,由于同步問題的存在,對于個體而言,區(qū)塊鏈系統(tǒng)設(shè)計的再快的交易確認機制,都變的沒有意義。
· 存儲瓶頸:目前的區(qū)塊鏈設(shè)計只能實現(xiàn)同一(唯一)數(shù)據(jù)的全備份存儲,不能用于分布式的碎片化存儲,不能實現(xiàn)真正意義上的分布式存儲,只是將一份數(shù)據(jù)分別放在了很多地方,將一份數(shù)據(jù)存儲在了多個區(qū)塊鏈用戶的硬盤上而已,對于大型應(yīng)用系統(tǒng)至關(guān)重要的存儲而言,不可避免的成為瓶頸,由于只能扁平化的疊加,存儲解決不了,大型行業(yè)應(yīng)用就沒有可能遷移到區(qū)塊鏈上。
· 審核機制不健全:智能合約交互部署在主鏈上,因此主鏈會變的越來越臃腫,對于分布式計算的實時計算和應(yīng)用變的效率也會越來越低,同時應(yīng)用缺乏審核機制或者說審核機制不健全,不可避免的會影響主鏈的安全性,最終會限制應(yīng)用范圍和發(fā)展。
· 遷移難度高:針對行業(yè)、企業(yè)級應(yīng)用遷移至區(qū)塊鏈平臺難度大。
Ruby特性簡述
基于現(xiàn)有區(qū)塊鏈體系所遇到的問題,我們重新思考并設(shè)計了 Ruby,在提升傳統(tǒng)公共區(qū)塊鏈所有技術(shù)性能的同時推出了大數(shù)據(jù)模塊、智能事物合約引擎、類 N*RAID5 鏈外應(yīng)用擴展存儲等技術(shù)概念,使大量 DAPP 基于 Ruby 公共區(qū)塊鏈開發(fā)落地變?yōu)楝F(xiàn)實,Ruby 主要技術(shù)特性如下:
特性一:底層 1080 筆/秒交易速度,添加節(jié)點與分片,可支持百萬筆/秒交易速度。
特性二:快速自由發(fā)行數(shù)字資產(chǎn)、快速開發(fā) Dapp。
特性三:完全去中心化原子交易和鏈上資產(chǎn)交換。
特性四:成塊時間 15 秒,單筆數(shù)據(jù)交易量可達 2M,單塊可達 16M。
特性五:獨有的數(shù)據(jù)模塊,原生支持場景化智能合約,直接開放鏈上數(shù)據(jù)接口,可基于
所有已知成熟開發(fā)工具自由定制開發(fā) Ruby Dapp。
特性六:支持跨鏈資產(chǎn)轉(zhuǎn)移與交換,支持鏈外幣種的數(shù)據(jù)同步,同步后可在 RubyChain中直接進行所有幣種的交易。
特性七:首個商用級別的完全去中心化的類 N*RAID5 鏈外應(yīng)用擴展存儲,性能優(yōu)異,鏈外應(yīng)用過程無感。
特性八:首個線上 Dapp 軟件商店,完善的生態(tài)發(fā)展體系。
生態(tài)體系的架構(gòu)與建設(shè)
1. 安全可信賴的生態(tài)架構(gòu)
Ruby根據(jù)交易過程中不同環(huán)節(jié)的功能,在邏輯上將節(jié)點角色分為四種,讓不同類型節(jié)點可以關(guān)注處理不同類型的工作負載。
· 孵化節(jié)點:孵化 Dapp 項目,提供項目孵化服務(wù),發(fā)展 Ruby 生態(tài)。
· 共識節(jié)點:采用 Ruby working 共識機制,參與共識。
· 存儲節(jié)點:為所有應(yīng)用的鏈外數(shù)據(jù)(鏈外應(yīng)用塊)提供全節(jié)點存儲服務(wù)。
· 交易節(jié)點:為鏈上原子交易(幣幣兌換)提供交易確認服務(wù)。
· 普通節(jié)點:普通錢包用戶即為一個普通節(jié)點,具有發(fā)送、查詢交易、資產(chǎn)兌換等基本功能,同步全部區(qū)塊;
· 輕節(jié)點:不同步全部區(qū)塊數(shù)據(jù),具有轉(zhuǎn)賬、接收交易等基本功能。
2. 生態(tài)體系內(nèi)的多元化原子交易
在 Ruby 的整體生態(tài)中,流通將是整個經(jīng)濟體永恒不變追溯的主題,一個世界中,只有資產(chǎn)快速自由的流動,才會有無盡的生命力,而非一潭死水。
在過去的幾年中,區(qū)塊鏈+金融主要解決的是單一資產(chǎn)在自身體系內(nèi)流動的問題,這并不能解決整個區(qū)塊鏈生態(tài)發(fā)展的需要。賦予數(shù)字資產(chǎn)價值,而不是僅僅簡單的記錄,是 Ruby要打造的多元化原子交易體系,最終實現(xiàn)大流通的效果。
Ruby原子交易支持原生資產(chǎn)、通證資產(chǎn)和跨鏈轉(zhuǎn)移資產(chǎn),支持鏈上資產(chǎn)直接兌換,原子交易時需要扣除手續(xù)費,手續(xù)費使用原生資產(chǎn)。
未來,Ruby 將推動萬物數(shù)字化,萬物皆資產(chǎn)的生態(tài)目標(biāo),例如將某 A 的數(shù)字資產(chǎn)哈希化存儲在數(shù)據(jù)模塊中,某 B 的電影版權(quán)哈希化存儲在數(shù)據(jù)模塊中,雙方調(diào)用智能合約直接進行原子交易,發(fā)生資產(chǎn)兌換。
3. 分布式商業(yè)生態(tài),互聯(lián)網(wǎng)到區(qū)塊鏈的快速遷移
為實現(xiàn)互聯(lián)網(wǎng)時代向區(qū)塊鏈時代的快速轉(zhuǎn)化,完善擴充 Ruby 的生態(tài)體系,快速遷移將顯得尤為重要,在眾多公共區(qū)塊鏈還在打磨自身技術(shù)的時候,Ruby 率先實現(xiàn)了快速遷移的可能,利用大數(shù)據(jù)模塊+多語言支持+模塊化接口調(diào)用的方式,使得傳統(tǒng)互聯(lián)網(wǎng)的普通開發(fā)者也可以基于 Ruby 進行開發(fā),同時可以快速的將以往的產(chǎn)品接入 Ruby 生態(tài)。
4. 商業(yè)級智能物聯(lián)網(wǎng)嘗試,打造海量用戶入口
RubyBox 是 Ruby 嘗試研發(fā)的第一款基礎(chǔ)設(shè)施硬件,這次智能物聯(lián)網(wǎng)硬件的嘗試將不會在短時間內(nèi)發(fā)布,但 Ruby 團隊將會對智能物聯(lián)領(lǐng)域持續(xù)的深耕。
Ruby 在企業(yè)級用戶端將借助 RubyBox 商用版搭建區(qū)塊鏈高速公路,未來 Ruby 可以為任何區(qū)塊鏈系統(tǒng)提供加速服務(wù),包括但不限于 CDN 加速、節(jié)點加速、鏈盤等。同時基于Ruby 生態(tài)進行開發(fā)的 Dapp 也會享受到加速服務(wù)。
RubyBox 在用戶級端將提供以下服務(wù):
私人家庭安全云盤:通過 RubyBox,可以將終端設(shè)備(PC、MAC、手機)上的私人文件安全存儲在 RubyBox 上,在世界任何的位置安全自由的訪問自己的私人文件。
私人家庭媒體中心:通過 RubyBox,可以將影音文件安全下載存儲在 RubyBox 上,隨時隨地可以通過終端(PC、手機、MAC、智能電視)欣賞大片。
無限延展智能硬件:RubyBox 是開放的、共享的、互聯(lián)的。未來,會有更多的區(qū)塊鏈應(yīng)用系統(tǒng)登錄 Ruby,RubyBox 將成為充滿無限想象的智能硬件中心,通過 RubyBox 獲得的資產(chǎn)將成為生態(tài)內(nèi)的專屬融合支付手段。
RubyBox 未來或?qū)⑹?Ruby 發(fā)布的首款智能物聯(lián)設(shè)備,以此開啟線下大用戶流量入口時代。
Ruby 技術(shù)現(xiàn)狀
1. Ruby 網(wǎng)絡(luò)構(gòu)成
Ruby 的網(wǎng)絡(luò)構(gòu)成分為以下幾個方面:
· 底層核心層的區(qū)塊鏈網(wǎng)絡(luò)構(gòu)成包括:基于 UTXO 模型的賬戶體系、原子交易、共識機制、數(shù)據(jù)模塊、跨鏈協(xié)議等。保證整個 Ruby 生態(tài)的消息廣播一致性、數(shù)據(jù)安全與存儲,同時保證整個經(jīng)濟體的高度自治與流通。
· 中層服務(wù)層的區(qū)塊鏈網(wǎng)絡(luò)構(gòu)成包括:CLI、RPC 調(diào)用接口,保證任何語言的開發(fā)者可以調(diào)用 Ruby 提供的模塊化功能進行開發(fā),普通的開發(fā)者無需過多的了解區(qū)塊鏈技術(shù)即可進行大型應(yīng)用的開發(fā)與遷移,享受區(qū)塊鏈帶來的便捷與改變。
· 最高層是應(yīng)用層:其中包含 Ruby 提供的官方應(yīng)用及未來生態(tài)開發(fā)者自主開發(fā)的Dapp,應(yīng)用層將是未來 Ruby 運營的核心重點,海量的落地應(yīng)用會使得 Ruby 的生態(tài)更健康茁壯的發(fā)展。
2. Ruby working 共識機制
傳統(tǒng) POW 共識機制對算力及網(wǎng)絡(luò)環(huán)境要求較高,資源消耗嚴(yán)重,且存在高算力對網(wǎng)絡(luò)攻擊的威脅。對此 Ruby 針對 POW 算法機制進行改善處理,形成 Ruby working 共識機制。
在 Ruby working 共識機制中,保留傳統(tǒng) POW 工作量證明函數(shù) SHA256:
在 Ruby 系統(tǒng)中,基于尋找給定前綴的 SHA256 哈希值,設(shè)計了工作量證明的共識機制; SHA256 也被用于構(gòu)造地址,即用來識別不同的用戶。
相對傳統(tǒng) POW 共識算法,Ruby working 共識機制中添加了 Rotation 工作輪換證明算法以及 Contribute 系統(tǒng)貢獻算法。其中 Rotation 工作輪換證明算法是在網(wǎng)絡(luò)共識節(jié)點中隨機輪轉(zhuǎn)部分共識節(jié)點進行批準(zhǔn)交易,并在下一輪輪轉(zhuǎn)時提出一個采礦難度,認可此采礦難度的節(jié)點成為下一輪次確認節(jié)點并進行記錄,同時設(shè)置采礦限制,同一節(jié)點不可連續(xù)參與多次輪換采礦。這種結(jié)構(gòu)允許更多的礦工參與交易批準(zhǔn),在確保沒有固定的可能被破壞的驗證順序的同時也節(jié)省了資源的消耗。
下圖為 Rotation 工作輪換證明算法流程圖,其中 N 為當(dāng)前批次,n 為根據(jù)當(dāng)前共識節(jié)點總量劃分的輪換批次:
Contribute 系統(tǒng)貢獻算法是在共識機制中,對于參與共識的節(jié)點所貢獻的帶寬、硬盤等資源進行數(shù)字量化,并根據(jù)貢獻的多少,系統(tǒng)給予一定數(shù)量的獎勵。Contribute 系統(tǒng)貢獻算法公式如下:
Ruby 將增加孵化節(jié)點機制,孵化節(jié)點與傳統(tǒng)意義的超級節(jié)點相比有本質(zhì)的不同,傳統(tǒng)的超級節(jié)點多采用 DPOS 機制,相當(dāng)于競選機制,于是會在過程中出現(xiàn)很多灰色手段,這些毫無意義的競爭和攻擊其實是對公共區(qū)塊鏈最大的傷害,最終也會成為超級節(jié)點垮掉的因素。
而孵化節(jié)點則是為了 Ruby 生態(tài)的發(fā)展,把人性最善的一面服務(wù)于 Ruby,服務(wù)于 Ruby開發(fā)者和生態(tài),孵化優(yōu)質(zhì)區(qū)塊鏈項目越多,獲得收益越多。
孵化節(jié)點是復(fù)合節(jié)點,承擔(dān)四種角色,未來根據(jù)發(fā)展可能會進行分類架設(shè),超級孵化節(jié)點的選擇將從社群規(guī)模、地區(qū)資源、技術(shù)水平、資歷經(jīng)驗等四個方面綜合評估后選擇,超級孵化節(jié)點不設(shè)數(shù)量限制,將根據(jù)發(fā)展情況適時增加,超級孵化節(jié)點不以硬件比拼作為主要競爭因素,原則上規(guī)定統(tǒng)一的硬件配置和定期統(tǒng)一升級策略,其項目孵化能力將是其獲得收益的最大依據(jù)——“孵化即挖礦”模式。
3. 多鏈并行
Ruby 網(wǎng)絡(luò)設(shè)計多鏈并行:(主鏈)公共區(qū)塊鏈、(側(cè)鏈)私有鏈、(側(cè)鏈)聯(lián)盟鏈、測試鏈。側(cè)鏈借助雙向掛鉤及混合挖礦技術(shù),代幣可在主鏈和側(cè)鏈間以特定形式流轉(zhuǎn),采用UTXO 模型。側(cè)鏈分擔(dān)主鏈的負擔(dān),大部分的應(yīng)用運行于側(cè)鏈。
3.1 主鏈
Ruby 的核心,維持代幣運行,去中心化,共識機制采用 Ruby working 算法,主鏈的各個節(jié)點可以自由加入及退出網(wǎng)絡(luò),并參加鏈上數(shù)據(jù)讀寫,運行時節(jié)點以扁平的拓撲結(jié)構(gòu)互聯(lián)互通,網(wǎng)絡(luò)中不存在任何中心化的服務(wù)端節(jié)點。智能合約是主鏈的核心應(yīng)用,同時也是自動化,智能化的基礎(chǔ)。
3.2 側(cè)鏈
側(cè)鏈分為私有鏈和聯(lián)盟鏈,私有鏈和聯(lián)盟鏈并非完全去中心化,私有鏈應(yīng)用和聯(lián)盟鏈應(yīng)用可以設(shè)有區(qū)域中心,應(yīng)用開發(fā)者可以將應(yīng)用運行在側(cè)鏈上。
聯(lián)盟鏈:聯(lián)盟鏈各個節(jié)點通常有與之對應(yīng)的實體機構(gòu)組織,通過授權(quán)后才有資格加入或退出網(wǎng)絡(luò)。各機構(gòu)組織組成利益相關(guān)的聯(lián)盟,共同維護網(wǎng)絡(luò)健康運轉(zhuǎn),采用優(yōu)化的 POS 機制。
私有鏈:私有鏈各個節(jié)點的寫入權(quán)限歸內(nèi)部控制,讀取權(quán)限視需求有選擇性地對外開放。私有鏈仍然具備區(qū)塊鏈多節(jié)點運行的通用結(jié)構(gòu),適用于特定機構(gòu)的內(nèi)部數(shù)據(jù)管理與審計,其共識機制采用優(yōu)化的 POS 機制。
測試鏈:測試鏈承擔(dān)開發(fā)應(yīng)用上線前的測試。
4. 創(chuàng)新的碎片化存儲模式
4.1 雙螺旋分子結(jié)構(gòu)區(qū)塊鏈
主鏈、側(cè)鏈均采用類 DNA 雙螺旋分子結(jié)構(gòu)區(qū)塊鏈,將區(qū)塊鏈的底層成鏈技術(shù)由單一扁平區(qū)塊鏈向雙螺旋分子結(jié)構(gòu)區(qū)塊鏈轉(zhuǎn)變。
在各個區(qū)塊以及雙螺旋鏈中的鏈接溝通中, 我們將所有區(qū)塊想象成人類的 DNA,則雙螺旋結(jié)構(gòu)中左旋鏈與右旋鏈數(shù)據(jù)交互的 RUB 計算數(shù)學(xué)模型如下:
偏置的更新算法:
偏置介紹:
若每次計算從第一個區(qū)塊開始算起,則運算速度過慢。例如,存在點(1,1),點(2,2),無法從原點畫一條直線將其成兩類,需要偏置值使得線段不從(0,0)點出發(fā)而是從更適合的點出發(fā)。
偏置的更新公式:
權(quán)值更新公式的由來:
橋接塊到右旋鏈的權(quán)值更新
4.2 數(shù)據(jù)模塊
數(shù)據(jù)模塊體系將賬戶交易和數(shù)據(jù)分離,以此保證在大容量數(shù)據(jù)上鏈的前提下維持 TPS效率,數(shù)據(jù)模塊作為 Ruby 的通用數(shù)據(jù)存儲提供了高級抽象和 API,可實現(xiàn)鏈上三種不同類型數(shù)據(jù)庫:
· NoSQL 型鍵值數(shù)據(jù)庫;
· 身份驅(qū)動型數(shù)據(jù)庫,根據(jù)具體發(fā)送者和接受者查詢,分類;
· 采取平穩(wěn)序列模型數(shù)據(jù)庫,平穩(wěn)數(shù)據(jù)變化,消除長期趨勢和差分化,可用于條目排序。
Ruby 數(shù)據(jù)模塊允許區(qū)塊鏈用作通用附加數(shù)據(jù)庫,區(qū)塊鏈提供時間戳,公正和不變性。
可以創(chuàng)建任意數(shù)量的數(shù)據(jù)模塊,每個數(shù)據(jù)模塊發(fā)布的數(shù)據(jù)由創(chuàng)建者存儲,其中每一個都可以向所有人開放以供寫入,或者只能從特定地址寫入。如果一個節(jié)點選擇訂閱數(shù)據(jù)模塊,它將索引該數(shù)據(jù)模塊的內(nèi)容以便以各種方式進行高效檢索,若未訂閱數(shù)據(jù)模塊,則無需為其付出算力。
每個數(shù)據(jù)模塊中的每條數(shù)據(jù)都是有序的項目列表,其中每條數(shù)據(jù)的格式如下:
{“senditemers”:[ “18q9dh.。.ptW43E”
],“keys”:[ “key1”, “key2”
],“data”:”data”, “confirmations”:11, “blockhash”:”00e9c6.。.2c513”, “blockindex”:1, “blocktime”:1528439220, “txid”:”acf36.。.9e2”, “vout”:0, “valid”:true,
“time”:1528439184, “timereceived”:1528439184
}
每條數(shù)據(jù)具有如下特征:
· 一個或多個 senditemers 已完成數(shù)字簽名的項目;
· 一個或多個長度在 0-256 字節(jié)之間的 key 值,可以利用 key 值進行索引;
· data,可存放幾 M 的數(shù)據(jù);
· 支持存放結(jié)構(gòu)化的 JSON 對象,易寫易讀。
如果一個節(jié)點訂閱了該數(shù)據(jù)模塊,可以通過以下幾種方式來進行索引查詢:
· 根據(jù) key 值索引;
· 根據(jù) senditemers,也就是創(chuàng)建者索引;
· 根據(jù) txid,blockindex,blockhash 等進行索引。
數(shù)據(jù)模塊的設(shè)計使得鏈與鏈之間交互變得簡單、高效,將會解決鏈上幣幣交易、跨鏈資產(chǎn)兌換以及場景化智能合約等固有問題。
4.3 無感鏈外擴展存儲
區(qū)塊鏈應(yīng)用程序開發(fā)實現(xiàn)分散式鏈外數(shù)據(jù)傳輸,一個常見的選擇是采用現(xiàn)有的對等文件共享平臺,例如 IPFS,并將其與區(qū)塊鏈結(jié)合使用。但 IPFS 具有以下幾個缺點,并不能高效便捷的與區(qū)塊鏈進行結(jié)合:
· 每個參與者必須安裝,維護和更新三個獨立的軟件(區(qū)塊鏈節(jié)點,IPFS 節(jié)點和中間件),每個軟件都將其數(shù)據(jù)存儲在不同的位置。
· 兩個獨立的點對點網(wǎng)絡(luò),每個網(wǎng)絡(luò)都有其配置,網(wǎng)絡(luò)端口,身份系統(tǒng)和許可。
· 將 IPFS 和區(qū)塊鏈緊密結(jié)合在一起會使中間件變得越來越復(fù)雜,同時面臨中心化的風(fēng)險。
針對 IPFS 與區(qū)塊鏈結(jié)合的缺點和風(fēng)險,Ruby 通過以下便捷高效的方式完成了與鏈外數(shù)據(jù)的交互同步,同時規(guī)避了可能出現(xiàn)的中心化風(fēng)險:
發(fā)布節(jié)點將新數(shù)據(jù)寫入其本地存儲,將大型項目分塊,自動構(gòu)建發(fā)布鏈外數(shù)據(jù)的事務(wù),該事務(wù)被簽名并廣播到網(wǎng)絡(luò),在節(jié)點之間傳播并以通常的方式進入?yún)^(qū)塊鏈。當(dāng)數(shù)據(jù)需求節(jié)點對鏈外數(shù)據(jù)引用時,會將該數(shù)據(jù)的 HASH 請求添加到其檢索隊列中,并作為后臺進程。如果節(jié)點的檢索隊列中有此 HASH,則將查詢發(fā)送到網(wǎng)絡(luò)以查找有此 HASH 標(biāo)識的區(qū)塊。這些查詢以點對點的方式傳播到網(wǎng)絡(luò)中的其他節(jié)點。具有數(shù)據(jù)的任何節(jié)點都可以響應(yīng),并且該響應(yīng)沿著與查詢相同的路徑被中繼給用戶。如果沒有節(jié)點應(yīng)答查詢,則該 HASH 查詢請求將返回到隊列以供稍后重試。如果長時間無節(jié)點響應(yīng),需求節(jié)點將再次向網(wǎng)絡(luò)發(fā)送請求。如果有節(jié)點接收請求,接收節(jié)點根據(jù)請求驗證數(shù)據(jù)的大小和 HASH 值,發(fā)送相應(yīng)數(shù)據(jù),數(shù)據(jù)檢出完畢后,接收節(jié)點將數(shù)據(jù)寫入本地存儲,使其立即可用于通過 API 進行檢索。如果請求的內(nèi)容沒有接收到,或者與所需的 HASH 或大小不匹配,則將該請求返回到隊列中,以便需求節(jié)點從其他源中檢索。
在延遲較短的網(wǎng)絡(luò)中,體量較小的離線數(shù)據(jù)將在引用交易的瞬間傳輸完成。對于高負載應(yīng)用,Ruby 支持超過 1200 個鏈外項目時,保持每秒檢索 30 MB 的鏈外數(shù)據(jù)網(wǎng)絡(luò)連接,并且最大 1000MB 的脫鏈數(shù)據(jù)都可以正常傳輸,不會影響 Ruby 網(wǎng)絡(luò)效率。
數(shù)據(jù)模塊可以設(shè)定其存儲為普通數(shù)據(jù)模塊(僅可存儲鏈內(nèi)應(yīng)用塊)、應(yīng)用數(shù)據(jù)模塊、混合數(shù)據(jù)模塊,后兩者可存儲鏈外數(shù)據(jù)塊的 HASH、發(fā)布者、索引等信息,可以實現(xiàn)快速檢索、分發(fā)鏈外數(shù)據(jù)塊。
鏈內(nèi)數(shù)據(jù)大小單塊限制為 16M,超出 16M 可以存為鏈外數(shù)據(jù)塊(原則上 Ruby 允許無限大的鏈外數(shù)據(jù)塊,出于性能考慮,不建議單個鏈外數(shù)據(jù)塊超過 1000M)。
5. 跨鏈協(xié)議(Cross-chain Asset Trading)
為支持數(shù)字資產(chǎn)跨鏈價值傳輸,Ruby 設(shè)計出跨鏈協(xié)議 CCAT(Cross-chain Asset Trading)。針對目標(biāo)鏈上的每一種需要跨鏈傳輸?shù)馁Y產(chǎn),在 Ruby 中均需發(fā)行一個與之對應(yīng)的通證,作為目標(biāo)資產(chǎn)在 Ruby 內(nèi)部流通的憑證,這種通證記為 TAT(Third-party Asset Token)。
6. 場景化智能合約
Ruby 場景化智能合約,我們稱之為智能合約 2.0,給開發(fā)者足夠的自由度,開發(fā)者可以選擇使用自己熟悉的開發(fā)語言,Ruby 提供與鏈進行交換的智能合約接口。
對外提供的與鏈交互的智能合約主要通過 JSON API 提供,所有的 API 都可作為與鏈進行數(shù)據(jù)交互的方法。
額外提供兩個關(guān)鍵的方法,確保開發(fā)者能夠高效開發(fā) Dapp。這兩個方法是:創(chuàng)建資產(chǎn)方法、創(chuàng)建數(shù)據(jù)模塊方法。開發(fā)者在開發(fā) Dapp 時可通過網(wǎng)站下載私有鏈開發(fā)測試版進行開發(fā),也可申請相應(yīng)資產(chǎn)和相應(yīng)數(shù)據(jù)模塊在測試鏈開發(fā),開發(fā)完成后可移植到公鏈。
6.1 代幣融資智能合約參考
主要目標(biāo):設(shè)置自動化的幣幣兌換,實現(xiàn)代幣融資智能合約的底層技術(shù)框架。
場景描述:創(chuàng)建一種待融資的資產(chǎn)(代幣代碼 FBC,最小單位 0.01,總量 10000000,融資額 5000000,兌換 500 RUB(系統(tǒng)中已存在的資產(chǎn)或原生貨幣))
具體實現(xiàn)詳見 Ruby 開發(fā)者文檔,希望有興趣的開發(fā)者或組織與我們聯(lián)絡(luò),基于此開發(fā)代幣融資 Dapp,Ruby 非常歡迎將其納入 Ruby 軟件商店。
6.2 版權(quán)保護智能合約
(1)創(chuàng)作過程,對稱加密,寫鏈;
(2)成品加密存儲;
(3)1/n 多簽分發(fā)。
6.3 游戲場景智能合約
以養(yǎng)貓為例
(1) 生成小貓
創(chuàng)建地址
生成對應(yīng)數(shù)據(jù)模塊:記錄小貓?zhí)匦?/p>
(2) 喂養(yǎng)小貓
幣幣交易,過程記入數(shù)據(jù)模塊
(3) 繁殖后代
數(shù)據(jù)模塊特性疊加計入新貓數(shù)據(jù)模塊
6.4 RubyVM(Ruby Virtual Machine)
Ruby 借鑒了開源 QEMU 模擬處理器,QEMU 是一套由虛擬化天才程序員法布里斯·貝拉(Fabrice Bellard)所編寫的開源模擬處理器,在 GNU/Linux 平臺上使用廣泛。默認支持多種架構(gòu)。可以模擬 IA-32 (x86)個人電腦,AMD 64 個人電腦,MIPS R4000, 升陽的SPARCsun3 與 PowerPC(PReP 及 Power Macintosh)架構(gòu),由于采用 Ruby 虛擬機方式,Ruby 使現(xiàn)有應(yīng)用遷移也變得非常方便,可以用最小的代碼量實現(xiàn)現(xiàn)有應(yīng)用的遷移。幾乎對所有現(xiàn)有應(yīng)用提供遷移支持,同時 Ruby 將在適當(dāng)時機完成開發(fā)兼容以太坊虛擬機 EVM。
Ruby 在設(shè)計上采用基于數(shù)據(jù)模塊的底層 Ruby 虛擬機,使在平臺上開發(fā)變得非常簡單,開發(fā)人員無需改變現(xiàn)有編程語言習(xí)慣和編程方式就可以在 Ruby 上完成區(qū)塊鏈應(yīng)用開發(fā)。
7. Ruby TPS 提升
7.1 傳統(tǒng) POW 機制下的 TPS 無法提升的原因
傳統(tǒng)理論認為 POW 無法做到大幅度的 TPS 提升,其實不然,Ruby 認為在 POW 機制下 TPS 無法大幅度提升主要是因為以下幾點:
· 所有的錢包交易都保存在內(nèi)存中。這樣啟動時間會縮短,但內(nèi)存使用量迅速增加;
· 由于采用 UTXO 模型,許多操作對錢包中的每筆交易執(zhí)行效率低下的“全面掃描”,無論是舊的還是新的。
· 錢包中的每筆交易都被完整存儲,包括任何從節(jié)點的角度來看沒有意義的任意“元數(shù)據(jù)”,雖然其已經(jīng)存儲在磁盤上的區(qū)塊鏈中。其結(jié)果是,節(jié)點如果存儲了 2 萬筆交易,錢包會變得非常緩慢。在 20 萬筆左右后,它實際上陷入停頓。
7.2 從比特幣和以太坊看無法提高 TPS 的原因
比特幣節(jié)點不能提高 TPS 的主要原因并不是因為 POW 共識機制(POW 從本質(zhì)上說基本上都會在成塊時間內(nèi)完成共識),而是因為上文提到的三點原因,雖然比特幣網(wǎng)絡(luò)可以輕松處理和存儲數(shù)百萬甚至更大與自己無關(guān)的事務(wù),這些事務(wù)是在磁盤中而不是內(nèi)存中進行的。但在具體到單一節(jié)點時,在處理跟自己有關(guān)的事務(wù)時,因為采用 UTXO 模型,需要遍歷全部區(qū)塊文件,執(zhí)行效率低下的“全面掃描”,來獲得未花費的輸出作為輸入。而這些全面掃描包括內(nèi)存中的交易及元數(shù)據(jù)和區(qū)塊文件都是非結(jié)構(gòu)化的數(shù)據(jù),檢索速度會很低效,所以到單一節(jié)點,其 TPS 僅能達到 3 TPS。
以太坊節(jié)點的處理機制:以太坊在設(shè)計時考慮到了 UTXO 模型的弊端,所以在設(shè)計上以犧牲可靠性為代價,沒有采用 UTXO 模型,但其相關(guān)事務(wù)依然是非結(jié)構(gòu)化數(shù)據(jù),除此之外由于智能合約的設(shè)計是全局存在的,需要所有的節(jié)點去區(qū)塊文件遍歷執(zhí)行,所以其 TPS雖然較比特幣有所提高,但依然無法得到大幅度提升,其 TPS 為 20-30 之間。
7.3 Ruby TPS 提升方法
Ruby 通過以下幾種方式,使得 TPS 有了顯著提升:
· 變內(nèi)存驅(qū)動為數(shù)據(jù)庫驅(qū)動,實現(xiàn)結(jié)構(gòu)化存儲和快速檢索;
Ruby 核心錢包采用本地雙數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計(雙螺旋分子結(jié)構(gòu)區(qū)塊鏈),將原先節(jié)點單一數(shù)據(jù)庫劃分為區(qū)塊數(shù)據(jù)庫和錢包事務(wù)數(shù)據(jù)庫。區(qū)塊數(shù)據(jù)庫采用了 UTXO 模型的安全可靠,同時結(jié)合了錢包事務(wù)數(shù)據(jù)庫賬戶余額模型的靈活高效。區(qū)塊數(shù)據(jù)庫仍然存儲全部區(qū)塊數(shù)據(jù),錢包事務(wù)數(shù)據(jù)庫存儲本地錢包地址相關(guān)的交易和事務(wù)信息,而任何大于 256 字節(jié)的交易元數(shù)據(jù)都不會存儲在錢包事務(wù)數(shù)據(jù)庫中,而是在錢包事務(wù)數(shù)據(jù)庫中包含一個指向區(qū)塊鏈本身的數(shù)據(jù)位置的指針,錢包交易時通過指針或者索引直接查找區(qū)塊數(shù)據(jù)庫,可迅速定位符合特定標(biāo)準(zhǔn)的交易,而不是執(zhí)行完整的錢包掃描,可顯著節(jié)省查詢時間并提高交易速度。 ?
· 設(shè)計獨有的數(shù)據(jù)模塊,在保證性能的前提下,提升大容量上鏈數(shù)據(jù);
Ruby 數(shù)據(jù)模塊允許區(qū)塊鏈用作通用附加數(shù)據(jù)庫,區(qū)塊鏈提供時間戳,公證和不變性。Ruby 可以包含任意數(shù)量的數(shù)據(jù)模塊,每個數(shù)據(jù)模塊發(fā)布的數(shù)據(jù)由每個節(jié)點存儲,其中每一個數(shù)據(jù)模塊都可以向所有人開放以供寫入,或者只能從特定地址寫入。如果一個節(jié)點選擇訂閱數(shù)據(jù)模塊,它將在錢包事務(wù)數(shù)據(jù)庫中為此數(shù)據(jù)模塊建立內(nèi)容索引,以便以各種方式進行高效的檢索。
· 采用 Ruby working 共識算法,作為輔助提升 TPS 的手段
Ruby working 共識算法在降低資源消耗的同時,加快了網(wǎng)絡(luò)共識的達成,更快的成塊時間以及更大的區(qū)塊容量都為 TPS 的提升提供了幫助。
綜上,通過以上三種主要方法(另外還有自動歸集未花費輸出從而提高檢索效率等方法),Ruby 能夠做到在安全可靠前提下,采用 POW 機制和支持大容量上鏈數(shù)據(jù)的情況下依然可以實現(xiàn)較高的 TPS。在中端設(shè)備單節(jié)點下,TPS 可以達到每秒 1080 筆,在高端設(shè)備連接的局域網(wǎng)或者借助部分中心化手段(如超級節(jié)點)的情況下可以支持每秒十萬到百萬筆的交易速度。但在廣域網(wǎng)環(huán)境下,受到帶寬及其他網(wǎng)絡(luò)因素影響,實際的 TPS 可能會有所下降。
8. 運行環(huán)境與開發(fā)工具
8.1 運行環(huán)境
Ruby 已開發(fā)完成廣范支持當(dāng)前主流的運行環(huán)境,包括但不限于 Windows、Linux、Mac、安卓、IOS 等各種家用、商用及工業(yè)運行環(huán)境。系統(tǒng)要求:
操作系統(tǒng)環(huán)境:
Mac:OS X 10.11+
Linux:64 位,Debian 7+,Ubuntu 14.04 +,CentOS 7 +,F(xiàn)edora 20 +,RHEL 7+
Windows:64 位,Win7+
Andriod:7.0+
IOS:9.0+
硬件環(huán)境:
RAM:1G
Disk:2G
8.2 底層代碼
Ruby 底層由 C++編寫實現(xiàn),命令行工具由底層源碼使用 gcc/g++直接編譯生成,提供各版本命令行工具,支持 Ruby 全部 RPC 命令,包括 Windows、Linux、Mac 等多種版本。
8.3 錢包客戶端
Ruby 的錢包客戶端,支持基于 Ruby 的所有數(shù)字資產(chǎn),包括 Windows、Linux、Mac、Andriod、IOS 等多種版本。其中,適用于 Windows、Linux、Mac 的桌面級錢包應(yīng)用采用跨平臺語言 java 開發(fā),使用 javafx 進行頁面設(shè)計。Java 具有簡單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵?**立與可移植性、多線程、動態(tài)性等特點。java 的存儲分配模型是它防御惡意代碼的主要方法之一;Java 沒有指針,所以程序員不能得到隱蔽起來的內(nèi)幕和偽造指針去指向存儲器。更重要的是,Java 編譯程序不處理存儲安排決策,所以程序員不能通過查看聲明去猜測類的實際存儲安排。編譯的 Java 代碼中的存儲引用在運行時由 Java解釋程序決定實際存儲地址。基于以上 java 語言的特性,保證錢包客戶端在各平臺的安全及平穩(wěn)運行。
8.5 Ruby 區(qū)塊瀏覽器
Ruby 區(qū)塊瀏覽器為 Ruby 原始幣種及基于 Ruby 發(fā)行的各種資產(chǎn)提供區(qū)塊、交易查詢、數(shù)據(jù)模塊的數(shù)據(jù)查詢以及原子交易掛單查詢。Ruby區(qū)塊瀏覽器使用python結(jié)合bootstrap開發(fā),python 語言的面向?qū)ο蟆⒔忉屝浴⒖蓴U展性、可嵌入性等特性,以及 python 自帶的豐富的庫,可以很好的幫助 Ruby 區(qū)塊瀏覽器的優(yōu)化及開發(fā),而 bootstrap 前端框架為Ruby 區(qū)塊瀏覽器提供了方便簡潔的頁面效果。
8.6 其他 Dapp
Ruby 支持用戶使用通用語言編寫開發(fā) Dapp,開發(fā)用戶自己的場景化智能合約,Ruby提供標(biāo)準(zhǔn)的 RPC 服務(wù)接口和近 150 條 API 供開發(fā)者使用。
9. 安全
51%算力攻擊:51%攻擊是指掌握了全網(wǎng)的 51%算力之后,用這些算力來重新計算已經(jīng)確認過的區(qū)塊,使塊鏈產(chǎn)生分叉并且獲得利益的行為。
對于存在的 51%算力攻擊,Ruby 通過 Rotation 工作輪換證明算法,再次降低 51%算力攻擊的可能性。由于 Rotation 工作輪換證明算法對于參與共識的節(jié)點分批次進行共識確認,使得 51%算力攻擊出現(xiàn)的可能性大大降低,并且在出現(xiàn) 51%算力攻擊時,由于 Rotation工作輪換證明算法對于共識節(jié)點的隨機性,使得在 51%算力攻擊出現(xiàn)后并不能一直維持51%算力攻擊,因此在被攻擊后等待幾次確認后,可以回滾至原塊鏈。
10. 服務(wù)層指令
10.1 CLI 調(diào)用
Ruby 提供如下常用 CLI 指令:
(1)節(jié)點基本操作指令
help 幫助
stop 停止節(jié)點
pause 暫停節(jié)點
resume 恢復(fù)節(jié)點
emptymem 清除內(nèi)存池
showmem 查看內(nèi)存池
shownet 查看網(wǎng)絡(luò)信息
showpeer 查看連接節(jié)點信息
showchain 查看區(qū)塊信息
showblock 查看區(qū)塊
showblocks 查看區(qū)塊
showblockhash 查看區(qū)塊哈希值
signmessage 消息簽名
checkmessage 消息驗證
(2)錢包基本操作指令
addnewaddr 增加一個普通地址
addmultiaddr 增加一個多簽地址
setupmulti 創(chuàng)建多簽地址
setupkeypairs 創(chuàng)建地址對(不導(dǎo)入錢包)
showaddrs 顯示地址及詳細
dumpprivkey 導(dǎo)出私鑰
importprivkey 導(dǎo)入私鑰
importaddr 導(dǎo)入地址
backupwallet 備份錢包文件
dumpwallet 導(dǎo)出全部私鑰到文本文件
importwallet 導(dǎo)入錢包文件
encryptwallet 加密錢包文件
changepass 更改錢包密碼
walletpass 輸入錢包密碼
showassets 顯示資產(chǎn)
showbal 顯示 RUB
showaddrbals 列出特定地址的所有資產(chǎn)余額(含 RUB)
showallbals 列出此錢包(地址)所有資產(chǎn)余額信息(含 RUB)
showaddrdeal 顯示特定地址的特定交易信息
showaddrdeals 顯示特定地址交易信息
showwalletdeals 顯示錢包交易信息
send 發(fā)送 RUB 或資產(chǎn)
sendfrom 從特定地址發(fā)送 RUB 或資產(chǎn)
sendasset 發(fā)送資產(chǎn)
sendassetfrom 從特定地址發(fā)送資產(chǎn)
senddata 發(fā)送 RUB 或資產(chǎn)并附加數(shù)據(jù)信息
senddatafrom 從特定地址發(fā)送 RUB 或資產(chǎn)并附加數(shù)據(jù)信息
(3)創(chuàng)建發(fā)行數(shù)字資產(chǎn) /數(shù)據(jù)模塊指令(受限)
sell 發(fā)行數(shù)字資產(chǎn)
sellfrom 從特定地址發(fā)行數(shù)字資產(chǎn)
sellasset 追加發(fā)行數(shù)字資產(chǎn)
sellassetfrom 從特定地址追加發(fā)行數(shù)字資產(chǎn)
setupdatamod 創(chuàng)建數(shù)據(jù)模塊
setupdatamodfrom 從特定地址創(chuàng)建數(shù)據(jù)模塊
senditem 向數(shù)據(jù)模塊發(fā)布數(shù)據(jù)
senditemfrom 從特定地址向數(shù)據(jù)模塊發(fā)送數(shù)據(jù)
showdatas 列出數(shù)據(jù)模塊
order 訂閱數(shù)據(jù)/資產(chǎn)模塊
noorder 取消訂閱數(shù)據(jù)/資產(chǎn)模塊
showdataitem 顯示單一數(shù)據(jù)條目
showdataitems 列出數(shù)據(jù)模塊下數(shù)據(jù)條目
showdatakeys 列出某數(shù)據(jù)模塊關(guān)鍵字
showdatakeyitems 列出某數(shù)據(jù)模塊關(guān)鍵字的條目
showdatasenderitems 列出數(shù)據(jù)模塊特定發(fā)送者的數(shù)據(jù)條目信息
showdatasenders 列出數(shù)據(jù)模塊發(fā)送者信息
(4)幣兌換及原子交易(事務(wù))指令
prelock 預(yù)先鎖定輸出
prelockfrom 從特定地址預(yù)先鎖定輸出
setuprawex 創(chuàng)建原子交換(幣幣兌換)
decoderawex 解碼原子交換(幣幣兌換)
addrawex 附加原子交換(幣幣兌換)
completerawex 完成原子交換(幣幣兌換)
sendrawdeal 提交原子交易至區(qū)塊鏈
disrawdeal 取消特定原子交易
gatherunspent 歸集未花費輸出
showunspent 顯示未花費輸出
showlock 顯示鎖定的未花費輸出
lock 鎖定(解鎖)未花費輸出
setuprawdeal 創(chuàng)建原子交易(事務(wù))
setuprawsendfrom 從特定地址創(chuàng)建原子交易(事務(wù))
decoderawdeal 解碼原子交易(事務(wù))
addrawdeal 附加原子交易(事務(wù))
addrawchange 附加原子花費
addrawdata 附加原子數(shù)據(jù)
signrawdeal 簽署原子交易(事務(wù))
10.2 JSON-RPC API 指令集
RPC 用 戶 名 密 碼 存 儲 在 ~/.ruby/ruby/ruby.conf ( linux/MAC ) 或者 %APPDATA%\RUby\ruby/ruby.conf 文 件 中 , 可 以 使 用 rubyi 命 令 行 工 具 或 者RUbyTool 工具內(nèi)置的 CLI 界面連接,這些工具會自動讀取 RPC 用戶名密碼并連接已運行區(qū)塊鏈。
評論