中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EOS智能合約怎么實現

發布時間:2021-12-29 14:07:35 來源:億速云 閱讀:159 作者:iii 欄目:互聯網科技

本篇內容介紹了“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區塊鏈,就可以開始了工作了。在整個指南中,我們將引用一些實用程序,如cleoseosiocpp。 你可以在eos/programs文件夾中找到這些內容。

建立ping智能合約

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

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智能合約進行交互的核心思想。

“EOS智能合約怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

eos
AI

福海县| 翁牛特旗| 金溪县| 南昌县| 金平| 扎兰屯市| 胶州市| 客服| 龙游县| 谢通门县| 边坝县| 车致| 灵山县| 健康| 合肥市| 东乡县| 阜阳市| 镶黄旗| 东台市| 文山县| 教育| 华宁县| 铁岭市| 政和县| 津市市| 巴彦县| 汉中市| 明溪县| 岳普湖县| 安陆市| 原平市| 麻栗坡县| 临海市| 札达县| 晋州市| 萍乡市| 师宗县| 兴安盟| 绥芬河市| 娄底市| 南川市|