关闭

【智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例

标签: 智能合约事件处理web3truffle
2234人阅读 评论(0) 收藏 举报
分类:

客户端和web端对智能合约的事件Event进行调用的代码示例

web truffle

按官网的例子

http://truffleframework.com/boxes/pet-shop

truffle作为一个运行测试框架,用的也是web3对智能合约进行调用。

文件所在的位置src/js/app.js


  initWeb3: function() {

      // web3入口
      if (typeof web3 !== 'undefined') {
          App.web3Provider = web3.currentProvider;
      } else {
          // 测试网络
          App.web3Provider = new Web3.providers.HttpProvider('http://localhost:8588'); //这里是我指定的端口88
      }
      web3 = new Web3(App.web3Provider);

    return App.initContract();
  },

初始化智能合约的时候,用了truffle自己编译的json文件进行调用

  initContract: function() {
      //加载Adoption.json
      $.getJSON('Adoption.json', function(data) {
          // 智能合约实例化
          var AdoptionArtifact = data;
          App.contracts.Adoption = TruffleContract(AdoptionArtifact); //赋值到App.contracts下的节点数据

          // 设置合约提供者
          App.contracts.Adoption.setProvider(App.web3Provider);

          // 检索操作
          return App.markAdopted();
      });

    return App.bindEvents();//执行事件绑定
  },

事件绑定是这么实现的

  bindEvents: function() {
    $(document).on('click', '.btn-adopt', App.handleAdopt);
  },

其中btn-adopt对应的是src/index.html中的按钮

 <button class="btn btn-default btn-adopt" type="button" data-id="0">Adopt</button>

运行环境后,进行元素检查,发现按钮绑定了事件

这里写图片描述

被绑定的方法在js文件的下面做定义。

  handleAdopt: function() {
    event.preventDefault();//该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)

    var petId = parseInt($(event.target).data('id'));

      var adoptionInstance;

      web3.eth.getAccounts(function(error, accounts) { //本质还是web3调用
          if (error) {
              console.log(error);
          }

          var account = accounts[0];

          App.contracts.Adoption.deployed().then(function(instance) {
              adoptionInstance = instance;

              // Execute adopt as a transaction by sending account
              return adoptionInstance.adopt(petId, {from: account});
          }).then(function(result) {
              return App.markAdopted(); //成功了就把按钮禁用
          }).catch(function(err) {
              console.log(err.message);
          });
      });
  }

  markAdopted: function(adopters, account) {
      //实例
      var adoptionInstance;


      App.contracts.Adoption.deployed().then(function(instance) {
          adoptionInstance = instance;

          return adoptionInstance.getAdopters.call();
      }).then(function(adopters) {
          for (i = 0; i < adopters.length; i++) {
              if (adopters[i] !== '0x0000000000000000000000000000000000000000') {
                  $('.panel-pet').eq(i).find('button').text('Success').attr('disabled', true);
              }
          }
      }).catch(function(err) {
          console.log(err.message);
      });
  },

总结:web端的智能合约使用技术栈为 Node + truffle + web3 ,能完成完整的编写,测试,部署。

客户端 java web3j

项目开源地址为 https://github.com/web3j/web3j

由于web3j的作用和web3一样,都是对智能合约进行部署调用。

客户端 java qtum-android

量子链官方钱包客户端并没有使用web3j,而是自己写的库。

项目地址为 https://github.com/qtumproject/qtum-android

文件为位置 app/src/main/java/org/qtum/wallet/utils/ContractBuilder.java

0
0
查看评论

ETH 基础篇 JAVA Web3j 智能合约

架构springboot   这里使用web3j当前eth官方推荐的集成jdk来做说明!当然你也可以使用它最底层的rpc方案来编写(官网也有说明)! 这里做个总结 第一步:先引入jdk [maven] org.web3j core 3.2.0 连接钱包节点...
  • xf191
  • xf191
  • 2018-01-30 14:30
  • 125

