Try   HackMD

Stargate Finance

Stargate Finance 為何引起關注?

上面推文中,Alamenda Research 在 Stargate Finance 官方代幣拍賣時,掃光了所有拍賣的代幣 (10%的份額),加上 Stargate Finance 與跨鏈流動性的連結,與其背後的 LayerZero 的跨鏈技術帶來的豐富想像,使大眾對這個項目充滿期待。


Stargate Finance 認為目前的跨鏈橋 (bridge) 有三個問題:

  1. 需要各式各樣的封裝 (Wrapped) 代幣,例如xBTC

  2. A 鏈跟 B 鏈的 X 代幣是一個流動性池,A 鏈跟 B 鏈的Y代幣是一個流動性池,C 鏈跟 B 鏈的 X 代幣又是一個流動性池,不同鏈不同代幣單獨的流動性池,導致流動性池過小,對大額用戶相當不便

  3. 無法實現跨鏈互操作性,也就是 A 鏈不可以跨鏈操作 B 鏈的智能合約

    說明:封裝 (Wrapped) 代幣假如在 A 鏈轉帳到 B 鏈,須將 A 鏈上的 ATOKEN 鎖住並1:1 在 B 鏈上鑄造 xATOKEN,xATOKEN 就是封裝代幣,xATOKEN 在 B 鏈上可等同於 ATOKEN,但 xATOKEN 並不是 B 鏈的原生代幣,因此如果需要使用 B 鏈的原生代幣就需要再次交換,也就是說xATOKEN 是跨鏈轉帳的媒介,通常跨鏈轉帳的使用者,拿到轉帳的媒介後,還需再交換一次代幣成自己想要的代幣,這一步除了麻煩還會增加額外的手續費。

    場景舉例:使用者需要將 Ethereum 上的 USDC,轉到 BNB Chain 上,透過 anyswap,anyswap 會鎖住在 Ethereum 上的 USDC,並 1:1 在 BNB Chain 上產生 anyUSDC,但anyUSDC 並不能在 BNB Chain 上通用,因此需要再透過交易將 anyUSDC 轉成 USDC。


Stargate Finance 認為的跨鏈橋三角難題:

  1. 即時保證最終性
  2. 統一流動性
  3. 原生資產交易

說明:第一點是指來源鏈如果提交了跨鏈轉帳需求,而目標鏈也要提交成功。第二點,A 鏈跟其他鏈的跨鏈不再是各自一個流動池,而是只要跟 A 鏈跨鏈的目標鏈,共用一個流動池,使能承受的跨鏈交易量增加。第三點透過 Stargate,不再需要封裝代幣,能直接交易取得想要的原生資產。

Stargate 除了解決跨鏈橋的三角難題,因為他的跨鏈基礎是 LayerZero,因此可以實現真正的互操作性,在傳統的跨鏈方案上,可以與來源鏈的合約相結合,但不能與目標鏈的合約結合,舉例:資產可以在來源鏈上交換,使用 ∆Bridge 橋接到目標鏈,然後在目標鏈上交換,所有這些都在同一個跨鏈交易中。


為甚麼 Stargate 需要 Delta Algorithm(Algo.)?

在傳統封裝代幣的跨鏈方法下,透過在來源鏈上抵押代幣,並在目標鏈上鑄造封裝代幣,因為鑄造封裝代幣並沒有流動性問題,理論上抵押的代幣足夠,可以無限量的增發。但因 Stargate 並沒有封裝代幣,所以做法比較像下圖 (這是初始想法並不是Stargate最終做法),X 鏈與 A、B、C、D 鏈連接,為每個連接設立一個流動池,當有人需要從 A 鏈轉帳到 X 鏈時,其流程就是使用者將資產放入 A 鏈屬於X 鏈的流動池,並從 X 鏈的流動池 (屬於 A 的部分) 提取相同價值的資產,設立每個鏈單獨的流動池原因,就是為了保證交易的最終性,因為當轉帳的交易流程在 A 鏈完成就必須要確保在 X 鏈也能完成,如果今天有多筆跨鏈轉帳在 A、B、C、D 同時對 X 發生,就必須要確保 X 鏈流動池有足夠資產,但如果不單獨設立流動池,舉例 A、B、C、D 跨鏈轉帳各 100 元,但 X 鏈流動池只有 300 元,因為交易是同時的,所以 A、B、C、D 鏈都會覺得 X 鏈的流動池有足夠的資產,導致問題發生,因此將 X 鏈的流動池隔開成為單獨的流動池有其必要性。

為每個鏈設立單獨的流動池,換句話說有 n 條鏈,等於有

