Contract-Design
將兩項資產捆綁在一份契約中並為其發行股票
假設您的任務是編寫具有以下功能的智能合約:
- 使用者可以存入代幣 A 並獲得流動性份額作為回報。
- 合約根據一些任意規則開始為代幣 B 出售代幣 A。每次進行交易時,所有使用者都會按比例獲得代幣 B。
- 使用者可以贖回他們的流動性份額以換取代幣 A 和代幣 B。
- 其他使用者可以存入代幣 A 並獲得流動性份額,但他們沒有資格提取之前使用者獲得的代幣 B。
在理想的世界中,該協議將對代幣 B 進行multisender.app式的分發,但由於區塊氣體限制,這是不可能的。因此,我必鬚髮行股票並讓使用者追溯領取他們的獎勵。
有沒有我可以用來實現這個的框架或協議?
我查看了Set Protocol,但他們的 Rebalancing Sets 超出了我的案例範圍 - 它們依賴於拍賣來重新平衡 Set 的組成。
我還查看了Balancer,它接近了,但他們的合併模型中斷功能沒有。4 從上面。延遲存款的使用者不應該有資格提取先前存款人賺取的代幣 B。
這種智能合約設計甚至可能嗎?我個人看不到合約有選擇地將代幣 A 和代幣 B 按比例分配給使用者的方法,同時考慮到使用者存入代幣 A 的時間。
公式
我最終找到了一個解決方案,但它需要依靠預言機來獲取美元價格資訊:
sMinted = sStarting * (aDepositedUSD / (aStartingUSD + bStartingUSD))
在哪裡:
- sMinted:要鑄造的股票數量
- sStarting:已經存在的股票數量
- aDepositedUSD:所存 A 代幣數量的美元價值
- aStartingUSD:合約中已存在數量的 A 代幣的美元價值
- bStartingUSD:合約中已存在數量B代幣的美元價值
解釋
邏輯是我們需要兩個資產之間的共同點,以免我們忘記“追溯比例”。每個代幣的美元價值用於此目的。
當然,也有例外:如果現有股份數量為零怎麼辦?如果合約中沒有 A 代幣和 B 代幣,會發生什麼?在應用上述公式之前,一個正確的實現必須進行多次檢查。
有趣的是,Uniswap 用他們的常數乘積公式 (
x * y = k
) 解決了一個類似的問題,但我不能在這裡應用它。我不想將合約變成 DEX - 目的只是捆綁兩種資產並將其所有權按比例分配給每個存入資金的人。