我們寫智能合約的時候,會發現,合約其實是有一個比較明顯的范圍限定的,例如solidity中,就有類似于面向物件中的類,將一個合約的屬性與方法,都設定在一個合約類當中;而在fabric中鏈碼,更接近我們普通的程式,合約分布在幾個檔案中,用戶將其打包成一個智能合約,所以我們在設計智能合約語言的時候,第一步考慮的就是我們的合約是一個怎么樣的形式,
簡單一點,一組變數和一組方法,基本可以滿足合約的要求了,然后就是我們以什么樣子的形式把其組織起來呢?先說一下我們的目標,我們希望這組變數和方法可以很明顯的被觀測到,他們屬于一個合約,寫合約的時候,也能夠讓開發者,足夠方便且醒目,不至于開發的時候出現錯誤,
我們的智能合約語言是基于rust實作的,利用rust語言開發一種新的語言——智能合約語言,不過這門新的語言不需要很強大的功能,它能覆寫智能合約需求即可;就具體實作來說,我們其實就是利用rust的宏,實作元編程,相對于ethereum和fabric的兩種方法,我們采用標記的方法,即用戶主動標記當前的元素——函式、變數——屬于哪個合約,
我們主要是使用屬性宏——proc_macro_attribute去實作我們的智能合約語言,然后通過他的第一個引數attr,設定合約的名稱contract,
例如,設定初始化引數,
#[init(contract="erc20")]
fn erc20_init<T>()->Result<T>{
… …
}
呼叫函式設定合約,
#[invoke(contract="erc20")]
fn erc20_invoke<T>()->Result<T>{
… …
}
設定事件
#[event(contract="erc20")]
enum event {
… …
}
我們通過在不同的宏中,設定contract的值,來確定各個元素的屬于哪個合約,
但從智能合約的結構來說,我們只需要添加一些屬性和方法,就完全夠用了,后邊我們就以這個思路,將其他基本的結構補充完整其骨架,置于具體的實作,后邊也會慢慢做,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/382942.html
標籤:區塊鏈
