成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

區(qū)塊鏈平臺(tái)EOSIO開(kāi)發(fā)智能合約和dapp(三)

yiliang / 2624人閱讀

摘要:在中被大量使用以便于開(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

相關(guān)文章

  • 區(qū)塊平臺(tái)EOSIO開(kāi)發(fā)智能合約dapp

    摘要:在中被大量使用以便于開(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...

    CoyPan 評(píng)論0 收藏0
  • 區(qū)塊平臺(tái)EOSIO開(kāi)發(fā)智能合約dapp(一)

    摘要:與傳統(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ù)并...

    tylin 評(píng)論0 收藏0
  • 區(qū)塊平臺(tái)EOSIO開(kāi)發(fā)智能合約dapp(二)

    摘要:示例智能合約的目的是模擬選舉。這告訴了智能合約中處理程序的定義。接下來(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ū)塊鏈中。在此示例中,所有操作都在命令模式...

    cuieney 評(píng)論0 收藏0
  • EOS DApp開(kāi)發(fā)入門(mén)(二): 智能合約探究

    摘要:在看啟動(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)行交互,成...

    Honwhy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<