1. 程式人生 > >Solidity合約記錄——(二)如何開始書寫合約

Solidity合約記錄——(二)如何開始書寫合約

block 其他 不難 開發流程 字符串拼接 比較 編程 顯示 name

以往的老規矩是寫代碼即來Hello World,事實上Solidity實現這個功能並不難。見如下代碼:

1 pragma solidity ^0.4.11;    
2 
3 contract HelloWorld {
4     string src = "Hello World!";
5     
6     function print(string name) returns (string, string, string){
7         return ("Name is ", name, src);
8     }    
9 }    

寫Hello World 就遇見尷尬的一幕,Solidity原生是不支持字符串拼接也不建議字符串拼接,為了提高執行效率可以一次返回多個字符串。以下為執行結果:

Function [print] invoking...
Invoke args:
From
0xca35b7d915458ef540ade6068dfe2f44e8fa733c
To
0xdc544654fefd1a458eb24064a6c958b14e579154
Constant
false
Payload
11114af1000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000087a68616e676a6965000000000000000000000000000000000000000000000000
Invoke finish
Result
0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000084e616d652069732000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087a68616e676a6965000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c48656c6c6f20576f726c64210000000000000000000000000000000000000000
Decoded
["string: Name is ","string: zhangjie
","string: Hello World!"] TxHash 0xc460c28c8d14d53c96b3199b9f0d04ba34d3b8f9f2de92dc6f8ed420324efe92 From 0xca35b7d915458ef540ade6068dfe2f44e8fa733c To 0xdc544654fefd1a458eb24064a6c958b14e579154

那麽真正開始針對具體業務需求而言,開發一個真實場景可用的智能合約應當分為以下幾個步驟(引用內容):

開發流程

合約接口定義
按照良好的編程習慣,在編寫業務方法前,首先定義接口,並交付給調用者。

數據結構定義
用戶定義的合約接口中,如果有比較復雜的輸入
/輸出數據,就有必要提前定義一些數據結構,並提供操作這些數據結構的一些常用方法(主要是一些序列化成JSON字符串的方法)。 業務合約編寫 實現合約接口定義,並實現用戶的業務邏輯。在業務合約的構造函數中,需要把業務合約註冊到模塊合約中。 如果用戶只是想編寫業務合約,做學習,測試用,則可以把業務合約註冊到"juzix.io.debugModule"這個特殊名稱的模塊合約中,則用戶可以不需要編寫模塊合約,從而在JUICE客戶端IDE中直接調用業務合約的方法。 模塊合約編寫 編寫模塊合約,這是JUICE開放服務平臺的要求,以便管理用戶的DAPP應用、業務合約。在模塊合約的構造函數中,需要把模塊合約註冊到鏈上,並在構造函數中說明模塊合約將會使用到的所有業務合約。 用戶編寫了模塊合約、並部署到JUICE區塊鏈後,模塊的名稱將會顯示在JUICE開放服務平臺的“我的應用”中,點擊“我的應用”的某個應用,將會跳轉到用戶開放的DAPP應用。如何設置應用的跳轉URL,參考模塊合約編寫 https://open.juzix.net/api_doc/part03/example/modules.md 編譯部署、測試 通過JUICE客戶端,或者在線IDE,都可以完成編譯、部署、測試用戶合約。 參考內容:https://open.juzix.net/doc

開始研究一個具體的應用場景,首先應當做到的是合約接口定義、數據結構定義。將整體的合約結構關系理清後,合約代碼實現事實上應當是較為簡單的。實現部分應當註意合約中可能存在的風險,但凡有可能出現問題但是較為極端的情況,如果不避免就一定會出現問題。合約代碼不同於其他代碼,部署後基本不可修改,僅能進行升級、凍結等操作,不同操作與具體平臺相關。而後我們來分析一部分代碼,同時假設一個應用場景來對其進行實現。

我們來看臺灣一個智能合約書寫實現:參考鏈接

首先將參與方所對應的角色都列舉出來,而後將不同參與者的所需操作作為方法進行列舉,作為角色對外接口;之後開始編碼實現。

Solidity合約記錄——(二)如何開始書寫合約