TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
本文将介绍如何使用纯前端技术配合PHP和JSON文件存储实现一个简易的TRONLink钱包功能。这个实现不依赖MySQL数据库,适合小型应用或学习用途。
功能概述
1.创建TRON钱包
2.导入已有钱包
3.查看余额
4.发送TRX交易
5.交易历史记录
系统架构
-前端:HTML5+CSS+JavaScript
-后端:PHP处理简单逻辑
-数据存储:JSON文件
完整代码实现
1.项目结构
/tronlink-wallet/
├──index.php主页面
├──wallet.php钱包操作API
├──data/数据存储目录
│└──wallets.json钱包数据存储
├──css/
│└──style.css样式文件
└──js/
└──app.js主JavaScript文件
2.HTML文件(index.php)
<!DOCTYPEhtml>
<htmllang="zh-CN">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<metaname="description"content="简易TRONLink钱包实现,无需数据库,使用PHP和JSON存储">
<title>简易TRONLink钱包|PHP+JSON实现</title>
<linkrel="stylesheet"href="css/style.css">
</head>
<body>
<divclass="container">
<header>
<h1>简易TRONLink钱包</h1>
<pclass="subtitle">基于PHP和JSON的轻量级实现</p>
</header>
<divid="wallet-section"class="section">
<divid="wallet-info"class="hidden">
<h2>钱包信息</h2>
<divclass="info-row">
<spanclass="label">地址:</span>
<spanid="wallet-address"class="value"></span>
<buttonid="copy-address"class="btnsmall">复制</button>
</div>
<divclass="info-row">
<spanclass="label">余额(TRX):</span>
<spanid="wallet-balance"class="value">0</span>
<buttonid="refresh-balance"class="btnsmall">刷新</button>
</div>
<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"min="0"step="0.000001">
</div>
<buttonid="send-trx"class="btnprimary">发送</button>
<h3>交易历史</h3>
<divid="transaction-history"class="history-container">
<!--交易记录将在这里显示-->
</div>
</div>
<divid="wallet-setup">
<h2>创建或导入钱包</h2>
<divclass="tabs">
<buttonclass="tab-btnactive"data-tab="create">创建钱包</button>
<buttonclass="tab-btn"data-tab="import">导入钱包</button>
</div>
<divid="create-tab"class="tab-contentactive">
<divclass="form-group">
<labelfor="new-password">设置密码:</label>
<inputtype="password"id="new-password"placeholder="至少8个字符">
</div>
<buttonid="create-wallet"class="btnprimary">创建新钱包</button>
</div>
<divid="import-tab"class="tab-content">
<divclass="form-group">
<labelfor="private-key">私钥:</label>
<inputtype="password"id="private-key"placeholder="输入您的私钥">
</div>
<divclass="form-group">
<labelfor="import-password">密码:</label>
<inputtype="password"id="import-password"placeholder="设置密码">
</div>
<buttonid="import-wallet"class="btnprimary">导入钱包</button>
</div>
</div>
</div>
<divid="status-message"class="statushidden"></div>
</div>
<scriptsrc="js/app.js"></script>
</body>
</html>
3.CSS样式(css/style.css)
/基础样式/
:root{
--primary-color:1e88e5;
--secondary-color:26c6da;
--dark-color:263238;
--light-color:f5f5f5;
--success-color:66bb6a;
--error-color:ef5350;
--warning-color:ffa726;
}
{
margin:0;
padding:0;
box-sizing:border-box;
font-family:'SegoeUI',Tahoma,Geneva,Verdana,sans-serif;
}
body{
background-color:f0f2f5;
color:var(--dark-color);
line-height:1.6;
}
.container{
max-width:800px;
margin:0auto;
padding:20px;
}
header{
text-align:center;
margin-bottom:30px;
}
headerh1{
color:var(--primary-color);
margin-bottom:5px;
}
.subtitle{
color:666;
font-size:16px;
}
.section{
background:white;
border-radius:8px;
padding:25px;
box-shadow:02px10pxrgba(0,0,0,0.1);
margin-bottom:20px;
}
/按钮样式/
.btn{
padding:10px15px;
border:none;
border-radius:4px;
cursor:pointer;
font-size:14px;
transition:all0.3sease;
}
.btn.primary{
background-color:var(--primary-color);
color:white;
}
.btn.primary:hover{
background-color:1565c0;
}
.btn.small{
padding:5px10px;
font-size:12px;
margin-left:10px;
}
/表单样式/
.form-group{
margin-bottom:15px;
}
.form-grouplabel{
display:block;
margin-bottom:5px;
font-weight:500;
}
.form-groupinput{
width:100%;
padding:10px;
border:1pxsolidddd;
border-radius:4px;
font-size:14px;
}
/标签页样式/
.tabs{
display:flex;
margin-bottom:20px;
border-bottom:1pxsolidddd;
}
.tab-btn{
padding:10px20px;
background:none;
border:none;
cursor:pointer;
position:relative;
bottom:-1px;
}
.tab-btn.active{
border-bottom:2pxsolidvar(--primary-color);
color:var(--primary-color);
font-weight:500;
}
.tab-content{
display:none;
}
.tab-content.active{
display:block;
}
/钱包信息样式/
.info-row{
display:flex;
align-items:center;
margin-bottom:15px;
}
.info-row.label{
font-weight:500;
min-width:100px;
}
.info-row.value{
flex-grow:1;
word-break:break-all;
font-family:monospace;
}
/交易历史样式/
.history-container{
max-height:300px;
overflow-y:auto;
border:1pxsolideee;
border-radius:4px;
padding:10px;
}
.transaction{
padding:10px;
border-bottom:1pxsolideee;
font-size:14px;
}
.transaction:last-child{
border-bottom:none;
}
.transaction.tx-hash{
font-weight:500;
color:var(--primary-color);
word-break:break-all;
}
.transaction.tx-amount{
font-weight:500;
}
.tx-in{
color:var(--success-color);
}
.tx-out{
color:var(--error-color);
}
/状态消息/
.status{
padding:15px;
border-radius:4px;
margin-bottom:20px;
text-align:center;
}
.status.success{
background-color:rgba(102,187,106,0.2);
color:var(--success-color);
}
.status.error{
background-color:rgba(239,83,80,0.2);
color:var(--error-color);
}
.status.warning{
background-color:rgba(255,167,38,0.2);
color:var(--warning-color);
}
/辅助类/
.hidden{
display:none;
}
.text-center{
text-align:center;
}
.mt-20{
margin-top:20px;
}
4.JavaScript文件(js/app.js)
document.addEventListener('DOMContentLoaded',function(){
//切换标签页
consttabBtns=document.querySelectorAll('.tab-btn');
tabBtns.forEach(btn=>{
btn.addEventListener('click',function(){
//移除所有active类
document.querySelectorAll('.tab-btn').forEach(b=>b.classList.remove('active'));
document.querySelectorAll('.tab-content').forEach(c=>c.classList.remove('active'));
//添加active类到当前按钮和对应内容
this.classList.add('active');
consttabId=this.getAttribute('data-tab');
document.getElementById(tabId+'-tab').classList.add('active');
});
});
//检查本地存储中是否有钱包
checkWalletExists();
//创建钱包按钮
document.getElementById('create-wallet').addEventListener('click',createWallet);
//导入钱包按钮
document.getElementById('import-wallet').addEventListener('click',importWallet);
//发送TRX按钮
document.getElementById('send-trx').addEventListener('click',sendTRX);
//复制地址按钮
document.getElementById('copy-address').addEventListener('click',copyAddress);
//刷新余额按钮
document.getElementById('refresh-balance').addEventListener('click',refreshBalance);
});
//检查钱包是否存在
functioncheckWalletExists(){
fetch('wallet.php?action=check')
.then(response=>response.json())
.then(data=>{
if(data.exists){
showWalletInfo(data.address);
refreshBalance();
loadTransactionHistory();
}else{
document.getElementById('wallet-setup').classList.remove('hidden');
}
})
.catch(error=>{
showStatus('无法检查钱包状态:'+error.message,'error');
});
}
//创建新钱包
functioncreateWallet(){
constpassword=document.getElementById('new-password').value;
if(!password||password.length<8){
showStatus('密码必须至少8个字符','error');
return;
}
fetch('wallet.php?action=create',{
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
},
body:`password=${encodeURIComponent(password)}`
})
.then(response=>response.json())
.then(data=>{
if(data.success){
showStatus('钱包创建成功!请妥善保管您的私钥','success');
showWalletInfo(data.address);
document.getElementById('wallet-setup').classList.add('hidden');
//显示私钥警告(实际应用中应该更安全地处理)
setTimeout(()=>{
alert(`重要提示:请妥善保存您的私钥,这是恢复钱包的唯一方式!\n\n私钥:${data.privateKey}\n\n请将其保存在安全的地方!`);
},500);
}else{
showStatus('创建钱包失败:'+data.message,'error');
}
})
.catch(error=>{
showStatus('创建钱包时出错:'+error.message,'error');
});
}
//导入钱包
functionimportWallet(){
constprivateKey=document.getElementById('private-key').value.trim();
constpassword=document.getElementById('import-password').value;
if(!privateKey||privateKey.length<64){
showStatus('请输入有效的私钥','error');
return;
}
if(!password||password.length<8){
showStatus('密码必须至少8个字符','error');
return;
}
fetch('wallet.php?action=import',{
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
},
body:`privateKey=${encodeURIComponent(privateKey)}&password=${encodeURIComponent(password)}`
})
.then(response=>response.json())
.then(data=>{
if(data.success){
showStatus('钱包导入成功!','success');
showWalletInfo(data.address);
document.getElementById('wallet-setup').classList.add('hidden');
refreshBalance();
loadTransactionHistory();
}else{
showStatus('导入钱包失败:'+data.message,'error');
}
})
.catch(error=>{
showStatus('导入钱包时出错:'+error.message,'error');
});
}
//显示钱包信息
functionshowWalletInfo(address){
document.getElementById('wallet-address').textContent=address;
document.getElementById('wallet-info').classList.remove('hidden');
}
//发送TRX
functionsendTRX(){
constrecipient=document.getElementById('recipient').value.trim();
constamount=document.getElementById('amount').value.trim();
if(!recipient||recipient.length<34){
showStatus('请输入有效的接收地址','error');
return;
}
if(!amount||isNaN(amount)||parseFloat(amount)<=0){
showStatus('请输入有效的金额','error');
return;
}
fetch('wallet.php?action=send',{
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
},
body:`recipient=${encodeURIComponent(recipient)}&amount=${encodeURIComponent(amount)}`
})
.then(response=>response.json())
.then(data=>{
if(data.success){
showStatus(`成功发送${amount}TRX到${recipient}`,'success');
document.getElementById('recipient').value='';
document.getElementById('amount').value='';
refreshBalance();
loadTransactionHistory();
}else{
showStatus('发送失败:'+data.message,'error');
}
})
.catch(error=>{
showStatus('发送TRX时出错:'+error.message,'error');
});
}
//刷新余额
functionrefreshBalance(){
fetch('wallet.php?action=balance')
.then(response=>response.json())
.then(data=>{
if(data.success){
document.getElementById('wallet-balance').textContent=data.balance;
}else{
showStatus('获取余额失败:'+data.message,'error');
}
})
.catch(error=>{
showStatus('刷新余额时出错:'+error.message,'error');
});
}
//加载交易历史
functionloadTransactionHistory(){
fetch('wallet.php?action=history')
.then(response=>response.json())
.then(data=>{
consthistoryContainer=document.getElementById('transaction-history');
historyContainer.innerHTML='';
if(data.length===0){
historyContainer.innerHTML='<pclass="text-centermt-20">暂无交易记录</p>';
return;
}
data.forEach(tx=>{
consttxElement=document.createElement('div');
txElement.className='transaction';
constdirection=tx.from===document.getElementById('wallet-address').textContent?'out':'in';
constamountClass=direction==='out'?'tx-out':'tx-in';
constdirectionText=direction==='out'?'发送':'接收';
txElement.innerHTML=`
<divclass="tx-hash">${tx.txId.substring(0,20)}...</div>
<div>${newDate(tx.timestamp1000).toLocaleString()}</div>
<div>${directionText}<spanclass="tx-amount${amountClass}">${tx.amount}TRX</span></div>
<div>${direction==='out'?'到:'+tx.to.substring(0,10)+'...':'从:'+tx.from.substring(0,10)+'...'}</div>
`;
historyContainer.appendChild(txElement);
});
})
.catch(error=>{
showStatus('加载交易历史时出错:'+error.message,'error');
});
}
//复制地址
functioncopyAddress(){
constaddress=document.getElementById('wallet-address').textContent;
navigator.clipboard.writeText(address)
.then(()=>{
showStatus('地址已复制到剪贴板','success');
})
.catch(err=>{
showStatus('无法复制地址:'+err,'error');
});
}
//显示状态消息
functionshowStatus(message,type){
conststatusElement=document.getElementById('status-message');
statusElement.textContent=message;
statusElement.className=`status${type}`;
statusElement.classList.remove('hidden');
setTimeout(()=>{
statusElement.classList.add('hidden');
},5000);
}
5.PHP后端处理(wallet.php)
<?php
header('Content-Type:application/json');
header('Access-Control-Allow-Origin:');
//定义数据文件路径
define('WALL
转载请注明出处: TronLink官网下载-TRON-TRX-波场-波比-波币-波宝|官网-钱包-苹果APP|安卓-APP-下载
本文的链接地址: http://www.tianjinfa.org/post/2954
扫描二维码,在手机上阅读
文章作者:
文章标题:TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
文章链接:http://www.tianjinfa.org/post/2954
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
文章标题:TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
文章链接:http://www.tianjinfa.org/post/2954
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
打赏
如果觉得文章对您有用,请随意打赏。
您的支持是我们继续创作的动力!
微信扫一扫
支付宝扫一扫
您可能对以下文章感兴趣
-
使用PHP+CSS+JS+HTML5+JSON构建TronLink风格钱包(无MySQL)
1天前
-
使用JavaScript开发TRONLink钱包集成指南
1天前
-
Pepe币近期动态:社区热度回升与生态进展
23小时前
-
原创TronLink钱包HTML5实现方案(SEO优化版)
1天前
-
比特币市场动态:理性看待数字资产波动
1天前
-
SOL生态近期迎来多项技术升级与生态进展,为开发者与用户带来更高效体验。据官方消息,SOL网络已完成最新版本客户端升级,交易处理速度与稳定性显著提升,网络平均出块时间缩短至400毫秒以内。
17小时前
-
TronLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
1天前
-
TronLink钱包HTML5实现教程
1天前
-
TronLink钱包集成开发指南
1天前
-
TronLink钱包网页版实现(不使用MySQL)
1天前