golang搭建公链NFT数据中台2-定时任务

本文介绍了如何在Go-admin框架中管理定时任务,用于NFT数据的增量拉取,包括NFT信息扫描记录表的设计,以及如何使用chainbaseAPI获取NFT基础数据和分页拉取详细数据的过程。
摘要由CSDN通过智能技术生成

前言

        go-admin 框架的定时任务使用起来非常顺手,仅需在app/jobs/examples.go中的InitJob方法中增加更多的任务结构体并实现Exec接口即可,由于我们定时任务预计会比较多,故迁移到task包中去实现,一个任务类型一个go文件,方便代码阅读。

别忘了在数据库sys_job表中增加你的任务记录,并修改状态为2(启用)

 NFT基础数据拉取任务

       上一节提到了一张表NFT信息扫描记录表nft_scan_record,重新回顾一下字段:

CREATE TABLE `nft_scan_record` (
  `id` varchar(32) NOT NULL COMMENT 'PK',
  `chain_id` varchar(50) NOT NULL COMMENT '链ID',
  `contract_address` varchar(100) NOT NULL COMMENT '合约地址',
  `query_limit` int(5) DEFAULT NULL COMMENT '查询大小',
  `max_page` int(5) DEFAULT NULL COMMENT '最大页码',
  `current_page` int(5) DEFAULT '1' COMMENT '当前页码',
  `status` int(1) DEFAULT NULL COMMENT '0待开始1进行中2已结束',
  PRIMARY KEY (`id`),
  UNIQUE KEY `contract_unq` (`chain_id`,`contract_address`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='NFT信息扫描记录';

        由于我们请求的第三方NFT列表数据的拉取不一定能一次新全部拉完,对于超过1万个NFT的合集更是存在更多不确定性,我们不能每次重新来,因此使用定时任务根据历史分页来增量拉取上最合适的,同时也能随时控制定时任务的节奏。

        经过多家NFT聚合数据平台接口的调研,我们决定使用chainbase 的API作为NFT数据来源。

 拉取项目(合约)基础数据

        拉取合约的基础数据,参考上一节表nft_project相关字段:

CREATE TABLE `nft_project` (
  `id` varchar(32) NOT NULL COMMENT 'PK',
  `chain_id` varchar(50) DEFAULT NULL COMMENT '链ID',
  `project_name` varchar(50) DEFAULT NULL COMMENT '项目名称',
  `contract_address` varchar(100) DEFAULT NULL COMMENT '合约地址',
  `nft_count` int(6) DEFAULT NULL COMMENT '藏品数',
  `nft_type` varchar(50) DEFAULT NULL COMMENT '协议类型(erc721,erc1155)',
  `img_url` varchar(255) DEFAULT NULL COMMENT '封面图',
  `ipfs_url` varchar(255) DEFAULT NULL COMMENT 'IPFS地址',
  `status` tinyint(1) DEFAULT NULL COMMENT '状态(0初始化1待拉取2拉取中3已拉取4拉取失败)',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(50) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `contract_addr_unq` (`contract_address`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='NFT项目';

        这里调用Get NFT collection metadata 的接口即可,一次可拿到基础数据。

分页拉取NFT详细数据

        由于每个NFT都有独立的IPFS文件、名称等数据,因此我们需要先快速扫完全部的NFT,幸运的是Get NFT collection items 为我们提供了分页查询接口。将查询的数据存入表project_nft_item即可:

CREATE TABLE `project_nft_item` (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'PK',
  `chain_id` varchar(50) NOT NULL COMMENT '链id',
  `project_id` varchar(32) NOT NULL COMMENT '项目ID',
  `nft_name` varchar(50) DEFAULT NULL COMMENT 'NFT名字',
  `contract_address` varchar(50) DEFAULT NULL COMMENT '合约地址',
  `card_nft_name` varchar(100) DEFAULT NULL COMMENT '艺术品名称',
  `art_type` tinyint(1) DEFAULT '1' COMMENT '艺术品类型',
  `token_id` varchar(10) NOT NULL COMMENT 'tokenId',
  `multifile_type` varchar(50) DEFAULT NULL COMMENT '文件格式video/mp4,3dmodel/glb,image',
  `ipfs_url` varchar(255) DEFAULT NULL COMMENT 'ipfs链接',
  `nft_img_url` varchar(255) DEFAULT NULL COMMENT '藏品oss地址',
  `create_time_stamp` bigint(13) DEFAULT NULL COMMENT '13位时间戳',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `description` text COMMENT '作品简介 一句话描述',
  `oss_url_compress` varchar(255) DEFAULT NULL COMMENT '作品卡图片地址-压缩图',
  `sub_picture` varchar(255) DEFAULT NULL COMMENT '视频主图',
  `multfile_compress` varchar(255) DEFAULT NULL COMMENT '视频压缩文件',
  `ipfs_address` varchar(255) DEFAULT NULL COMMENT 'ipfs源文件存储地址',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `version` int(11) DEFAULT '0' COMMENT '版本号',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `contract_token_unq` (`contract_address`,`token_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='NFT表';

注意:这里的IPFS文件尚未解析,因此NFT的图片我们无法获取到,下一节将讲解具体到扫描过程以及IPFS解析和图片下载过程。 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值