乐趣区

关于区块链开发:区块链充提归集的实现原理

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

筹备

要实现这些性能首先得摸清楚咱们须要实现些什么货色

  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 实现区块链的充提 / 归集服务

退出移动版