[大撒幣]第一次玩智慧合約就上手

Ping Chen
Taipei Ethereum Meetup
7 min readAug 20, 2017

文末有免費送幣的活動喔

前陣子在 Taipei Ethereum Meetup 的時候和人聊到智慧合約遊戲,被問何不先寫個簡單的猜數字小遊戲當範例,覺得頗有道理,就用了一點時間把它寫出來。除了可以給大家玩,也順便做了個互動式的加幣貨幣錢包教學。

當我們想和區塊鏈互動的時候,首先會需要一個「錢包」,雖然大家常稱呼它為錢包,性質上其實更像是簽帳卡,而且這個簽帳卡不用等銀行核發給你(但同時也就沒有銀行擔保,如果弄丟錢包檔案就永久失去裡面的錢了),只要在路上隨便撿一張來用就好,反正世上總共有 2 的 256 次方個地址,隨便取一組地址也不太可能撞名。而所謂產生錢包,就是用隨機的數字生成私鑰和收款地址的過程。

通常區塊鏈的節點主程式都會附有產生錢包的功能,但對一般使用者而言下載節點有點太麻煩,所以在金額不大的情況下,也可以考慮使用線上提供的錢包服務,以下會用 MyEtherWallet 做示範。申請錢包的部分,可以參考 區塊客的 這篇 文章,大家要記得把錢包檔案備份、密碼記牢,不見了沒有地方能掛失補發。

再來進到合約的部分,這次寫的是一個藉由猜數字來獲得報酬的遊戲,沒錯,就是最常見的那種 1A2B 遊戲,每猜對一次就可以獲得一枚「猜數字幣」,並且有實做 ERC20 的以太坊代幣介面,你可以拿努力累積的幣去和人交換些東西... 如果有人願意收的話。

考量到手續費消耗的問題,這份合約沒有部署在 Ethereum 主鏈上,而是用幣值相對便宜許多的 Musicoin。合約的 原始碼 其實不長,有興趣的人不妨看看,就會發現這遊戲其實有作弊的空間,因為過程產生的隨機數是基於區塊鏈上的資料,所以可以從節點撈出來直接推算出答案。但反正這只是個娛樂性的示範專案,就別在意那麼多啦。

連到 MyEtherWallet 之後,首先將節點從 Ethereum 切換到 Musicoin,並選擇主畫面上方的「合約」標籤。

MyEtherWallet 這次改版似乎把 Musicoin 從清單中移除,但節點並未下架,大家可以下載 前個版本 的網頁來使用,或者在新版中手動新增節點:
https://mewapi.musicoin.tw

想要和某個合約互動時,會需要知道兩樣東西:
1合約部署的地址(它在哪)
2和合約互動的介面(怎麼用)

合約的地址和介面在這: https://goo.gl/RV5YmH
把相應的東西填進去之後按存取合約就可以開始玩了

這裡要補充一個觀念:和合約的互動分成兩種,一種是單純的讀取區塊鏈上的資料,不用付手續費;另一種是需要寫或改區塊鏈上的資料,就得發出一筆正式的 transaction,需要付手續費。

以這份合約為例,你只要知道地址和介面就可以讀到一些公開的資料,比方說合約的名字、某人持有的幣量、代幣的總供給量之類的,至於要玩遊戲跟領賞的時候,就會需要付手續費來改動儲存空間的狀態。

遊戲主要分三階段:
開始新局遊戲 → 努力猜數字 → 上傳答案得到獎勵幣

首先載入之前弄好的錢包

選擇 start 這個指令並寫入區塊鏈

這邊的 Gas 總量基本上是你期望的手續費上限,可以設大一點沒關係,用剩下的會退還給你,但如果設定太小不但發的指令會失敗,用掉的手續費也不會退還,要特別注意。

交易送出後通常需要 15~120 秒的時間讓礦工幫你把資訊更新上區塊鏈。可以透過下方跳出的連結到區塊鏈瀏覽器,通常剛進去會是沒有詳細資訊的空蕩蕩畫面,等礦工打包完後再重整就會有資料了。

等 start 確實被打包之後,就可以用 guess 的功能來猜數字了。
因為猜數字本身不涉及資料改動,所以也沒有手續費,可以盡量試沒關係。
在第一格填入錢包地址,第二格填要猜的數字,就會得到幾A幾B的提示。

最後,當你終於找到 4A 的正確數字的時候,就可以用 submit 這個指令去領取一個猜數字幣當獎賞,然後再用 start 開始新的一回合。

此外,你也可以透過 balanceOf 查某個地址現在有幾個幣,或者用 transfer 轉給別人你手上的猜數字幣。用起來就跟 Ethereum 的轉帳差不多,只是手續費可能會稍微高一點點。

這裡也可以看到為什麼要把合約發布在音樂幣的原因,畢竟手續費要消耗的 gas 不會差太多(因為現在幾乎是系統預設),但幣價卻差很遠。依目前來說,一筆 Ethereum 的轉帳手續費大概要 15 台幣上下,Musicoin 的轉帳卻只要 0.005 台幣,實在很適合做為練習和娛樂性用途呢。

感謝 GPU Mining 顯示卡挖礦 贊助 4000 音樂幣供本次活動使用。

最後,考量到大家可能手上沒有音樂幣可以玩,並且也鼓勵各位養成使用本地錢包的好習慣,現在只要到 MyEtherWallet 弄一個自己的本地錢包就可以從這邊領到一些免費的音樂幣。

會想要辦這個活動主要是因為使用者很多都太依賴交易所的錢包,目前甚至有九成的 Musicoin 都在 Bittrex 的單一個熱錢包中,形成很高的風險,畢竟交易所如果跑路你的錢一毛都拿不回來。各位都是成熟的大人(?)了,要學著自己管自己的錢包才行。

免費音樂幣預計會在以下幾個地方發放:
Taipei Ethereum Meetup 社團
GPU Mining 社團
PTT DigiCurrency
估計一個人會發 5~10 個 Musicoin,視參與人數和心情而定,反正這已經夠玩猜數字好幾十萬次了。請大家備妥本地錢包後把地址貼到相關貼文的留言區,之後會用智慧合約發錢給大家,之前已經實驗證明

交易所錢包收不到來自智慧合約的轉帳

理由在過去的文章中有提及,所以也請大家不用心存僥倖,反正我發了你也拿不到,想領的話就好好辦個自己的錢包再來吧,還可以順便玩遊戲呢。

最後的最後,為了提供一點樂趣,我有另外準備 2000 個音樂幣送給蒐集最多猜數字幣的人,包括自己挖的或跟別人討/買來的也可以。時限就先分別訂在:8/23 發給大家錢、8/31 結算獎勵,還請大家踴躍參加。

*用剩的音樂幣可以拿去交易所換掉或送回來給我:)

https://fb.me/artistichorn

BTC:
1HUHtZ2mTLZgJai35msRfj6jupULP2kc6N
ETH:
0xc1F9BB72216E5ecDc97e248F65E14df1fE46600a
Musicoin:
0x6746b0b11f2c723ae85a016744481b00cb13a007

--

--