Skip to content

Instantly share code, notes, and snippets.

@Hugo6991
Hugo6991 / 08 NFT
Created February 21, 2022 13:45
08 NFT
// NFT 代表的就是一個 moment,也就是一張卡片
// 它實作官方 NFT contract 裡的 INFT interface
// 以及 MetadataViews.Resolver interface
pub resource NFT: NonFungibleToken.INFT, MetadataViews.Resolver {
// 每一張卡片都有獨特的 ID 代表,
// 並且這也是實作 NonFungibleToken.INFT 必須要有的
pub let id: UInt64
pub let data: MomentData
@Hugo6991
Hugo6991 / 07 | TopShotMomentMetadataView
Created February 21, 2022 13:42
07 | TopShotMomentMetadataView
// TopShotMomentMetadataView 就如變數名字所意,
// 儲存所有 moment 相關的 metadata,
// 像是球員名字、球員生日、所屬球隊等等
pub struct TopShotMomentMetadataView {
pub let fullName: String?
pub let firstName: String?
pub let lastName: String?
pub let birthdate: String?
pub let birthplace: String?
@Hugo6991
Hugo6991 / 06 | MomentData
Created February 21, 2022 13:40
06 | MomentData
// Moment 也就是一張卡片,
pub struct MomentData {
// 是在哪個 set 裡
pub let setID: UInt32
// 是哪個 play
pub let playID: UInt32
// 序號是多少
@Hugo6991
Hugo6991 / 05 | Set
Created February 21, 2022 13:39
05 | Set
// Set 就是一個系列,裡面可以包含很多個精彩好球 play
pub struct SetData {
// 每個 Set 有一個獨特的 ID 表示
pub let setID: UInt32
// Set 名字,例如 "Cool Cats" 系列
pub let name: String
@Hugo6991
Hugo6991 / 04 | Play
Created February 21, 2022 13:37
04 | Play
// Play 就是一個精彩好球,比如說 LBJ 的 The block,
// 所有的卡片只會包含一個 play,
// 但同一個 play 可以被很多卡片或是系列包含
pub struct Play {
// 每個 play 會有一個獨特的 ID 表示
pub let playID: UInt32
// 每個 play 也會有相應的 metadata,
@Hugo6991
Hugo6991 / 03 | 合約變數 variables
Created February 21, 2022 13:36
03 | 合約變數 variables
// 目前正在進行的 series
pub var currentSeries: UInt32
// 紀錄 play 的資訊
// 是一個 play ID -> play 資訊的 mapping
access(self) var playDatas: {UInt32: Play}
// 紀錄 set 的資訊
// 是一個 set ID -> set 資訊的 mapping
access(self) var setDatas: {UInt32: SetData}
@Hugo6991
Hugo6991 / 02 | Event 宣告
Last active February 21, 2022 13:57
02 | Event 宣告 | pub event ContractInitialized
pub event ContractInitialized()
pub event PlayCreated(id: UInt32, metadata: {String:String})
pub event NewSeriesStarted(newCurrentSeries: UInt32)
pub event SetCreated(setID: UInt32, series: UInt32)
pub event PlayAddedToSet(setID: UInt32, playID: UInt32)
pub event PlayRetiredFromSet(setID: UInt32, playID: UInt32, numMoments: UInt32)
pub event SetLocked(setID: UInt32)
pub event MomentMinted(momentID: UInt64, playID: UInt32, setID: UInt32, serialNumber: UInt32)
@Hugo6991
Hugo6991 / 01 | 合約架構 Contract
Last active February 21, 2022 13:57
01 | 合約架構 Contract
pub contract TopShot: NonFungibleToken

Keybase proof

I hereby claim:

  • I am hugo6991 on github.
  • I am jamestsai (https://keybase.io/jamestsai) on keybase.
  • I have a public key ASC0IomXR4GrWlKk1_qg7gWhSCTK79uemGiehRq1BOxu_Ao

To claim this, I am signing this object:

Keybase proof

I hereby claim:

  • I am hugo6991 on github.
  • I am jamestsai (https://keybase.io/jamestsai) on keybase.
  • I have a public key ASC0IomXR4GrWlKk1_qg7gWhSCTK79uemGiehRq1BOxu_Ao

To claim this, I am signing this object: