blockchain - 中继智能合约设计
问题描述
我正在尝试制作一个中继智能合约,它可以通过另一个已部署的智能合约msg.value
的msg.sender
函数调用。
背景:目标是使用多个 DeFi 协议(部署且不属于我的合约)与一个主智能合约进行铸造/借用,以便只有一个钱包可以处理。这意味着资金 ( msg.value
?) 和所有者 ( msg.sender
?) 在调用交易的函数内转移到 DeFi 智能合约。
EOA = 一个带有一点 ETH 来支付费用的钱包
Relay = 中继智能合约,必须从 DeFi 智能合约接收资金(= 作为msg.sender
?)
proxyDeFi = 代理智能合约,允许在一笔交易中向一个或多个 DeFi 智能合约发送多个请求
在我看来,delegatecall
允许在执行另一个智能合约的功能时传递msg.sender
和msg.value
,所以到目前为止我做了什么:
当 EOA 调用 proxyDeFi 时,它按预期工作,但 proxyDeFi 是msg.sender
用于查询的 DeFi 智能合约,而不是 EOA。我们需要几个可以经常更新的代理合约,所以我尝试做一个简单的中继:
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 将是另一个部署的智能合约,因此我们可以修改它而无需重新部署中继。我有一种感觉,我想要实现的实际上比这更复杂,或者我的方法可能不是正确/最好的方法。非常感谢您的建议。
解决方案
推荐阅读
- javascript - React Jest 测试问题
- javascript - 将 html 表的行转换为引导卡
- reporting-services - PBI 报表服务器 - 无需身份验证即可嵌入
- json - 将具有日期类型字段的 nifi 记录插入 PutMongo
- go - golang中关闭chan的问题如何解决
- nginx - m3u8 文件包含已清理的文件
- python - 如何解释这个等高线图?
- php - PHP MySql 结果作为 html 中的表
- javascript - 从本地html表单插入文档时,MongoDB不显示console.log
- reactjs - 使用 React 使复选框字段成为必填项