在EOSIO平台上开发区块链dapp(三、webapp)

这是一步步的用EOSIO开发区块链DApp的第三部分,上一部分中,我为EOSIO平台开发了一个模拟选举的智能合约。这部分我将开发一个webapp,允许访问者投票给候选人。

以下是webapp的快速预览:

源代码说明

首先,请参阅下面的概述图:

前端

前端由HTML,CSS和Javascript组成。我使用Semantic-UI作为CSS框架以获得漂亮的外观。JQuery在Javascript中被大量使用以便于开发。

此webapp只有一个页面(主页HTML)。主页分为四个部分。 以下是部分的屏幕截图:

以下是主页index.html的代码片段:

...
  <body>
    <div class="ui container">
      <div class="ui grid">
    ...
        <div id="hints_portion" class="sixteen wide column">
        ...
        </div>
        <div id="input_portion" class="sixteen wide column">
        ...
        </div>
        <div id="voting_portion" class="sixteen wide column">
        ...
        </div>
        <div id="voted_portion" class="sixteen wide column">
        ...
        </div>
    ...
      </div>
    </div>
...

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入门开发实战教程

原文地址:http://blog.51cto.com/13697184/2174048

时间: 2024-11-07 10:13:34

在EOSIO平台上开发区块链dapp(三、webapp)的相关文章

在EOSIO平台上开发区块链dapp(一)

在我倾听Bettina Warburg的演讲之后,我对去中心化经济(dApps)的概念着迷.传统的Web应用程序是: 前端→后端→数据库 相比之下,dApp网站是: 前端→智能合约→区块链 例如,当你进入电子银行时,网页将调用后端代码来获取你的个人数据并将其显示在页面上.后端代码在集中式服务器上运行. 与传统方式不同,dApps在去中心化的P2P网络及区块链(Blockchain)上运行后端代码智能合约(smart contract). 为什么区块链如此热? 区块链是支撑数字货币比特币的技术,但

数字货币平台开发-区块链加密数字币炒币投资为什么赚钱!

数字货币交易所开发公司www.38tjys.com专业数字货币平台开发-区块链加密技术研发商教你如何投资! 都说高投资高风险,数字货币交易平台的开发就是高风险投资,然而的效率也同样是成正比的.其实数字货币交易平台的风险一般分为:交易风险.信用风险.经济风险以及政策风险,其中交易风险是最普遍存在的也是最能影响投资者利益的. 数字货币交易平台有什么用,你只能看见交易的数据,还是加密的,而交易的数字货币却又是看不见摸不着的,还拿真金白银去购买,有什么用呢? 数字货币是在全世界已被互联网整个拉近成为"地

酒链世界平台开发区块链商城系统模式

酒链世界平台开发区块链商城系统模式,陈会:137.1026.0445(可微可电)酒链世界平台APP开发,酒链世界区块链商城开发,酒链世界分销返利模式开发,酒链世界软件开发定制开发. 首先酒链世界是酒品F2C直购平台.F指的是酒厂厂家,C是消费者.在酒链世界App的内置商城,消费者可以用数字资产"圣酒"兑换酒品,也可以现金购买.厂家收到消费者订单后,直接将酒水从工厂快递邮寄,厂家直销,消除中间环节,保证源头正宗. 再就是酒品广告分发平台. 以往的DSP广告,广告主最困惑之处在于,不知道到

教你数字货币交易平台开发区块链虚拟币交易系统平台服务

教你数字货币交易平台开发区块链虚拟币交易系统平台服务 数字货币系统开发区块链技术是利用块链式数据结构来验证和存储数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式保证数据传输和访问的安全,利用自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础结构与设计范式.云之梦数字货币系统开发公司,区块链交易系统开发.区块链拥有去中心化.不可篡改.唯一可信任.匿名性的特点,在金融.防伪溯源.版权保护等方面拥有诸多应用.将区块链技术应用在合适的领域,才能发挥出该有的价值.应用场景多元

专门为前端工程师设计 Nodejs+React 实战开发区块链“慕课”Dapp资源教程百度云

资源获取链接:点击这里 第1章 课程导学 对课程整体的知识点,项目进行介绍. 1-1 课程导学 第2章 区块链概念科普 使用村庄的例子介绍区块链是什么,分布式记账的过程和不可篡改性,常见的数字货币都有哪些,以及区块链技术的前景的介绍. 2-1 区块链是什么 2-2 数字货币 2-3 区块链应用场景 第3章 区块链技术概念科普 使用课程辅助工具iblockchain,介绍区块链里的哈希,非对称加密,挖矿,记账,分布式的技术原理. 3-1 哈希 3-2 共识POW,POS和DPOS 3-3 非对称加

Nodejs + React 实战开发区块链慕课Dapp 专门为前端工程师设计

第1章 课程导学对课程整体的知识点,项目进行介绍. 1-1 课程导学 试看第2章 区块链概念科普使用村庄的例子介绍区块链是什么,分布式记账的过程和不可篡改性,常见的数字货币都有哪些,以及区块链技术的前景的介绍. 2-1 区块链是什么 试看 2-2 数字货币 2-3 区块链应用场景第3章 区块链技术概念科普使用课程辅助工具iblockchain,介绍区块链里的哈希,非对称加密,挖矿,记账,分布式的技术原理. 3-1 哈希 3-2 共识POW,POS和DPOS 3-3 非对称加密 3-4 拜占庭将军

2018年数字资产即将爆发数字资产交易系统开发区块链交易平台技术

2018年数字资产即将爆发数字资产交易系统开发区块链交易平台技术2018年数字资产即将爆发数字资产交易区块链交易平台技术,有人说2017年是区块链元年,那么2018年就是区块链爆发之年.所谓爆发,一则体现舆论话题不停,二则体现应用遍地开花,2017虽已过,不过这遍地开花的势头却是不容小觑.2018年,一场轰轰烈烈的"数字资产区块链开发运动"如×××般席卷而来,关于其争议一直没停歇过.展望2018年,既有机遇也有挑战.从国际上看,全球经济复苏态势仍可能延续,主要发达经济体货币政策将进一步

怎么配置电脑才能开发区块链?

区块链爆红以后,越来越多人想要自己开发区块链.那么区块链开发需要怎样的电脑配置?简析开发区块链的环境搭建.由于区块链技术迭代很快,此篇环境搭建仅供参考. 此处介绍的是基于Ubuntu14.04系统上搭建平台的过程,推荐使用Linux和Mac OS X操作系统,Windows不建议使用,因为目前开发区块链还是比较复杂的,Windows容易出现问题导致安装失败. 软件安装时使用ubuntu系统官方的apt源.国内阿里.网易.腾讯.汉全等免费提供的apt源可以加快安装软件的速度,不过安装此篇所介绍的软

Java开发区块链的三大sdk库

如果你想将区块链合并到一个Java项目中,现在我们来看看就是这个细分领域中三个最大的OSS玩家. 好的伙计们,我们都听说过比特币,以太坊或其他加密货币,其中有一些时髦的名字围绕着我们常见的新闻,但我们作为Java开发人员知道如何轻松地与这些区块链技术进行交互吗?以下是可用于利用区块链趋势的前三大Java项目.该列表基于GitHub存储库星级排序.非常感谢评论和意见. BitcoinJ 这个名字很具描述性,你不觉得吗?如果你想知道如何创建比特币钱包并管理节点之间的交易,那么你应该尝试使用Bitco