Closed lebed2045 closed 3 years ago
The fundamental problem here is that Vyper's and Solidity's storage allocation algorithms are deeply incompatible, and there exists no standard for how storage allocation should work or be cross-language compatible.
We have some ideas for a robust standardization (see VIP #1733), but none of them are practical yet, and even if they were, Solidity would have to adopt the same standard for them to be interoperable.
Here is a great blog post to understand the dangers of upgradeability patterns, which is some of the reasoning behind why Vyper does not support what you are doing, and probably will never support, as it is a brittle pattern. https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/
Closing this for now, I'm sorry we could not resolve your issue in the way you expected, but that is by design
I'm not sure whether it's a bug or my lack of experience with Vyper
What's your issue about?
I have very simple Vyper contract
and Solidity delegator with OZ proxy full code
now, if you call
set_b_true
via Proxy - yourc
variable would 1, butb
won't be affected. You might think the the proxy code is wrong, but I tried two different impl and both worked with everything except bool variable, including arrays (but array with constant size in Vyper somehow only work with array with dynamic size in Solidity proxy so I assume it's my lack of understanding of laguages?)Version Information
vyper --version
): x.x.x vyper: 0.2.8+commit.069936f solc: 0.6.12+commit.27d51765.Emscripten.clangpython --version
): Python 3.9.1pip freeze
):apipkg==1.5 appdirs==1.4.4 asttokens==2.0.4 attrs==20.2.0 base58==2.0.1 bitarray==1.2.2 black==19.10b0 certifi==2020.6.20 chardet==3.0.4 click==7.1.2 cytoolz==0.11.0 eth-abi==2.1.1 eth-account==0.5.2 eth-brownie==1.11.10 eth-event==1.2.0 eth-hash==0.2.0 eth-keyfile==0.5.1 eth-keys==0.3.3 eth-rlp==0.2.1 eth-typing==2.2.2 eth-utils==1.9.5 execnet==1.7.1 hexbytes==0.2.1 hypothesis==5.35.0 idna==2.10 inflection==0.5.0 iniconfig==1.1.1 ipfshttpclient==0.6.1 jsonschema==3.2.0 lru-dict==1.1.6 more-itertools==8.5.0 multiaddr==0.0.9 mythx-models==1.9.1 netaddr==0.8.0 packaging==20.4 parsimonious==0.8.1 pathspec==0.8.0 pluggy==0.13.1 prompt-toolkit==3.0.7 protobuf==3.13.0 psutil==5.7.3 py==1.9.0 py-solc-ast==1.2.5 py-solc-x==1.0.0 pycryptodome==3.9.8 Pygments==2.6.1 pygments-lexer-solidity==0.5.1 PyJWT==1.7.1 pyparsing==2.4.7 pyrsistent==0.17.3 pytest==6.0.1 pytest-forked==1.3.0 pytest-xdist==1.34.0 python-dateutil==2.8.1 python-dotenv==0.15.0 pythx==1.6.1 PyYAML==5.3.1 regex==2020.10.28 requests==2.24.0 rlp==1.2.0 semantic-version==2.8.5 six==1.15.0 sortedcontainers==2.2.2 toml==0.10.1 toolz==0.11.1 tqdm==4.48.2 typed-ast==1.4.1 urllib3==1.25.11 varint==1.0.2 vvm==0.1.0 vyper==0.2.8 wcwidth==0.2.5 web3==5.11.1 websockets==8.1
How can it be fixed?
I think the example of working proxy would be great? I don't know