如何指定/限制可调用自建Chainlink Oracle Node的智能合约地址?
限制Chainlink Oracle节点的调用权限
当然可以指定或限制能调用你Oracle节点的智能合约地址,主要有两种实用方法:
合约层面加访问控制
在你部署的Chainlink Oracle合约里直接加白名单逻辑,只允许指定地址发起请求。比如基于OpenZeppelin的Ownable实现,只有你(合约所有者)能管理白名单,不在名单里的合约调用会直接失败:import "@chainlink/contracts/src/v0.8/Oracle.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract RestrictedOracle is Oracle, Ownable { mapping(address => bool) public allowedContracts; function addAllowedContract(address _contract) external onlyOwner { allowedContracts[_contract] = true; } function removeAllowedContract(address _contract) external onlyOwner { allowedContracts[_contract] = false; } function requestOracleQuery( bytes32 specId, address callbackAddr, bytes4 callbackFunctionId, uint256 payment, bytes calldata data ) external override payable { require(allowedContracts[msg.sender], "Caller not allowed"); super.requestOracleQuery(specId, callbackAddr, callbackFunctionId, payment, data); } }节点作业配置过滤
在Chainlink节点的作业(Job)配置里,给initiators指定允许的合约地址,节点只会监听这个地址发出的请求事件:type = "runlog" initiators = [ { type = "contract", params = { address = "0x你的目标合约地址" } } ]双重校验更稳妥
把上面两种方法结合起来用,合约拦非法调用,节点也只处理指定合约的请求,能最大程度保证权限安全。
内容的提问来源于stack exchange,提问作者Huseyin
相关产品推荐
相关产品推荐

