小试牛刀-区块链代币锁仓(Web页面)

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本篇文章是的后续,记录前端页面的开发过程,分享前端页面代码,加深对前端页面理解,同时希望能帮到需要实现相关功能的朋友。

 

Welcome to Code Block's blog

本篇文章主要介绍了

[区跨链代币锁仓(Web页面)]

❤博主广交技术好友,喜欢我的文章的可以关注一下❤

目录

1.编写目的

2.开发环境

3.实现功能

4.代码实现

4.1 必要文件

4.1.1 ABI Json文件(LockerContractABI.json)

4.2 代码详解

ABI初始化

4.1.1 MetaMask连接到网站

4.1.2 显示锁仓数量、地址数、时间

4.1.3 显示当前锁仓列表

4.1.4 显示锁仓历史记录

4.1.5 显示我的锁仓列表、

4.1.6 锁仓

4.1.7 解锁

5.测试

5.1 测试截图

5.2测试视频

6.页面源码


1.编写目的

       本篇文章是小试牛刀-区块链代币锁仓合约实战的后续,记录前端页面的开发过程,分享前端页面代码,加深对前端页面理解,同时希望能帮到需要实现相关功能的朋友。

2.开发环境

       该网页使用Vue("vue": "^3.3.11",)实现,与合约的交互使用了web3("web3": "^4.3.0")组件,使用VsCode作为开发集成IDE.

3.实现功能

  1. MetaMask连到到网站
  2. 显示锁仓数量
  3. 显示锁仓人数
  4. 显示链上时间
  5. 显示当前锁仓列表
  6. 显示锁仓历史记录
  7. 显示我的锁仓列表
  8. 创建锁仓并锁定指定时间
  9. 超过锁仓时间后执行解锁

4.代码实现

4.1 必要文件

4.1.1 ABI Json文件(LockerContractABI.json)

       该文件是合约的ABI文件,是Json格式,其中为合约方法的名称和返回参数类型,web3.js组件只有通过这个ABI文件才能知道调用合约方法,以及返回的参数类型.(已在下载源码中包含.),同样可以通过这个链接进行下载.ABI文件

4.2 代码详解

ABI初始化

将ABI文件导入到使用的JS中.

import BabyBonkLoderABI from './LockerContractABI.json';
import BabyBonkABI from './BabyBonkContractABI.json'

image.gif

然后通过以下代码对ABI文件进行初始化,这里lockerContractAddress变量为合约地址。accounts[0]即连接的MetaMusk地址.

async initializeContract() {
      try {
        const accounts = await this.web3.eth.getAccounts();
        this.lockerContract = new this.web3.eth.Contract(BabyBonkLoderABI, this.lockerContractAddress, {
          from: accounts[0],
        });
        this.tokenContract=new this.web3.eth.Contract(BabyBonkABI,this.tokenContractAddress,{
          from: accounts[0]
        })
        this.address=accounts[0]
      } catch (error) {
        console.error('Error initializing contract:', error);
      }
    }

image.gif

4.1.1 MetaMask连接到网站

       使用以下方法连接MetaMask,在连接之前先要对web3组件进行初始化,连接后即可获得链上地址并且通过初始化函数初始化合约内的方法,方便调用。

async connectToMetaMask() {
      try {
        await window.ethereum.request({ method: 'eth_requestAccounts' });
        this.web3 = new Web3(window.ethereum);
        await this.initializeContract();
        ElMessage({
          message: 'connect wallet success!',
          type: 'success',
        })
      } catch (error) {
        ElMessage.error('Error connecting to MetaMask')
      }
    }

image.gif

4.1.2 显示锁仓数量、地址数、时间

       这里调用合约内的getLockPool方法获取锁仓代币总量,调用getLockerSize方法获取地址数量,getTimestamp()方法获取链上时间戳,并通过格式转换方法将格式转换为字符串的格式方便在前端页面显示.

async initLockInfo() {
      await this.initializeContract();
      try {
        const lockPool=await this.lockerContract.methods.getLockPool().call();
        this.lockPool=this.toBalance(lockPool);
        const lockSize=await this.lockerContract.methods.getLockerSize().call();
        this.lcokPoolSize=BigInt(lockSize).toString();
        const timestamp=await this.lockerContract.methods.getTimestamp().call();
        this.timestamp=parseInt(Number(timestamp)*1000);
        this.chainTime=this.formattedDateTime();
      } catch (error) {
        console.error('Error calling contract method:', error);
      }
    }

image.gif

4.1.3 显示当前锁仓列表

调用合约getLockerList方法获取当前的锁仓列表。

async getlockList(){
      await this.initializeContract();
      return await this.lockerContract.methods.getLockerList().call();
    }

image.gif

4.1.4 显示锁仓历史记录

调用getLockerHistoryList方法获取当前的锁仓历史列表。

async getLockerHistoryList(){
      await this.initializeContract();
      return await this.lockerContract.methods.getLockerHistoryList().call();
    }

image.gif

4.1.5 显示我的锁仓列表、

调用getUserLock()方法获取当前连接的地址的锁仓列表。

async getUserLock(){
      await this.initializeContract();
      return await this.lockerContract.methods.getUserLocker().call();
    }

image.gif

4.1.6 锁仓

