以太坊上分布式系統和功能程式設計的資料型別

2021-09-24 01:14:59 字數 3024 閱讀 7499

鏈客,專為開發者而生,有問必答!

以太坊程式設計輸入

我們知道型別系統是什麼:乙個允許您將特定型別分配給變數、表示式、函式等的系統,並執行編譯和/或執行時檢查以檢視是否遵守該規則。這就消除了由於在**中不正確地連線各種介面而導致的一組錯誤。

solidity是一種靜態型別的語言。除了本地提供字串或位址等基本型別之外,它還允許開發人員使用struct構造複雜的型別。

現在的情況是,每個開發人員都可以根據自己的需要自由地建立自己的複雜資料型別。這太棒了!但是如果你想建立乙個更棒的世界計算機,在那裡你有專案整齊地相互合作,會發生什麼呢?最後會有很多專案,每個專案都在自己的封裝中定義自己的型別。要使任何兩個專案互操作,需要對這些專案有更深入的了解,甚至可能需要對源**進行更改。

全域性登錄檔分布式程式設計

這就是分布式系統的用武之地。社群可以討論並就要建立和使用的型別達成共識,每個人都可以從使用這些知名的和經過測試的型別中獲益。更容易看到哪些合同和外部功能使用某種型別,更容易將專案互連並分析區塊鏈資料。

我們提議的分布式系統包含乙個dtype登錄檔合同,它引用了所有被接受的型別以及實現它們的合同。

例如,要將某些標準值型別從solidity註冊到系統中,使用以下格式:

如果我們想要註冊複雜資料型別,乙個例子是:,,

]},,,

]}型別合約將位址儲存到包含實際型別定義的已部署型別庫中,以及用於結構化和破壞資料的輔助函式和高階函式(hofs),如map、filter、reduce。

pragma solidity ^0.5.0;

pragma experimental abiencoderv2;

library mybalancelib

function structurebytes(bytes memory data) pure public

returns(mybalance memory balance);

function destructurebytes(mybalance memory balance) pure public

returns(bytes memory data);

function map(

mybalance memory balancearr,

function(mybalance memory) external pure

returns (mybalance memory) callback

) view

public

returns (mybalance memory result);型別合同還儲存其他可選合同的位址。例如,我們可以有乙個type storage contract,它儲存該型別的資料條目。這些資料條目可以跨不同專案聚合。

現在,開發人員可以在自己的合同中使用型別庫。或者,他們可以更進一步,使用這個系統來儲存他們的資料。雖然第乙個選項的動機很明確:以太坊中的資料標準化和一致性,但是與當前的方式相比,使用全域性儲存系統的第二個選項是不同的模式。但是,全域性儲存系統允許我們做一些有趣的事情,如下所示。

純功能合同/庫

為了深入**這個協議的好處,我需要介紹另乙個重要的元件。

除了型別庫和儲存合約之外,開發人員還可以建立具有純函式的合約或庫,這些函式知道如何與所選型別互動。我們正在將業務邏輯與狀態分離。這是以太坊通用功能程式設計系統的第一步。

如果在dtype登錄檔中註冊這些純函式,並告訴登錄檔函式的輸入和輸出型別,就可以開始做一些了不起的事情。您可以在系統中實現自動化。

我們可以使用一種或多種註冊型別:

pragma solidity ^0.5.0;

pragma experimental abiencoderv2;

contract mybalanceandtokenfunctions {

using mytokenlib for mytokenlib.mytoken;

function doublebalance(mytokenlib.mytoken memory mytokendata)

public

pure

returns(mytokenlib.mytoken memory mynewtokendata);

在dtype登錄檔中註冊doublebalance函式型別可以這樣做:

邏輯鏈結狀態

假設您希望在型別具有的某個資料條目上執行一些純函式,然後將結果儲存在函式的輸出型別儲存協定中

總結使用與要使用的純函式對應的typehash呼叫run(),以及與函式輸入對應的datahashes;每個datahash引用乙個儲存條目

dtype知道如何獲取每個輸入資料,因為它知道輸入型別並可以檢索儲存協定位址

dtype還具有pure函式所在的契約/庫位址

dtype可以在與每個最終輸出型別相對應的儲存協定中插入計算結果。

函式程式設計

儘管solidity本身不是一種函式式程式語言,但是通過改變編碼模式,我們仍然可以從一些特性中獲益。

我們現在將構建塊看作是乙個智慧型合約,其中包含乙個封裝物件,其中包含只能從內部理解的狀態更改函式。這更類似於物件導向程式設計,並帶來互操作性和可伸縮性問題。不一定是針對單個專案,而是針對全球以太坊系統。

以太坊的函式程式設計

使用函式式程式設計範例的一些好處也可以在以太坊中得到利用。

冪等,純函式更容易測試

我們將業務邏輯與儲存分開。純函式庫的審計和測試更容易,因為它們沒有***,並且它們的輸出是確定性的。您甚至可以在mainnet上執行測試套件!這通常不會在當前專案中發生。您將要編寫的大多數**都具有這種性質。降低測試難度意味著更多編寫安全**的機會。

可重複使用的儲存模式

用於dtype本身的儲存模式和所有型別儲存協定可以是相同的。這降低了構建,測試和審計**的成本。

高風險、小表面

包含bug風險最高的**將是將純函式鏈結結果轉換為狀態更改的核心。但是,這個核心是我們都可以參與,測試和審計的一般模式。因此,它有可能成為最安全的拼圖。

當您對每種型別的資料進行了聚合和透明的分類後,任何人都可以使用這些資料外掛程式並做一些了不起的事情-從經典的自動化工具到基於人工智慧的工具。

我們離現實世界計算機的前景更近了一步。

hadoop分布式系統(上)

hdfs,the hadoop distributed file system,是乙個分布式系統,它被設計用來儲存大資料量的資訊 通常是tb或pb 並提供對資料進行高吞吐量訪問的效能。檔案被儲存在多台機器中,確保系統的抗失效效能以及並行應用程式的高效。這篇文章主要介紹 hdfs的設計意圖 結構,並告...

分布式 分布式系統的設計

在計算機領域,當單機效能達到瓶頸時,一般有兩種方式解決效能問題 而分布式系統的設計說白了就是 如何合理將乙個系統拆分成多個子系統部署到不同機器上。講設計方法前,先介紹分布式系統的特性 1 分布性 空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。2 對等性 分布式系統中的計...

分布式系統中的分布式事務

分布式事務中可以借助mq訊息系統來進行事務控制,這一點與可靠訊息最終一致方案一樣。看來mq中介軟體確實在乙個分布式系統架構中,扮演者重要的角色。最大努力通知方案是比較簡單的分布式事務方案,它本質上就是通過定期校對,實現資料一致性。中介軟體如何保證訊息的一致性 問題的問法多種多樣,怎麼保證兩個伺服器的...