TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
本文将介绍如何使用纯前端技术(HTML5、CSS、JavaScript)结合PHP和JSON文件存储,实现一个简易的TRONLink风格钱包应用。这个实现不使用MySQL数据库,而是采用JSON文件进行数据存储。
项目概述
这个简易TRONLink钱包将实现以下功能:
1.创建新钱包(生成助记词和私钥)
2.导入现有钱包(通过助记词或私钥)
3.显示钱包余额
4.简单的TRX转账功能
5.交易历史记录
目录结构
/tronlink-wallet/
├──index.php主入口文件
├──wallet.php钱包功能处理
├──data/
│└──wallets.json存储钱包数据的JSON文件
├──css/
│└──style.css样式文件
└──js/
└──script.js前端交互逻辑
1.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存储的区块链钱包应用">
<metaname="keywords"content="TRONLink,钱包,区块链,TRX,PHP,JSON">
<title>简易TRONLink钱包</title>
<linkrel="stylesheet"href="css/style.css">
<linkhref="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap"rel="stylesheet">
</head>
<body>
<divclass="container">
<header>
<h1>简易TRONLink钱包</h1>
<divid="wallet-status">未连接钱包</div>
</header>
<divid="wallet-section"class="hidden">
<divclass="wallet-info">
<h2>钱包信息</h2>
<p>地址:<spanid="wallet-address"></span></p>
<p>余额:<spanid="wallet-balance">0</span>TRX</p>
</div>
<divclass="transaction-form">
<h2>转账</h2>
<formid="send-form">
<divclass="form-group">
<labelfor="recipient">接收地址:</label>
<inputtype="text"id="recipient"required>
</div>
<divclass="form-group">
<labelfor="amount">金额(TRX):</label>
<inputtype="number"id="amount"min="0"step="0.001"required>
</div>
<buttontype="submit">发送</button>
</form>
</div>
<divclass="transaction-history">
<h2>交易记录</h2>
<tableid="tx-table">
<thead>
<tr>
<th>交易ID</th>
<th>类型</th>
<th>金额</th>
<th>时间</th>
</tr>
</thead>
<tbodyid="tx-body">
<!--交易记录将通过JS动态加载-->
</tbody>
</table>
</div>
</div>
<divid="auth-section">
<divclass="auth-tabs">
<buttonclass="tab-btnactive"data-tab="create">创建钱包</button>
<buttonclass="tab-btn"data-tab="import">导入钱包</button>
</div>
<divid="create-tab"class="tab-contentactive">
<h2>创建新钱包</h2>
<formid="create-form">
<divclass="form-group">
<labelfor="wallet-name">钱包名称:</label>
<inputtype="text"id="wallet-name"required>
</div>
<divclass="form-group">
<labelfor="wallet-password">密码:</label>
<inputtype="password"id="wallet-password"required>
</div>
<buttontype="submit">创建钱包</button>
</form>
</div>
<divid="import-tab"class="tab-content">
<h2>导入现有钱包</h2>
<formid="import-form">
<divclass="form-group">
<labelfor="import-type">导入方式:</label>
<selectid="import-type">
<optionvalue="mnemonic">助记词</option>
<optionvalue="privateKey">私钥</option>
</select>
</div>
<divclass="form-group"id="mnemonic-group">
<labelfor="mnemonic">助记词(12个单词):</label>
<textareaid="mnemonic"rows="3"required></textarea>
</div>
<divclass="form-grouphidden"id="privateKey-group">
<labelfor="privateKey">私钥:</label>
<inputtype="text"id="privateKey">
</div>
<divclass="form-group">
<labelfor="import-name">钱包名称:</label>
<inputtype="text"id="import-name"required>
</div>
<divclass="form-group">
<labelfor="import-password">密码:</label>
<inputtype="password"id="import-password"required>
</div>
<buttontype="submit">导入钱包</button>
</form>
</div>
</div>
</div>
<divid="mnemonic-modal"class="modalhidden">
<divclass="modal-content">
<spanclass="close-btn">×</span>
<h2>请安全保存您的助记词</h2>
<divclass="mnemonic-words"id="mnemonic-display"></div>
<pclass="warning">警告:助记词是恢复钱包的唯一方式,请妥善保管,不要分享给任何人!</p>
<buttonid="confirm-mnemonic">我已安全保存</button>
</div>
</div>
<scriptsrc="js/script.js"></script>
</body>
</html>
2.CSS样式(css/style.css)
/基础样式/
:root{
--primary-color:2e86de;
--secondary-color:54a0ff;
--success-color:26de81;
--danger-color:fc5c65;
--warning-color:f39c12;
--dark-color:2c3e50;
--light-color:ecf0f1;
--gray-color:95a5a6;
}
{
margin:0;
padding:0;
box-sizing:border-box;
}
body{
font-family:'Roboto',sans-serif;
line-height:1.6;
color:333;
background-color:f5f6fa;
padding:20px;
}
.container{
max-width:1200px;
margin:0auto;
background-color:white;
border-radius:8px;
box-shadow:0020pxrgba(0,0,0,0.1);
padding:30px;
position:relative;
}
header{
text-align:center;
margin-bottom:30px;
padding-bottom:20px;
border-bottom:1pxsolideee;
}
h1{
color:var(--primary-color);
margin-bottom:10px;
}
h2{
color:var(--dark-color);
margin-bottom:15px;
font-size:1.5rem;
}
/钱包状态/
wallet-status{
padding:8px15px;
background-color:var(--danger-color);
color:white;
border-radius:20px;
display:inline-block;
font-size:0.9rem;
}
wallet-status.connected{
background-color:var(--success-color);
}
/表单样式/
.form-group{
margin-bottom:15px;
}
label{
display:block;
margin-bottom:5px;
font-weight:500;
}
input,textarea,select{
width:100%;
padding:10px;
border:1pxsolidddd;
border-radius:4px;
font-size:1rem;
}
textarea{
resize:vertical;
min-height:80px;
}
button{
background-color:var(--primary-color);
color:white;
border:none;
padding:10px20px;
border-radius:4px;
cursor:pointer;
font-size:1rem;
transition:background-color0.3s;
}
button:hover{
background-color:var(--secondary-color);
}
/标签页样式/
.auth-tabs{
display:flex;
margin-bottom:20px;
border-bottom:1pxsolidddd;
}
.tab-btn{
background:none;
border:none;
padding:10px20px;
cursor:pointer;
color:var(--gray-color);
border-bottom:3pxsolidtransparent;
}
.tab-btn.active{
color:var(--primary-color);
border-bottom-color:var(--primary-color);
}
.tab-content{
display:none;
}
.tab-content.active{
display:block;
}
/钱包信息区域/
.wallet-info,.transaction-form,.transaction-history{
background-color:white;
padding:20px;
margin-bottom:20px;
border-radius:8px;
box-shadow:02px5pxrgba(0,0,0,0.05);
}
/交易表格/
table{
width:100%;
border-collapse:collapse;
margin-top:15px;
}
th,td{
padding:12px15px;
text-align:left;
border-bottom:1pxsolidddd;
}
th{
background-color:var(--light-color);
font-weight:500;
}
tr:hover{
background-color:f9f9f9;
}
/模态框样式/
.modal{
display:none;
position:fixed;
top:0;
left:0;
width:100%;
height:100%;
background-color:rgba(0,0,0,0.5);
z-index:1000;
justify-content:center;
align-items:center;
}
.modal.active{
display:flex;
}
.modal-content{
background-color:white;
padding:30px;
border-radius:8px;
max-width:600px;
width:90%;
position:relative;
}
.close-btn{
position:absolute;
top:15px;
right:15px;
font-size:1.5rem;
cursor:pointer;
}
.mnemonic-words{
background-color:var(--light-color);
padding:20px;
border-radius:8px;
font-size:1.2rem;
line-height:2;
margin:20px0;
text-align:center;
}
.warning{
color:var(--danger-color);
font-weight:500;
margin:15px0;
}
/响应式设计/
@media(max-width:768px){
.container{
padding:15px;
}
header{
margin-bottom:20px;
}
.wallet-info,.transaction-form,.transaction-history{
padding:15px;
}
th,td{
padding:8px10px;
font-size:0.9rem;
}
}
/辅助类/
.hidden{
display:none!important;
}
3.JavaScript逻辑(js/script.js)
document.addEventListener('DOMContentLoaded',function(){
//切换标签页
consttabBtns=document.querySelectorAll('.tab-btn');
tabBtns.forEach(btn=>{
btn.addEventListener('click',function(){
//移除所有活动状态
document.querySelectorAll('.tab-btn').forEach(b=>b.classList.remove('active'));
document.querySelectorAll('.tab-content').forEach(c=>c.classList.remove('active'));
//设置当前活动状态
this.classList.add('active');
consttabId=this.getAttribute('data-tab');
document.getElementById(`${tabId}-tab`).classList.add('active');
});
});
//切换导入方式
constimportType=document.getElementById('import-type');
importType.addEventListener('change',function(){
consttype=this.value;
document.getElementById('mnemonic-group').classList.toggle('hidden',type!=='mnemonic');
document.getElementById('privateKey-group').classList.toggle('hidden',type!=='privateKey');
});
//创建钱包表单
constcreateForm=document.getElementById('create-form');
createForm.addEventListener('submit',function(e){
e.preventDefault();
constname=document.getElementById('wallet-name').value;
constpassword=document.getElementById('wallet-password').value;
//调用PHP后端创建钱包
fetch('wallet.php?action=create',{
method:'POST',
headers:{
'Content-Type':'application/json',
},
body:JSON.stringify({
name:name,
password:password
})
})
.then(response=>response.json())
.then(data=>{
if(data.success){
//显示助记词
showMnemonic(data.mnemonic,data.walletId);
}else{
alert('创建钱包失败:'+data.message);
}
})
.catch(error=>{
console.error('Error:',error);
alert('创建钱包时发生错误');
});
});
//导入钱包表单
constimportForm=document.getElementById('import-form');
importForm.addEventListener('submit',function(e){
e.preventDefault();
consttype=document.getElementById('import-type').value;
constname=document.getElementById('import-name').value;
constpassword=document.getElementById('import-password').value;
letdata={
name:name,
password:password,
type:type
};
if(type==='mnemonic'){
data.mnemonic=document.getElementById('mnemonic').value;
}else{
data.privateKey=document.getElementById('privateKey').value;
}
//调用PHP后端导入钱包
fetch('wallet.php?action=import',{
method:'POST',
headers:{
'Content-Type':'application/json',
},
body:JSON.stringify(data)
})
.then(response=>response.json())
.then(data=>{
if(data.success){
loginWallet(data.walletId);
}else{
alert('导入钱包失败:'+data.message);
}
})
.catch(error=>{
console.error('Error:',error);
alert('导入钱包时发生错误');
});
});
//显示助记词模态框
functionshowMnemonic(mnemonic,walletId){
document.getElementById('mnemonic-display').textContent=mnemonic;
constmodal=document.getElementById('mnemonic-modal');
modal.classList.add('active');
//确认按钮点击事件
document.getElementById('confirm-mnemonic').onclick=function(){
modal.classList.remove('active');
loginWallet(walletId);
};
//关闭按钮点击事件
document.querySelector('.close-btn').onclick=function(){
modal.classList.remove('active');
};
}
//登录钱包
functionloginWallet(walletId){
//保存钱包ID到sessionStorage
sessionStorage.setItem('currentWallet',walletId);
//更新UI
document.getElementById('auth-section').classList.add('hidden');
document.getElementById('wallet-section').classList.remove('hidden');
document.getElementById('wallet-status').textContent='已连接';
document.getElementById('wallet-status').classList.add('connected');
//加载钱包信息
loadWalletInfo(walletId);
}
//加载钱包信息
functionloadWalletInfo(walletId){
fetch(`wallet.php?action=info&id=${walletId}`)
.then(response=>response.json())
.then(data=>{
if(data.success){
document.getElementById('wallet-address').textContent=data.address;
document.getElementById('wallet-balance').textContent=data.balance;
//加载交易记录
loadTransactions(walletId);
}else{
alert('加载钱包信息失败:'+data.message);
}
})
.catch(error=>{
console.error('Error:',error);
alert('加载钱包信息时发生错误');
});
}
//加载交易记录
functionloadTransactions(walletId){
fetch(`wallet.php?action=transactions&id=${walletId}`)
.then(response=>response.json())
.then(data=>{
consttxBody=document.getElementById('tx-body');
txBody.innerHTML='';
if(data.success&&data.transactions.length>0){
data.transactions.forEach(tx=>{
constrow=document.createElement('tr');
row.innerHTML=`
<td>${tx.id.substring(0,10)}...</td>
<td>${tx.type}</td>
<td>${tx.amount}TRX</td>
<td>${newDate(tx.timestamp1000).toLocaleString()}</td>
`;
txBody.appendChild(row);
});
}else{
constrow=document.createElement('tr');
row.innerHTML='<tdcolspan="4"style="text-align:center;">暂无交易记录</td>';
txBody.appendChild(row);
}
})
.catch(error=>{
console.error('Error:',error);
alert('加载交易记录时发生错误');
});
}
//发送交易表单
constsendForm=document.getElementById('send-form');
sendForm.addEventListener('
转载请注明出处: TronLink官网下载-TRON-TRX-波场-波比-波币-波宝|官网-钱包-苹果APP|安卓-APP-下载
本文的链接地址: https://tianjinfa.org/post/3082
扫描二维码,在手机上阅读
文章作者:
文章标题:TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
文章链接:https://tianjinfa.org/post/3082
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
文章标题:TRONLink钱包简易实现(PHP+CSS+JS+HTML5+JSON)
文章链接:https://tianjinfa.org/post/3082
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
打赏
如果觉得文章对您有用,请随意打赏。
您的支持是我们继续创作的动力!
微信扫一扫
支付宝扫一扫
您可能对以下文章感兴趣
-
TronLink钱包集成开发指南
9小时前
-
使用Go语言构建TronLink钱包:完整源码与实现指南
10小时前
-
TronLink钱包Web版实现(无MySQL)
10小时前
-
TronLink钱包网页版实现(PHP+CSS+JS+HTML5+JSON)
8小时前
-
TronLink钱包集成开发指南:PHP+CSS+JS+HTML5实现
8小时前
-
TronLink钱包集成开发指南:PHP+CSS+JS+HTML5实现
8小时前
-
使用Go语言构建TronLink钱包:完整源码与实现指南
9小时前
-
原创TronLink钱包HTML5实现方案-SEO优化版
9小时前
-
TronLink钱包集成开发指南:使用PHP+CSS+JS+HTML5+JSON实现
9小时前
-
TronLink钱包集成开发指南
9小时前