There is no commentSelect some text and then click Comment, or simply add a comment to this page from below to start a discussion.
Stargate Finance
Stargate Finance 為何引起關注?
First off: we did indeed buy all the tokens. We love the team and what they're doing, and we believe this space and the technology they're building is really important.
A 鏈跟 B 鏈的 X 代幣是一個流動性池,A 鏈跟 B 鏈的Y代幣是一個流動性池,C 鏈跟 B 鏈的 X 代幣又是一個流動性池,不同鏈不同代幣單獨的流動性池,導致流動性池過小,對大額用戶相當不便
無法實現跨鏈互操作性,也就是 A 鏈不可以跨鏈操作 B 鏈的智能合約
說明:封裝 (Wrapped) 代幣假如在 A 鏈轉帳到 B 鏈,須將 A 鏈上的 ATOKEN 鎖住並1:1 在 B 鏈上鑄造 xATOKEN,xATOKEN 就是封裝代幣,xATOKEN 在 B 鏈上可等同於 ATOKEN,但 xATOKEN 並不是 B 鏈的原生代幣,因此如果需要使用 B 鏈的原生代幣就需要再次交換,也就是說xATOKEN 是跨鏈轉帳的媒介,通常跨鏈轉帳的使用者,拿到轉帳的媒介後,還需再交換一次代幣成自己想要的代幣,這一步除了麻煩還會增加額外的手續費。
在傳統封裝代幣的跨鏈方法下,透過在來源鏈上抵押代幣,並在目標鏈上鑄造封裝代幣,因為鑄造封裝代幣並沒有流動性問題,理論上抵押的代幣足夠,可以無限量的增發。但因 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 條鏈,等於有 個流動池,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 鏈的流動池中拿出相對應金額的資產,如此完成轉帳。
就像上一章所說,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)
被存入的資產大小,可以當作流動池的初始金額
資產 (Assets)
流動池的資產,跟 的差別為一個是初始大小,一個是後續經過變動的資產大小
餘額 (Balance)
從 S 鏈轉帳到 D 鏈,S 鏈就是來源鏈 (source),來源鏈可以轉帳給給目標 (destination) 鏈最大金額,餘額紀錄在來源鏈
14.15.16. 對所有與 s 鏈連接得其他鏈,將原本的 ,加上要彌補的赤字金額 (),再加上彌補赤字後還剩下的金額,依造 s 鏈給其他鏈的權重分下去(t'*),得到最後的 。
為甚麼需要 ? 假如今天 s 鏈跟 a、b、c 鏈連接,今天跨鏈交易 s 鏈到 a 鏈,可以發現使用者存入 s 鏈的資產,也會分給 b、c,所以如果沒有 來暫存,那這筆交易就需要再更新 b、c 鏈的值,造成更多的手續費,所以就須將這些值紀錄在 ,等下一次 s 鏈對 b 鏈或對 c 鏈交易,再將 的值,更新到 b、c 鏈上,如此可以降低手續費。
21. 接收來源鏈訊息 22. 因為資產被使用者提出,所以目標鏈的資產 () 扣掉轉帳資產 t,並更新目標鏈 d 可以跨鏈轉帳給來源鏈 s 的最大金額 (),也就是加上累積下來的 ,最後因為 s 鏈提出的跨鏈轉帳交易讓在 d 鏈的流動池資產被提出,所以紀錄在 d 鏈上的 s 可以轉帳給 d 鏈的最大金額會降低,也就是需要扣掉轉帳資產 t。
交易 0(T0) 是從 X 轉帳到 Y 價值 40,首先使用者必須在鏈 X 存入 40(t),根據演算法 4 其 X 鏈資產 () 加上 40,演算法 5 代表鏈 X 可以轉給鏈 Y 的餘額 () 要減 40(t),演算法 7 計算是否出現赤字,因為 T0 之前都沒有轉帳交易,所以沒有赤字皆為 0(),演算法 9 所有赤字總額為 0(total),演算法 10 為 t 扣掉 total 等於 40(t'),根據演算法 15 目的是彌補赤字,如果有盈餘則根據權重分發,所以 和 $c_{y,x} 皆為20,演算法 18、19 將鏈 X 上的信用加到 ,這邊用意是將彌平赤字或盈餘的資產,重新加入紀錄在鏈 X 上 y 可以轉給 x 的餘額 (),演算法 20 將訊息 (t、) 傳到目標鏈 (鏈 Y) 後,鏈 Y 的資產 () 會扣掉 40(t),因為資產會被使用者提出,接著更新 y 可以轉給 x 的餘額 () 為 70,記錄在 y 上 x 可以轉給 y 的餘額 () 扣掉 40 等於 20,如此就完成交易,在白皮書中還有兩個舉例,讀者可以自己去練習。