您好,登錄后才能下訂單哦!
本篇內容介紹了“EOS智能合約怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
隨著對EOS的所有興奮而來的,對于大多數希望參與其中的開發人員仍然充滿挑戰的領域是開始使用智能合約。新開發人員通常需要克服兩個障礙:獲取工具和設置,并了解如何編寫智能合約本身。
EOS智能合約是用C++編寫的,并編譯成Web Assembly。Dan Larimer選擇C++來利用其類型和模板系統,這使得更安全的合約,并補充說,因為智能合約的運行時間很短,大多數內存問題都會消失。
使用EOS的部分挑戰是設置本地區塊鏈。幸運的是,EOS為設置本地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
文件夾中找到這些內容。
在本教程中,我們將創建和部署分布式系統的“Hello World”:ping/pong。對于沒有經驗的人,我們將向服務器發送一個“ping”命令,它將以“pong”響應。 智能合約由以下幾個部分組成:C++代碼,ABI(應用程序二進制接口)和基于C++代碼的WAST(Web程序集文本文件)。這是看起來像:
在我們完成工具環境設置之后,讓我們進入合約!要編寫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
。
一旦部署了新合約,就可以與它進行交互了!讓我們使用相同的密鑰創建一個測試人員帳戶來運行交易: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智能合約進行交互的核心思想。
“EOS智能合約怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。