TronLink钱包网页版实现(不使用MySQL)
TronLink钱包网页版实现(不使用MySQL)
本文将介绍如何使用纯前端技术(PHP+CSS+JS+HTML5+JSON)实现一个简易的TronLink钱包功能,无需后端数据库支持。
功能概述
这个TronLink钱包网页版将实现以下功能:
1.创建新钱包
2.导入已有钱包
3.查看余额
4.发送TRX交易
5.交易历史记录(使用本地JSON存储)
实现原理
由于不使用MySQL,我们将使用以下技术:
-本地存储(localStorage)保存钱包信息
-JSON文件格式存储交易记录
-PHP处理文件读写操作
-TronWebJS库与TRON区块链交互
完整代码实现
1.HTML结构(index.html)
<!DOCTYPEhtml>
<htmllang="zh-CN">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<metaname="description"content="纯前端实现的TronLink钱包,无需数据库支持">
<metaname="keywords"content="TRON,波场,钱包,TronLink,区块链">
<title>TronLink网页版钱包|轻量级TRON钱包解决方案</title>
<linkrel="stylesheet"href="style.css">
</head>
<body>
<header>
<h1>TronLink网页版钱包</h1>
<p>安全、便捷的TRON区块链钱包解决方案</p>
</header>
<main>
<divid="wallet-container">
<divid="welcome-screen"class="active">
<h2>欢迎使用TronLink网页版</h2>
<buttonid="create-wallet">创建新钱包</button>
<buttonid="import-wallet">导入钱包</button>
</div>
<divid="wallet-screen">
<divclass="wallet-header">
<h2>我的TRON钱包</h2>
<divid="wallet-address"></div>
</div>
<divclass="balance-container">
<h3>余额</h3>
<divid="balance">0TRX</div>
</div>
<divclass="action-buttons">
<buttonid="send-trx">发送TRX</button>
<buttonid="view-transactions">交易记录</button>
<buttonid="logout">退出钱包</button>
</div>
<divid="transaction-form"class="hidden">
<h3>发送TRX</h3>
<divclass="form-group">
<labelfor="recipient">接收地址:</label>
<inputtype="text"id="recipient"placeholder="输入TRON地址">
</div>
<divclass="form-group">
<labelfor="amount">金额(TRX):</label>
<inputtype="number"id="amount"placeholder="0.00">
</div>
<divclass="form-group">
<buttonid="confirm-send">确认发送</button>
<buttonid="cancel-send">取消</button>
</div>
</div>
<divid="transactions-list"class="hidden">
<h3>交易记录</h3>
<divid="transactions"></div>
<buttonid="back-to-wallet">返回钱包</button>
</div>
</div>
</div>
</main>
<footer>
<p>©2023TronLink网页版钱包|基于TRON区块链技术</p>
</footer>
<scriptsrc="https://cdn.jsdelivr.net/npm/[email protected]/dist/TronWeb.js"></script>
<scriptsrc="app.js"></script>
</body>
</html>
2.CSS样式(style.css)
/基础样式/
body{
font-family:'Arial',sans-serif;
line-height:1.6;
margin:0;
padding:0;
background-color:f5f5f5;
color:333;
}
header{
background-color:1c1c1c;
color:fff;
padding:1rem0;
text-align:center;
}
main{
max-width:800px;
margin:2remauto;
padding:1rem;
background-color:fff;
border-radius:8px;
box-shadow:02px10pxrgba(0,0,0,0.1);
}
footer{
text-align:center;
padding:1rem;
background-color:1c1c1c;
color:fff;
}
/钱包容器样式/
wallet-container{
position:relative;
min-height:400px;
}
welcome-screen,wallet-screen{
transition:all0.3sease;
}
welcome-screen{
text-align:center;
padding:2rem;
}
welcome-screenbutton,wallet-screenbutton{
background-color:1c1c1c;
color:fff;
border:none;
padding:0.8rem1.5rem;
margin:0.5rem;
border-radius:4px;
cursor:pointer;
font-size:1rem;
transition:background-color0.3s;
}
welcome-screenbutton:hover,wallet-screenbutton:hover{
background-color:333;
}
wallet-screen{
display:none;
}
.wallet-header{
text-align:center;
padding:1rem0;
border-bottom:1pxsolideee;
}
wallet-address{
font-family:monospace;
word-break:break-all;
padding:0.5rem;
background-color:f9f9f9;
border-radius:4px;
margin:1rem0;
}
.balance-container{
text-align:center;
padding:2rem0;
}
balance{
font-size:2rem;
font-weight:bold;
color:1c1c1c;
margin:1rem0;
}
.action-buttons{
display:flex;
justify-content:center;
flex-wrap:wrap;
padding:1rem0;
}
/表单样式/
transaction-form,transactions-list{
margin-top:2rem;
padding:1rem;
border-top:1pxsolideee;
}
.form-group{
margin-bottom:1rem;
}
.form-grouplabel{
display:block;
margin-bottom:0.5rem;
font-weight:bold;
}
.form-groupinput{
width:100%;
padding:0.8rem;
border:1pxsolidddd;
border-radius:4px;
font-size:1rem;
}
/交易记录样式/
transactions{
margin-top:1rem;
}
.transaction-item{
padding:1rem;
border-bottom:1pxsolideee;
display:flex;
justify-content:space-between;
}
.transaction-item:last-child{
border-bottom:none;
}
.transaction-amount{
font-weight:bold;
}
.transaction-amount.send{
color:e74c3c;
}
.transaction-amount.receive{
color:2ecc71;
}
/辅助类/
.hidden{
display:none;
}
.active{
display:block;
}
/响应式设计/
@media(max-width:600px){
main{
margin:1rem;
padding:0.5rem;
}
.action-buttons{
flex-direction:column;
}
welcome-screenbutton{
display:block;
width:100%;
margin:0.5rem0;
}
}
3.JavaScript逻辑(app.js)
//初始化TronWeb
consttronWeb=newTronWeb({
fullHost:'https://api.trongrid.io',
headers:{"TRON-PRO-API-KEY":'your-api-key'}//替换为你的APIKEY
});
//DOM元素
constwelcomeScreen=document.getElementById('welcome-screen');
constwalletScreen=document.getElementById('wallet-screen');
constcreateWalletBtn=document.getElementById('create-wallet');
constimportWalletBtn=document.getElementById('import-wallet');
constwalletAddressEl=document.getElementById('wallet-address');
constbalanceEl=document.getElementById('balance');
constsendTrxBtn=document.getElementById('send-trx');
constviewTransactionsBtn=document.getElementById('view-transactions');
constlogoutBtn=document.getElementById('logout');
consttransactionForm=document.getElementById('transaction-form');
consttransactionsList=document.getElementById('transactions-list');
constrecipientInput=document.getElementById('recipient');
constamountInput=document.getElementById('amount');
constconfirmSendBtn=document.getElementById('confirm-send');
constcancelSendBtn=document.getElementById('cancel-send');
constbackToWalletBtn=document.getElementById('back-to-wallet');
consttransactionsEl=document.getElementById('transactions');
//检查本地是否有钱包
document.addEventListener('DOMContentLoaded',()=>{
constwallet=getWalletFromStorage();
if(wallet){
showWalletScreen(wallet);
}else{
welcomeScreen.classList.add('active');
walletScreen.classList.remove('active');
}
});
//创建新钱包
createWalletBtn.addEventListener('click',async()=>{
try{
constaccount=awaittronWeb.createAccount();
constwallet={
address:account.address.base58,
privateKey:account.privateKey
};
saveWalletToStorage(wallet);
showWalletScreen(wallet);
//初始化交易记录
initTransactions(wallet.address);
alert('钱包创建成功!请妥善保存您的私钥:'+account.privateKey);
}catch(error){
console.error('创建钱包失败:',error);
alert('创建钱包失败:'+error.message);
}
});
//导入钱包
importWalletBtn.addEventListener('click',()=>{
constprivateKey=prompt('请输入您的私钥:');
if(privateKey&&privateKey.trim()!==''){
try{
constaddress=tronWeb.address.fromPrivateKey(privateKey);
constwallet={
address:address,
privateKey:privateKey
};
saveWalletToStorage(wallet);
showWalletScreen(wallet);
//初始化交易记录
initTransactions(wallet.address);
alert('钱包导入成功!');
}catch(error){
console.error('导入钱包失败:',error);
alert('导入钱包失败:无效的私钥');
}
}
});
//显示发送TRX表单
sendTrxBtn.addEventListener('click',()=>{
transactionForm.classList.remove('hidden');
transactionsList.classList.add('hidden');
});
//取消发送
cancelSendBtn.addEventListener('click',()=>{
transactionForm.classList.add('hidden');
recipientInput.value='';
amountInput.value='';
});
//确认发送TRX
confirmSendBtn.addEventListener('click',async()=>{
constrecipient=recipientInput.value.trim();
constamount=parseFloat(amountInput.value.trim());
if(!recipient||isNaN(amount)||amount<=0){
alert('请输入有效的接收地址和金额');
return;
}
try{
constwallet=getWalletFromStorage();
if(!wallet){
thrownewError('钱包未找到');
}
//使用私钥签名交易
tronWeb.setPrivateKey(wallet.privateKey);
//发送交易
consttransaction=awaittronWeb.trx.sendTransaction(recipient,amount1000000);
//更新交易记录
addTransaction({
txId:transaction.transaction.txID,
from:wallet.address,
to:recipient,
amount:amount,
timestamp:Date.now(),
status:'pending'
});
alert('交易已发送!交易ID:'+transaction.transaction.txID);
//刷新余额
updateBalance(wallet.address);
//重置表单
recipientInput.value='';
amountInput.value='';
transactionForm.classList.add('hidden');
}catch(error){
console.error('发送交易失败:',error);
alert('发送交易失败:'+error.message);
}
});
//查看交易记录
viewTransactionsBtn.addEventListener('click',()=>{
transactionForm.classList.add('hidden');
transactionsList.classList.remove('hidden');
displayTransactions();
});
//返回钱包
backToWalletBtn.addEventListener('click',()=>{
transactionForm.classList.add('hidden');
transactionsList.classList.add('hidden');
});
//退出钱包
logoutBtn.addEventListener('click',()=>{
if(confirm('确定要退出钱包吗?')){
localStorage.removeItem('tronlink_wallet');
welcomeScreen.classList.add('active');
walletScreen.classList.remove('active');
}
});
//显示钱包界面
functionshowWalletScreen(wallet){
welcomeScreen.classList.remove('active');
walletScreen.classList.add('active');
walletAddressEl.textContent=wallet.address;
updateBalance(wallet.address);
}
//更新余额
asyncfunctionupdateBalance(address){
try{
constbalance=awaittronWeb.trx.getBalance(address);
constbalanceInTrx=balance/1000000;
balanceEl.textContent=balanceInTrx.toFixed(6)+'TRX';
}catch(error){
console.error('获取余额失败:',error);
balanceEl.textContent='获取余额失败';
}
}
//本地存储操作
functionsaveWalletToStorage(wallet){
localStorage.setItem('tronlink_wallet',JSON.stringify(wallet));
}
functiongetWalletFromStorage(){
constwalletData=localStorage.getItem('tronlink_wallet');
returnwalletData?JSON.parse(walletData):null;
}
//交易记录操作
functioninitTransactions(address){
if(!localStorage.getItem(`tronlink_transactions_${address}`)){
localStorage.setItem(`tronlink_transactions_${address}`,JSON.stringify([]));
}
}
functiongetTransactions(address){
consttransactionsData=localStorage.getItem(`tronlink_transactions_${address}`);
returntransactionsData?JSON.parse(transactionsData):[];
}
functionaddTransaction(transaction){
constwallet=getWalletFromStorage();
if(!wallet)return;
consttransactions=getTransactions(wallet.address);
transactions.unshift(transaction);
localStorage.setItem(`tronlink_transactions_${wallet.address}`,JSON.stringify(transactions));
}
functiondisplayTransactions(){
constwallet=getWalletFromStorage();
if(!wallet)return;
consttransactions=getTransactions(wallet.address);
transactionsEl.innerHTML='';
if(transactions.length===0){
transactionsEl.innerHTML='<p>暂无交易记录</p>';
return;
}
transactions.forEach(tx=>{
constisSend=tx.from===wallet.address;
consttxElement=document.createElement('div');
txElement.className='transaction-item';
txElement.innerHTML=`
<div>
<div>${isSend?'发送至':'接收自'}${isSend?tx.to:tx.from}</div>
<small>${newDate(tx.timestamp).toLocaleString()}</small>
</div>
<divclass="transaction-amount${isSend?'send':'receive'}">
${isSend?'-':'+'}${tx.amount}TRX
</div>
`;
transactionsEl.appendChild(txElement);
});
}
//定期更新余额
setInterval(()=>{
constwallet=getWalletFromStorage();
if(wallet){
updateBalance(wallet.address);
}
},30000);
4.PHP后端处理(transactions.php)
<?php
header('Content-Type:application/json');
header('Access-Control-Allow-Origin:');
//定义交易记录存储文件
define('TRANSACTIONS_FILE','transactions.json');
//获取请求方法
$method=$_SERVER['REQUEST_METHOD'];
//处理不同的请求方法
switch($method){
case'GET':
handleGetRequest();
break;
case'POST':
handlePostRequest();
break;
default:
http_response_code(405);
echojson_encode(['error'=>'Methodnotallowed']);
break;
}
//处理GET请求
functionhandleGetRequest(){
$address=isset($_GET['address'])?trim($_GET['address']):'';
if(empty($address)){
http_response_code(400);
echojson_encode(['error'=>'Addressparameterisrequired']);
return;
}
$transactions=readTransactions();
$userTransactions=array_filter($transactions,function($tx)use($address){
return$tx['from']===$address||$tx['to']===$address;
});
echojson_encode(array_values($userTransactions));
}
//处理POST请求
functionhandlePostRequest(){
$json=file_get_contents('php://input');
$data=json_decode($json,true);
if(json_last_error()!==JSON_ERROR_NONE||!is_array($data)){
http_response_code(400);
echojson_encode(['error'=>'InvalidJSONdata']);
return;
}
//验证必要字段
$requiredFields=['txId','from','to','amount'];
foreach($requiredFieldsas$field){
if(!isset($data[$field])||empty($data[$field])){
http_response_code(400);
echojson_encode(['error'=>"Missingrequiredfield:$field"]);
return;
}
}
//添加时间戳
$data['timestamp']=time();
$data['status']='pending';
//保存交易
$transactions=readTransactions();
array_unshift($transactions,$data);
writeTransactions($transactions);
echojson_encode(['success'=>true,'transaction'=>$data]);
}
//读取交易记录
functionreadTransactions(){
if(!file_exists(TRANSACTIONS_FILE)){
return[];
}
$content=
转载请注明出处: TronLink官网下载-TRON-TRX-波场-波比-波币-波宝|官网-钱包-苹果APP|安卓-APP-下载
本文的链接地址: https://tianjinfa.org/post/3142
扫描二维码,在手机上阅读
文章作者:
文章标题:TronLink钱包网页版实现(不使用MySQL)
文章链接:https://tianjinfa.org/post/3142
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
文章标题:TronLink钱包网页版实现(不使用MySQL)
文章链接:https://tianjinfa.org/post/3142
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
打赏
如果觉得文章对您有用,请随意打赏。
您的支持是我们继续创作的动力!
微信扫一扫
支付宝扫一扫
您可能对以下文章感兴趣
-
TronLink钱包集成开发指南
9小时前
-
使用Go语言构建TronLink钱包:完整源码与实现指南
11小时前
-
TronLink钱包Web版实现(无MySQL)
11小时前
-
TronLink钱包网页版实现(PHP+CSS+JS+HTML5+JSON)
8小时前
-
TronLink钱包集成开发指南:PHP+CSS+JS+HTML5实现
8小时前
-
TronLink钱包集成开发指南:PHP+CSS+JS+HTML5实现
9小时前
-
使用Go语言构建TronLink钱包:完整源码与实现指南
9小时前
-
原创TronLink钱包HTML5实现方案-SEO优化版
9小时前
-
TronLink钱包集成开发指南:使用PHP+CSS+JS+HTML5+JSON实现
9小时前
-
TronLink钱包集成开发指南
9小时前