Comments (1)
@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:
vyper/vyper/builtins/interfaces/IERC4626.vyi
Lines 15 to 19 in e1adb7b
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)
- multiple eval of `sqrt()` argument HOT 1
- double eval of the slice start/length args
- incorrect topic logging in raw_log for non-literal expressions HOT 1
- double eval of raw_args in create_from_blueprint HOT 2
- Disallow `optimize` and `evm-version` `pragma`'s in `.vyi` files
- meta: venom IR roadmap HOT 1
- HashMap index checks when the subscript is folded
- Compilation errors due to not folded convert value
- CompilerPanic for concat on empty(Bytes)
- CodegenPanic for slice on empty(Bytes)
- Mistyped Loop Iterable
- Overriding Storage Allocator Does Not Handle Stateful Modules HOT 1
- Ambiguous Imports
- Constants Cannot Be Imported From .vyi Files
- External Call Kwargs Allowed for Call to __init__
- Imprecise Duplicate Import Check
- Incorrect error messages during compilation
- overriding allocator does not set global lock position causing crash in codegen HOT 2
- meta: tracker for overriding storage allocator bugs HOT 2
- compiler panic on indexing empty literal arrays
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vyper.