将函数访问限制为仅对 Solidity 中的另一个特定合约

Restrict function access ONLY to one other specific contract in Solidity

我的 Solidity 合约存在安全问题,我不知道如何解决。

流程是这样的:

我的问题是:

能否就如何解决此问题或解释另一种方法向我提供建议?我是 Solidity 的新手。 谢谢!

I cannot make a modifier to check the address.

可以,但地址需要在一个变量中,在部署合约B后设置。

pragma solidity ^0.8;

contract ContractA {
    address contractB;
    
    modifier onlyContractB {
        require(msg.sender == contractB);
        _;
    }

    function foo() external onlyContractB {
    }
    
    function setContractBAddress(address _contractB) external {
        contractB = _contractB;
    }
}
pragma solidity ^0.8;

interface IContractA {
    function foo() external;
}

contract ContractB {
    IContractA contractA;
    
    constructor(address _contractA) {
        contractA = IContractA(_contractA);
    }

    function callFoo() external {
        contractA.foo();
    }

}
  1. 部署合约A
  2. 部署合约 B,在构造函数中将其传递给“A”地址
  3. 在“合同A”中设置contractB值。

为了简单起见,我在 ContractA 中设置 contractB 地址时省略了任何身份验证机制。在此示例中,任何人都可以设置地址,您可能不希望这样,您应该添加一种机制,只允许授权发件人在 ContractA.

中设置 contractB