序
本文次要讲述区块链充提 / 归集的实现原理
筹备
要实现这些性能首先得摸清楚咱们须要实现些什么货色
- 获取最新区块
- 获取区块外部的交易记录
- 通过交易哈希获取交易的实现状态
- 获取某个地址的数量
- 创立一个地址
- 签名并发送 luo 交易
-
定义接口如下
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 实现区块链的充提 / 归集服务