发布时间:2024-09-03 13:01
首先第一步还是需要引入我们的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)
}