通過Aion實現Java智慧合約
讓我們看看用Java編寫的Hello World智慧合約實際上是什麼樣的。
Java智慧合約的剖析
理解Java智慧合約解剖結構的最佳方法是將其與常規Java程式進行對比。
下面是一個用Java編寫的簡單Hello World程式。它比平時更冗長。我們在一個單獨的方法中列印Hello World訊息,以便我們向您展示Java智慧合約如何工作的幾個基本功能。
以下是相同的程式,但寫成智慧合約,並能夠部署到區塊鏈。
相似之處是顯而易見的,但重要的是差異。讓我們深入瞭解並發現正在發生的事情。
智慧合約入口點
兩者之間的第一個不同點是程式碼的入口點。Java智慧合約也有一個main方法作為其入口點,但其main方法的簽名略有不同。
Java智慧合約返回一個位元組陣列而不是任何內容。main方法中的這種返回型別允許Java智慧契約能夠將資料傳遞迴其呼叫者,無論資料是什麼。
智慧合約方法簽名中的另一個不同之處在於它不接受任何輸入引數。這並不意味著你不能通過一些特定的輸入呼叫Java智慧合約 - 當然你可以,如果你不能,這將是一個巨大的浪費時間。但是,在區塊鏈的上下文中,輸入具有特定的ABI編碼,並且嘗試將其捕獲為字串陣列只是沒有多大意義。
將輸入傳遞到智慧合約中
相反,您傳遞給智慧合約的輸入由我們提供的一個API類(稱為BlockchainRuntime)捕獲,您可以通過呼叫其getData方法來檢索此輸入。這正是我們上面的示例合同中發生的事情。
你想將什麼樣的輸入傳遞給Java智慧合約?就會將什麼樣的輸入傳遞給一個可靠的智慧合約。
智慧合約的執行流程
這將我們帶到我們為您提供的第二個API類ABIDecoder。對decodeAndRunWithClass方法的呼叫是採用我們想要使用的類(在本例中為HelloWorld類),並解釋ABIencoding的輸入資料。
區塊鏈安全Java
sayHello方法將“Hello World!”列印到控制檯,就像System.out.println一樣。為什麼不直接使用System.out?好吧,並非Java類庫中的所有功能都是“區塊鏈安全”,特別是System類的使用受到嚴格限制。
區塊鏈安全究竟是什麼意思?目前而言,足以說智慧合約必須具有常規程式不受約束的某些屬性,其中最大的是智慧合約程式碼必須始終完全確定。
在我們的Github儲存庫中ofollow,noindex" target="_blank">檢視 Aion虛擬機器(AVM)的原始碼,並親自執行該示例。