打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

2017年11月07日 09:24:15
阅读数:4265

客户端和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();  },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

初始化智能合约的时候,用了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();//执行事件绑定  },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

事件绑定是这么实现的

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

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

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

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

被绑定的方法在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);          });      });  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  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);      });  },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

总结: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.jav

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
广州区块链智能合约DAPP开发公司
ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约
「Hello,Gakki」背后的知识|大狗教你EOS开发(七)
使用Ganache,web3js和remix在个人区块链上部署并调用合约
nunuStudio:一款支持 3D 及 VR 应用的 JS IDE
Lotus Notes/Domino 7 Web Services
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服