NBA Top Shot 主合約 Cadence 解析

Harry Chang
flow_tw
Published in
4 min readFeb 27, 2022

大家好,我是 FLOW 台灣技術大使 Harry,眾所周知 FLOW 上面最成功的 NFT 就是 NBA Top Shot 球員卡,所以今天想要為大家帶來 NBA Top Shot 的主合約解析,希望可以讓大家更了解這個成功的 NFT 背後合約的技術細節。

接下來我會以三個大方向切入

  1. 合約架構
  2. 資料結構
  3. 常見互動

以下內容假設讀者對 FLOW 的合約語法至少有初步的認識,如果是完全不了解的人,建議先前往官方文件瀏覽一下。

合約架構

首先宣告合約名字為 TopShot 並且繼承官方的 NonFungibleToken 合約,Flow 跟 ETH 不一樣,原生就有推出 NFT standard 讓開發者可以直接使用

接下來則是各種 events 的宣告

再來是各種合約內部的 variables

各種 data structures 紀錄球員卡資訊

各種 methods 提供互動介面

跟最後的 constructor 初始化上面提到的內部 variables

資料結構

以下我會交叉使用一些同義詞:
卡片等義 moment
系列等義 set
收藏等義 collection
世代等義 series

相信有買過 NBA Top Shot 的朋友都知道,每張卡片有幾個重點:

  1. 這張卡代表的是哪個 play?
  2. 這張卡片是出自哪個 set?
  3. 這張卡片的 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 時該怎麼做。

--

--