头图

本文主要讲述区块链充提/归集的实现原理

准备

要实现这些功能首先得摸清楚我们需要完成些什么东西

  1. 获取最新区块
  2. 获取区块内部的交易记录
  3. 通过交易哈希获取交易的完成状态
  4. 获取某个地址的数量
  5. 创建一个地址
  6. 签名并发送luo交易
  7. 定义接口如下

    type Worker interface {
     getNowBlockNum() (uint64, error)
     getTransaction(uint64) ([]types.Transaction, uint64, error)
     getTransactionReceipt(*types.Transaction) error
     getBalance(address string) (*big.Int, error)
     createWallet() (*types.Wallet, error)
     sendTransaction(string, string, *big.Int) (string, error)
    }

    实现

    创建一个地址后把地址和私钥保存下来

    通过一个无限循环的服务不停的去获取最新块的交易数据,并且把交易数据都一一验证是否完成
    ,这里判断数据的接收地址(to)是否属于本服务创建的钱包地址,如果是本服务的创建过的地址则判断为充值成功,(这时逻辑服务里面需要做交易哈希做幂等)

    用户发起一笔提出操作,用户发起提出时通过服务配置的私钥来打包并签名luo交易。(私钥转到用户输入的提出地址),这里把提交的luo交易的哈希记录到服务
    通过一个无限循环的服务不停的去获取最新块的交易数据,并且把交易数据都一一验证是否完成
    ,这里判断交易数据的哈希是否存在于服务,如果存在则处理(这时逻辑服务里面需要做交易哈希做幂等)

    归集

    通过定期循环服务创建的地址去转到服务配置的归集地址里面,这里需要注意归集数量的限制,当满足固定的数量时才去归集(减少gas费)

一个简单的示例

github地址: golang 实现区块链的充提/归集服务


lmxdawn
1.4k 声望84 粉丝

你今生有没有坚定不移地相信过一件事或一个人?是那种至死不渝的相信?