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

1、一个基于truffle-contract库实现的以太坊solidity智能合约调用案例!


2、 注意:truffle-contract库和web3.js使用nodej或import同时导入转码的时候会打架冲突!
       为此如果使用truffle-contract库来实现solidity调用,必须使用truffle-contract原生链的Web3对象!
       truffle-contract是truffle框架基于web3.js进一步封装使用更方便的库!

/**
 * 一个基于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() {
        // 创建一个truffle-contract实例,为了初始化合约对象以及拿到原生链上的Web对象!
        this.contract = TruffleContract(first_contract_json);
        this.init_web3_1_0_version();
        this.get_truffle_contract_init();
    }

    // web3对象初始化(仅兼容web3.js 1.0版本)
    init_web3_1_0_version() {
        // truffle-contract库就是基于Web3对象封装的,这里的Web就是truffl-contract原生链上的Web对象!
        // 这里不能用require或import的方式导入web.js库导入Web3,测试发现truffl-contract和web3.js会打架!
        let Web3 = this.contract.web3.__proto__.constructor;
        // 如果浏览器安装了Metamask钱包(如:谷歌、火狐),那么Web3.givenProvider等于Metamask
        // 如果浏览器没有安装或不支持Metamask,那么Web3.givenProvider等于null
        console.log("判断浏览器是否启用Metamask插件的对象Web3.givenProvider结果为:", Web3.givenProvider);
        console.log("contract-Web3", Web3);
        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() {

        //  调用getInfo方法,call声明不改变合约状态!
        this.contract.setProvider(this.web3.currentProvider);
        this.contract.at('0xc5df1c7cbd988293313e63826009c76da3d362d1').then(function (instance) {
            console.log('instance', instance);
            return instance.getInfo();
        }).then(function (result) {
            console.log(result);
        }).catch(function (err) {
            alert('ERROR! ' + err.message);
        });

        //  调用setInfo方法,sendTransaction声明要发送交易!
        this.contract.deployed().then( function ( instance ) {
            console.log( 'instance', instance );
            return instance.setInfo.sendTransaction( 'kirin', 28, { 'from': '0x8da3228Fc3b423C9F5D657c2324f3aAB97B4D283' } );
        } ).then( function ( result ) {
            console.log( result );
        } ).catch( function ( err ) {
            // Easily catch all errors along the whole execution.
            alert( 'ERROR! ' + err.message );
        } );
    }
}

new FirstContractWeb3();


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值