NBA Top Shot 主合約 Cadence 解析
大家好,我是 FLOW 台灣技術大使 Harry,眾所周知 FLOW 上面最成功的 NFT 就是 NBA Top Shot 球員卡,所以今天想要為大家帶來 NBA Top Shot 的主合約解析,希望可以讓大家更了解這個成功的 NFT 背後合約的技術細節。
接下來我會以三個大方向切入
- 合約架構
- 資料結構
- 常見互動
以下內容假設讀者對 FLOW 的合約語法至少有初步的認識,如果是完全不了解的人,建議先前往官方文件瀏覽一下。
合約架構
首先宣告合約名字為 TopShot 並且繼承官方的 NonFungibleToken 合約,Flow 跟 ETH 不一樣,原生就有推出 NFT standard 讓開發者可以直接使用
接下來則是各種 events 的宣告
再來是各種合約內部的 variables
各種 data structures 紀錄球員卡資訊
各種 methods 提供互動介面
跟最後的 constructor 初始化上面提到的內部 variables
資料結構
以下我會交叉使用一些同義詞:
卡片等義 moment
系列等義 set
收藏等義 collection
世代等義 series
相信有買過 NBA Top Shot 的朋友都知道,每張卡片有幾個重點:
- 這張卡代表的是哪個 play?
- 這張卡片是出自哪個 set?
- 這張卡片的 serial number 是多少?
所以在 contract 裡分別有不同的 data structures 儲存這些資料
Play
Set
MomentData
TopShotMomentMetadataView
NFT
Collection
Set
Admin
各種可互動的 methods
基本上都非常直觀,就是存取以上解析過的 data structures,這裡就不一一贅述。
init()
常見互動
首次建立卡片收藏:
FLOW 上面的 NFT 首次購買前一定都要先做這個動作,因為有別於 Ethereum 存一個 centeralized mapping 在 ERC721 合約裡,FLOW 是真的把你的 NFT 存在你的 account storage 裡面,所以必須要先建立一個 collection 用來接收卡片 NFT 在你的帳戶裡面
管理者新增一個 play:
這裡主要就是讓大家看看 NBA Top Shot 官方要新增一個 play 時該怎麼做。
以上就是針對 NBA Top Shot 主合約的架構以及各個 data structure 及 methods 的解析,希望各位讀者都可以輕鬆理解,畢竟這個合約本身其實沒有什麼太複雜的地方,主要還是在於 FLOW 本身的語法以及 asset ownership model 跟 Ethereum 有很大的差別。
最後,若有任何問題或建議,歡迎留言,謝謝~
References: