區塊鏈養蝦遊戲和數學之美

Ping Chen
Taipei Ethereum Meetup
7 min readJun 12, 2018

Ether Shrimp Farm 是一款以太坊智慧合約的放置遊戲(idle game),遊戲中,每個人擁有一個虛擬養蝦場,蝦子會定時產卵,玩家可以選擇將蝦卵孵化成更多的蝦子,也可以賣掉,換取一些以太幣獎勵。

乍看之下,這真是一款無聊的遊戲,畢竟一般的 idle game 至少都會有一些升級或科技選項可以投資,而 Ether Shrimp Farm 的核心循環就只有單調的等蝦子生蛋,然後孵蛋,完全就是毫無誠意的糞Game。但,它唯一做對了一件事就是開放買賣,讓玩家覺得有獲利的可能,養蝦子不必能幹麻,好像可以賺到錢,就足夠吸引大家玩它了。

不過呢,這個真正厲害的地方,是藏在陽春前端介面底下的,一個貨真價實的區塊鏈遊戲啊!點開它的合約原始碼,一看驚為天人,這是多麼精美的數學模型,良好的解決了訂價和流動性的問題。

這是 Ether Shrimp Farm 的智慧合約原始碼

大致上是一些關於遊戲的資料,每個玩家有幾隻蝦子、幾顆蛋,還有一些操作的邏輯定義:生蛋、孵蛋、買蛋、賣蛋。其中,最厲害的就在買賣蛋的部分了,它和常見的遊戲交易不一樣,並不用自己找到買/賣家做生意,而是直接和"系統"交易。也就是說,蛋和幣都存在系統了,買賣是人機互動,按下去就能看到結果,大幅省去了搓合交易的時間成本。

數學模型的部分

為了實現這個功能,我們需要一個自動決定蛋的售價的機制。
在合約的第 58 行,作者給了一條公式:

calculateTrade(rt,rs,bs) =

(PSN*bs)/(PSNH+((PSN*rs+PSNH*rt)/rt))

其中,PSN = 10000,PSNH = 5000。

先不論 10000 和 5000 這兩個魔法數字怎麼來的,根據前後幾個 function 用到這條公式的方法,它似乎是一個在給定系統中蛋和以太的存量的情況下,會自動去決定買賣蛋的報價。

為了研究它的性質,我把公式丟進繪圖工具裡,然後發現 PSN 和 PSNH 似乎只是為了讓整數乘除誤差不要太大,才加上去的係數,實際上只要是 2:1 的關係就可以了,於是稍微簡化了一下,得到了以下的圖。

簡單來說呢,rs 和 bs 分別是兩種資源本來的數量,而 rt 是你即將要注入資源的量,回傳值則是系統應當回饋給你的另一種資源的量。以賣蛋為例,本來的大水池裡有 rs 個蛋和 bs 個以太幣,當你把 rt 個蛋賣進來,系統要獎勵你的以太幣數量就是 calculateTrade(rt,rs,bs)。

這裡可以看到,它是一個開口向下(斜率遞減)的函數,所以我們大致可以想像,如果有人大量賣蝦的話會越賣越便宜;反過來說,大量買蝦則會越買越貴,聽起來似乎滿合理的。

再進一步分析,可以發現這條公式還有一些好的性質(good properties),以下用另張圖來解釋。

我們可以找到很多開口向下的函數,為什麼這個這麼特別呢?是因為它實際上是在找出一個值,符合這個特性:

( X + ΔX ) * ( Y - ΔY ) = X * Y

換句話說,不論買或賣、交易量多少,我們要讓交易前的以太幣跟蛋的數量的乘積,等於交易後的以太幣跟蛋的數量的乘積,如圖上的黃線所示。而合約裡的 calculateTrade,就是在給定 X , ΔX , Y 的情況下求出正確的 ΔY,來符合上面的這個屬性囉。

從遊戲的角度看,在交易量小的時候(ΔX很小的部分),斜率變化不大,一般玩家在同個時間的買賣體驗大致是線性的,但系統仍能對市場變化保持彈性,不至於被領完,玩家永遠可以被價格引導去買或賣幣。

此外,這條曲線上的移動符合交換率,也就是說,儘管斜率會變動,玩家一次賣一萬顆蛋,和我先賣七千顆再賣三千顆,(不計手續費)得到的報酬是一樣的,玩家可以專注在行情,自在的決定出貨時機,而不用頻繁操作來優化績效,這對提升遊戲性和降低手續費很有幫助。

遊戲的可持續性

有件不難想到的事,就算有精美的數學模型,很明顯的是,基於蝦子可以不斷產卵,蝦的數量本身又遞增,市場上的蛋長期來說只會變多。根據上面的公式,當蛋增加了 n 倍,池子裡的以太幣就會變成 1/(1+n)。最後,當幣被榨乾得差不多的時候,一點點的幣就能買到超多的蛋,可是也沒人會買了,因為顯然無利可圖。

對此,Ether Shrimp Farm 在實做上有做了若干改善,第一當然是用價格引導使用者行為,第二是它在玩家每次孵化蝦子,也就是 call hatchEggs() 的時候,會把 1/10 孵化的卵加入池子裡(見程式碼第 36 行),這就讓本來的 X*Y 等於定值的副作用降低,讓整體經濟規模可以隨著玩家量而增加上去,暫時讓賣蛋的收益變少,換來更長的生命週期。

更猛的是,它連潛在的價值都用上了。
這年頭免洗遊戲都靠什麼賺錢呢?沒錯,就是廣告。

只要遊戲一直有人玩,流量本身就是有價值的,而兌現價值最快的方法就是賣廣告。但這遊戲的作者想得很周到,首先,廣告本身也是透過智慧合約實現的,非常去中心化;再來,他並不直接把廣告收益收進口袋,而是導入養蝦合約的以太幣水池,讓這個遊戲變得更永續,或者說有利可圖。

Ether Shrimp Farm 採取的策略是養出流量,再從每筆交易中抽手續費。這樣的營運思維是過去的遊戲中少見的,通常在商城買東西就是開發者的收入,跟玩家交易則單純是遊戲內互動,但透過區塊鏈,這種開發者和使用者利益一致,願意一起做大的模型似乎能夠被實現。

區塊鏈遊戲的優勢和侷限

這遊戲從開張到爆紅到沒落,其實也已經一個月過去了,它在高峰時曾有接近 30 eth 的 account balance,現在只剩下 0.2,該獲利出場的都已經出場。我個人花了 0.01 eth,最後只回收<0.005 eth,剩下的反正就是被誰給賺走了。但我還是滿喜歡這個 project 的,因為它很好的發揮了區塊鏈的優勢:自帶金流、高跨程式互動性,也很努力降低區塊鏈的劣勢:高延遲、單次操作成本高,稱得上是一個很好的典範。

真要說 Ether Shrimp Farm 不足的地方,那大概是遊戲豐富度太低吧,但這並不是區塊鏈的原罪,單純只是沒有做而已。如果它除了養蝦,還能用產出的資源做別的事,比方說研發新品種:溪蝦、龍蝦、宇宙蝦(?),或者是有開蝦餅店和蝦味拉麵店的經營模組,那肯定又是不同的光景了。

五之神濃出汁蝦湯麵

https://fb.me/artistichorn

BTC:
1HUHtZ2mTLZgJai35msRfj6jupULP2kc6N
ETH:
pingchen.eth
Musicoin:
0x6746b0b11f2c723ae85a016744481b00cb13a007

--

--