首页 > 其他分享 >去中心化钱包的交易设计

去中心化钱包的交易设计

时间:2024-03-17 21:44:55浏览次数:22  
标签:... chain raw token 钱包 设计 中心化 法币 交易

一、上币

 

二、购买币

基本流程是:

  1. 前端从后台获取到全部的购买服务供应商信息, 包括名称、支持的法币列表、支持的法币->token购买列表;
  2. 用户在前端先选择要支付法币、要花费的金额、购入token存放地址;
  3. 确定后,转换到列表展示每个供应商可买入的token数量、费用等

要维护的供应商信息包括有

{
  0: {
    name: 'MOONPAY',
    // token和法币的汇率
    prices: [
      {
        crypto_currency: 'ETH', 
        fiat_currency: 'USD', 
        price: '3379.08322' 
      },
      ...
    ],
    // 支持的付款法币
    fiat_currencies: ['USD', 'EUR', ...],
    // 限额
    limits: [
      {
        fiat_currency: 'USD',
        limit: {
          min: 30,
          max: 5000
        }
      },
      ...
    ],
    // 法币间汇率
    conversion_rates: [
      {
        fiat_currency: 'USD',
        exchange_rate: 1
      },
      ...
    ]
  },
  1: {
    name: 'SIMPLEX',
    ......
  },
  ...
}

购买时具体需要信息(也要传给服务供应商的)包括:

      const buyObj = {
        cryptoToFiat: this.moonpayCryptoAmount,  // token数量
        selectedCryptoName: this.selectedCryptoName,  // token名
        plusFeeF: this.plusFeeF,    // 法币金额
        includesFeeText: this.includesFeeText,  // 费用
        networkFeeText: this.networkFeeText,
        dailyLimit: this.dailyLimit,
        monthlyLimit: this.monthlyLimit,
        fiatAmount: this.amount
      };
      this.$emit('success', [
        this.simplexQuote,  
        this.toAddress,  // 买入token存放地址
        buyObj,  
        1,
        this.selectedCurrency,  // token信息
        this.selectedFiat   // 法币信息
      ]);

 三、兑换

基本流程是:

  1. 后端维护能参与兑换的token列表; 
  2. 用户进入兑换页,前端查询,分类展示成当前链token,跨链token;
  3. 用户选择fromToken的类型、数量、toToken的类型,自动发请求到后台(供应商)查询后,以readonly形式展示toToken的数量
  4. 选择fromAddress和toAddress(数据来源于addressBookStore,额外应该有地址管理功能,可以增加保存自己的或者其他人的地址)
  5. 展示服务供应商列表供用户选择,包括具体信息(汇率、费用等)
  6. 用于选择交易提供商provider之后,自动调用供应商的getTrade方法,会得到1个trade结构数据,该结构数据用于构造tx。 返回trade结构里最重要的字段是data,它一个十六进制字符串,包含了调用智能合约方法的数据。
  7. 获取nouce,给交易签名signTransaction后,调用sendTransaction

第3步里兑换token数量查询依赖的数据

// 返回toToken的数量、汇率等
getQuote({
     fromContractAddress: fromAddress,
     toContractAddress: toAddress,
     amount: queryAmount.toFixed(fromT.decimals),
     chain: this.chain,   // 链地址
     excludeDexes: Object.values(MEWPClass.supportedDexes)
              .filter(dex => dex !== this.provider)
              .join(',')    // 要排除的交易所
}};

第6步里获取交易结构数据的请求参数

{   address: fromAddress,   recipient: toAddress,   dex: this.provider,   exchange: quote.exchange,   platform: 'web',   fromContractAddress: contactFromAddress,   toContractAddress: contractToAddress,   amount: queryAmount.toFixed(fromT.decimals),   chain: this.chain }

四、转账

五、NFT交易

基本流程:

  1. 构造NFT得交易数据结构
  2. 发送交易数据: 获取nouce、签名、发送
  send(to, token, gasPrice = undefined) {
    let raw;
    this.contract = new this.web3.eth.Contract(token.erc721 ? ABI : ERC1155ABI);
    if (token.contract.includes(configs.cryptoKittiesContract)) {
      raw = this.cryptoKittiesTransfer(to, token);
    } else if (token.erc721) {
      raw = this.safeTransferFrom(to, token);
    } else {
      raw = this.safeTransferFromRarible(to, token, 1);
    }
    raw.from = this.address;
    if (gasPrice !== undefined) raw.gasPrice = gasPrice;
    return this.web3.eth.sendTransaction(raw);
  }

  safeTransferFrom(to, token) {
    return {
      to: token.contract,
      // 交易data的内容是,调用合约的转移NFT的方法
      data: this.contract.methods
        .safeTransferFrom(this.address, to, token.token_id)
        .encodeABI()
    };
  }

 

