文章目錄
• 摘要
• 動機
• 原理
• 詳述
• 合約
• Function
• Event
• Parameter
• ParameterType
• EntryPoint
摘要
應用程式二進位制介面(ABI)是兩個程式模組之間的介面,其中一個通常是庫和/或作業系統,另一個通常是由程式設計師建立的應用程式。
本NEP描述了NEO智慧合約的ABI標準
動機
NEO智慧合約系統旨在在合同之間相互呼叫。為實現這一目標,我們需要一種機制來公開智慧合約的介面。使用NeoContract ABI,開發人員可以輕鬆的建立程式來呼叫智慧合約或編寫能自動訪問合同功能的客戶端。
原理
我們假設應用程式二進位制介面(ABI)是強型別的,在編譯時已知且靜態。其不會提供內省機制。我們主張所有合同都具有其在編譯時可以呼叫的合約的介面定義
此詳述不涉及其介面是動態的或僅在執行時可知的合約。如果這些案例十分重要,可以適當的提出作為特殊構建在NEO的生態體系中。
詳述
合約
NeoContract ABI以Json格式定義定義,包含以下結構體,並且某些頂層物件可以包含數個子物件:
{
“hash”: “0x562851057d8afbc08fabc8c438d7cc771aef2195”,
“entrypoint”: “main”,
“functions”: [],
“events”: []
}
hash是合約的指令碼雜湊。它採用16進位制字元按大端序編碼
Entrypoint 代表合約函式的入口
functions 是一個函式物件陣列,用於描述合約中每個函式的細節
events 是一個事件物件陣列,用於描述合約中沒給事件的細節
Function
函式物件包含以下結構:
{
“name”: “transfer”,
“parameters”: [],
“returntype”: “Boolean”
}
name代表函式的名稱,可以是任何有效的識別符號。
parameters是一個引數物件陣列,用於描述函式中每個引數的詳細資訊
returntype代表函式的返回型別。可以是以下任意一種值:Signature, Boolean, Integer, Hash160, Hash256, ByteArray, PublicKey, String, Array, InteropInterface
Event
事件物件包含以下結構體
{
“name”: “refund”,
“parameters”: []
}
name代表事件的名稱,可以是任何有效的識別符號。
parameters是一個引數物件陣列,用於描述事件中每個引數的詳細資訊
Parameter
引數物件包含以下結構體:
{
“name”: “from”,
“type”: “Hash160”
}
name代表引數的名稱,可以是任意有效字元
type代表引數型別。可以是以下任意一種值:Signature, Boolean, Integer, Hash160, Hash256, ByteArray, PublicKey, String, Array, InteropInterface
ParameterType
引數型別有以下值:
名稱 描述
Signature A signature of a transaction or block which is generated by the user.
Boolean 布林值的值是true或者false.
Integer An arbitrarily large integer whose value in theory has no upper or lower bounds.
Hash160 160位元的整型.
Hash256 256位元的整型.
ByteArray 位元組陣列.
PublicKey 採用壓縮模式的ECC公鑰.
String 採用UTF-8編碼的字串.
Array 物件陣列. 其元素型別可以是引數型別中的任何一種.
InteropInterface 返回互操作服務的介面.
Void Void 意味著函式沒有返回值. 該值不是引數型別中的任何一種.
EntryPoint
強烈建議每個合約具有以下入口函式:
{
“name”: “main”,
“parameters”: [
{
“name”: “operation”,
“type”: “String”
},
{
“name”: “args”,
“type”: “Array”
}
],
“returntype”: “ByteArray”
}
通過這種方式,呼叫者可以從入口點輕鬆的訪問函式,通過第一個引數指定呼叫函式的名稱,通過第二個引數指定函式的的引數