Proxy-Contracts

如何創建其他契約及其方法的索引?

  • January 26, 2021

我想創建一個代理/路由器合約來儲存

  1. 其他合約地址
  2. 其他合約功能的功能名稱和
  3. 這些契約中接受的參數。
  4. 每份合約的 ID

代理合約本身將有一個 AddContract 和 RemoveContract 將這些參數添加到系統資料庫中。

然後我希望能夠使用同一個合約來代理對其他合約的呼叫。因此,如果有人呼叫 ID 為 XYZ 的智能合約,其函式 myFunction(“Here”, “is”, 123) 將被路由到同一 ID 下定義的合約的地址和函式。

我也希望能夠在創建原始代理後添加契約並對其進行修改。

關於如何解決這個問題的任何想法?

如果您希望專業地實現這一點,那麼我建議您看一下 Augur 項目,他們可以做所有您想做的事情,他們有工廠來實例化新合約,並且他們有代理功能,可以“執行”其他功能。

這是您正在尋找的電話的一個範例:

function executeTransaction(address _to, bytes calldata _data, uint256 _value) external returns (bool) {
   require(authorizedProxies[msg.sender]);
   (bool _didSucceed, bytes memory _resultData) = address(_to).call.value(_value)(_data);
   return _didSucceed;
}

程式碼在這裡: https ://github.com/AugurProject/augur/blob/942b99fd03a513cc7d304123443979a902b4364c/packages/augur-core/src/contracts/AugurWallet.sol#L68

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