区块链编程一翻译篇<一>:web3j介绍

web3jweb3j是一个轻量级、反应式、类型安全的java和android的类库,用于连接以太坊网络的客户端。 开发者不用开发额外的整合代码,在以太坊区块链平台上工作。 Java and the blockchain为开发者提供了区块链、以太坊和web3j的概述。web3j的特性 对以太坊...
  • jeffsmish
  • jeffsmish
  • 2017-05-28 08:48
  • 4620

【智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例

客户端和web端对智能合约的事件Event进行调用的代码示例web truffle按官网的例子 http://truffleframework.com/boxes/pet-shoptruffle作为一个运行测试框架,用的也是web3对智能合约进行调用。文件所在的位置src/js/app.js i...
  • diandianxiyu
  • diandianxiyu
  • 2017-11-07 09:24
  • 2234

轻量级的以太坊开发库for java发布了 web3j lightweight Ethereum library for Java applications v1.0 release

轻量级的以太坊开发库for java发布了 web3j lightweight Ethereum library for Java applications v1.0 release,java应用就可以不用node.js+web3.js了 https://github.com/web3j/web3...
  • fidelhl
  • fidelhl
  • 2016-11-10 09:41
  • 21221

以太坊智能合约Hello World示例程序

文章转自:http://www.cnblogs.com/huyouhengbc/p/5922093.html简介以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程.开发环境在以太坊上...
  • CSDN_AF
  • CSDN_AF
  • 2017-09-13 11:34
  • 951

区块链开发(二)部署和运行第一个以太坊智能合约

区块链开发(二)部署并运行第一个以太坊智能合约 李赫2016年8月10日         网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境,然后部署Geth或者Eth节点,然后一步一步生成钱包、ABI...
  • sportshark
  • sportshark
  • 2016-08-22 08:50
  • 18431

在geth客户端调用已部署的智能合约

假如我们在钱包里部署了一个智能合约,那么在geth客户端该怎么调用这个智能合约呢?(使用web3.js操作智能合约) 1、首先在钱包中部署智能合约,合约代码如下: pragma solidity ^0.4.11; contract MetaCoin { mapping (address =...
  • MisshqZzz
  • MisshqZzz
  • 2017-09-04 11:31
  • 1574

以太坊学习(4)开发编译部署调用智能合约

本文根据汪晓明的视频资料整理,ubuntu16.04测试正确。 1.打开geth控制台~$ geth --datadir ~/pengfan/eth --dev在另一个终端输入~$ geth --dev console 2>>file_to_log_output2.查看、设置编译器&g...
  • p03721
  • p03721
  • 2017-01-07 17:10
  • 2695

以太坊开发文档09 - javascriptApi

Web3 JavaScriptÐappAPI 为了让您的应用程序能够在以太坊上工作,您可以使用web3.js库web3提供的对象。在底层,它通过RPC调用与本地节点通信。web3.js与任何暴露RPC层的以太坊节点一起工作。 web3包含eth对象 - web3.eth(专门用于...
  • qq_28114645
  • qq_28114645
  • 2017-12-14 14:21
  • 1094

truffle migrate命令的使用

truffle migrate命令的使用 概述 Migrations 是帮助你向以太坊网络中部署合约的JavaScript文件。这些文件负责部署你的合约文件,而且它们会在假设你的部署需求会随着时间的变化而被重写。随着项目的进展,你会创建新的migrate脚本以便在区块链上进一步的演化。以前运...
  • myNameIssls
  • myNameIssls
  • 2018-02-02 09:38
  • 69
    个人资料
    • 访问:642529次
    • 积分:9045
    • 等级:
    • 排名:第2472名
    • 原创:297篇
    • 转载:13篇
    • 译文:4篇
    • 评论:82条
    博客专栏
    微信订阅号
    欢迎加入QQ群
    玩家老黄历(微信小程序)
    谢谢支持~
    最新评论