NEO改進協議提案7(NEP-7)

文章目錄

  • 摘要
  • 動機
  • 原理
  • 詳述
    • 鑑權觸發器
    • 鑑權R觸發器
    • 應用觸發器
    • 應用R觸發器
  • 後兼容性
  • 實現

摘要

觸發器是一種觸發智能合約執行的機制。本NEP定義四種類型的觸發器,
他們是鑑權觸發器、鑑權R觸發器、應用觸發器、應用R觸發器git

動機

提供智能合約系統的區塊鏈應當爲其上運行的智能合約提供多種觸發器來使其
在不一樣環境中運行。github

原理

當前,Neo智能合約中有兩種觸發器:鑑權觸發器和應用觸發器
這兩種觸發器使得智能合約可以驗證交易和修改區塊鏈的狀態。
但沒有辦法讓智能合約拒絕一個交易,或在接受一個交易時修改區塊鏈的狀態。
咱們須要兩種新的觸發器來實現:鑑權R觸發器和應用R觸發器編程

詳述

咱們定義四種觸發器:鑑權觸發器、鑑權R觸發器、應用觸發器和應用觸發器R函數

鑑權觸發器

鑑權觸發器表明合約做爲鑑權函數被調用。鑑權函數能接收多個參數,並返回
一個布爾值表明交易和區塊的有效性若是合約由鑑權觸發器觸發,則將調用合
約的入口函數:
main(…);
合約的入口函數必需可以處理這種類型的調用。區塊鏈

鑑權R觸發器

鑑權R觸發器表明合約做爲鑑權函數被調用,由於他被指定爲交易的輸出。
鑑權函數函數不接受任何參數,並應返回一個指示交易有效性的布爾值。
若是合約由鑑權R觸發器觸發,則將調用合約的入口函數:
main(「receiving」, new object[0]);
合約的入口函數必需可以處理這種類型的調用。
receiving函數須要有如下編程接口:
public bool receiving()
receiving函數必需在合約從一個交易接收資產時被自動調用。接口

應用觸發器

應用觸發器表明合約做爲一個應用函數被調用。應用函數能夠接收多個參數,
改變區塊鏈的狀態和返回各類類型的值
合約能夠有任何格式的入口,但咱們必需記住全部合約必需有如下入口:
public byte[] main(string operation, params object[] args)
函數能夠在建立一個InvocationTransaction時被調用。get

應用R觸發器

應用R觸發器表明函數的默認函數received 函數正在被調用,由於它被指定爲
交易的輸出。received 函數不接受任何參數,更改區塊鏈的狀態,和返回任
何類型的值。
當合約被鑑權R觸發器觸發時,會調用入口函數:
main(「received」, new object[0]);
received 函數須要有如下編程接口:
public byte[] received()
received 函數在合約從一個交易接收資產時被自動調用。虛擬機

後兼容性

沒有實現receiving和received函數的老合約在被鑑權R觸發器和應用觸發器觸發
時會致使虛擬機的FAULT狀態。因此轉給老合約的交易會被拒絕且沒有狀態會被改變string

實現

github.com/neo-project…it

原文連接:github.com/neo-project…

相關文章
相關標籤/搜索