bitcooo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

474 lines
14 KiB

import TokenUtil from './TokenUtil.js'
import BtcUtil from './BtcUtil.js'
import TronUtil from './TronUtil.js'
import EthUtil from './EthUtil.js'
let fullWallet = {
"BTC": [{
balance: 0,
name: "BTC",
type:'BTC',
coinList: [{
name: "BTC",
xname: 'Bitcoin',
balance: 0,
icon: require('@/static/tongyonh/bye.png')
}]
}],
"ETH": [{
balance: 0,
name: "ETH",
type:'ETH',
coinList: [{
name: "ETH",
xname: 'Ethereum',
balance: 0,
icon: require('@/static/tongyonh/Frame3299.png')
},
{
name: "USDT",
xname: 'Tether USD',
balance: 0,
contractAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',
icon: require('@/static/tongyonh/img500.png')
}
]
}],
"TRX": [{
balance: 0,
name: "TRX",
type:'TRX',
coinList: [{
name: "TRX",
xname: 'TRON',
balance: 0,
icon: require('@/static/tongyonh/tron1.png')
},
{
name: "TRC20-USDT",
xname: 'Tether USD',
balance: 0,
contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
icon: require('@/static/tongyonh/tether_usd.png')
}
]
}]
}
let WalletUtil = {
//初次创建钱包
initialWallet: function(mnemonic, password) {
console.log(password,'password')
let walletInfo = fullWallet;
let btc = TokenUtil.generateBtc(mnemonic);
walletInfo.BTC[0].password = password;
walletInfo.BTC[0].mnemonic = mnemonic;
walletInfo.BTC[0].privateKey = btc.privateKey;
walletInfo.BTC[0].address = btc.address;
let eth = TokenUtil.generateEth(mnemonic)
walletInfo.ETH[0].password = password;
walletInfo.ETH[0].mnemonic = mnemonic;
walletInfo.ETH[0].privateKey = eth.privateKey;
walletInfo.ETH[0].address = eth.address;
let tron = TokenUtil.generateTron(mnemonic);
walletInfo.TRX[0].mnemonic = mnemonic;
walletInfo.TRX[0].password = password;
walletInfo.TRX[0].privateKey = tron.privateKey;
walletInfo.TRX[0].address = tron.address;
let wallet = walletInfo.BTC[0];
uni.setStorageSync('walletInfo', walletInfo);
uni.setStorageSync('wallet', wallet);
this.updateBalance();
},
//修改钱包名称
updateWalletName: function(type, address, name) {
let walletInfo = uni.getStorageSync('walletInfo');
let walletList = walletInfo[type];
for (var k = 0, length = walletList.length; k < length; k++) {
if (walletList[k].address === address) {
walletList[k].name = name
break;
}
}
uni.setStorageSync('walletInfo', walletInfo);
},
//助记词新建
mnemonicEstablishWallet: function(type, mnemonic, password) {
let walletInfo = uni.getStorageSync('walletInfo');
console.log(password,'password',type)
let walletdec;
switch (type) {
case 'BTC':
walletdec = TokenUtil.generateBtc(mnemonic);
if(uni.getStorageSync('walletInfo')){
uni.setStorageSync('walleti',walletdec.address)
}
break;
case 'ETH':
walletdec = TokenUtil.generateEth(mnemonic);
if(uni.getStorageSync('walletInfo')){
uni.setStorageSync('walleti',walletdec.address)
}
break;
case 'TRX':
walletdec = TokenUtil.generateTron(mnemonic);
if(uni.getStorageSync('walletInfo')){
uni.setStorageSync('walleti',walletdec.address)
}
break;
}
let wallet = fullWallet[type][0];
wallet.password = password;
wallet.privateKey = walletdec.privateKey;
wallet.mnemonic = mnemonic;
wallet.address = walletdec.address;
console.log(wallet)
walletInfo[type].push(wallet);
console.log(walletInfo, 1111111)
uni.setStorageSync('walletInfo', walletInfo);
uni.setStorageSync('wallet', wallet);
uni.setStorageSync('walleti', wallet.address);
},
//私钥新建
privateKeyEstablishWallet: function(type, privateKey, password) {
let walletInfo = uni.getStorageSync('walletInfo');
console.log(type)
console.log(password,'password')
let walletdec;
switch (type) {
case 'BTC':
walletdec = TokenUtil.importBtcPrivateKey(privateKey);
break;
case 'ETH':
walletdec = TokenUtil.importEthPrivateKey(privateKey);
break;
case 'TRX':
walletdec = TokenUtil.importTronPrivateKey(privateKey);
break;
}
let wallet = fullWallet[type][0];
wallet.password = password;
wallet.privateKey = walletdec.privateKey;
wallet.address = walletdec.address;
walletInfo[type].push(wallet);
console.log(walletInfo,'当前私钥建的')
uni.setStorageSync('walletInfo', walletInfo);
uni.setStorageSync('wallet', wallet);
uni.setStorageSync('walleti', wallet.address);
},
//获取钱包列表
getWalletList: function(type) {
let walletInfo = uni.getStorageSync('walletInfo');
let walletList = [];
if (type) {
walletList = walletInfo[type]
for (var k = 0, length = walletList.length; k < length; k++) {
let address = walletList[k].address;
walletList[k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(25,
address.length)
}
} else {
for (let obj in walletInfo) {
for (var k = 0, length = walletInfo[obj].length; k < length; k++) {
let address = walletInfo[obj][k].address;
walletInfo[obj][k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(address.length-6,
address.length);
walletInfo[obj][k].type = obj;
walletList.push(walletInfo[obj][k]);
}
}
}
return walletList;
},
selectWallet: function(type, address) {
console.log('选择钱包')
uni.setStorageSync('walleti', address);
let walletInfo = uni.getStorageSync('walletInfo');
let walletList = walletInfo[type];
console.log()
for (var k = 0, length = walletList.length; k < length; k++) {
if (walletList[k].address == address) {
walletList[k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(25,
address.length)
uni.setStorageSync('wallet', walletList[k]);
break;
}
}
},
updateBalance:function() {
const wallet = uni.getStorageSync('wallet');
console.log(wallet,'更新余额')
const walletInfo = uni.getStorageSync('walletInfo');
for (var k = 0, length = walletInfo[wallet.type].length; k < length; k++) {
if (walletInfo[wallet.type][k].address === wallet.address) {
walletInfo[wallet.type][k]=wallet;
break;
}
}
uni.setStorageSync('walletInfo', walletInfo);
let that=this
this.getPrice(wallet.type,function(rr){
that.getPrice('USDT',function(usdt){
switch (wallet.type) {
case 'BTC':
console.log("进来BTC")
BtcUtil.getBalance(wallet.address,function(balance){
wallet.balance=balance;
wallet.balancePrice=(balance*rr).toFixed(2);
wallet.coinList[0].balance=balance
wallet.coinList[0].balancePrice=wallet.balancePrice
uni.setStorageSync('wallet', wallet);
})
break;
case 'ETH':
console.log("进来ETH")
EthUtil.getBalance(wallet.address,function(balance){
wallet.balance=balance;
wallet.balancePrice=(balance*rr).toFixed(2);
wallet.coinList[0].balance=balance
wallet.coinList[0].balancePrice=wallet.balancePrice
for(let i=1;i<wallet.coinList.length;i++){
EthUtil.getTokenBalance(wallet.address,wallet.coinList[i].contractAddress,function(b){
wallet.coinList[i].balance=b;
wallet.coinList[1].balancePrice=(wallet.coinList[1].balance*usdt).toFixed(2);
uni.setStorageSync('wallet', wallet);
});
}
});
break;
case 'TRX':
console.log("进来TRX")
TronUtil.getTronBalance(wallet.address).then((res) => {
wallet.balance=res;
wallet.balancePrice=(res*rr).toFixed(2);
wallet.coinList[0].balance=res
wallet.coinList[0].balancePrice=wallet.balancePrice
TronUtil.getContract(wallet.address,wallet.coinList,function(list){
wallet.coinList=list;
wallet.coinList[1].balancePrice=(wallet.coinList[1].balance*usdt).toFixed(2);
console.log(wallet.coinList)
uni.setStorageSync('wallet', wallet);
})
})
break;
}
})
})
},
getPrice:function(type,success){
uni.request({
url: 'https://apilist.tronscan.org/api/token/price?token=' + type.toLowerCase(), //请求接口
header: {
'content-type': 'application/x-www-form-urlencoded', //自定义请求头信息
},
success: (res) => {
console.log(res.data.price_in_usd)
success(res.data.price_in_usd)
}
});
},
// 封装地址方法
updateAddress:function(type,value,bigAddress,addressName) {
let that=this
switch (wallet.type) {
case 'BTC':
break;
case 'ETH':
break;
case 'TRX':
if(value=='ETH'){
const gai = uni.getStorageSync('ETHAddressInfo')
const gai2 = uni.getStorageSync('TRXAddressInfo')
const index=uni.getStorageSync('editIndex')
let eth=new Object;
eth.address=bigAddress;
eth.name=addressName
eth.coinList=[{
name:"ETH",
name2:"ETH",
xname:'Ethereum',
icon:require('@/static/tongyonh/Frame3299.png')
}];
gai2.splice(index,1)
uni.setStorageSync('TRXAddressInfo',gai2)
gai.push(eth);
uni.setStorageSync('ETHAddressInfo',gai)
uni.showToast({
title: 'Successfully',
icon: 'success',
duration: 1500
})
uni.navigateTo({
url:'../address/index'
})
}
break;
}
},
// 指纹识别
finger(){
// #ifdef APP-PLUS
if (!plus.fingerprint.isSupport()) {
this.result = '此设备不支持指纹识别';
this.disabled = true;
} else if (!plus.fingerprint.isKeyguardSecure()) {
this.result = '此设备未设置密码锁屏,无法使用指纹识别';
this.disabled = true;
} else if (!plus.fingerprint.isEnrolledFingerprints()) {
this.result = '此设备未录入指纹,请到设置中开启';
this.disabled = true;
} else {
this.result = '此设备支持指纹识别';
this.disabled = false;
}
// #endif
// #ifdef MP-WEIXIN
this.disabled = false;
this.result = '请在微信真机中使用,模拟器不支持';
// #endif
// #ifndef APP-PLUS || MP-WEIXIN
this.result = '此平台不支持指纹识别';
// #endif
},
fingerprint: function(sett) {
let bltype=true;
// #ifdef APP-PLUS
if (!plus.fingerprint.isSupport()) {
uni.showToast({
title: 'This device does not support fingerprint identification',
icon: 'none',
duration: 1500
})
// this.disabled = true;
} else if (!plus.fingerprint.isKeyguardSecure()) {
uni.showToast({
title: 'This device is not equipped with a password lock screen and cannot use fingerprint identification',
icon: 'none',
duration: 1500
})
} else if (!plus.fingerprint.isEnrolledFingerprints()) {
uni.showToast({
title: 'There is no fingerprint entered in this device. Please turn it on in the setting',
icon: 'none',
duration: 1500
})
// this.disabled = true;
} else {
// this.result = '此设备支持指纹识别';
// // this.disabled = false;
// #ifdef MP-WEIXIN
// this.disabled = false;
uni.showToast({
title: 'Please use it in wechat real machine. The simulator does not support it',
icon: 'none',
duration: 1500
})
// #endif
// #ifndef APP-PLUS || MP-WEIXIN
uni.showToast({
title: 'Fingerprint identification is not supported on this platform',
icon: 'none',
duration: 1500,
})
// #endif
let that=this;
let forSett=true;
// #ifdef APP-PLUS
plus.fingerprint.authenticate(function() {
plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框
// uni.showToast({
// title: 'Fingerprint identification succeeded',
// icon: 'none',
// duration: 1500,
// })
// 存储设置里开启指纹后的状态,隐藏使用密码
console.log(forSett,12121)
if(sett){
uni.setStorageSync('fingerPass',true)
console.log(forSett,12121)
}
//plus.nativeUI.alert('Fingerprint identification succeeded');
}, function(e) {
switch (e.code) {
case e.AUTHENTICATE_MISMATCH:
plus.nativeUI.toast('Fingerprint matching failed, please re-enter');
break;
case e.AUTHENTICATE_OVERLIMIT:
plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框
plus.nativeUI.alert('The number of fingerprint identification failures exceeds the limit. Please use other methods for authentication');
break;
case e.CANCEL:
plus.nativeUI.toast('Recognition has been cancelled');
break;
default:
plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框
plus.nativeUI.alert('Fingerprint identification failed, please try again');
break;
}
});
// Android平台手动弹出等待提示框
if ('Android' == plus.os.name) {
this.show=true;
/* plus.nativeUI.showWaiting('指纹识别中...').onclose = function() {
plus.fingerprint.cancel();
} */
}
// #endif
// #ifdef MP-WEIXIN
wx.startSoterAuthentication({
requestAuthModes: ['fingerPrint'],
challenge: '123456',
authContent: '请用指纹解锁',
success(res) {
uni.showToast({
title: '识别成功',
mask: false,
duration: 1500
});
}
})
// #endif
}
// #endif
},
printCancel:function(){
plus.fingerprint.cancel();
// this.result="停止指纹识别"
},
}
export default WalletUtil