摘要:在中被大量使用以便于開發。事實上,在中創建帳戶存在問題。這種方法使我可以輕松調用智能合約。結論這就是我的區塊鏈實驗系列的全部內容。
這是一步步的用EOSIO開發區塊鏈DApp的第三部分,上一部分中,我為EOSIO平臺開發了一個模擬選舉的智能合約。這部分我將開發一個webapp,允許訪問者投票給候選人。
以下是webapp的快速預覽:
源代碼說明首先,請參閱下面的概述圖:
前端前端由HTML,CSS和Javascript組成。我使用Semantic-UI作為CSS框架以獲得漂亮的外觀。JQuery在Javascript中被大量使用以便于開發。
此webapp只有一個頁面(主頁HTML)。主頁分為四個部分。 以下是部分的屏幕截圖:
以下是主頁index.html的代碼片段:
........................
index.html的完整源代碼在這里
app.js涵蓋了前端邏輯。以下是亮點:
... // Main Application Object function App() { ... } ... // Ajax calls App.prototype.getInfo = function() { return $.ajax({ type: "GET", dataType: "json", url: "/api/getinfo" }); } App.prototype.unlockWallet = function() { return $.ajax({ type: "POST", dataType: "json", url: "/api/unlock_wallet" }); } ... // Event handlers App.prototype.onBtnInputNameClicked = function(evt) { ... } ... // Program startup App.prototype.start = function() { self.getInfo().then(function() { return self.unlockWallet(); }).done(function() { ... } } ...
app.js的完整源代碼在這里
如你所見,我使用jQuery ajax()和then()來執行對后端的多次異步調用。以下部分將提到后端代碼。
后端后端用Python和Flask框架編程。Flask不僅使我們能夠非常輕松地創建功能強大的Web應用程序,而且可以快速開發RESTful API服務。以下是server.py代碼的代碼亮點:
import subprocess from flask import Flask from flask import render_template ... def cleos(args): if isinstance(args, list): command = ["cleos", "--wallet-url=http://localhost:8899"] command.extend(args) command = " ".join(command) else: command = "cleos " + args results = subprocess.run(command, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True, check=False) return results ... app = Flask(__name__) ... @app.route("/") @app.route("/index") def index(): return render_template("index.html") ... # RESTful API functions @app.route("/api/getinfo", methods=["GET"]) def get_info(): result = cleos(["get", "info"]) rstmsg = result.stderr.decode("ascii") if not rstmsg.startswith("Fail"): return result.stdout else: return "nodeos connection failed", 500 ...
server.py的完整源代碼在這里
如上所述,在cleos()函數內部,它生成新進程以啟動cleos命令,就像在命令行中一樣。你可能想知道為什么不使用EOSJS。事實上,在EOSJS中創建EOSIO帳戶存在問題。實際上,我嘗試使用NodeJS代碼在EOSJS中創建一個帳戶,但都失敗了。所以我放棄了并切換到Python Flask。雖然子進程很慢并且具有可擴展性問題。但我認為它適合于演示目的。
這種方法使我可以輕松調用EOSIO智能合約。下面的server.py中的代碼片段說明了如何調用智能合約在上一部分最后小結開發的投票操作:
... @app.route("/api/vote_candidate", methods=["POST"]) def vote_candidate(): account = request.form.get("account") candidate = request.form.get("candidate") param = ""["" + account + "", " + candidate + "]"" # Invoke the Smart Contract "vote" action result = cleos(["push", "action", "election", "vote", param, "-p", account]) print(result.stderr) if result.returncode == 0: return jsonify({"result": result.stderr.decode("ascii")}) else: return result.stderr, 500 ...
因此前端代碼app.js調用:
... App.prototype.voteCandidate = function(account, candidate) { return $.ajax({ type: "POST", data: { account: account, candidate: candidate }, dataType: "json", url: "/api/vote_candidate" }); } ... this.voteCandidate(this._account, val).done(function(resp) { console.info("Vote AJAX call result"); console.log(resp); ...自己動手試試吧
我已經設置了一個演示服務器,讓你體驗EOSIO區塊鏈。瀏覽http://demo.simonho.net:5000自己嘗試一下。但我無法保證服務器隨時可用且持久。它只是我家用電腦的虛擬機。
結論這就是我的EOSIO區塊鏈實驗系列的全部內容。先前部分的超鏈接:第1部分和第2部分。
希望你喜歡!
項目完整源代碼托管在這里github repo
======================================================================
分享一個交互式的在線編程實戰,EOS智能合約與DApp開發入門:
EOS教程
本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發。
這里是原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97650.html
摘要:在中被大量使用以便于開發。事實上,在中創建帳戶存在問題。這種方法使我可以輕松調用智能合約。結論這就是我的區塊鏈實驗系列的全部內容。 這是一步步的用EOSIO開發區塊鏈DApp的第三部分,上一部分中,我為EOSIO平臺開發了一個模擬選舉的智能合約。這部分我將開發一個webapp,允許訪問者投票給候選人。 以下是webapp的快速預覽: showImg(https://segmentfau...
摘要:與傳統方式不同,在去中心化的網絡及區塊鏈上運行后端代碼智能合約。這個博客涵蓋了什么在本博客中,我將展示如何設置區塊鏈并開發智能合約。 在我傾聽Bettina Warburg的演講之后,我對去中心化經濟(dApps)的概念著迷。傳統的Web應用程序是: 前端→后端→數據庫 相比之下,dApp網站是: 前端→智能合約→區塊鏈 例如,當你進入電子銀行時,網頁將調用后端代碼來獲取你的個人數據并...
摘要:示例智能合約的目的是模擬選舉。這告訴了智能合約中處理程序的定義。接下來的任務是創建一個新的帳戶來保存選舉智能合約。 這是一步步的用EOSIO開發區塊鏈DApp的第二部分,這部分將主要是為EOSIO平臺開發智能合約。 示例智能合約的目的是模擬選舉。我創建了一個EOSIO用戶來托管智能合約。創建了兩個公民用戶來投票給候選人。投票記錄保存在EOSIO區塊鏈中。在此示例中,所有操作都在命令模式...
摘要:在看啟動腳本輸出的時候,發現了這兩樣輸出設置和智能合約,以及安裝合約開發工具。合約開發工具是的工具鏈和一組工具,用于促進平臺的合同編寫。系統智能合約,可以進行很多系統級別的操作,比如用戶投票將用戶注冊成為生產者。 Previously 在EOS DApp開發入門(一)中,通過docker image的方式架起了本地的eos區塊鏈,使Note chain DApp與本地區塊鏈進行交互,成...
閱讀 2609·2021-11-17 17:00
閱讀 1863·2021-10-11 10:57
閱讀 3716·2021-09-09 11:33
閱讀 911·2021-09-09 09:33
閱讀 3550·2019-08-30 14:20
閱讀 3311·2019-08-29 11:25
閱讀 2796·2019-08-26 13:48
閱讀 734·2019-08-26 11:52