您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用Eventeum將后端微服務與以太坊智能合約橋接起來”,在日常操作中,相信很多人在如何使用Eventeum將后端微服務與以太坊智能合約橋接起來問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Eventeum將后端微服務與以太坊智能合約橋接起來”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Eventeum是一個以太坊事件監聽服務,它提供了智能合約與中間件層之間的橋接功能。Eventeum支持動態訂閱以太坊事件,當以太坊智能合約事件觸發時,包含事件詳情的消息將廣播到消息總線上(例如Kafka或RabbitMQ),進而被后端服務利用。
Eventeum的主要特性包括:
可動態配置
應用可以利用Eventeum提供的REST api動態訂閱或取消訂閱以太坊智能合約事件。
高可用性
Eventeum實例彼此通信以確保所有實例訂閱相同的以太坊智能合約事件集。
彈性
可以自動檢測節點失效,當節點恢復工作后訂閱可以從失效時的區塊繼續。
分叉容錯
Eventeum可以配置事件”確認“所需的區塊數。如果在此期間發生了區塊鏈的分叉,Eventeum會廣播一個消息到網絡中,以便讓你的后端服務對分叉事件進行及時響應。
Eventeum目前支持3種廣播機制:
Kafka
HTTP Post
RabbitMQ
在這個教程中,我們將使用Kafka。
部署Kafka的前提要求如下:
Java8
Maven
Mongo
Kafka
Zookeeper
Ethereum Node
Docker (可選)
docker是可選的,不過我建議使用docker套件,其中包含了上述大部分 依賴,只是需要先安裝Java8和Maven。
首先參考docker官網文檔,安裝Docker和Docker-compose。
然后克隆以太坊Eventeum軟件庫:
$ git clone https://github.com/ConsenSys/eventeum.git
檢出Eventeum代碼后,進入項目目錄:
$ cd /path/to/eventeum/
編譯、測試、打包Eventeum項目:
$ mvn clean package
一體化安裝Eventeum的docker套件:
$ cd server $ docker-compose -f docker-compose.yml build $ docker-compose -f docker-compose.yml up
為了測試Eventeum,我們需要先在本地Parity節點(Eventeum自動安裝的以太坊節點)上部署一個示例智能合約,然后訂閱一個智能合約事件來通過Kafka廣播。
讓我們先部署CrudApp.sol合約,我們使用Remix IDE 和Metamask。
打開Remix IDE,添加CrudApp.sol合約
選擇合約所需的solc編譯器版本(我們使用0.4.23),然后編譯合約
在Metamask上選擇節點Localhost:8545
在Remix IDE中,切換到Run選項頁,然后選擇 當前環境中的web3提供器 并進行部署
現在,合約已經部署到本地的Parity以太坊開發節點了。
現在我們需要注冊以太坊事件了,這樣Eventeum可以監聽這些事件然后進行廣播。Eventeum提供了REST api,下面介紹如何使用這個API來注冊智能合約事件。
注冊合約事件
URL: /api/rest/v1/event-filter
Method: POST
{ "id": "event-identifier", "contractAddress": "0x1fbBeeE6eC2B7B095fE3c5A572551b1e260Af4d2", "eventSpecification": { "eventName": "TestEvent", "indexedParameterDefinitions": [ {"position": 0, "type": "UINT256"}, {"position": 1, "type": "ADDRESS"}], "nonIndexedParameterDefinitions": [ {"position": 2, "type": "BYTES32"}, {"position": 3, "type": "STRING"}] }, "correlationIdStrategy": { "type": "NON_INDEXED_PARAMETER", "parameterIndex": 0 } }
為了簡化,我們使用curl調用上述API注冊指定的以太坊智能合約事件:
curl -X POST \ http://localhost:8060/api/rest/v1/event-filter \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/json' \ -H 'Postman-Token: 616712a3-bf11-bbf5-b4ac-b82835779d51' \ -d '{ "id": "Country", "contractAddress": "ENTER_YOUR_CONTRACT_ADDRESS_CHECK_IN_REMIX", "eventSpecification": { "eventName": "CountryEvent", "nonIndexedParameterDefinitions": [ {"position": 0, "type": "STRING"}, {"position": 1, "type": "STRING"}, {"position": 2, "type": "UINT256"}] } }'
注冊成功后,可以得到響應中的ID。現在讓我們調用合約方法以便觸發CountryEvent事件。為此我們繼續使用Remix IDE:
現在讓我們為insert方法傳入參數(“USA”, “Elizabeth Warren ”, 327946410)
,一切正常的話,你就可以在Docker終端中看到交易。
現在讓我們使用NodeJS服務來訂閱Eventuem推送的Kafka事件。步驟如下:
mkdir watcher cd watcher npm init npm install npm i kafka-node (Kafka-nodejs client) touch index.js
在index.js中添加如下代碼:
var kafka = require('kafka-node') const client = new kafka.KafkaClient({kafkaHost: 'localhost:9092'}); var kafka = require('kafka-node'); Consumer = kafka.Consumer, consumer = new Consumer( client, [ { topic: 'contract-events', partition: 0 } ], { autoCommit: false } ); consumer.on('message', function (message) { console.log(message); });
可以如下運行:
nodejs index.js
正如你看到的,我們使用的主題是Eventeum內置的 contract-events 。 使用下面的命令查看Eventeum的全部內建Kafka主題:
bin/kafka-topics.sh --list --zookeeper localhost:2181
結果如下:
__consumer_offsets block-events contract-events filter-events filter-events-dlteventeum filter-events-erreventeum filter-eventsnull
到此,關于“如何使用Eventeum將后端微服務與以太坊智能合約橋接起來”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。