序
本文主要讲述区块链充提/归集的实现原理
准备
要实现这些功能首先得摸清楚我们需要完成些什么东西
- 获取最新区块
- 获取区块内部的交易记录
- 通过交易哈希获取交易的完成状态
- 获取某个地址的数量
- 创建一个地址
- 签名并发送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 实现区块链的充提/归集服务
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。