合约可以通过使用new关键字来创建其他合约的实例。
这个过程会执行被创建合约的构造函数(如果存在的话),并返回一个指向新创建合约的地址的引用。
这种方式允许智能合约动态地在区块链上部署新合约,并与它们交互。
通过 new 创建合约
当你在使用new关键字创建一个合约实例时,这个新创建的合约会被部署到以太坊区块链上,并且会有一个独一无二的地址与之对应。
这个地址是合约在区块链上的唯一标识,可以用来与合约进行交互。 也可以单独交互
javascript
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract A {
function getName() public pure returns (string memory) {
return "success";
}
}
contract C {
// 通过new 创建一个合约
A public ac = new A();
function getAc() public view returns (address) {
return address(ac);
}
function createA() public {
A a = new A();
a.getName();
}
}
注释事项:
合约地址是通过创建合约的地址和该地址所发起的交易数量(也被称作"nonce")来生成的。
每当一个地址发起一个新的交易,它的nonce就会增加。
这种方式下,合约地址的生成是预定的,即在交易被矿工处理之前,就可以根据发起者地址和其当前的nonce来预测新合约的地址。