中继智能合约设计

问题描述

我正在尝试制作一个中继智能合约,该合约可以在另一个已部署的智能合约的函数调用中传递msg.valuemsg.sender

上下文:目标是使用一个主要智能合约使用多个DeFi协议(已部署且不属于我的合约)进行铸造/借用,以仅处理一个钱包。这意味着资金(msg.value?)和所有者(msg.sender?)在调用交易的功能内转移到DeF​​i智能合约。

EOA =带有少量ETH来支付费用的钱包

中继 =中继智能合约,该合约必须从DeFi智能合约获得资金(= msg.sender吗?)

proxyDeFi =代理智能合约,允许在一项交易中向一个或多个DeFi智能合约发送多个请求

在我看来,delegatecall允许在执行另一个智能合约的功能时传递msg.sendermsg.value,所以到目前为止,我所做的是:

由EOA调用proxyDeFi时,其工作正常,但proxyDeFi是查询的DeFi智能合约而非EOA的msg.sender。 我们将需要几个可以经常更新的代理合同,所以我尝试做一个简单的中继:

contract Relay {
    address public proxyDeFi;
    address owner = msg.sender;
    
    modifier isOwner() {
        require(msg.sender == owner,"Forbidden");
        _;
    }

    function update(address newAddress) isOwner public {
        proxyDeFi = newAddress;
    }

    fallback() isOwner external payable {
        proxyDeFi.delegatecall(msg.data);
    }
}

我试图将proxyDeFi的功能调用到Relay(带有EOA),但是交易在deletegateCall上被系统地还原。我尝试在proxyDeFi端添加调试,但没有任何输出,我是solidity的新手,所以肯定有些我不理解的东西。

粗略地讲,我希望proxyDeFi只能被视为中继的库,只是proxyDeFi是另一个已部署的智能合约,因此我们可以对其进行修改而不必重新部署中继。我觉得我想要实现的实际上比这更复杂,或者也许我的方法不是正确/最好的方法。非常感谢您的建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)