本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1、普通web3硬编码方式和truffle-contract方式的区别
web3硬编码方式:
var infoContract = web3.eth.contract(合约ABI);
var Simple = infoContract.at('合约地址');
truffle-contract方式:
TruffleContract('合约的json文件').deployed()
.then(function(instance) {
});
小编建议:既然truffle都给我们封装好了truffle-contranct的web3封装方法,肯定用truffle-contranct啊!!!!!
2、初始化web3
//初始化
init: function(){
return App.initweb3();
},
//初始化web3
initweb3: function(){
//获取web3对象,保证metaMask设置好的provider不被覆盖掉
if (typeof web3 !== 'undefined') {
App.web3Provider = web3.currentProvider;
web3 = new Web3(App.web3Provider);
console.log("web3s:"+web3)
console.log("App:gg::"+App.web3Provider)
} else {
// 设置你想要的provider,实例化一个
App.web3Provider = new Web3.providers.HttpProvider("http://localhost:7545");//私链url
web3 = new Web3(App.web3Provider);
console.log("web3s:"+web3)
console.log("App:gg::"+App.web3Provider)
}
return App.initContract();
},
3、接着初始化合约
//初始化合约
initContract: function(){
//获取InsuranceContract .json的内容,回调函数的参数data即为拿到的内容
$.getJSON("InsuranceContract .json",function(data){
//得到TruffleContract对象,并赋值给App.contracts.Simple
App.contracts.InsuranceContract = TruffleContract(data);
//设置Provider
App.contracts.InsuranceContract .setProvider(App.web3Provider);
//调用合约的getHospital方法
App.getHospital();
//事件监听,更新显示的内容
App.InsPatientEvnt ();
//调用查询患者是否存在,病历号
App.queryPatientExist();
App.inxnum();
//添加病人信息
App.isinsPatient();
//离院申请
App.insRecord();
//查询病因,症状,住院天数,住院费用
App.queryRecordCause();
App.queryRecordDays();
App.queryRecordMoney();
App.queryRecordsymptom();
//设置医院信息
App. ishospitalInfor();
//储存患者账户
App.DepoPatientAc();
});
// 调用事件
// App.bindgetHospitalEvents();
},
4、搞方法了呗!!!(举例)
//储存患者账户
DepoPatientAc:function(){
$("#resPatientAcc-btn").click(function(){
App.contracts.InsuranceContract .deployed().then(function(instance){
isPatientExist =$("#isPatientExist").val();
return instance.DepoPatientAc.sendTransaction(isPatientExist,{from:web3})
}).then(function(result){
layer.open({
title: '储存患者账户',
content: "储存账户成功"
})
}).catch(function(err){
console.log(err)
})
})
},
模板一:get方法(不影响区块状态)
//合约的get方法
get: function(){
//deployed得到合约的实例,通过then的方式回调拿到实例
App.contracts.合约.deployed().then(function(instance){
return instance.某方法.call();
}).then(function(result){
//异步执行,get方法执行完后回调执行then方法,result为get方法的返回值
$("#某id").hide();
//在合约展示
$("#某id").html(`字` + result[0] + `,字 ` + result[1] + `字。`);
}).catch(function(err){ //get方法执行失败打印错误
console.log(err);
})
},
模板二:合约的更新等操作(改变区块状态)
bindEvents: function(){
$("#某id").click(function(){
$("#某id").show();
App.contracts.合约.deployed().then(function(instance){
return instance.方法.sendTransaction($("#某id").val(),$("#某id").val());
}).then(function(result){
App.方法(); (调用对应的不影响区块的方法,一般为查询是否更新)
}).catch(function(err){
console.log(err);
});
});
},
模板三:监听事件(监听回调参数)
方法名: function(){
App.contracts.合约.deployed().then(function(instance){
var infoEvent = instance.Instructor();
infoEvent.watch(function(err, result){//不久将被弃用,谨慎使用
$("#id").hide();
$("#id").html(`字` + result.args.字段 + `字` + result.args.字段 + `字`);
})
});
}
}
5、以上都应该在 APP={在这里面写上边的代码}
6、加载App
//加载应用
$(function(){
$(window).load(function(){
App.init();
});
});