天天看點

一個等效ping的EOS智能合約

這篇文章是為幫助EOS智能合約開發人員從初級到生産而釋出的一系列文章中的第一篇。有關本教程的完整代碼,可以通路github存儲庫。

随着對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

檔案夾中找到這些内容。

建立ping智能合約

在本教程中,我們将建立和部署分布式系統的“Hello World”:ping/pong。對于沒有經驗的人,我們将向伺服器發送一個“ping”指令,它将以“pong”響應。 智能合約由以下幾個部分組成:C++代碼,ABI(應用程式二進制接口)和基于C++代碼的WAST(Web程式集文本檔案)。這是看起來像:

一個等效ping的EOS智能合約

實作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: 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區塊鍊去中心化應用的開發,内容涵蓋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工程師不可多得的比特币開發學習課程。

彙智網原創翻譯,轉載請标明出處。這裡是原文

繼續閱讀