五、跨链交易

标签:...,chain,raw,token,钱包,设计,中心化,法币,交易
From: https://www.cnblogs.com/johnchow/p/18077075

相关文章

  • ubuntu20.04 自动封禁恶意ip的代码与设计思路
    设计思路最近隐隐感觉服务器正在被攻击,查看下登陆失败记录,果然有几页失败记录,于是查了一晚上资料,写了份实操如下:防止服务器被暴力破解,给服务器添加脚本:每小时检查是否有登录失败的ip,如果有就封禁该ip代码首先通过以下命令,查看登陆失败超过4次的ip:sudolastb|awk'{prin......
  • 安全设计原则
    安全设计原则在软件开发和系统架构设计中,安全设计原则是一组指导方针,旨在帮助开发者和设计师构建更安全的系统。这些原则可以减少系统的脆弱性,提高对抗潜在威胁的能力。通过各种资料,尽可能多的搜集安全原则。给出所有你能找到的安全原则的名称,内容和来源信息(图书名称,网站链......
  • 试用AI做方案设计,通义灵码——一个博学但“健忘”的智能编码辅助工具
    最近,人工智能编程领域的创新成果层出不穷,让我这个程序员跃跃欲试。今天,我终于决定亲自体验一下阿里云研发的智能编码助手——通义灵码,在我的VisualStudioCode编辑器中成功安装了这款插件,并顺利开启了它的功能。当我打开插件对话框并输入相关的设计需求或代码问题时,只需一......
  • 大学生开题报告基于SSM考勤系统毕业设计源代码+论文
    一、项目技术后端语言:Java项目架构:B/S架构、MVC开发模式数据库:MySQL前端技术:JavaScript、HTML、CSS后端技术:SpringBoot、SSM二、运行环境JDK版本:1.8操作系统:Window、MacOS数据库:MySQL5.7主要开发工具:IDEATomcat:8.0Maven:3.6一、项目介绍学生考勤系统功能部......
  • 【前端素材】推荐优质电影票购票商城网站设计Ticket平台模板(附源码)
     一、需求分析1、功能分析在线电影票购票商城是指一个通过互联网提供电影票购买服务的平台。它通常包括以下功能:电影信息展示:商城会展示当前热映电影、即将上映电影和影片详情,包括电影名称、演员阵容、导演、剧情简介、上映时间等信息,帮助用户选择电影。影院选择和座位......
  • 【前端素材】推荐优质在线创意家居电商网站设计Umbra平台模板(附源码)
    一、需求分析1、功能分析在线家具装饰商城是指通过互联网平台提供家具和装饰产品购买服务的电子商务平台。以下是关于在线家具装饰商城的具体功能和特点的详细分析:产品展示和购买:在线家具装饰商城通过网站或应用程序展示各种家具和装饰产品的图片、描述、价格等信息,方便用......
  • LinkedList源码解析和设计思路
    一、继承体系LinkedList类位于java.util包中,它实现了List接口和Deque接口,LinkedList可以被当做链表、双端队列使用,并且继承自AbstractSequentialList类。在继承关系中,它的父类是AbstractSequentialList,而AbstractSequentialList又继承自AbstractList,AbstractList继承自Abs......
  • 毕业设计:基于计算机视觉的遛狗牵绳识别系统 目标检测
    目录前言课题背景和意义实现技术思路一、 算法理论基础1.1 卷积神经网络1.2 注意力机制二、 数据集2.1数据集2.2数据扩充三、实验及结果分析3.1 实验环境搭建3.2 模型训练最后前言  ......
  • 毕业设计:基于机器学习的工地员工安全着装识别系统 目标检测
    目录前言课题背景和意义实现技术思路一、算法理论基础1.1 Mobilenet算法1.2 人脸检测模型二、 数据集2.1数据集2.2数据扩充三、实验及结果分析3.1 实验环境搭建3.2 模型训练最后前言  ......
  • C语言程序设计——实验报告 1
    *实验项目名称:实验一熟悉C语言运行环境*实验项目类型:验证性*实验日期:2023年3月14日一、实验目的下载安装Devc6.0程序。了解在该系统上如何进行编辑、编译、连接和运行一个C程序。通过运行简单的C程序了解C程序的特点。二、实验硬、软件环境Windows计算机、Devc6.0三、......