在我傾聽Bettina Warburg的演講之後,我對去中心化經濟(dApps)的概念著迷。傳統的Web應用程式是:
- 前端→後端→資料庫
相比之下,dApp網站是:
- 前端→智慧合約→區塊鏈
例如,當你進入電子銀行時,網頁將呼叫後端程式碼來獲取你的個人資料並將其顯示在頁面上。後端程式碼在集中式伺服器上執行。
與傳統方式不同,dApps在去中心化的P2P網路及區塊鏈(Blockchain)上執行後端程式碼智慧合約(smart contract)。
為什麼區塊鏈如此熱?
區塊鏈是支撐數字貨幣比特幣的技術,但它具有更廣泛的應用,並且正在越來越多的領域實現商業化。它引起了對科技界及其他人的濃厚興趣,因為它在金融服務,公共部門和其他領域開闢了新的可能性。 ——THOUGHT LEADERSHIP Nov 2017
什麼是EOSIO區塊鏈?
EOSIO宣傳為dApp的作業系統。它是從頭開始構建的,每秒執行數百萬次交易(與目前最大的區塊鏈網路相比:乙太網每秒只有15次交易),這使其更適合複雜的dapp生態系統和去中心化,貨幣化的經濟。
這個部落格涵蓋了什麼?
在本部落格中,我將展示如何設定EOSIO區塊鏈並開發智慧合約。這是本系列的第1部分。下面逐步演示了EOSIO安裝以及我如何設定錢包,帳戶和代幣。讓我們開始吧。
一個乾淨的虛擬機器
為了避免與現有軟體發生衝突,我為這個實驗準備了一個乾淨的虛擬機器。我正在使用Linux KVM虛擬化基礎架構(KVM比Virtualbox快得多,它只比裸機差2%)。我為VM分配了以下配置:
- 8 GB RAM,4個vCPU
- 30 GB磁碟空間
- Ubuntu 17.10 desktop
1.下載EOSIO
安裝作業系統後,我在終端中執行以下操作:
$ sudo apt install git-core
$ git clone https://github.com/EOSIO/eos --recursive
$ cd eos
$ git submodule update --init --recursive
$ ./eosio_build.sh
$ export PATH=${HOME}/opt/mongodb/bin:$PATH
$ ~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &
$ cd ~/eos/build: make test
$ sudo make install
2.啟動伺服器
此時安裝了EOSIO,我輸入以下命令來啟動伺服器:
$ cd ~/eos/build/programs/keosd
$ keosd --http-server-address=localhost:8899
開啟一個新的命令列客戶端:
$ cd ~/eos/build/programs/nodeos
$ nodeos -e -p eosio --contracts-console --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
再開啟一個新的命令列客戶端:
$ alias cleos=`~/eos/build/programs/cleos/cleos --wallet-url=http://localhost:8899`
3.建立錢包,金鑰對,帳戶和代幣
要在區塊鏈中儲存資訊,我們需要一個用於標識資料和錢包的帳戶來保護用於簽署交易的金鑰。請參閱此處瞭解EOSIO帳戶和錢包概念概述
我執行了以下操作:
$ cd ~/eos
$ cleos wallet create
將螢幕中的密碼記錄下來備用。
$ cleos wallet key
將螢幕中private1和public2的金鑰對值記錄下來備用。
$ cleos wallet key
再來一組private2和public2的金鑰對值記錄下來備用。
$ cleos wallet import ${private_key_1}
$ cleos wallet import ${private_key_2}
$ cleos wallet keys
通過私鑰private1和private2將金鑰匯入錢包後你應該可以在螢幕中看到錢包中顯示2個公鑰的值。
$ cleos create account eosio myaccount ${public_key_1} ${public_key_2}
執行上面的命令,你應該發現有錯誤資訊。意思是說你的錢包沒有解鎖。
$ find ~ -name config.ini
$ nano ~/.local/share/eosio/nodes/config/config.ini
config.ini
可能位於其他平臺的另一個目錄中,在config.ini
中看到配置項signature-provider =*******
,將該值的私鑰匯入錢包中:
$ cleos wallet import ${private_key_signature-provider}
$ cleos wallet keys
這時你應該可以在錢包裡看到3個公鑰。
$ cleos create account eosio myaccount ${public_key_1} ${public_key_2}
賬號會被成功建立,我們再來建幾個賬號。
$ cleos create account eosio user ${public_key_1} ${public_key_2}
$ cleos create account eosio tester ${public_key_1} ${public_key_2}
$ cleos create account eosio eosio.token ${public_key_1} ${public_key_2}
在eosio.token
賬號上建立合約。
$ cleos set contract eosio.token ~/eos/build/contracts/eosio.token -p eosio.token
將合約推送到區塊鏈:
$ cleos push action eosio.token create `{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}` -p eosio.token
做些單一操作測試,建立賬號,發代幣,轉賬:
$ cleos create account eosio user ${public_key_1} ${public_key_2}
$ cleos push action eosio.token issue `[ "user", "100.0000 SYS", "memo" ]` -p eosio
$ cleos push action eosio.token transfer `[ "user", "tester", "1.0000 SYS", "m" ]` -p user
建一個exchange
賬號,並建個exchange
合約,合約程式碼在contracts/
下,主要是建立和交易貨幣的功能:
$ cleos create account eosio exchange ${public_key_1} ${public_key_2}
$ cleos set contract exchange ~/eos/build/contracts/exchange -p exchange
建一個eosio.msig
,建一個eosio.msig
合約,合約程式碼在contracts/
下,主要是允許多方非同步簽署單個交易:
$ cleos create account eosio eosio.msig ${public_key_1} ${public_key_2}
$ cleos set contract eosio.msig ~/eos/build/contracts/eosio.msig -p eosio.msig
備份錢包:
$ mkdir backup-my-wallet
$ cp -R ~/eosio-wallet ./backup-my-wallet/
4.試著編寫智慧合約hello
EOSIO Smart Contract是一個在區塊鏈中執行的C ++程式。 請參閱文件此處瞭解。
EOSIO在contracts/
目錄中提供了幾個樣本合約,我直接用了hello合約hello.cpp
:
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public eosio::contract {
public:
using contract::contract;
/// @abi action
void hi( account_name user ) {
print( "Hello, ", name{user} );
}
};
EOSIO_ABI( hello, (hi) )
進行測試如下:
$ cd ~/eos/contracts/hello
$ eosiocpp -o hello.wast hello.cpp
$ eosiocpp -g hello.abi hello.cpp
建立賬號:
$ cleos create account eosio hello.code ${public_key_1} ${public_key_2}
建立合約:
$ cleos set contract hello.code ../hello -p hello.code
推送合約:
$ cleos push action hello.code hi `["user"]` -p user
修改hello.cpp,在print( "Hello, ", name{user} );
上面加上一句require_auth(user)
。
編譯合約,更新合約,推送合約:
$ eosiocpp -o hello.wast hello.cpp
$ cleos set contract hello.code ../hello -p hello.code
$ cleos push action hello.code hi `["tester"]` -p user
應該有個錯誤資訊,我們把推送命令修改一下:
$ cleos push action hello.code hi `["tester"]` -p tester
這回應該沒問題了。
$ pkill keosd && pkill nodeos
關掉服務程式。
分享一個互動式的線上程式設計實戰,EOS智慧合約與DApp開發入門:
本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
這裡是原文