235 lines
6.3 KiB
HTML
235 lines
6.3 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
<html>
|
|||
|
<head>
|
|||
|
<meta charset="utf-8">
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|||
|
<title>Transfer Web</title>
|
|||
|
<script src="./web3.min.js"></script>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<script type="text/javascript" src="./uni.webview.js"></script>
|
|||
|
<script type="text/javascript" src="./axios.min.js"></script>
|
|||
|
<script>
|
|||
|
// 初始化Web3
|
|||
|
let web3 = new Web3(new Web3.providers.HttpProvider('https://bsc-dataseed1.binance.org:443'));
|
|||
|
//公共转账abi
|
|||
|
const otherContractABI = [{
|
|||
|
"constant": false,
|
|||
|
"inputs": [{
|
|||
|
"name": "_to",
|
|||
|
"type": "address"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "_value",
|
|||
|
"type": "uint256"
|
|||
|
}
|
|||
|
],
|
|||
|
"name": "transfer",
|
|||
|
"outputs": [{
|
|||
|
"name": "",
|
|||
|
"type": "bool"
|
|||
|
}],
|
|||
|
"type": "function"
|
|||
|
}];
|
|||
|
//查询当前GAS费
|
|||
|
async function searchGasFee(){
|
|||
|
let nowGas = await web3.eth.getGasPrice();
|
|||
|
let gasInHex = web3.utils.toHex(nowGas);
|
|||
|
let nowGwei = web3.utils.fromWei(nowGas, 'gwei');
|
|||
|
let gasInBNB = web3.utils.fromWei(gasInHex, 'ether');
|
|||
|
console.log(nowGwei,'当前GAS费(GWEI)');
|
|||
|
console.log(gasInBNB, '当前GAS费(bnb)');
|
|||
|
sendMessage({
|
|||
|
status: "success",
|
|||
|
type: "gasFee",
|
|||
|
nowGwei,
|
|||
|
gasInBNB
|
|||
|
})
|
|||
|
}
|
|||
|
//查询USDT交易历史记录
|
|||
|
async function getTransactions(address) {
|
|||
|
const USDT_CONTRACT_ADDRESS = "0x55d398326f99059fF775485246999027B3197955";
|
|||
|
const BSCSCAN_API_KEY = "1UQ3PHID4UJUDTVD4EJK35PZB8XDKS7K9T";
|
|||
|
try {
|
|||
|
// 使用 BSCScan API 获取交易记录
|
|||
|
const response = await axios.get('https://api.bscscan.com/api', {
|
|||
|
params: {
|
|||
|
module: 'account',
|
|||
|
action: 'tokentx',
|
|||
|
contractaddress: USDT_CONTRACT_ADDRESS,
|
|||
|
address: address,
|
|||
|
apikey: BSCSCAN_API_KEY,
|
|||
|
sort: 'desc' // 按时间降序排序
|
|||
|
}
|
|||
|
});
|
|||
|
// 处理 API 响应
|
|||
|
if (response.data.status === '1') {
|
|||
|
const transactions = response.data.result;
|
|||
|
sendMessage({
|
|||
|
status: "success",
|
|||
|
type: "transactions",
|
|||
|
transactions
|
|||
|
})
|
|||
|
} else {
|
|||
|
sendMessage({
|
|||
|
status: "error",
|
|||
|
type: "transactions"
|
|||
|
})
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
sendMessage({
|
|||
|
status: "error",
|
|||
|
type: "transactions"
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
//BNB转账
|
|||
|
async function bnbTransfer(params) {
|
|||
|
const {
|
|||
|
type,
|
|||
|
fromAdress,
|
|||
|
toAdress,
|
|||
|
coin,
|
|||
|
privateKey
|
|||
|
} = params;
|
|||
|
try {
|
|||
|
const amount = web3.utils.toWei(coin + '', 'ether');
|
|||
|
const gasPrice = await web3.eth.getGasPrice();
|
|||
|
const transactionObject = {
|
|||
|
from: fromAdress,
|
|||
|
to: toAdress,
|
|||
|
value: amount,
|
|||
|
gas: 210000,
|
|||
|
gasPrice: gasPrice
|
|||
|
};
|
|||
|
const signedTx = await web3.eth.accounts.signTransaction(transactionObject, privateKey);
|
|||
|
const receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction)
|
|||
|
.on('transactionHash', hash => {
|
|||
|
console.log(hash,'hash');
|
|||
|
sendMessage({
|
|||
|
status: "success",
|
|||
|
hash: hash,
|
|||
|
type,
|
|||
|
time:Date.now()
|
|||
|
})
|
|||
|
})
|
|||
|
} catch (error) {
|
|||
|
console.log(error,'错误');
|
|||
|
sendMessage({
|
|||
|
status: "error",
|
|||
|
type
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
//USDT转账
|
|||
|
async function usdtTransfer(params) {
|
|||
|
const {
|
|||
|
type,
|
|||
|
fromAdress,
|
|||
|
toAdress,
|
|||
|
coin,
|
|||
|
privateKey
|
|||
|
} = params;
|
|||
|
try {
|
|||
|
const USDT_CONTRACT_ADDRESS = '0x55d398326f99059fF775485246999027B3197955';
|
|||
|
const usdtContractABI = [{
|
|||
|
"constant": false,
|
|||
|
"inputs": [{
|
|||
|
"name": "_to",
|
|||
|
"type": "address"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "_value",
|
|||
|
"type": "uint256"
|
|||
|
}
|
|||
|
],
|
|||
|
"name": "transfer",
|
|||
|
"outputs": [{
|
|||
|
"name": "",
|
|||
|
"type": "bool"
|
|||
|
}],
|
|||
|
"type": "function"
|
|||
|
}];
|
|||
|
|
|||
|
const usdtContract = new web3.eth.Contract(usdtContractABI, USDT_CONTRACT_ADDRESS);
|
|||
|
const amountToSend = Number(coin) * 10 ** 18;
|
|||
|
|
|||
|
const txCount = await web3.eth.getTransactionCount(fromAdress);
|
|||
|
const txObject = {
|
|||
|
from: fromAdress,
|
|||
|
to: USDT_CONTRACT_ADDRESS,
|
|||
|
gasPrice: web3.utils.toHex(await web3.eth.getGasPrice()),
|
|||
|
gasLimit: web3.utils.toHex(210000),
|
|||
|
value: '0',
|
|||
|
data: usdtContract.methods.transfer(toAdress, amountToSend).encodeABI(),
|
|||
|
nonce: web3.utils.toHex(txCount)
|
|||
|
};
|
|||
|
const signedTx = await web3.eth.accounts.signTransaction(txObject, privateKey);
|
|||
|
let receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction)
|
|||
|
.on('transactionHash', hash => {
|
|||
|
console.error('交易成功:', hash);
|
|||
|
sendMessage({
|
|||
|
status: "success",
|
|||
|
hash: hash,
|
|||
|
type
|
|||
|
})
|
|||
|
})
|
|||
|
} catch (error) {
|
|||
|
console.log(error, '转账失败');
|
|||
|
sendMessage({
|
|||
|
status: "error",
|
|||
|
type
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
//其他转账(ETH、BTBC等)
|
|||
|
async function otherTransfer(params){
|
|||
|
const {
|
|||
|
type,//代码类型
|
|||
|
fromAdress,//发送地址
|
|||
|
toAdress,//接收地址
|
|||
|
coin,//发送数量
|
|||
|
privateKey,//私钥
|
|||
|
otherContractAddress//合约地址
|
|||
|
} = params;
|
|||
|
try {
|
|||
|
const publicContract = new web3.eth.Contract(otherContractABI,otherContractAddress);
|
|||
|
const amountToSend = web3.utils.toWei(coin + '', 'ether');
|
|||
|
|
|||
|
const txCount = await web3.eth.getTransactionCount(fromAdress);
|
|||
|
const txObject = {
|
|||
|
from: fromAdress,
|
|||
|
to: otherContractAddress,
|
|||
|
gasPrice: web3.utils.toHex(await web3.eth.getGasPrice()),
|
|||
|
gasLimit: web3.utils.toHex(210000),
|
|||
|
value: '0',
|
|||
|
data: publicContract.methods.transfer(toAdress, amountToSend).encodeABI(),
|
|||
|
nonce: web3.utils.toHex(txCount)
|
|||
|
};
|
|||
|
const signedTx = await web3.eth.accounts.signTransaction(txObject, privateKey);
|
|||
|
let receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);
|
|||
|
if (receipt.transactionHash) {
|
|||
|
console.log('交易成功:', receipt.transactionHash);
|
|||
|
sendMessage({
|
|||
|
status: "success",
|
|||
|
hash: receipt.transactionHash,
|
|||
|
type,
|
|||
|
time:Date.now()
|
|||
|
})
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
console.log(error, '转账失败');
|
|||
|
sendMessage({
|
|||
|
status: "error",
|
|||
|
type
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
function sendMessage(message) {
|
|||
|
uni.postMessage({
|
|||
|
data: message
|
|||
|
});
|
|||
|
}
|
|||
|
</script>
|
|||
|
</body>
|
|||
|
</html>
|