C2n 個流動池,Stargate 把這個稱為破碎的流動性 (Fractured liquidity)。Stargate 稱可以將破碎的流動性變為統一流動性 (Unfied Liquidity) 的方法稱為 Delta Algo.。但我認為,這比較像是將新跨鏈交易放入來源鏈的資產,重新分配到破碎的流動池。舉個例子,假設 X 鏈上當初分配給 A 鏈 100 萬的流動池,因為 A 鏈上持續對 X 鏈的跨鏈轉帳交易,X 鏈分配給 A 鏈的流動池金額降低到 20 萬,當新交易是從X 鏈轉帳到其他鏈,這個新交易放入的資金,就會分配給 X 鏈上給 A 鏈的流動池 (就算 X 鏈不是轉帳到 A 鏈),所以與其說統一流動性,不如稱他為重新分配還比較適當。

Stargate 轉帳流程舉例,假如 A 鏈跨鏈轉帳到 X 鏈,使用者會在 A 鏈存入資產,這個資產會透過 Delta Algo. 分配給 A 鏈上的所有流動池,然後從 X 鏈上分配給 A 鏈的流動池中拿出相對應金額的資產,如此完成轉帳。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

圖片來源:LayerZero White Paper


演算法相對複雜可以跳過


Delta Algo. 的用途

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

圖片來源:LayerZero White Paper

就像上一章所說,Delta Algo. 的用途就是重新分配進入鏈的資產,如上圖,鏈 X 資產有 100,分配給 Y 鏈流動池 50、Z 鏈流動池 50,假如當持續的跨鏈交易 Y 鏈轉帳給 X 鏈,導致鏈 X 分配給 Y 鏈的流動池從 50 變成 20 發生赤字,那新進入 X 鏈的資產就會給一部分到鏈 X 分配給 Y 鏈的流動池 (不論是不是從 X 鏈轉帳到 Y 鏈),用以抹平赤字。


Delta Algo.符號說明

Name Notation Function
被提供的流動性 (Liquidity provided)
lps
被存入的資產大小,可以當作流動池的初始金額
資產 (Assets)
as
流動池的資產,跟
lps
的差別為一個是初始大小,一個是後續經過變動的資產大小
餘額 (Balance)
bs,d
從 S 鏈轉帳到 D 鏈,S 鏈就是來源鏈 (source),來源鏈可以轉帳給給目標 (destination) 鏈最大金額,餘額紀錄在來源鏈
餘額 (Last known balance)
lkbd,s
記錄在 S 鏈上
bd,s
最後一次的紀錄
信用 (Credit)
cs,d
在下一次從 S 鏈轉到 D 鏈時,信用會加到
bs,d
Name Notation Function
權重 (Weight)
ws,d    0ws,d1   dws,d=1
S 鏈分配給 D 鏈的流動性比重

Delta Algo.詳細說明

結合之前對 Delta Algo. 的說明,Delta Algo. 的目的其實就是達成:

bd,sas×ws,d

說明:上述式子,就是指在目標鏈上,目標鏈可以轉帳到來源鏈的餘額,要約等於來源鏈的資產,乘上分配給目標鏈的比重。

下方的演算法場景為,轉帳金額為 t, 來源鏈為 s,目標鏈為 d,演算法場景為 s 鏈轉帳給 d 鏈金額為 t。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


執行在來源鏈 s 上的演算法

1 到 17 行是原子的 (atomic),出現問題會回滾到初始狀態,其目的避免當有兩筆 (或更多) 同步 (concurrent) 交易,導致

t1+t2bs,d 的情況發生,這種情況就是交易金額大於可用餘額。

可以提交的 (committable) 交易,在目標鏈上的資產

ad,必須大於轉帳交易的金額,committable(T) ⇒
ad
> t。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

1.2.3. 代表在如果交易金額 t ,大於來源鏈可以轉給目標鏈的餘額,則拒絕交易
4.5. 代表如果 1.2.3. 的檢查沒問題,則來源鏈因接收使用者的跨鏈轉帳請求,使用者將資產存入來源鏈,所以來源鏈資產
at
會加上轉帳金額 t,而使用掉了來源鏈可以轉給目標鏈的部分餘額,所以
bs,d
-t。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

上面內容有提到,delta algo. 是重新分配獲得的資產,所以 6.7.8. 就是在計算各個流動型池的資產狀況,有沒有出現赤字。

6.7.8. 首先用迴圈去跑與來源鏈連接的鏈的流動池,計算是否出現赤字。

lpsws,x 是來源鏈一開始分配給其他鏈得金額,也就是 "在初始時" 其他鏈所能跨鏈轉帳到來源鏈的最大金額,
lkbx,s(sxs)+cs,x
(是下一次 s 跨鏈轉帳到 x 時,c_{s, x} 的資產會加到 $lkb_{x,s}),所以相加就是 x 鏈分配給 s 鏈的全部資產。

(初始 x 到 s 能跨鏈轉帳的金額 - 目前跨鏈轉帳的最大金額)

