Giter Club home page Giter Club logo

Comments (1)

pcaversaccio avatar pcaversaccio commented on June 8, 2024

@charles-cooper it's not fully fixed yet IMHO.

PoC

# lib.vy
# pragma version ~=0.4.0rc2

from ethereum.ercs import IERC20

asset: public(immutable(IERC20))

@deploy
def __init__(asset_: IERC20):
    asset = asset_
# main.vy
# pragma version ~=0.4.0rc2

from ethereum.ercs import IERC20

import lib
initializes: lib

interface IAsset:
    def asset() -> address: view #  --> Vyper returns the `address` type for interface types by default.

implements: IAsset

exports: lib.__interface__ # exports the external getter function for `asset`

@deploy
def __init__(asset_: IERC20):
    lib.__init__(asset_)

This won't compile:

vyper.exceptions.InterfaceViolation: Contract does not implement all interface functions: asset()

  contract "main.vy:12", line 12:0 
       11
  ---> 12 implements: IAsset
  --------^
       13

The underlying issue I currently face is that I use the built-in ERC4626 interface:

# Functions
@view
@external
def asset() -> address:
...

declare it in a module via (the module itself compiles):

asset: public(immutable(IERC20))

and I import into my my main contract, export everything and initialise it. But it throws with the error above. The compiler tells me however, if I do something like exports: (erc4626.__interface__, erc4626.asset), that it's already exported vyper.exceptions.StructureException: already exported!, but it seems that the return type of address and IERC20 has an internal conflict. You can fully repro via my PR here: pcaversaccio/snekmate#236.

from vyper.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.