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();