在Geth私鏈上發佈智能合約

前一陣子學習了一些區塊鏈相關,並記錄了在在Geth上創建私鏈的過程。詳情請參考如下的幾篇文章:

這篇文章簡單講述下如何在Geth上部署和發佈智能合約。

智能合約是部署在區塊鏈上的一組預定義的業務規則,具備確定性(Deterministic)執行的特徵。換句話說,智能合約只是軟件程序,與所有程序一樣,它們完全按照程序員的意圖執行。與普通的程序不太一樣的是,存儲在區塊鏈上,並使用加密代碼強制執行協議。

智能合約的概念最初是由計算機科學家、密碼學家Nick Szabo於1993年構思出來的。在1994年的一篇文章中,Nick寫道:“智能合約的總體目標是滿足共同的合同條件(例如付款項、留置權、保密性,甚至強制執行),最大限度地減少異常以及對可信中介的需求。 相關的經濟目標包括減少欺詐損失、仲裁和執行成本以及其他交易成本。現今存在的一些技術可以被視爲粗略的智能合約,例如POS終端和(信用卡)、電子數據交換(EDI)以及公共網絡帶寬的agoric分配。

儘管智能合約在比特幣誕生時纔出現一線生機,但以太坊完全接受了它,使得在其分佈式賬本中執行和存儲智能合約成爲可能。以太坊的平臺專爲執行智能合約而設計,使交易和ICO(初始代幣發行)成爲可能且無可挑剔。在許多方面,智能合約是所有區塊鏈技術的基石。此外,許多新興的區塊鏈初創公司依賴於智能合約有望創造的革命。

這篇文章主要介紹的是如何在Geth私鏈上部署和發佈智能合約,因此我們這裏用的合約是Hello World級別的,這篇文章並不涉及如何編寫複雜功能的智能合約。

一、用Solidity語言編寫智能合約

pragma solidity ^0.4.26;

contract MyContract {
    function multiply(uint a) public pure returns(uint) {
        return 5 * a;
    }
}

上面的合約代碼非常簡單,定義了一個函數,接收兩個整形參數,函數功能是返回這兩個參數的乘積。這裏我們不考慮程序的語法,只關注合約部署和發佈的過程。如果大家對Solidity語言感興趣,可以自行去網上搜索相關的文章。下面的鏈接是Solidity的官方文檔地址:

Solidity Language Documentation

二、使用Remix IDE編譯智能合約

由於Geth 的新版本取消了eth.compile命令,所以我們這裏使用在線工具來完成合約的編譯。也可以用solc工具來編譯,詳細的使用方法可以百度。

在瀏覽器輸入http://remix.ethereum.org,打開Remix IDE,在文件瀏覽器中新建文件,將上面的合約代碼複製進去並保存

 

 

若代碼沒有自動編譯,也可手動進行編譯。若有紅色錯誤提示,需要根據提示進行處理。黃色警告可以忽略。

 

 

 點擊Compilation Details按鈕,會彈出編譯的詳細信息,其中的ABI和Bytecode,是我們部署合約要用到的。

 

 

點擊ABI和Bytecode旁邊的複製按鈕,分別將它們複製到本地,一會兒會用到。

注意:複製的Bytecode中,我們用到的是JSON對象中的object。同時,複製下來的ABI先要轉成JSON字符串,我們可以藉助http://www.bejson.com/jsonviewernew/來完成。

 三、部署合約

1、創建並解鎖賬戶

提示:若當前私鏈上已經有賬戶,並且該賬戶有餘額,則可以跳過該步驟

 提示:在Windows下轉賬時,需要先解鎖賬戶。新版本的Geth出於安全考慮,默認禁止了HTTP通道解鎖賬戶,相關issue:https://github.com/ethereum/go-ethereum/pull/17037。要解決此問題,可在啓動參數中增加 --allow-insecure-unlock

要確認該賬戶是否是曠工賬戶

若不是曠工賬號,需要將該賬號設置成曠工賬號

可以通過挖礦或從其他賬號轉賬使該賬戶獲得餘額,以便支付部署費用

2、創建合約對象

 提示:這裏需要注意的是,從Remix IDE複製下來的Bytecode,前面要加一個 0x

這裏的ABI和Bytecode就是上面複製保留下來的內容。

3、預估手續費

 

 4、部署合約

 

 然後挖礦以便寫入區塊,稍後可以驗證合約是否部署成功。

5、調用合約方法

提示:調用合約方法時若提示 Invalid address,執行如下命令

eth.defaultAccount=eth.coinbase

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章