我正在学习使用Solidity在以太坊上开发SmartContract,非常感谢您帮助我理解这一点:
KittyInterface
作为一个合同没有参数,只有一个功能:
contract KittyInterface {
function getKitty(uint256 _id) external view returns (
bool isGestating,
bool isReady,
uint256 cooldownIndex,
uint256 nextActionAt,
uint256 siringWithId,
uint256 birthTime,
uint256 matronId,
uint256 sireId,
uint256 generation,
uint256 genes
);
}
但随后它被初始化为这样,给出一个参数(ckAddress(。
address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
KittyInterface kittyContract = KittyInterface(ckAddress);
所以我的问题是:
当我们调用KittyInterface(ckAddress)
时会发生什么;当合同没有参数,只有函数时?";ckAddress";去
地址是否用于写入/连接区块链?还是赋予了合同的第一个功能?
它有效,没有错误,但我很难理解它。
它是Cryptozombie课程的一部分,所以我无法调试它。
有人能帮我理解吗?
有时我们无法获得合同代码已经部署在网络上,并且只有它的地址对我们可用。使用这种合同的唯一方法是通过低级别的地址提供功能(发送、传输、,staticcall、call和delegatecall(。这是因为我们没有该合同的定义,并且我们不能为其使用new关键字。如果这样的合同实现了一个接口,并且该接口定义对我们可用,我们将能够使用它通过其地址本身引用目标契约。用这个
KittyInterface(ckAddress)
您告诉编译器在这个已部署的契约ckAddress
中哪些函数可用,以便您可以调用这些函数。
- 接口可能不包含合同中定义的所有函数。请注意,只有在接口中定义的函数才能使用以下方法调用:
KittyInterface(ckAddress)
以下部分不是实际启动,也不是函数调用。
KittyInterface kittyContract = KittyInterface(ckAddress);
当您知道要调用的函数的类型签名时,它只是将ckAddress
转换为可调用的智能合约。
这被称为依赖注入机制。
更多信息可以在链接中找到。