摘要:在中被大量使用以便于開發(fā)。事實(shí)上,在中創(chuàng)建帳戶存在問題。這種方法使我可以輕松調(diào)用智能合約。結(jié)論這就是我的區(qū)塊鏈實(shí)驗(yàn)系列的全部內(nèi)容。
這是一步步的用EOSIO開發(fā)區(qū)塊鏈DApp的第三部分,上一部分中,我為EOSIO平臺(tái)開發(fā)了一個(gè)模擬選舉的智能合約。這部分我將開發(fā)一個(gè)webapp,允許訪問者投票給候選人。
以下是webapp的快速預(yù)覽:
源代碼說明首先,請(qǐng)參閱下面的概述圖:
前端前端由HTML,CSS和Javascript組成。我使用Semantic-UI作為CSS框架以獲得漂亮的外觀。JQuery在Javascript中被大量使用以便于開發(fā)。
此webapp只有一個(gè)頁面(主頁HTML)。主頁分為四個(gè)部分。 以下是部分的屏幕截圖:
以下是主頁index.html的代碼片段:
........................
index.html的完整源代碼在這里
app.js涵蓋了前端邏輯。以下是亮點(diǎn):
... // 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()來執(zhí)行對(duì)后端的多次異步調(diào)用。以下部分將提到后端代碼。
后端后端用Python和Flask框架編程。Flask不僅使我們能夠非常輕松地創(chuàng)建功能強(qiáng)大的Web應(yīng)用程序,而且可以快速開發(fā)RESTful API服務(wù)。以下是server.py代碼的代碼亮點(diǎn):
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()函數(shù)內(nèi)部,它生成新進(jìn)程以啟動(dòng)cleos命令,就像在命令行中一樣。你可能想知道為什么不使用EOSJS。事實(shí)上,在EOSJS中創(chuàng)建EOSIO帳戶存在問題。實(shí)際上,我嘗試使用NodeJS代碼在EOSJS中創(chuàng)建一個(gè)帳戶,但都失敗了。所以我放棄了并切換到Python Flask。雖然子進(jìn)程很慢并且具有可擴(kuò)展性問題。但我認(rèn)為它適合于演示目的。
這種方法使我可以輕松調(diào)用EOSIO智能合約。下面的server.py中的代碼片段說明了如何調(diào)用智能合約在上一部分最后小結(jié)開發(fā)的投票操作:
... @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調(diào)用:
... 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); ...自己動(dòng)手試試吧
我已經(jīng)設(shè)置了一個(gè)演示服務(wù)器,讓你體驗(yàn)EOSIO區(qū)塊鏈。瀏覽http://demo.simonho.net:5000自己嘗試一下。但我無法保證服務(wù)器隨時(shí)可用且持久。它只是我家用電腦的虛擬機(jī)。
結(jié)論這就是我的EOSIO區(qū)塊鏈實(shí)驗(yàn)系列的全部內(nèi)容。先前部分的超鏈接:第1部分和第2部分。
希望你喜歡!
項(xiàng)目完整源代碼托管在這里github repo
======================================================================
分享一個(gè)交互式的在線編程實(shí)戰(zhàn),EOS智能合約與DApp開發(fā)入門:
EOS教程
本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開發(fā)。
這里是原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24277.html
摘要:在中被大量使用以便于開發(fā)。事實(shí)上,在中創(chuàng)建帳戶存在問題。這種方法使我可以輕松調(diào)用智能合約。結(jié)論這就是我的區(qū)塊鏈實(shí)驗(yàn)系列的全部內(nèi)容。 這是一步步的用EOSIO開發(fā)區(qū)塊鏈DApp的第三部分,上一部分中,我為EOSIO平臺(tái)開發(fā)了一個(gè)模擬選舉的智能合約。這部分我將開發(fā)一個(gè)webapp,允許訪問者投票給候選人。 以下是webapp的快速預(yù)覽: showImg(https://segmentfau...
摘要:與傳統(tǒng)方式不同,在去中心化的網(wǎng)絡(luò)及區(qū)塊鏈上運(yùn)行后端代碼智能合約。這個(gè)博客涵蓋了什么在本博客中,我將展示如何設(shè)置區(qū)塊鏈并開發(fā)智能合約。 在我傾聽Bettina Warburg的演講之后,我對(duì)去中心化經(jīng)濟(jì)(dApps)的概念著迷。傳統(tǒng)的Web應(yīng)用程序是: 前端→后端→數(shù)據(jù)庫 相比之下,dApp網(wǎng)站是: 前端→智能合約→區(qū)塊鏈 例如,當(dāng)你進(jìn)入電子銀行時(shí),網(wǎng)頁將調(diào)用后端代碼來獲取你的個(gè)人數(shù)據(jù)并...
摘要:示例智能合約的目的是模擬選舉。這告訴了智能合約中處理程序的定義。接下來的任務(wù)是創(chuàng)建一個(gè)新的帳戶來保存選舉智能合約。 這是一步步的用EOSIO開發(fā)區(qū)塊鏈DApp的第二部分,這部分將主要是為EOSIO平臺(tái)開發(fā)智能合約。 示例智能合約的目的是模擬選舉。我創(chuàng)建了一個(gè)EOSIO用戶來托管智能合約。創(chuàng)建了兩個(gè)公民用戶來投票給候選人。投票記錄保存在EOSIO區(qū)塊鏈中。在此示例中,所有操作都在命令模式...
摘要:在看啟動(dòng)腳本輸出的時(shí)候,發(fā)現(xiàn)了這兩樣輸出設(shè)置和智能合約,以及安裝合約開發(fā)工具。合約開發(fā)工具是的工具鏈和一組工具,用于促進(jìn)平臺(tái)的合同編寫。系統(tǒng)智能合約,可以進(jìn)行很多系統(tǒng)級(jí)別的操作,比如用戶投票將用戶注冊(cè)成為生產(chǎn)者。 Previously 在EOS DApp開發(fā)入門(一)中,通過docker image的方式架起了本地的eos區(qū)塊鏈,使Note chain DApp與本地區(qū)塊鏈進(jìn)行交互,成...
閱讀 3794·2021-11-17 09:33
閱讀 2011·2021-10-26 09:51
閱讀 1527·2021-09-29 09:44
閱讀 1678·2019-08-30 15:55
閱讀 1447·2019-08-30 15:52
閱讀 2325·2019-08-30 15:43
閱讀 3432·2019-08-29 17:00
閱讀 2302·2019-08-29 16:23