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