Nesse artigo iremos abordar sobre como criar um novo contrato através do seu contrato inteligente.
Como criar outro contrato?
Os contratos podem ser criados por outros contratos usando a palavra-chave new
.
Desde a versão 0.8.0, a palavra-chave new
suporta recursos create2
especificando as opções salt
.
// SPDX-License-Identifier: MITpragma solidity ^0.8.13;contract Car {address public owner;string public model;address public carAddr;// Definição do construtor pagável do contrato Carconstructor(address _owner, string memory _model) payable {owner = _owner;model = _model;carAddr = address(this);}}contract CarFactory {Car[] public cars;function create(address _owner, string memory _model) public {Car car = new Car(_owner, _model);cars.push(car);}// Nessa função pagável, além de nós criar um novo// contrato Car e adicionarmos na matriz cars, também// enviamos algum ether para o contrato CarFactoryfunction createAndSendEther(address _owner, string memory _model) public payable {Car car = (new Car){value: msg.value}(_owner, _model);cars.push(car);}function create2(address _owner,string memory _model,bytes32 _salt) public {Car car = (new Car){salt: _salt}(_owner, _model);cars.push(car);}function create2AndSendEther(address _owner,string memory _model,bytes32 _salt) public payable {Car car = (new Car){value: msg.value, salt: _salt}(_owner, _model);cars.push(car);}// Função que retorna as informações de um carro// através do index da matrizfunction getCar(uint _index)publicviewreturns (address owner,string memory model,address carAddr,uint balance){Car car = cars[_index];return (car.owner(), car.model(), car.carAddr(), address(car).balance);}}