Skip to content

Add support for Vyper cbor auxdata in bytecode-utils and in VyperCheckedContract#1783

Merged
marcocastignoli merged 7 commits into
vyper-verification-mainfrom
add-support-vyper-cbor-auxdata
Dec 16, 2024
Merged

Add support for Vyper cbor auxdata in bytecode-utils and in VyperCheckedContract#1783
marcocastignoli merged 7 commits into
vyper-verification-mainfrom
add-support-vyper-cbor-auxdata

Conversation

@marcocastignoli

Copy link
Copy Markdown
Member

This PR adds support for Vyper cbor auxdata, it is quite tricky to handle all the different versions of Vyper cbor auxdata so I had to rewrite most of the bytecode-utils package.

I also added the function generateCborAuxdataPositions in VyperCheckedContract, so matchWithRuntimeBytecode and matchWithCreationBytecode can successfully handle auxdata transformations adding the support for partial matches if Vyper integrity check doesn't match.
That said, Vyper integrity check is still not supported as one of the cases to get a "perfect" match. I think we can wait for this, integrity check is in beta and we still have to evaluate it. So even if a Vyper contract has an integrity check match, it will lead to a "partial" match (in this case the auxdata is stored in the database).

@manuelwedler manuelwedler left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice I like how well structured splitAuxdata is :)

Just some minor things and clarification needed

Comment thread packages/lib-sourcify/src/lib/VyperCheckedContract.ts Outdated
Comment thread packages/lib-sourcify/src/lib/SolidityCheckedContract.ts Outdated
Comment thread services/monitor/src/ChainMonitor.ts
Comment thread packages/lib-sourcify/src/lib/VyperCheckedContract.ts Outdated
Comment thread packages/lib-sourcify/src/lib/VyperCheckedContract.ts
Comment thread packages/bytecode-utils/test/bytecode.spec.ts
Comment thread packages/bytecode-utils/src/lib/bytecode.ts Outdated
Comment thread packages/bytecode-utils/src/lib/bytecode.ts
…action

- Changed `auxdataStyle` in `SolidityCheckedContract` to be a static readonly property.
- Updated bytecode decoding in both `SolidityCheckedContract` and `VyperCheckedContract` to use the static `auxdataStyle`.
- Simplified `generateCborAuxdataPositions` method in `VyperCheckedContract` by introducing a helper function for auxdata position generation.
- Added comments to clarify the use of `AuxdataStyle.SOLIDITY` for bytecode decoding in `ChainMonitor` and session state handlers.
- Ensured that `generateCborAuxdataPositions` is called when necessary in `AbstractDatabaseService` to maintain data integrity.
…ions. Updated the `decode` function to support various auxdata styles, including specific handling for Vyper versions < 0.3.10 and < 0.3.5. Improved error messages for missing auxdata in bytecode. Updated tests to reflect changes in auxdata style usage.
Comment thread packages/lib-sourcify/src/lib/VyperCheckedContract.ts Outdated
@marcocastignoli marcocastignoli merged commit 33ac292 into vyper-verification-main Dec 16, 2024
@marcocastignoli marcocastignoli deleted the add-support-vyper-cbor-auxdata branch December 16, 2024 13:52
manuelwedler pushed a commit that referenced this pull request Jan 2, 2025
…kedContract (#1783)

* Add support for Vyper cbor auxdata in bytecode-utils and consequently in VyperCheckedContract

* handle vyper incorrect semver versions, support auxdata position also for versions < 0.3.10

* Refactor Solidity and Vyper contract handling to improve auxdata extraction

- Changed `auxdataStyle` in `SolidityCheckedContract` to be a static readonly property.
- Updated bytecode decoding in both `SolidityCheckedContract` and `VyperCheckedContract` to use the static `auxdataStyle`.
- Simplified `generateCborAuxdataPositions` method in `VyperCheckedContract` by introducing a helper function for auxdata position generation.
- Added comments to clarify the use of `AuxdataStyle.SOLIDITY` for bytecode decoding in `ChainMonitor` and session state handlers.
- Ensured that `generateCborAuxdataPositions` is called when necessary in `AbstractDatabaseService` to maintain data integrity.

* add comment to explain `generateCborAuxdataPositions` return conditions

* Refactor bytecode decoding to enhance auxdata handling for Vyper versions. Updated the `decode` function to support various auxdata styles, including specific handling for Vyper versions < 0.3.10 and < 0.3.5. Improved error messages for missing auxdata in bytecode. Updated tests to reflect changes in auxdata style usage.

* Refactor bytecode decoding to replace `compiler` with `vyperVersion` in Vyper-related types and tests.
manuelwedler added a commit that referenced this pull request Jan 2, 2025
Adds vyper support, here the initial PR: #1760. Below the related tasks:

- [x] Review what's stored in the database
- [x] ~~Create a common folder for the compilers code used by both
lib-sourcify and server (idk if it fits in this new feature, imo yes
because it's a lot of duplicated code now that we have also vyper
stuff)~~ postponed
- [x] Rewrite platform architecture management (vyper versions for x86,
arm, ...): #1776
- [x] Update READMEs #1786
- [x] Update documentation sourcifyeth/docs#27
- [x] Handle vyper transformations: #1783
- [x] Add more tests, and finalize lib-sourcify test: #1781
- [x] Finalize `/verify/vyper` API errors + openapi responses: #1774
- [x] Check Vyper immutable field to see if we can support immutable
transformation: #1790

After merging:
- publish new docs
@stackenbotten3000 stackenbotten3000 moved this to COMPLETED in Sourcify Public Aug 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: COMPLETED

Development

Successfully merging this pull request may close these issues.

4 participants