Contract-Development

什麼是 DSProxy,它是如何工作的?

  • February 5, 2022

幾個乙太坊項目使用DSProxy使他們的協議更加使用者友好。DSProxy 到底是什麼,它是如何工作的?

什麼

DSProxy 是由DappHub建構的智能錢包,開發者可以在一次交易中執行多個合約呼叫。這是普通 EOA無法做到的。它們僅限於每筆交易僅與一份合約進行互動。

如何

我將解釋如何將 DSProxy 集成到您的項目中。需要注意三個契約:

  1. DSProxy 系統資料庫
  2. DSProxy本身_
  3. 帶有腳本的目標契約(您的自定義業務邏輯)

在您的項目中集成 DSProxy 從所謂的“代理註冊”契約開始。這是一個用於部署 DSProxy 實例的工廠合約,因此您不必自己編譯它。MakerDAO(創建 DSProxy 的組織)已在Ethereum Mainnet 上的地址 0x4678f0a6958e4d2bc4f1baf7bc52e8f3564f3fe4部署系統資料庫。您只需呼叫buildmsg.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 的高級概述。要了解更多資訊,請參閱以下資源:

引用自:https://ethereum.stackexchange.com/questions/90303