PG Channels — 鏈下技術如何應用於 Pig World

前言

虛擬貨幣近年來隨著使用者越來越多,交易量、使用率也越來越大、高,漸漸引發出各個區塊鏈「等待」的問題,因此研究員們紛紛提出各種可以應付這些問題的方法,其中主要幾種的解決方式:

  1. 改變區塊容量大小(擴容)
  2. 改變區塊儲存方式(分片)
  3. 將原本區塊鏈要處理的事項拆開,請其他人處理,必要時再丟回區塊鏈驗證(通道、Plasma、閃電網路)

這些所謂的“方法”五花八門,也產生出很多的事件。例如:比特幣現金(BCH)的出現,就是因為比特幣(BTC)的擴容事件所引發的。


通道(State Channels)

其中通道技術的發明是為了加快幣的交易確認速度,透過把交易挪到檯面下,等到最後要結算時再丟回區塊鏈驗證,實作方法因情況不同而有些差異,但以 Ethereum 實作的話主要方法如下:

情況:小明與小白短期內會有高頻交易的情況出現,
前置作業:已經有部署一個通道的智能合約可以開啟,關閉,驗證,挑戰 通道
1. 開啟一個通道(鏈上)

兩人各自轉 5 ETH進入這個合約,這時通道開啟,裡面鎖住總共 10 ETH
2. 彼此之間透過通道快速交易(鏈下)
  「開始」:小明先傳給小白 1 ETH,雙方餘額為(4,6),小明私鑰簽(4,6)
「中途」:小白傳給小明 1 ETH,雙方餘額為(5,5),小白私鑰簽(5,5)
「結尾」:小白傳給小明 1 ETH,雙方餘額為(6,4),小白私鑰簽(6,4)
   這些過程都不用等待區塊鏈驗證,只需要使用私鑰加簽後,收件方自行驗證其結果。
實作方式可能透過APP、網站來進行。
3. 某方認為已經結束了,可以把最後的結果丟回區塊鏈(鏈上)
    小白認為他跟小白不會在使用通道了,就把「結尾」上傳至通道的智能合約,合約會驗證「結尾」是否為正確的,並等待一段時間。如果時間順利通過沒有人挑戰,將依照最後的「結尾」返還幣給小明與小白。
4. 如果某一邊認為結果有誤,可以進行挑戰(鏈上)
   假設白目的小白,只傳送「中途」那筆記錄給智能合約,想要隱瞞「結尾」那個交易。
這時小明要趕緊再挑戰期間內,把「結尾」上傳至智能合約來導正。

這只是一個模型,實務上萬一小明把最後一筆交易弄丟了,那怎麼辦?


Pig World 的 PG Channels

透過瞭解 State Channels 技術,Pig World 改良出 PG Channels 技術。使得玩家可以立即得到遊戲結果,不需等待區塊鏈驗證,而 PG Channels 也有挑戰窗口,如果玩家發現結果不對,可以挑戰,挑戰成功 Pig World 罰三倍

以下說明 PG Channels 如何產生,並且如何拿到博弈的 Seed:

1. 莊家產生「亂數(莊)」,並將「亂數(莊)」進行雜湊,公佈「亂數 Hash (莊)」
2. 玩家產生「亂數(玩)」,並將「亂數(玩)」進行雜湊,公佈「亂數 Hash (玩)」
3. 玩家公布:賭注
4. 雜湊:「亂數 Hash (莊)」、「亂數 Hash (玩)」、賭注,得到與公布「Hash(全)」
5. 莊家使用私鑰簽章:「Hash(全)」,並公布
6. 玩家使用私鑰簽章:「Hash(全)」、「亂數(玩)」,並公布
7. 莊家公布「亂數(莊)」
8. 將所有亂數加總並 Hash 後,成為開獎依據的 Seed

*由於莊家在一開始不能得到「亂數(玩)」,再加上「Hash(全)」產生於固定的順序,因此亂數結果是隨機的,除非玩家事先透露「亂數(玩)」給 Pig World。


實作

目前 PG Channels 已經順利運行於 Pig World 的遊戲中,而且 Pig World 跟其他虛擬貨幣博弈網站最大的不同點是,我們會把所有記錄上傳至區塊鏈上,達到沒有任何人能作弊。

但如果每一場遊戲的結果,上傳智能合約後都需要再驗證一次,那會耗費掉不少 Gas,因此我們實務上將記錄的上傳分成兩段。

  1. 記錄上傳:直接依照 Pig World 給的遊戲結果來分配PICO。
  2. 挑戰:如果覺得 Pig World 上傳結果有誤,玩家可以挑戰,挑戰成功 Pig World 罰三倍

挑戰時,我們就會將該遊戲所有用到 PG Channels 的步驟再走一遍。
請參考 Github 內的遊戲合約。


結論

目前因為信任問題,僅適用一位玩家。Pig World 將於未來推出 PG Channels 2、PG Plasma,讓 Pig World 的遊戲可以多人一起進行遊玩。


發想

PG Channels 多人的困境,是一個很簡單的邏輯問題,但不好解答:

假設我有五位玩家,一起建立 PG 通道,萬一有人不公布他的亂數那怎麼辦?

電報群:https://t.me/pigworldcasino

Github:https://github.com/pigworld

粉絲專頁:https://www.facebook.com/PigWorldCasino/