数字藏品开发

同步合约数据到数据库经典案例1

2023-04-06  本文已影响0人  区块链董叔

之前在《数字藏品发行平台的架构》里讲过,有一种架构希望以区块链的数据为核心。这样就需要将合约保存在区块链上的数据同步到数据库里,方便后续中间件接口的开发。

本次我们以同步ConfirmSale事件日志为例,介绍数据同步程序开发的相关知识点。

一、先上全部代码

二、相关知识点介绍

1. event logs

在Solidity代码中,使用event关键字来定义一个事件,如:event EventName(address bidder, uint amount);

这个用法和定义函数式一样的,并且事件在合约中同样可以被继承。触发一个事件使用emit(说明,之前的版本里并不需要使用emit),如:emit EventName(msg.sender, msg.value);

触发事件可以在任何函数中调用,如:

在我们的实例程序中,数字藏品交易合约定义了5种event log,分别是:商品上架、更新商品信息、取消上架、订单确认和拍卖出价。

我们需要将这5种事件从区块链同步下来,存入activity表中,作为基础数据,方便我们进行数据处理。

同时我们将event ConfirmSale单独拿出来,因为该事件数据作可以存入order为订单表,表示交易完成。

2. 使用环境变量

dotenv是一个零依赖的模块,它将环境变量从.env文件加载到process.env中。这使得我们可以隐藏数据库密码细节到.env文件,同时通过git进行代码版本管理。

3. 使用mysql数据库

此处我们将query包装在DbQuery方法的Promise中,目的是为了在程序中同步运行并等待。防止程序停止后,数据来不及存入数据库丢失。

4. 代码整体架构

使用异步方式方便使用wait语法

5. 使用hardhat同步数据

此处mysql语法使用“on duplicate key update”,为防止重复录入数据库。

6.附加order表数据结构

上一篇下一篇

猜你喜欢

热点阅读