/*** 一个基于truffle-contract库实现的以太坊solidity智能合约调用案例!* 注意:truffle-contract库和web3.js使用nodej或import同时导入转码的时候会打架冲突!*      为此如果使用truffle-contract库来实现solidity调用,必须使用truffle-contract原生链的Web3对象!*      truffle-contract是truffle框架基于web3.js进一步封装使用更方便的库!* **/const TruffleContract = require( 'truffle-contract' );
const first_contract_json = require( '@/truffle/build/contracts/FirstContract.json' );class FirstContractWeb3 {constructor () {this.from_addr = '0x88D9C6F37E10A4B8801a06979ad6f60D91bA0a52';this.init_web3_1_0_version();this.get_truffle_contract_init();}/*** 创建一个空合约truffle_contract,目的是拿到truffle_contract库中的Web3!* 这里不能直接require或import导入web3.js中的Web3,因为与truffle_contract不兼容,会报错!*/get_Web3_from_truffle_contract () {let contract_empty = TruffleContract();/*** truffle-contract库就是基于Web3对象封装的,这里的Web就是truffl-contract原生链上的Web对象!* 这里不能用require或import的方式导入web.js库导入Web3,测试发现truffl-contract和web3.js会打架!* 这里用法等价于let Web3 = this.contract.web3.__proto__.constructor;*/return Object.getPrototypeOf( contract_empty.web3 ).constructor;}// web3对象初始化(仅兼容web3.js 1.0版本)init_web3_1_0_version () {let Web3 = this.get_Web3_from_truffle_contract();console.log( '判断浏览器是否启用Metamask插件的对象Web3.givenProvider结果为:', Web3.givenProvider );/*** 如果浏览器安装了Metamask钱包(如:谷歌、火狐),那么Web3.givenProvider等于Metamask* 如果浏览器没有安装或不支持Metamask,那么Web3.givenProvider等于null*/this.web3 = new Web3( Web3.givenProvider || new Web3.providers.HttpProvider( 'http://127.0.0.1:8545' ) );console.log( 'this.web3对象:', this.web3 );}// truffle-contract智能合约初始化函数!get_truffle_contract_init () {let first_contract = TruffleContract( first_contract_json );first_contract.setProvider( this.web3.currentProvider );let deployed = first_contract.deployed();let constract_instance;deployed.then( ( instance ) => {constract_instance = instance;console.log( '合约实例constract_instance:', constract_instance );//  调用getInfo方法,call声明不改变合约状态!return constract_instance.getInfo.call();} ).then( ( result ) => {console.log( 'getInfo返回结果:', result );// 调用setInfo方法,sendTransaction发送交易,改变合约状态!// 监听setInfo中的event事件!return constract_instance.setInfo.sendTransaction( 'kirin', 28,{ 'from': this.from_addr } ).then( ( result ) => {console.log( 'setInfo发送成功返回结果:', result );// 事件返回的数据会存放于result.logs[0].args对象中!console.log( 'event返回结果:', result);} ).catch( ( err ) => {alert( 'ERROR! ' + err.message );} );} ).catch( ( err ) => {alert( 'ERROR! ' + err.message );} );}
}let contract = new FirstContractWeb3();

基于truffle-contract库之solidity事件与合约调用完整案例!相关推荐

  1. 【区块链】以太坊Solidity编程:合约调用与web3.js

    以太坊Solidity编程:合约调用与Web3.js 合约部署方法 合约的编译 使用浏览器编译器Remix 使用truffle编译,目前是最常用的编译方式 Solc或者Web3.js编译合约,使用相对 ...

  2. 【重磅推荐】基于truffle-contract库实现的以太坊solidity合约调用案例(注:web3.js切勿和truffle-contract库同时使用,否则报错,无法修复!)

    1.一个基于truffle-contract库实现的以太坊solidity智能合约调用案例! 2. 注意:truffle-contract库和web3.js使用nodej或import同时导入转码的时 ...

  3. 基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署

    基于第三方开源库的OPC服务器开发指南(2)--LightOPC的编译及部署 前文已经说过,OPC基于微软的DCOM技术,所以开发OPC服务器我们要做的事情就是开发一个基于DCOM的EXE文件.一个代 ...

  4. solidity事件详解

    很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用? 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊. ...

  5. 详解 Solidity 事件Event

    很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用? 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊. ...

  6. php扩展库后门,编写基于PHP扩展库的后门

    author:lxj616 0x00 前言 今天我们将讨论编写基于PHP扩展库的后门.通常来说,大部分入侵者都会在脚本中留下自定义代码块后门.当然,这些东西很容易通过源代码的静态或动态分析找到. 利用 ...

  7. 基于React、Typescript和Solidity的NFT完整教程

    基于React.Typescript和Solidity的NFT完整教程 了解如何使用 React / Next JS.Solidity 和 Pinata(IPFS) 在以太坊上创建 NFT 市场 课程 ...

  8. 基于微软企业库的AOP组件(含源码)

    软件开发,离不开对日志的操作.日志可以帮助我们查找和检测问题,比较传统的日志是在方法执行前或后,手动调用日志代码保存.但自从AOP出现后,我们就可以避免这种繁琐但又必须要实现的方式.本文是在微软企业库 ...

  9. 基于Shodan Python库的批量攻击实践 撒旦网

    拜读了xiaix关于Shodan的全面介绍:<Shodan新手入坑指南>,受益匪浅.SQL Server的弱口令入侵案例层出不穷,利用工具也大量存在,本文以MSSQL服务器为切入点,以解决 ...

最新文章

  1. 值得推荐!安利8个小众好用的宝藏工具,解决各种需求
  2. jwt认证机制优势和原理_最详细的Spring Boot 使用JWT实现单点登录
  3. ODBC访问EXCEL
  4. 抓包工具tcpdump及分析工具wireshark
  5. Mybatis(五) 延迟加载和缓存机制(一级二级缓存)
  6. Exchange Server 2016管理系列课件33.通讯组仲裁
  7. CentOS 6.4 i386 版本安装 FastDFS、使用Nginx作为文件访问WEB服务器
  8. SAP Fiori 修改catalog group名称的技术实现
  9. action请求是什么意思_凭什么说大疆Osmo Action可以干掉 GoPro hero7?
  10. 什么是事务、事务特性、事务隔离级别、spring事务传播特性
  11. biodist r语言_R语言 Biostrings包 pairwiseAlignment()函数中文帮助文档(中英文对照)
  12. Node.js简介与架构
  13. 铁塔基站三相有功电能无线计量仪表外置互感器-安科瑞 顾月
  14. css画钟表_用CSS3实现钟表效果
  15. java 多线程 串行 加锁_[Java并发编程实战] 线程安全
  16. linux 进程共享内存同步,Linux使用共享内存通信的进程同步退出问题
  17. ps2017 cc 打印排版一寸照片
  18. Unity入门——角色属性设置
  19. Java并发编程实战(学习笔记十 第十一章 性能与可伸缩性)
  20. 超声检查腕骨间关节有助于最大程度地发现RA腕骨间滑膜炎

热门文章

  1. JQuery入门(1) - 选择器
  2. Abp Vnext修改密码强度
  3. C++算法之选择排序
  4. android功能_自动切换APP图标,节假日图标自动变化
  5. IDEA 最新激活方法
  6. 专访刘秋杉:我的人生是一场没有边界的无限游戏
  7. Tomcat 如何查看端口
  8. 利用傅里叶变换去除图像中有规律的噪声
  9. B2B2C简易流程图
  10. python手机自动回复_用python itchat写一个微信机器人自动回复