以下是一个简单的智能合约通信机制的例子,展示了在合约 A 中调用合约 B 的一个函数:
pragma solidity ^0.8.7;
// 定义合约 B
contract ContractB {
function doSomething() public pure {
// 在这里执行某些操作
}
}
// 定义合约 A
contract ContractA {
address contractB; // 存储合约 B 的地址
constructor() public {
contractB = address(new ContractB()); // 初始化合约 B 的地址
}
function callContractB() public {
ContractB b = ContractB(contractB); // 通过地址创建合约 B 的实例
b.doSomething(); // 调用合约 B 的函数
}
}
在这里,我们定义了两个合约 ContractA 和 ContractB。ContractA 中有一个存储变量 contractB,用来存储 ContractB 的地址。在 ContractA 的构造函数中,我们创建了一个 ContractB 的实例并将其地址存入 contractB 变量中。在 ContractA 的 callContractB 函数中,我们通过地址创建了 ContractB 的实例并调用了它的 doSomething 函数。
这样 ContractA 和 ContractB 就可以相互通信了。 如果 ContractB 改变了任何状态,那么 ContractA 可以立即知道。
通信机制可以增加智能合约的灵活性和复杂性。