NFT+defi质押流动性挖矿系统开发技术方案(源码详解)

简介: NFT的全称是Non-Fungible Tokens,中文常翻译为“非同质化token/不可替代token”,即非同质化代。简单地说,NFT是区块链的一个条目。虽然比特币(BTC)、以太币(ETH)等主流加密资产也记录在中,但NFT和它们不同的地方在于:实际上每一个NFT的背后都会随机生成一串代码 ,这串代码唯一且永远不变,任何一枚NFT token都是不可替代且不可分割的。

NFT的全称是Non-Fungible Tokens,中文常翻译为“非同质化token/不可替代token”,即非同质化代。简单地说,NFT是区块链的一个条目。虽然比特币(BTC)、以太币(ETH)等主流加密资产也记录在中,但NFT和它们不同的地方在于:实际上每一个NFT的背后都会随机生成一串代码 ,这串代码唯一且永远不变,任何一枚NFT token都是不可替代且不可分割的。

NFT系统开发的上链可分为两种,即公链与联盟链。国外应用较多的为公链,这种情况的NFT系统通常是去中心化的,内部交易需要搭建钱包来完成,有以太、Polygon、heco链等主流公链。

初始化工作

Geth 的 main() 函数非常的简洁,通过 app.Run() 来启动程序

[./cmd/geth/main.go]func main() {if err := app.Run(os.Args); err != nil {fmt.Fprintln(os.Stderr, err)os.Exit(1)}}复制其简洁是得力于 Geth 使用了 http://gopkg.in/urfave/cli.v1 扩展包,该扩展包用于管理程序的启动,以及命令行解析,其中 app 是该扩展包的一个实例。

在 Go 语言中,在有 init() 函数的情况下,会默认先调用 init() 函数,然后再调用 main() 函数;Geth 几乎在 ./cmd/geth/main.go#init() 中完成了所有的初始化操作:设置程序的子命令集,设置程序入口函数等,下面看下 init() 函数片段:

[./cmd/geth/main.go]func init() {// Initialize the CLI app and start Gethapp.Action = gethapp.HideVersion = true // we have a command to print the versionapp.Copyright = "Copyright 2013-2018 The go-ethereum Authors"app.Commands = []cli.Command{// See chaincmd.go:initCommand,importCommand,exportCommand,importPreimagesCommand,...}...}复制在以上代码中,预设了 app 实例的值,其中 app.Action = geth 作为 app.Run() 调用的默认函数,而 app.Commands 保存了子命令实例,通过匹配命令行参数可以调用不同的函数(而不调用 app.Action),使用 Geth 不同的功能,如:开启带控制台的 Geth、使用 Geth 创造创世块等。

节点启动流程

无论是通过 geth() 函数还是其他的命令行参数启动节点,节点的启动流程大致都是相同的,这里以 geth() 为例:

[./cmd/geth/main.go]func geth(ctx *cli.Context) error {node := makeFullNode(ctx)startNode(ctx, node)node.Wait()return nil}复制其中 makeFullNode() 函数将返回一个节点实例,然后通过 startNode() 启动。在 Geth 中,每一个功能模块都被视为一个服务,每一个服务的正常运行驱动着 Geth 的各项功能;makeFullNode() 通过解析命令行参数,注册指定的服务。以下是 makeFullNode() 代码片段:

[./cmd/geth/config.go]func makeFullNode(ctx cli.Context) node.Node {stack, cfg := makeConfigNode(ctx)

utils.RegisterEthService(stack, &cfg.Eth)

if ctx.GlobalBool(utils.DashboardEnabledFlag.Name) {

utils.RegisterDashboardService(stack, &cfg.Dashboard, gitCommit)

}

...

// Add the Ethereum Stats daemon if requested.
if cfg.Ethstats.URL != "" {

utils.RegisterEthStatsService(stack, cfg.Ethstats.URL)

}
return stack

}复制然后通过 startNode() 启动各项服务并运行节点。以下是 Geth 启动流程图:

每个服务正常运行,相互协作,构成了 Geth:

0x03 网络架构通过 main() 函数的调用,最终启动了 p2p 网络,这一小节对网络架构做详细的分析。

三层架构以太坊是去中心化的数字货币系统,天然适用 p2p 通信架构,并且在其上还支持了多种协议。在以太坊中,p2p 作为通信链路,用于负载上层协议的传输,可以将其分为三层结构:

最上层是以太坊中各个协议的具体实现,如 eth 协议、les 协议。第二层是以太坊中的 p2p 通信链路层,主要负责启动监听、处理新加入连接或维护连接,为上层协议提供了信道。最下面的一层,是由 Go 语言所提供的网络 IO 层,也就是对 TCP/IP 中的网络层及以下的封装。p2p 通信链路层从最下层开始逐步分析,第三层是由 Go 语言所封装的网络 IO 层,这里就跳过了,直接分析 p2p 通信链路层。p2p 通信链路层主要做了三项工作:

由上层协议的数据交付给 p2p 层后,首先通过 RLP 编码。RLP 编码后的数据将由共享密钥进行加密,保证通信过程中数据的安全。最后,将数据流转换为 RLPXFrameRW 帧,便于数据的加密传输和解析。

相关文章
|
SQL 安全 数据挖掘
Acunetix 12-Web漏洞扫描初体验
Acunetix 12-Web漏洞扫描初体验
Acunetix 12-Web漏洞扫描初体验
|
XML Java Android开发
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
585 0
|
2月前
|
机器学习/深度学习 缓存 监控
139_剪枝优化:稀疏模型压缩 - 分析结构化剪枝的独特速度提升与LLM部署加速实践
随着大语言模型(LLM)规模的不断增长,模型参数量已从最初的数亿扩展到数千亿甚至万亿级别。这种规模的模型在推理过程中面临着巨大的计算和内存挑战,即使在最先进的硬件上也难以高效部署。剪枝优化作为一种有效的模型压缩技术,通过移除冗余或不重要的参数,在保持模型性能的同时显著减少计算资源需求。
|
4月前
|
SQL 数据可视化 JavaScript
嵌套式事项整合工具深度解析:任务、子任务、执行流的统一调度机制
在项目执行中,任务虽已完成,但常因缺乏结构化管理导致进度混乱、协作低效。嵌套式事项整合工具通过多级拆分、状态聚合与逻辑联结,帮助团队构建清晰的任务结构,提升执行效率与协同能力。
嵌套式事项整合工具深度解析:任务、子任务、执行流的统一调度机制
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
883 4
|
关系型数据库 PostgreSQL Docker
|
缓存 分布式计算 Hadoop
HBase在高并发场景下的性能分析
HBase在高并发场景下的性能受到多方面因素的影响,包括数据模型设计、集群配置、读写策略及性能调优等。合理的设计和配置可以显著提高HBase在高并发环境下的性能。不过,需要注意的是,由于项目和业务需求的不同,性能优化并没有一劳永逸的解决方案,需要根据实际情况进行针对性的调整和优化。
430 8
|
数据采集 网络安全 UED
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
本文探讨了如何使用Lua的lua-resty-request库和爬虫代理IP技术从豆瓣网站高效获取图片链接。通过定制请求头部和代理服务,可以应对反爬虫机制,提高爬虫的稳定性和匿名性。示例代码展示了一种方法,但实际应用需考虑版权和法律法规。
368 2
揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接
|
前端开发
基于jeecgboot的支持online表单审批的功能正式发布
基于jeecgboot的支持online表单审批的功能正式发布
296 0