锁仓包授权和锁仓请求,当未进行授权时,需要完成授权(approve(数量))操作,授权完成后即可再次点击锁仓按钮请求合约(即lockAmountDuration(数量,时间)),合约会进行转移代币和记录锁仓信息.使用代码如下:

async approve(amount){
      await this.initializeContract();
      const amountToApprove = BigInt(amount)*BigInt(1e9);
      this.tokenContract.methods.approve(this.lockerContractAddress,amountToApprove)
      .send({
        from: this.address,
        to:this.tokenContractAddress,
        gas: '300000', 
        gasPrice: '3000000000'
      }) 
      .on('transactionHash', function(hash) {
        ElMessage.success('send transaction success:'+hash)
      })
      .on('error', function(error) {
        ElMessage.error('Error send TransactionHash')
      });
    }
    async lockAmountDuration(amount,lockDuration){
       await this.initializeContract();
       this.lockerContract.methods.lockerToken(amount,lockDuration)
      .send({
        from: this.address,
        to:this.lockerContractAddress,
        gas: '300000', 
        gasPrice: '3000000000'
      })
      .on('transactionHash', function(hash) {
        ElMessage.success('LOCK success:'+hash)
      })
      .on('error', function(error) {
        ElMessage.error('LOCK ERROR')
      });
    }

image.gif

4.1.7 解锁

解锁即为请求合约unlockerToken方法,合约会通过记录的信息将相应的代币退回给用户。

async unLockAmount(){
      await this.initializeContract();
      this.lockerContract.methods.unLockerToken()
     .send({
       from: this.address,
       to:this.lockerContractAddress,
       gas: '300000', 
       gasPrice: '3000000000',
     })
     .on('transactionHash', function(hash) {
       ElMessage.success('UN LOCK success:'+hash)
     })
     .on('error', function(error) {
       ElMessage.error('UNLOCK ERROR')
     });
    }

image.gif

5.测试

5.1 测试截图

image.gif 编辑

image.gif 编辑

5.2测试视频

录屏_选择区域_20240225093939

image.gif

6.页面源码

源码已上传,可以在置顶或当前链接下载小试牛刀-区块链代币锁仓(Web页面).

image.gif 编辑

目录
相关文章
|
2月前
|
区块链
小试牛刀-区块链Solana多签账户
在 Solana 区块链中,多签账户(Multisig Account)是一种智能合约账户,允许多个签名者共同管理和控制账户上的资产或操作。这种机制增强了账户的安全性和灵活性,特别适用于需要多个权限共同批准的操作场景,如资产管理、资金转移、或项目治理。
70 0
|
2月前
|
数据处理 Apache 流计算
Flink Forward Asia 2025 城市巡回 · 上海站
Flink Forward Asia 2025 城市巡回上海站重磅来袭!8月16日,顶尖技术专家齐聚,共探实时计算前沿趋势与行业实践。大会涵盖技术分享、实战案例与开源生态共建,支持线上直播预约。立即报名,共赴技术盛宴!
240 0
Flink Forward Asia 2025 城市巡回 · 上海站
|
2月前
|
边缘计算 5G 图形学
webgl和实时云渲染的原理是什么,分别适用于什么场景?有什么区别
本文对比分析云渲染(点量云流)与WebGL技术在大型3D内容呈现中的差异,涵盖技术原理、性能画质、适用场景及选型建议,助力开发者选择最优方案。
141 0
|
2月前
|
监控 Java 开发工具
Springboot秒集成-视频推拉流
在工作中需要用到视频的推拉流服务,刚开始准备使用netty服务自己实现RTSP推拉流服务,但在RTSP解包时卡住,自己实现难度确实有点大,后来在网上找到了Zlm4j库,它是基于ZLMediaKit服务实现的Jna版本,可以很容易的集成到Springboot中,在此也。希望本篇博客可以帮助到想快速实现视频推拉流服务的朋友。
250 10
|
2月前
|
算法 关系型数据库 Java
Springboot集成PostGIS完成路径规划
因为公司里需要做关于林区防火方面的项目,需要完成着火后山区路径的导航,但.....某德的功能似乎只能到达山区的边上,后边的路就需要自己完成导航了。搞了一个周终于有所效果了,也遇见了很多的坑,在此记录一下,希望以后不要踩坑。需要上述的环境才能进行路径导航,环境的搭建可以参阅
82 5
|
2月前
|
Java 区块链 Maven
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
262 3
|
2月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
224 3
|
2月前
|
传感器 定位技术 数据格式
常用通信协议及数据格式
常用通信协议和格式总结
238 2
|
2月前
|
XML Linux 区块链
Python提取Word表格数据教程(含.doc/.docx)
本文介绍了使用LibreOffice和python-docx库处理DOC文档表格的方法。首先需安装LibreOffice进行DOC到DOCX的格式转换,然后通过python-docx读取和修改表格数据。文中提供了详细的代码示例,包括格式转换函数、表格读取函数以及修改保存功能。该方法适用于Windows和Linux系统,解决了老旧DOC格式文档的处理难题,为需要处理历史文档的用户提供了实用解决方案。
137 1
|
2月前
|
IDE Java 开发工具
IntelliJ IDEA 使用技巧与插件推荐
IntelliJ IDEA 是一个功能强大、扩展性丰富的开发工具。通过掌握常用的快捷键和技巧,结合合适的插件,可以大幅提升你的开发效率。
115 1

热门文章

最新文章