Mangrove 是一個不需鎖定資產的 Orderbook 形式的 DeFi 交易協定,不需要先將資產存入一個智能合約中才可以開始提供流動性,更可以用靈活的策略來提供流動性,比如說直接用放在 Compound 的資產提供流動性。
達成這個目的的方式,就是讓每筆訂單(或是說 Offer)都是一段可執行的程式碼 (稱為腳本 Script,不過要注意這段 Script 也是智能合約) 加一個觸發條件,當觸發條件滿足後就這段 Script 就會被執行,並且在執行完之後會再次檢查是否有滿足觸發條件,也就是有沒有確實地交換兩種代幣,如果沒有交換成功,這筆交易就會 revert。

舉例來說如果上圖為 Mangrove 訂單簿,每個訂單都會是一個 Offer。每個 Offer 裡面都包含了:
- 打算提供多少數量的 Token A
- 打算需要多少數量的 Token B
- 這段程式執行需要多少 gas
- 腳本 (Script),實際執行的程式片段(智能合約)
當 Taker 下了一個訂單,符合 Maker 的 Offer 時,腳本就會被執行。我們先設定腳本的內容就是從 Maker 的帳號裡面取出 1 ETH 轉給 Taker。當一個 Taker 發出一個 Market Order 符合上述 Maker 提出的 offer 時,此時就會執行 Maker 的腳本。
腳本最簡單的版本,就是直接從 Maker 的帳戶轉 1 ETH 給 Taker 完成這筆交易,此時 Mangrove 會驗證交易內容,如果條件都符合(或是訂單部分符合),那這筆交易就順利完成。若腳本執行完的狀態不符合 Offer 的條件,此筆交易就會 revert,此時 gasreq 會補償給 Taker。
但因為 Code 就是 Offer 本體 (Code as an Offer?),所以這邊可以用很多靈活的方法來提供流動性。Maker 除了可以從自己的帳戶拿錢出來,也可以直接從 Compound, Aave 把自己在裡面定存的錢拿出來交易,甚至也可以從 Uniswap 把自己的 Liquidity 抽出來當流動性,如果有找到適當的方式甚至可以用 Flashloan 來提供流動性;更可以將交易完之後取得的代幣,再放回其他 DeFi 產品,比如說再塞回 Compound 生利息。
這樣有幾個好處:
- 不需要剛開始就鎖定資金,入金到某個智能合約
- 資金利用效率比較高,沒在用的時候還是可以放在其他 DeFi 產品生利息
 另外在 Mangrove 裡面還可以用一段 Code 管理許多 Offers,當一個 Offer 被吃掉後,他也可以同時更新其他由同一份 Code 管理的 Offer 的價格資訊,不需要像是一般 Maket Maker 那樣重複的取消、建立新的訂單,只需要更新 Offer 的參數即可。 另外在 Mangrove 裡面還可以用一段 Code 管理許多 Offers,當一個 Offer 被吃掉後,他也可以同時更新其他由同一份 Code 管理的 Offer 的價格資訊,不需要像是一般 Maket Maker 那樣重複的取消、建立新的訂單,只需要更新 Offer 的參數即可。