美文网首页数字藏品开发
同步合约数据到数据库经典案例1

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

作者: 区块链董叔 | 来源:发表于2023-04-06 17:23 被阅读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表数据结构

    相关文章

      网友评论

        本文标题:同步合约数据到数据库经典案例1

        本文链接:https://www.haomeiwen.com/subject/jxuuddtx.html