资讯专栏INFORMATION COLUMN

区块链平台EOSIO开发智能合约和dapp(三)

yiliang / 2518人阅读

摘要:在中被大量使用以便于开发。事实上,在中创建帐户存在问题。这种方法使我可以轻松调用智能合约。结论这就是我的区块链实验系列的全部内容。

这是一步步的用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的开发。

这里是原文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97650.html

相关文章

  • 区块平台EOSIO开发智能合约dapp

    摘要:在中被大量使用以便于开发。事实上,在中创建帐户存在问题。这种方法使我可以轻松调用智能合约。结论这就是我的区块链实验系列的全部内容。 这是一步步的用EOSIO开发区块链DApp的第三部分,上一部分中,我为EOSIO平台开发了一个模拟选举的智能合约。这部分我将开发一个webapp,允许访问者投票给候选人。 以下是webapp的快速预览: showImg(https://segmentfau...

    CoyPan 评论0 收藏0
  • 区块平台EOSIO开发智能合约dapp(一)

    摘要:与传统方式不同,在去中心化的网络及区块链上运行后端代码智能合约。这个博客涵盖了什么在本博客中,我将展示如何设置区块链并开发智能合约。 在我倾听Bettina Warburg的演讲之后,我对去中心化经济(dApps)的概念着迷。传统的Web应用程序是: 前端→后端→数据库 相比之下,dApp网站是: 前端→智能合约→区块链 例如,当你进入电子银行时,网页将调用后端代码来获取你的个人数据并...

    tylin 评论0 收藏0
  • 区块平台EOSIO开发智能合约dapp(二)

    摘要:示例智能合约的目的是模拟选举。这告诉了智能合约中处理程序的定义。接下来的任务是创建一个新的帐户来保存选举智能合约。 这是一步步的用EOSIO开发区块链DApp的第二部分,这部分将主要是为EOSIO平台开发智能合约。 示例智能合约的目的是模拟选举。我创建了一个EOSIO用户来托管智能合约。创建了两个公民用户来投票给候选人。投票记录保存在EOSIO区块链中。在此示例中,所有操作都在命令模式...

    cuieney 评论0 收藏0
  • EOS DApp开发入门(二): 智能合约探究

    摘要:在看启动脚本输出的时候,发现了这两样输出设置和智能合约,以及安装合约开发工具。合约开发工具是的工具链和一组工具,用于促进平台的合同编写。系统智能合约,可以进行很多系统级别的操作,比如用户投票将用户注册成为生产者。 Previously 在EOS DApp开发入门(一)中,通过docker image的方式架起了本地的eos区块链,使Note chain DApp与本地区块链进行交互,成...

    Honwhy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<