How to deploy a factory contract in vyper?

Expert

I have a contract in vyper that looks as such: ```python # I'm a comment! # SPDX-License-Identifier: MIT # @version ^0.3.7 # If remix isn't updated use version: ^0.2.16 myFavoriteNumber: uint256 struct Person: favoriteNumber: uint256 name: String[100] # Static Array/List listOfPeople: public(Person[5]) listOfPeopleIndex: uint256 nameToFavoriteNumber: HashMap[String[100], uint256] @external def store(_favoriteNumber: uint256): self.myFavoriteNumber = _favoriteNumber @external @view def retrieve() -> uint256: return self.myFavoriteNumber @external def addPerson(_name: String[100], _favoriteNumber: uint256): newPerson: Person = Person({favoriteNumber: _favoriteNumber, name: _name}) self.listOfPeople[self.listOfPeopleIndex] = newPerson self.listOfPeopleIndex += 1 self.nameToFavoriteNumber[_name] = _favoriteNumber ``` And I'd like another contract to be able to deploy this contract. In solidity this is as easy as an import. But how do I do this in vyper? In solidity, I'd do: ```javascript // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "./SimpleStorage.sol"; contract StorageFactory { SimpleStorage[] public listOfSimpleStorageContracts; function createSimpleStorageContract() public { SimpleStorage simpleStorageContractVariable = new SimpleStorage(); // SimpleStorage simpleStorage = new SimpleStorage(); listOfSimpleStorageContracts.push(simpleStorageContractVariable); } } ```

Answers 1

You'd use [create_copy_of](https://docs.vyperlang.org/en/stable/built-in-functions.html?highlight=create_copy_of#create_copy_of) ```python @external def create_simple_storage_contract() -> address: deployed_simple_storage: address = create_copy_of(self.contract_to_copy) self.list_of_simple_storage_contracts.append(deployed_simple_storage) return deployed_simple_storage ``` You'd need to: 1. Deploy the contract 2. Create a copy of the contract