這篇文章是爲幫助EOS智能合約開發人員從初級到生產而發佈的一系列帖子中的第一篇。有關本教程的完整代碼,能夠訪問github存儲庫。php
隨着對EOS的全部興奮而來的,對於大多數但願參與其中的開發人員仍然充滿挑戰的領域是開始使用智能合約。新開發人員一般須要克服兩個障礙:獲取工具和設置,並瞭解如何編寫智能合約自己。前端
EOS智能合約是用C++編寫的,並編譯成Web Assembly。Dan Larimer選擇C++來利用其類型和模板系統,這使得更安全的合約,並補充說,由於智能合約的運行時間很短,大多數內存問題都會消失。java
使用EOS的部分挑戰是設置本地區塊鏈。幸運的是,EOS爲設置本地EOS環境提供了一些基礎。對於本指南,咱們將使用EOSIO Dawn 3.0。node
該指南的摘要能夠壓縮爲幾個關鍵命令:python
$ git clone https://github.com/EOSIO/eos --recursive $ cd eos $ ./eosio_build.sh $ cd build && make install $ cd programs/nodeos $ ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin --access-control-allow-origin=*
安裝須要一些時間,但很簡單。一旦在本地啓動並運行本地EOS區塊鏈,就能夠開始了工做了。在整個指南中,咱們將引用一些實用程序,如cleos
和eosiocpp
。 你能夠在eos/programs
文件夾中找到這些內容。android
在本教程中,咱們將建立和部署分佈式系統的「Hello World」:ping/pong。對於沒有經驗的人,咱們將向服務器發送一個「ping」命令,它將以「pong」響應。 智能合約由如下幾個部分組成:C++代碼,ABI(應用程序二進制接口)和基於C++代碼的WAST(Web程序集文本文件)。這是看起來像:git
在咱們完成工具環境設置以後,讓咱們進入合約!要編寫ping智能合約,咱們只須要一個實現一個操做的合約:ping。全部這些方法須要作的就是打印「Pong」做爲響應。程序員
在contract中建立一個名爲ping的文件夾,並在ping/ping.cpp文件中建立一個文件:github
#include <eosiolib/eosio.hpp> #include <eosiolib/print.hpp> class ping_contract : public eosio::contract { public: using eosio::contract::contract; void ping(account_name receiver) { eosio::print("Pong"); } }; EOSIO_ABI( ping_contract, (ping) )
這裏有一個簡單的小例子,你能夠測試,以便更熟悉。讓咱們分解這裏發生的事情:web
EOS塊生成器在執行智能合約時不運行C++代碼,他們指望web-assembly。EOS提供了一個名爲eosiocpp
的工具,用於將C++代碼轉換爲Web Assembly Text。咱們如今就這樣作eosiocpp -o ping.wast ping.cpp
。這一步將產生一些警告,但咱們如今能夠忽略這些警告。
接下來,咱們須要應用程序二進制接口。基本上,你的智能合約的ABI將描述方法及其相應的簽名。因爲咱們在文件的末尾添加了EOSIO_ABI宏,而不手動編寫,咱們可使用如下命令生成它:eosiocpp -g ping.abi ping.cpp
。
此時,您的文件夾應以下所示:
├── ping.abi ├── ping.cpp └── ping.wast
如今咱們擁有了智能合約所需的全部資源,讓咱們來部署它。確保你有一個錢包建立了cleos wallet create
並確保它經過運行cleos wallet unlock
並在提示時鍵入你的錢包密碼來解鎖。咱們將在另外一個賬戶下部署咱們的智能合約。
爲此,咱們須要建立一個新的密鑰對,讓咱們經過運行:cleos create key
來實現。這將爲你生成隨機的公鑰和私鑰。在本教程的其他部分中,請務必使用你剛剛收到的值替換文中的[public_key]/[private_key]。
將私鑰導入當前未鎖定的賬戶錢包:cleos wallet import [private_key]
,使用公鑰設置合約賬戶:cleos create account eosio ping.ctr [owner_key:public_key] [active_key:public_key]
。
將合約與新建立的賬戶連接,ping.ctr ../ping -p ping.ctr
。
一旦部署了新合約,就能夠與它進行交互了!讓咱們使用相同的密鑰建立一個測試人員賬戶來運行交易:cleos create account eosio tester [public_key] [public_key]
如今咱們能夠在命令行上測試它:
$ cleos push action ping.ctr ping '["tester"]' -p tester executed transaction: e89ebeaad8f3623e42d966f62d4d0adbf6a7412b6bb4d7be61f04a22d3cd485e 232 bytes 102400 cycles # ping.ctr <= ping.ctr::ping {"account":"tester"} >> Received ping
應該能夠了!
這對咱們的程序員來講是使人興奮的,可是大多數用戶都不會設置他們的命令行來與你的智能合約進行交互。所以,讓咱們將這種互動帶到他們更熟悉的界面:他們的瀏覽器。
要從前端與EOS交互,咱們將使用EOS.js. 因爲咱們在EOS支持上使用dawn3,咱們須要確保在安裝時使用dawn3
分支:npm install eosjs @ dawn3。
咱們從配置開始:
Eos = require('eosjs') eos = EOS.Localnet({ keyProvider: ['{replace_with_your_private_key}'], httpEndpoint: 'http://127.0.0.1:8888' })
配置完成後,咱們必須指定一些細節:
eos.contract('ping.ctr').then((contract) => { contract.ping("tester", { authorization: ['tester'] }).then((res) => { console.log(res) }) })
請注意ping.ctr
,它與咱們以前部署的合約的名稱相匹配。一旦咱們獲取了合約接口(或ABI),咱們就能夠與它進行交互,就好像它是本機Javascript同樣。合約返回一個promise,其中包含resolve函數中包含的交易詳細信息。這是從前端與咱們的ping智能合約進行交互的核心思想。
要使用工做示例在更大的上下文中查看此內容,請查看此github存儲庫中的前端代碼。
======================================================================
分享一個交互式的在線編程實戰,EOS智能合約與DApp開發入門:
本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、帳戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- web3j教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
- 以太坊教程,主要介紹智能合約與dapp應用開發,適合入門。
- 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和事件等內容。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和事件等。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
匯智網原創翻譯,轉載請標明出處。這裏是原文