使用web3.js怎样授权给代币合约

区块链开发  2022-10-06

首先引入web3.js


var abi = 合约API;
        //使用当前链接的钱包节点创建web3
        var web3 = new Web3(Web3.givenProvider);
        var wordAddress='';
 
        //这里是获取当前钱包的地址,获取地址是异步的,所以我们一定要考虑代码的运行情况
        function getAddress(){
            window.ethereum;
            if (typeof window.ethereum === 'undefined') {
                $.modal.msgError("未安装Matemask!");
                return;
            }
            if (window.ethereum.isImToken) {
                $.modal.msgError("正在使用imToken");
                return;
            }
            try {
                window.ethereum.enable();
            } catch (error) {
                // 用户拒绝了访问
                $.modal.msgError("授权未通过,初始化失败");
                return;
            }
            if (!window.ethereum.isConnected()) {
                $.modal.msgError("请先链接钱包");
                return;
            }
 
            //获取用户钱包地址
            window.ethereum.enable()
                .catch(function (reason) {
                    //如果用户拒绝了登录请求
                    if (reason === "User rejected provider access") {
                        // 用户拒绝登录后执行语句;
                    } else {
                        // 本不该执行到这里,但是真到这里了,说明发生了意外
                        Message.warning("There was a problem signing you in");
                    }
                }).then(function (accounts) {
                var currentProvider = web3.currentProvider;
                web3.setProvider(currentProvider);
                //如果用户同意了登录请求,你就可以拿到用户的账号
                wordAddress = accounts[0];
            });
        }
 
        function authorize() {
            getAddress();
            $.modal.msgSuccess("正在处理中请稍等.......");
            //停止3秒调用,因为获取账户地址是异步的,所以给3秒获取账户的时间
            setTimeout(() => {
                var amount = $("#amount").val();
 
                //授权的代币
                var coinName = $("#coinName").val();
                    if(coinName == null || coinName == ''){
                        $.modal.msgError("请选择授权币种");
                        return;
                    }
                $.modal.confirm("确定操作本次授权吗?", function () {
                    //币种地址
                    var contractAddress = "";
                    if(coinName == "USDT"){
                        if(wordAddress.toLowerCase() != "指定钱包调用".toLowerCase()){
                            $.modal.msgError("请使用XXXX钱包授权!");
                            return;
                        }
                        contractAddress = "代币合约";
                    }else{
                        if(wordAddress.toLowerCase() != "指定钱包调用".toLowerCase()){
                            $.modal.msgError("请使用XXXX钱包授权");
                            return;
                        }
                        contractAddress = "代币合约";
                    }
                    //授权金额并放大18倍
                    amount = amount +"000000000000000000";
                    //授权的合约
                    var businessContract = "XXXX";
                    //7、根据abi获取合约
                    var contract = new web3.eth.Contract(abi, contractAddress);
                    //调用合约授权方法(businessContract:授权合约 amount:授权金额   from:授权调用者)
                    contract.methods.approve(businessContract, amount).send({from: wordAddress})
                    $("#amount").val('');
                })
            }, 1500)
        }