Skip to main content

Railgun & Railway - 一個 Vitalik 也用來作交易的隠私協議及錢包

· 7 min read
Jimmy Chu
Site Author

Why - 為什麼?

今天為大家介紹一個連 Vitalik 也用來作交易的隱私協議及錢包。如果你擁有巨額的加密幣或代幣。而想把它們隱藏起來,讓人在區塊鏈瀏覽器查找不了,這是一個理想的工具。如果你在 defi 平台作代幣兌換 (swapping),在作大額兌換時,可能都會特別小心。因為有不少 validators 也都在窺視着這方面的訊息,在組成區塊交易順序時,在你的大額交易前插入自己的買入交易,然後當你的大額交易完成後,再作一條賣出交易。這樣就可以進行套利。或者,當你的錢包地址具有一定名氣後 (vitalik.eth 便是一例),會有人在監視着這錢包地址的一舉一動,那這帳戶在 defi 平台上作上一定額度的交易時,都會被視為市場訊號給仔細分析。

這時 Railgun 協議及其前端 Railway 錢包,可以幫助用戶提高隱私性。

What - 是什麼?

不知大家有没有玩過 StarCraft II,人類種族有一支 ghost 的部隊,他們有 cloaking 的技能可把自身隱藏起來作潛入或突破。Railgun 協議有些類似 cloaking 功能,可把用戶的代幣隱藏起來,在 railgun 協議內這叫作 shielding,直到那錢包主人把代幣 unshield 公開回來。

以下這圖可很好描述 Railgun 協議是如何運作的。

Railgun workflow

  1. 代幣在你最原本的公開地址之下 (上圖的 "Your Public 0x Address")

  2. Shield Tokens 的操作可把代幣隱藏起來。隱藏後的代幣在區塊鏈瀏覽器上是查詢不了,被轉發到一個以 0zk 開首的加密地址。

    它背後的運作原理是以 UTXO 方式儲存未用的代幣餘額,然後以零知証明來證明戶口內擁有相當數量的可用代幣額 (這裡有詳細說明)。

  3. 用戶可對被隱藏的代幣作以下操作:

    • 隱密地轉發到其他 0zk 的私密地址 (Private Sends)。這操作可隱藏起 1) 發款方,2) 收款方,3) 代幣數額。唯一暴露的是對交易簽名的 broadcaster 地址 (見下文)。
    • 可作兌換 (Private Swaps)。這裡作兌換,可把發款方地址隱藏起來
    • 支持其他 defi 操作,包括把代幣加到流動池裡賺取收益。
  4. 當你發現需要把代幣重新公開時,可對其作 Unshield Tokens 的操作。Unshield 同時也可指定一個 0x 地址。即是說 Unshield 同時也能轉賬給另一個錢包。這時區塊鏈看到的發款方會是 broadcaster 和 railgun 的合約交互,也會看到收款方的地址,但可以把發款方隱藏起來。

How - 如何操作?

因為 Railgun 是一種協議,用戶需要一個前端 (錢包) 與這個協議交互。Railway 是現時社區最流行的前端 (這裡還有列出其他前端)。以下教程也會以 Railway 作試範。

首先下載 Railway app, 這前端没有瀏覽器版本,以下以桌面版 macOS 版本試範。

Railgun 現時支持的鏈有:Ethereum, BNB Smart Chain, Polygon, Arbitrum, 及 Sepolia Testnet.

Railway supported chains

在該鏈上試用需要有該鏈的原生幣支付起始的交易手續費。以下以 Polygon 鏈作例子。

1. 啟用 0zk 隱密地址

  1. 首先導入或創建一個錢包。這裡可以用戶主錢包的 seed phrase 導入。這樣錢包則已有一些代幣可用。
  2. 設置用戶的錢包密碼。
  3. 接着會顯示出錢包的 view-only private key。這個 view-only private key 可給審計部門查看用戶的交易訊息 (是的,railgun 協議也講求合法合規。這個 private key 需要現在抄下記好,之後不會再顯示出來) 及 0zk... 地址。0zk 可不用抄寫,因為可輕易取得。
  4. 設好後,將會如下圖,可按圖中上方的 Public Mode / Private Mode 設換公開地址 (0x 地址) 及私密地址 (0zk 地址)及查看帳戶餘額。

01-public-interface.png

02-private-interface.png

2. Shielding - 隱藏代幣 👻

  1. 在 Public Mode ,點擊醒眼的 Shield 按鈕。在右側顯示一個視窗,如下圖。

    shield-01

  2. 這時可點擊選取自己的私密地址。填寫代幣數目。按照意願,設置 shield 及 unshield 的手續費由誰來付 (發給自己時則分別不大)。

    注意原生幣會 1:1 轉換成 wrapped tokens 存在私密地址裡。最後點選 Next。

  3. 輸入密碼。點選 Shield。

    shield-02

  4. 注意 Shield 的時候。它會需要 1 個小時 的確認時間,如下圖。在這段時間,協議會查詢公開的錢包黑名單,確保現時地址不在列明的黑名單內。這一步叫作 Private Proofs of Innocence。這也是協議合法合規的一步,確保協議不會被不法人士用作洗錢用途。而名單提供方由第三方提供。鏈接內說明了現時名單是由什麼機構提供。另外,假若協議偵察到地址和名單內地址吻合,它也只是拒絕交易,但不報告至第三方。

    shield-03

  5. 內心等待一個小時,這時可去點杯咖啡 ☕️

3. Unshielding - 公開隱藏的代幣

  1. 在 Pivate Mode, 點擊 Unshield。出現以下介面。

    unshield-01

    在這裡輸入對方地址。可以是自己原本 shield token 的錢包,也可以是其他人的錢包,即同時轉帳給他人。

    另外,因為 shield token 時轉換作 wrapped tokens, 此時可選擇轉為原生幣 (Unshield to MATIC) 或 wrapped tokens (Unshield to WMATIC).

  2. 下一步是選擇交易簽名人 (broadcaster)。看似有兩個選擇,但其實如要可靠的話,還是選 Self broadcast (自己控制的帳戶) 自行簽名。這個簽名人的地址是會公開在區塊鏈瀏覽器的。看下面注意事項應如何創建一個全新的交易簽名人 (broadcaster)。

    unshield-02

  3. 選好 broadcaster 後,生成零知証明 Generate Proof

    unshield-03

  4. 最後就去進行 Unshield 交易

    unshield-04

  5. Unshield 及 其他隱藏後的交易都不需要等待 1 小時,只需等待約半分鐘左右確認交易並生成証明。跟着可看到交易成功。

    unshield-05

注意事項

創建交易簽名人 (self-broadcaster)

在使用 Railgun 時,你需要有一個 broadcaster 帳戶來生成証明並代付手續費,這個 broadcaster 的地址也會公開成為交易的發起人 (From)。所以這 broadcaster 也要持有一些原生幣支付手續費。如果此時你用主帳戶直接發款至這 broadcaster 帳戶 (新帳戶),分析員可從區塊鏈數據中判斷出這帳戶和你有關聯。所以更隱蔽的做法是把主帳戶的原生幣 shield 起來。再從隱藏的代幣 unshield 到 broadcaster 帳戶。那在區塊鏈上只看到主帳戶和 railgun 的合約交互。這也是文檔 How to seed a self-broadcaster 部份要講解的事項。

其他參考