作者:牛顿区块
区块连技术开发工程师,Avatar NFT自动化程序猿,Crypto投资者
如何合法查看加密货币交易?
加密货币崩了,但技术不死。
专栏朋友早前撰写了一篇关于Blockchain在农产品应用上的文章,今天笔者也来谈谈 Blockchain 在技术上的操作罢。
从拜登说起:Blockchain 至 Family office
2021年11月美国总统拜登签署的总统令提出了针对加密货币的最新税务匯报要求:对于crypto公司的用户之间的数字资产转移,他们必须提供一种透明的可audit的机制要求accountability和 auditable记录。这影响的金融产品包括:Crypto-native business、hedge funds、家族办公室等。
这样的合规要求在技术上需要研发一款blockchain explorer,实际上每一种加密货币钱包核心就是一款blockchain explorer,具备存储,转移加密货币和查询全歷史交易记录的功能。
Blockchain 是怎么一回事?
Blockchain的交易记录本质上是一个分布式账本,当然每一种blockchain的实现机制有所不同。本篇文章就以以太坊Ethereum为例,因为以太坊是基于账户的分布式账本,类似于传统银行,因此便于读者理解。实现全歷史交易记录的查询,主要有两种方式:利用第三方服务商数据,自建blockchain全节点(full-node)。
不能不谈钱:记忆体也需要第三方服务
首先我们需要知道为走甚么需要第三方服务商,主要是考虑自建全节点的成本。
从图中今日的最新数据中,运营一个全节点最少需要900GB的存储空间。Blockchain explorer需要从全节点中获取交易数据,处理并存储在本地数据库中。本地数据库是指技术成熟的关系型SQL数据库,可以方便高效的进行各种数据操作。
Infura是市场上的主要第三方服务商之一,他负责运维全节点。我们的应用程序向infura发出请求获取交易数据,主要流程见下图
Infura服务是免费的,通过记录单次取回数据的时间,我们计算出完整分布式账本的下载时间,很可惜消耗的时间无法满足要求。因此,我们转向自建节点架构。
时间是个梗:全节点架构
对于全节点的实现,我们需要一台强劲的服务器配备SSD储存(必须有900GB以上),或者云主机。通过安装Parity程序构建全节点,随后建立好防火墻有效保护节点。在全节点上同步所有区块后,我们进入应用平台架构,技术选型为Python Django整个应用服务封装在容器中(Dockor)。
重要的事问三次:数据建模及交易请求
首先需要思考如何在SQL数据库(Django)中组织数据,我们通过深入解构以太坊交易的数据结构。以太坊有两种交易,一种是非合约账户(smart contract)间的交易,另一种是合约账户参与交易。合约地址参与的交易Log中包含ERC20 token通证交易记录。
当加密货币钱包查询交易时,他需要发起三次请求:
(1)获取以太坊交易数据、(2)获取ERC20交易数据、(3)获取合约内部交易数据
因此要全面解析一次交易,我们需要查看这三种数据,来明白哪些数据或者状态发生改变。基于此,我们决定建立如下数据模型(Django models)
用关系型SQL数据库的另一个原因是:筛选查找歷史交易和交易记录呈现的格式接近于传统银行的交易记录,因此方便理解。
Python 编程来下载数据
我们通过编写python程序来下载以太坊账本数据
(1)获取区块和区块中所有交易
(2)将每个交易解析并存储在数据库中
(3)处理交易Log中的operations并在数据库中创建对象
(4)爬取下一个区块并重复2和3
程序代码不超过300行,完成了fetching、processing、storing 和 extracting operations等动作。下载完整的分佈式账本,并转换成传统的数据格式需要的存储空间是2.5TB,PostgreSQL依然能够应对自如。因此建议这台账本服务器的存储空间应该控制在10TB的量级上。
Blockchain 的未来展望
随着总统令的颁布,大型投资者,机构和社群都必须向合规和税务等政府部门报告,例如SEC,IRS和HMRC。Blockchain explorer这类软件服务将承担起加密货币合规和税务报告的技术桥樑,使监管机构能够以传统金融的技术手段监管加密世界。Blockchain 技术是否正在掀起第三次 accounting revolution,我们拭目以待。
|