Kā sadalīt spēli starp blokķēdi un serveri: paraksti, „ūdenszīme” un spraudņi
Kad mēs projektējām Blockchain Cuties, nebija no kā nokopēt. Tā laika blokķēdes spēles, piemēram, CryptoKitties, bija vienkāršas un pilnībā dzīvoja blokķēdē. Mēs gribējām daudz vairāk: priekšmetus, ko uzvilkt, piedzīvojumus, kuros doties. Uzreiz bija skaidrs, ka darīt to visu blokķēdē būtu pārāk dārgi un pārāk lēni — un izaugsmi tas neizturētu.

Slaids no mana referāta par izstrādi Ethereum, TRON, EOS un NEO: cik ilgi jāgaida, līdz transakciju vairs nevar atsaukt.
Tātad jautājums bija, kur griezt. Es sēdēju ar moduļiem uz papīra un vilku līnijas: paši cuties ir NFT blokķēdē; priekšmeti un piedzīvojumi dzīvo mūsu datubāzē. Tad sarežģītākā daļa — kā abas puses sarunāsies savā starpā?
Vienreizēji paraksti. Dažiem priekšmetiem bija jāmaina stāvoklis blokķēdē: piemēram, dzira nedaudz izmaina cutie genomu. Tāpēc serveris paraksta darbību, un kontrakts pārbauda parakstu, pirms to piemēro. Lai vienu parakstu nevarētu izmantot divreiz, katram ir unikāls ID. Mūsdienās tas ir standarta paņēmiens; 2018. gadā mēs to izdomājām paši.
„Ūdenszīme” augoša saraksta vietā. Naivais ceļš ir glabāt kontraktā katru izmantoto ID — un maksāt par šo krātuvi mūžīgi. Tā vietā serveris periodiski paziņoja kontraktam pašreizējo minimālo sign ID: viss, kas ir zem tā, tiek uzreiz noraidīts. Tas atrisināja divas problēmas reizē:
- kontrakta krātuve neauga ar katru darbību;
- priekšmeti vairs neiestrēga. Kad spēlētājs sāk lietot dziru, tā tiek iesaldēta mūsu datubāzē, līdz mēs ieraugām transakciju blokķēdes žurnālos. Ja spēlētājs pārdomā vai viņam nav naudas gas maksai, dzira paliktu iesaldēta uz visiem laikiem. Kad ūdenszīme pārvirzās pāri tās ID, mēs zinām, ka kontrakts šo parakstu nekad nepieņems, — tāpēc priekšmetu var droši atsaldēt.
Spraudņi jauninājumu vietā. Virs tā visa es uzbūvēju spraudņu sistēmu: nelielus kontraktus, kas pievienoti galvenajam un runā tajā pašā parakstu protokolā. Priekšmetu tirgus bija spraudnis; tāpat dažādās dziras; tāpat ikdienas balsojums, kurā spēlētāji nosūtīja niecīgu transakciju un nejauši izvēlēts balsotājs saņēma balvu. Jaunas funkcijas varēja nedaudz izmainīt cutie genomu vai parametrus, neaizskarot galveno kontraktu, — bez proxy, bez migrācijām.
Ko es teiktu komandai, kas šodien sāk Web3 produktu: liec blokķēdē tikai to, kas spēlētājam obligāti jāpieder, visu pārējo pierādi ar parakstiem un pārdomā, kā stāvoklis tiek atbrīvots, — ne tikai to, kā tas tiek bloķēts.