在我傾聽Bettina Warburg的演講以後,我對去中心化經濟(dApps)的概念着迷。傳統的Web應用程序是:php
相比之下,dApp網站是:前端
例如,當你進入電子銀行時,網頁將調用後端代碼來獲取你的我的數據並將其顯示在頁面上。後端代碼在集中式服務器上運行。java
與傳統方式不一樣,dApps在去中心化的P2P網絡及區塊鏈(Blockchain)上運行後端代碼智能合約(smart contract)。node
區塊鏈是支撐數字貨幣比特幣的技術,但它具備更普遍的應用,而且正在愈來愈多的領域實現商業化。它引發了對科技界及其餘人的濃厚興趣,由於它在金融服務,公共部門和其餘領域開闢了新的可能性。 ——THOUGHT LEADERSHIP Nov 2017python
EOSIO宣傳爲dApp的操做系統。它是從頭開始構建的,每秒執行數百萬次交易(與目前最大的區塊鏈網絡相比:以太網每秒只有15次交易),這使其更適合複雜的dapp生態系統和去中心化,貨幣化的經濟。android
在本博客中,我將展現如何設置EOSIO區塊鏈並開發智能合約。這是本系列的第1部分。下面逐步演示了EOSIO安裝以及我如何設置錢包,賬戶和代幣。讓咱們開始吧。git
爲了不與現有軟件發生衝突,我爲這個實驗準備了一個乾淨的虛擬機。我正在使用Linux KVM虛擬化基礎架構(KVM比Virtualbox快得多,它只比裸機差2%)。我爲VM分配了如下配置:程序員
安裝操做系統後,我在終端中執行如下操做:github
$ 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
此時安裝了EOSIO,我輸入如下命令來啓動服務器:web
$ 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'
要在區塊鏈中存儲信息,咱們須要一個用於標識數據和錢包的賬戶來保護用於簽署交易的密鑰。請參閱此處瞭解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/
EOSIO Smart Contract是一個在區塊鏈中執行的C ++程序。 請參閱文檔此處瞭解。
EOSIO在contracts/
目錄中提供了幾個demo合約,我直接用了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的開發。
- web3j教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
- 以太坊教程,主要介紹智能合約與dapp應用開發,適合入門。
- 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和事件等內容。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和事件等。
匯智網原創翻譯,轉載請標明出處。這裏是原文