使用truffle-contract与以太坊主链合约通信

truffle-contractweb3.js一样,都是用来与以太坊智能合约交互的JS库,但是相对于web3.js来说,truffle-contract封装得更简单一些,本文示范如何通过truffle-contract与以太坊主链上部署好的合约通信。

第一步引入相关的和合约ABI文件,并通过contract(abi)函数得到合约对象,ABI文件可以通过truffle comile命令对solidity代码编译得来,address保存了合约的地址:

import { default as Web3 } from 'web3'
import { default as contract } from 'truffle-contract'
import StudentFactoryArtifacts from '../../build/contracts/StudentFactory.json'

var StudentFactory = contract(StudentFactoryArtifacts)
var address = '0x04a5122698adf47ae0cdd0a10274742797684d44'

第二步实例化web3对象,如果有Mist或Metamask就默认由它们提供,否则使用本地的Provider。

window.addEventListener('load', function () {
  if (typeof web3 !== 'undefined') {
    window.web3 = new Web3(window.web3.currentProvider)
  } else {
    // 提醒用户下载Metamask或Mist
  }
  window.App.start()
})

第三步,start函数对合约对象设置了Provider,并获取账户列表

window.App = {
  start: function () {
    StudentFactory.setProvider(window.web3.currentProvider)
    window.web3.eth.getAccounts(function (err, accs) {
      if (err != null) {
        return
      }
      if (accs.length === 0) {
        return
      }
      accounts = accs
      account = accounts[0]
    })
  }
}

第四步,重头戏,通过at(address)获取到实例,再调用合约里的函数即可。如果是读取数据后面加.call(),写数据不用加。

  owner: function () {
    var studentFactory
    StudentFactory.at(address).then(function (instance) {
      studentFactory = instance // 获得实例
      return studentFactory.owner.call() // 调用合约函数
    }).then(function (result) {
      // 处理查询结果
    }).catch(function (e) {
      console.warn(e) // 打印warning
    })
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄嘉成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值