truffle-solidity-web3.js之web3.js篇

405 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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