0代表出現赤字,這個赤字就是
diffs,x

9. 就是將與 s 鏈相連接的所有
diffs,x
相加起來,就是所有的赤字 Total。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

10.11.12. 如果跨鏈轉帳存入 s 鏈的資產 t 大於所有的所有的赤字,則

diffs,x 不變,用以彌補所有的赤字,如果小於則將 t 依造赤字的比例,改變
diffs,x
,用以彌補部分的赤字。

13.代表如果存入 s 鏈的資產 t 大於所有的所有的赤字,t' 就是資產 t 扣掉所有的赤字。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

14.15.16. 對所有與 s 鏈連接得其他鏈,將原本的
cs,x
,加上要彌補的赤字金額 (
diffs,x
),再加上彌補赤字後還剩下的金額,依造 s 鏈給其他鏈的權重分下去(t'*
ws,x
),得到最後的
cs,x

為甚麼需要

cs,x? 假如今天 s 鏈跟 a、b、c 鏈連接,今天跨鏈交易 s 鏈到 a 鏈,可以發現使用者存入 s 鏈的資產,也會分給 b、c,所以如果沒有
cs,x
來暫存,那這筆交易就需要再更新 b、c 鏈的值,造成更多的手續費,所以就須將這些值紀錄在
cs,x
,等下一次 s 鏈對 b 鏈或對 c 鏈交易,再將
cs,x
的值,更新到 b、c 鏈上,如此可以降低手續費。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

17. 製作要傳給 d 鏈的訊息,包含 t、
cs,x

18.19.20. 將存在 s 鏈上的 d 可以跨鏈轉上給 s 的最大值 (
lkbd,s
),加上累積下來的
cs,d
,完成後將
cs,d
歸零,最後將訊息送出。


執行在目標鏈 d 上的演算法

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

21. 接收來源鏈訊息
22. 因為資產被使用者提出,所以目標鏈的資產 (
ad
) 扣掉轉帳資產 t,並更新目標鏈 d 可以跨鏈轉帳給來源鏈 s 的最大金額 (
bd,s
),也就是加上累積下來的
cs,d
,最後因為 s 鏈提出的跨鏈轉帳交易讓在 d 鏈的流動池資產被提出,所以紀錄在 d 鏈上的 s 可以轉帳給 d 鏈的最大金額會降低,也就是需要扣掉轉帳資產 t。


演算法舉例

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

圖片來源:LayerZero White Paper

在初始狀態中,Chain X 初始流動性為 100,在初始狀態時,資產與初始流動性相同,所以皆為 100。並且

wx,y 為 0.5,所以
lkbx,y
為 100 乘上 0.5 等於 50。
bx,y
的值為 Chain Y 的資產乘上 0.6(
wy,x
) 等於 60,最後
cx,y
等於 0。

交易 0(T0) 是從 X 轉帳到 Y 價值 40,首先使用者必須在鏈 X 存入 40(t),根據演算法 4 其 X 鏈資產 (

ax) 加上 40,演算法 5 代表鏈 X 可以轉給鏈 Y 的餘額 (
bx,y
) 要減 40(t),演算法 7 計算是否出現赤字,因為 T0 之前都沒有轉帳交易,所以沒有赤字皆為 0(
diffx,y
),演算法 9 所有赤字總額為 0(total),演算法 10 為 t 扣掉 total 等於 40(t'),根據演算法 15 目的是彌補赤字,如果有盈餘則根據權重分發,所以
cx,y
和 $c_{y,x} 皆為20,演算法 18、19 將鏈 X 上的信用加到
lkby,x
,這邊用意是將彌平赤字或盈餘的資產,重新加入紀錄在鏈 X 上 y 可以轉給 x 的餘額 (
lkby,x
),演算法 20 將訊息 (t、
cx,y
) 傳到目標鏈 (鏈 Y) 後,鏈 Y 的資產 (
ay
) 會扣掉 40(t),因為資產會被使用者提出,接著更新 y 可以轉給 x 的餘額 (
by,x
) 為 70,記錄在 y 上 x 可以轉給 y 的餘額 (
lkbx,y
) 扣掉 40 等於 20,如此就完成交易,在白皮書中還有兩個舉例,讀者可以自己去練習。


結論

Stargate Finance 透過跨鏈技術 LayerZero,可以解決許多跨鏈橋的問題,包括取消麻煩的封裝代幣、更高的流動性以及提供跨鏈的互操作性,雖然 Delta Algo. 不是白皮書所說的提供統一流動性,但透過重新分配進入鏈的資產,能提供更高的流動性。


參考文獻

Stargate Finance White Paper


作者:hugebing
協作人:y.w.
審稿人:狸貓(bill)

以上文章內容不構成投資建議

tags: Blockchain Articles