一個等效ping的EOS智慧合約
這篇文章是為幫助EOS智慧合約開發人員從初級到生產而釋出的一系列帖子中的第一篇。有關本教程的完整程式碼,可以訪問 ofollow,noindex">github儲存庫 。
隨著對EOS的所有興奮而來的,對於大多數希望參與其中的開發人員仍然充滿挑戰的領域是開始使用智慧合約。新開發人員通常需要克服兩個障礙:獲取工具和設定,並瞭解如何編寫智慧合約本身。
EOS智慧合約是用C++編寫的,並編譯成Web Assembly。 Dan Larimer 選擇C++來利用其型別和模板系統,這使得更安全的合約,並補充說,因為智慧合約的執行時間很短,大多數記憶體問題都會消失。
配置
使用EOS的部分挑戰是設定本地區塊鏈。幸運的是,EOS為 IO/eos/wiki/Local-Environment#getting-the-code" target="_blank" rel="nofollow,noindex">設定本地EOS環境 提供了一些基礎。對於本指南,我們將使用EOSIO Dawn 3.0。
該指南的摘要可以壓縮為幾個關鍵命令:
$ 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
資料夾中找到這些內容。
建立ping智慧合約
在本教程中,我們將建立和部署分散式系統的“Hello World”:ping/pong。對於沒有經驗的人,我們將向伺服器傳送一個“ping”命令,它將以“pong”響應。 智慧合約由以下幾個部分組成:C++程式碼,ABI(應用程式二進位制介面)和基於C++程式碼的WAST(Web程式集文字檔案)。這是看起來像:
實現ping
在我們完成工具環境設定之後,讓我們進入合約!要編寫ping智慧合約,我們只需要一個實現一個操作的合約:ping。所有這些方法需要做的就是列印“Pong”作為響應。
在contract中建立一個名為ping的資料夾,並在ping/ping.cpp檔案中建立一個檔案:
#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) )
這裡有一個簡單的小例子,你可以測試,以便更熟悉。讓我們分解這裡發生的事情:
- 我們包含一些定義來寫我們的合同。
- 我們建立了一個繼承自eos::contract的新合約類。
- 我們建立了一個列印“Pong”的方法。
- 最後一行是最近新增的巨集,它通過基於我們傳遞給第二個引數的方法生成一個來節省我們維護自己的手寫ABI的工作量。
構建合約
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
。
與ping互動
一旦部署了新合約,就可以與它進行互動了!讓我們使用相同的金鑰建立一個測試人員帳戶來執行交易: cleos create account eosio tester [public_key] [public_key]
現在我們可以在命令列上測試它:
$ cleos push action ping.ctr ping '["tester"]' -p tester executed transaction: e89ebeaad8f3623e42d966f62d4d0adbf6a7412b6bb4d7be61f04a22d3cd485e232 bytes102400 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工程師不可多得的比特幣開發學習課程。
匯智網原創翻譯,轉載請標明出處。這裡是 原文