Ethereum 混音IDE如何通过“部署代理合约”;地址为;正确地

Ethereum 混音IDE如何通过“部署代理合约”;地址为;正确地,ethereum,smartcontracts,remix,Ethereum,Smartcontracts,Remix,我开始学习如何使用Remix IDE编写以太坊智能合约,并在localhost中配置Ganache&Truffle 我不明白。因此,我将拥有以下文件: Registry.sol(主合同) Storage.sol(用于存储) LogicOne.sol(第一逻辑契约) LogicTwo.sol(第二个逻辑契约) 我能够通过truffle控制台成功部署合同。 但是,当切换到Remix IDE时,我可以部署所有契约,但主契约没有与logic1契约链接,无法切换到logic2契约 我未能在RemixIDE

我开始学习如何使用Remix IDE编写以太坊智能合约,并在localhost中配置Ganache&Truffle

我不明白。因此,我将拥有以下文件:

Registry.sol(主合同)

Storage.sol(用于存储)

LogicOne.sol(第一逻辑契约)

LogicTwo.sol(第二个逻辑契约)

我能够通过truffle控制台成功部署合同。 但是,当切换到Remix IDE时,我可以部署所有契约,但主契约没有与logic1契约链接,无法切换到logic2契约

我未能在RemixIDE中模拟以下代码

Registry.at(Registry.address).setLogicContract(LogicOne.address)
每次我点击“地址”按钮,就会部署一个新的主合同。预期结果是主合同应保持不变,但合同逻辑从LogicOne切换到LogicII

我尝试的场景如下:

情景1:

  • 部署所有合同
  • 调用main contract setLogicContract()函数设置逻辑合约地址
  • 调用了setVal()函数,但“val”未在主协定中更新
  • 情景2:

  • 部署LogicOne合同
  • 在“At address”中输入LogicOne合同地址,点击按钮部署主合同
  • 调用setVal()函数,并在主合同中更新“Val”
  • 尝试在“At address”中输入LogicTwo合同地址,并单击按钮部署第二个主合同
  • 但是,这将创建另一个新的主合同
  • 是否有人可以分享部署合同步骤的经验?任何意见都是非常感谢的

    要调用“代理”函数,您可以设置代理合约的地址,但使用被代理的基础合约的ABI

    在这种情况下,您希望使用Registry.sol的地址和LogicOne.sol或LogicTwo.sol的ABI。不确定是否可以用混音来实现这一点

    根据您链接的文章,您希望这样做

  • 我们使用LogicOne ABI修改注册表契约中的“val”存储。 LogicOne.at(Registry.address).setVal(2)
  • 为了找回你的价值,你可能想要
    LogicOne.at(Registry.address).val()

    pragma solidity ^0.6.12;
    
    contract Storage {
        uint public val;
    }
    
    pragma solidity ^0.6.12;
    
    import './Storage.sol';
    
    contract LogicOne is Storage {
        function setVal(uint _val) public returns (bool success) {
            val = 2 * _val;
            return true;
        }
    }
    
    pragma solidity ^0.6.12;
    
    import './Storage.sol';
    
    contract LogicTwo is Storage {
        function setVal(uint _val) public returns (bool success) {
            val = 1000 * _val;
            return true;
        }
    }
    
    Registry.at(Registry.address).setLogicContract(LogicOne.address)
    
    Registry.at(Registry.address).setLogicContract(LogicTwo.address)