什麼是 DSProxy,它是如何工作的?
幾個乙太坊項目使用DSProxy使他們的協議更加使用者友好。DSProxy 到底是什麼,它是如何工作的?
什麼
DSProxy 是由DappHub建構的智能錢包,開發者可以在一次交易中執行多個合約呼叫。這是普通 EOA無法做到的。它們僅限於每筆交易僅與一份合約進行互動。
如何
我將解釋如何將 DSProxy 集成到您的項目中。需要注意三個契約:
- DSProxy 系統資料庫
- DSProxy本身_
- 帶有腳本的目標契約(您的自定義業務邏輯)
在您的項目中集成 DSProxy 從所謂的“代理註冊”契約開始。這是一個用於部署 DSProxy 實例的工廠合約,因此您不必自己編譯它。MakerDAO(創建 DSProxy 的組織)已在Ethereum Mainnet 上的地址 0x4678f0a6958e4d2bc4f1baf7bc52e8f3564f3fe4部署系統資料庫。您只需呼叫build
msg.sender
函式,就會為您創建一個屬於的 DSProxy 。然後是目標契約。這是您必須編寫程式碼的地方。這個想法是您導入合約介面並將多個合約呼叫捆綁在一個函式中。例如,在Compound 協議中進行存款的腳本如下所示:
function deposit( address token, address cToken, uint256 amount ) external { Erc20Interface(token).transferFrom(msg.sender, address(this), amount); Erc20Interface(token).approve(cToken, uint256(-1)); require(CTokenInterface(cToken).mint(amount) == 0); }
您將編譯您的目標合約,將其部署到乙太坊並呼叫 DSProxy 的執行函式
function execute(address _target, bytes memory _data)
以最終進行合約呼叫。_target
參數是目標合約的地址,而呼叫_data
數據是用來標識在目標上執行什麼函式。如果您不知道 calldata 是什麼,請參閱此執行緒。集成
DSProxy 在幾個乙太坊項目中執行在生產環境中:
請注意,由於系統資料庫會記憶體部署,因此如果您僅使用上述其中一個應用程序,則在使用其他應用程序時無需重新部署 DSProxy。去中心化金融 FTW!
延伸閱讀
我的回答只是 DSProxy 的高級概述。要了解更多資訊,請參閱以下資源: