NFT+defi質押流動性挖礦系統開發技術分析(邏輯方案部署)

v_ch3nguang發表於2023-09-11

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 使用了   擴充套件包,該擴充套件包用於管理程式的啟動,以及命令列解析,其中 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 幀,便於資料的加密傳輸和解析。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028290/viewspace-2982282/,如需轉載,請註明出處,否則將追究法律責任。

相關文章