Vyper.

帖子

分享您的知识。

0x8744...6532.
Apr 20, 2023
专家问答

How to deploy a factory contract in vyper?

I have a contract in vyper that looks as such:

# 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:

// 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);
    }
}

  • #Vyper
1
1
分享
评论
.

答案

1
0x8744...6532.
Apr 20 2023, 21:30

You'd use create_copy_of

@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
0
评论
.

你知道答案吗?

请登录并分享。

Vyper is a relatively new, pythonic programming language used to write smart contracts. Vyper targets Ethereum Virtual Machine making it virtually impossible for developers to code misleading programs.

2帖子3答案
我们使用 cookie 确保您在我们的网站上获得最佳体验。
更多信息