Skip to content

feat[venom]: wire up dyn allocations#5127

Open
harkal wants to merge 127 commits into
vyperlang:masterfrom
harkal:feat/venom/inf-bytes-string-locals
Open

feat[venom]: wire up dyn allocations#5127
harkal wants to merge 127 commits into
vyperlang:masterfrom
harkal:feat/venom/inf-bytes-string-locals

Conversation

@harkal

@harkal harkal commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

What I did

Add support for unbounded sequence types — Bytes[INF], String[INF], and
DynArray[T, INF] — in the Venom pipeline. These have
no compile-time maximum length; their size is computed and allocated at runtime.

How I did it

Frontend-only, on top of the existing Venom runtime-allocation backend
(dalloca/dret); the only backend change is a dret` builder emitter.

  • INF locals are stable 32-byte pointer cells holding the current payload
    pointer (the payload lives in relocatable scratch) — required because Venom
    codegen has no branch-aware variable-environment merge. Reads double-deref;
    reassignment and DynArray append reallocate an exact-size buffer.
  • Runtime size math is overflow-checked (checked_add/checked_mul); untrusted
    ABI input (INF calldata/returndata/abi_decode) is bounds-checked against the
    readable region before allocating; trusted constructor (CODE) args keep the
    existing lenient decode.
  • Bounded types stay on their existing, legacy-matching fast paths — non-INF
    contracts are unaffected.
  • Internal returns forward (ptr, runtime-size) via dret with FMP adoption;
    tuples mixing word and INF members use a Venom-only dynamic tuple frame.
  • Unsupported positions (nested/recursive unbounded, storage/struct/event/error
    members, ABI-dynamic DynArray elements, non-experimental codegen) are
    rejected at the frontend with typed errors.

Two intentional riders, called out explicitly: (1) mutating a temporary now
raises ImmutableViolation instead of an internal assert (a general frontend
diagnostic fix); (2) the venom metadata IDGenerator/frame_info fix for
stable, collision-free function_ids across the deploy and runtime passes.

How to verify it

uv run pytest \
  tests/functional/codegen/features/test_inf_bytes_string_local_runtime.py \
  tests/functional/codegen/features/test_inf_dynarray_runtime.py \
  tests/unit/semantics/types/test_inf.py \
  tests/unit/compiler/venom/test_inf_bytes_string_locals.py \
  tests/functional/builtins/codegen/test_abi_decode.py \
  --experimental-codegen

Plus the full suite under --experimental-codegen. Non-INF gas is neutral except
create* (runtime-sized create buffer is a small win).

Commit message

Bounded sequence types (Bytes[N], String[N], DynArray[T, N]) require a
compile-time maximum length, so a value whose size is only known at
runtime — calldata of unknown length, an external call's return, a loop-
accumulated array — had to be modeled with a conservative cap that
wastes memory and gas, or could not be expressed at all.

The Venom (--experimental-codegen) pipeline already allocates memory at
runtime through dalloca/dret and a free-memory-pointer virtual register.
This adds the frontend on top of that machinery so Bytes[INF],
String[INF] and DynArray[T, INF] lower to exact-size runtime
allocations. The backend is unchanged apart from a dret builder emitter.

An INF local is a stable 32-byte pointer cell holding the current
payload pointer, not a fixed buffer. Venom codegen has no branch-aware
variable-environment merge, so routing every read and write through a
memory cell is what keeps branch and loop semantics correct without
inventing one. The payload is relocatable: reassignment and DynArray
append allocate a fresh exact-size buffer, since an INF value carries no
spare capacity.

Because INF has no maxlen cap to bound it, all runtime size arithmetic
is overflow-checked, and untrusted ABI input (INF calldata, returndata,
abi_decode) is bounds-checked against the readable region before any
allocation; trusted constructor (CODE) args keep the existing lenient
decode. Bounded types are deliberately left on their existing, legacy-
matching fast paths, so non-INF contracts are unaffected. Internal
functions return INF values via dret, forwarding a (pointer, runtime-
size) pair and having the caller adopt the callee's free-memory pointer;
tuples mixing word and INF members use a Venom-only dynamic tuple frame.
Nested or recursive unbounded layouts, INF in storage/struct/event/error
positions, and DynArray[T, INF] with ABI-dynamic elements are rejected
at the frontend rather than partially lowered.

Two changes ride along and are intentional, not INF-specific:

- mutating a temporary value now raises ImmutableViolation instead of
  tripping an internal assert — a general frontend diagnostic fix.
- venom metadata output seeds the function-id generator from already-
  assigned ids so the deploy and runtime passes produce stable,
  collision-free function_ids; frame_info is emitted as an empty dict
  for venom, which has no legacy frame.

This also tightens the create_from_blueprint code-offset guard to
compare before the wrapped subtraction, closing an out-of-bounds read
the legacy path left open.

Description for the changelog

Support unbounded sequence types Bytes[INF], String[INF], and
DynArray[T, INF] under --experimental-codegen.

Cute Animal Picture

image-25

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown

Gas Changes

Delta Delta % Base Gas Head Gas Test
🟢-5159574 -55.26% 9337255 4177681 TimelockControllerTest:testBatchTargetRevert()
🟢-4299679 -55.21% 7787463 3487784 TimelockControllerTest:testBatchPredecessorNotExecuted()
🟢-3439772 -55.10% 6243333 2803561 TimelockControllerTest:testBatchEqualAndGreaterMinimumDelay()
🟢-3439766 -55.11% 6241433 2801667 TimelockControllerTest:testBatchPredecessorMultipleNotExecuted()
🟢-3439700 -55.32% 6217483 2777783 TimelockControllerTest:testBatchPredecessorNotScheduled()
🟢-2641110 -35.72% 7392961 4751851 TimelockControllerTest:testHandleERC1155()
🟢-2596335 -37.16% 6986596 4390261 TimelockControllerTest:testHandleERC721()
🟢-2579847 -54.72% 4714774 2134927 TimelockControllerTest:testBatchCancelFinished()
🟢-2579847 -54.75% 4712246 2132399 TimelockControllerTest:testBatchHasBeenExecuted()
🟢-2579847 -54.76% 4711356 2131509 TimelockControllerTest:testBatchPendingIfExecuted()
🟢-2579847 -54.70% 4716362 2136515 TimelockControllerTest:testBatchScheduleAndExecuteWithEmptySalt()
🟢-2579847 -54.66% 4719786 2139939 TimelockControllerTest:testBatchScheduleAndExecuteWithNonEmptySalt()
🟢-2579847 -54.76% 4711140 2131293 TimelockControllerTest:testBatchTimestampHasBeenExecuted()
🟢-2579793 -55.26% 4668128 2088335 TimelockControllerTest:testBatchOperationAlreadyScheduled()
🟢-2579793 -55.20% 4673830 2094037 TimelockControllerTest:testBatchOperationIsNotReady()
🟢-2579793 -55.17% 4676095 2096302 TimelockControllerTest:testBatchPredecessorInvalid()
🟢-1719996 -55.47% 3100922 1380926 TimelockControllerTest:testExecutorCanBatchExecute()
🟢-1719996 -54.77% 3140217 1420221 TimelockControllerTest:testProposerCanBatchSchedule()
🟢-1719910 -54.85% 3135419 1415509 TimelockControllerTest:testBatchMinimumDelayUpdate()
🟢-1719886 -54.98% 3127920 1408034 TimelockControllerTest:testBatchHasNotBeenExecuted()
🟢-1719886 -54.99% 3127907 1408021 TimelockControllerTest:testBatchPendingIfNotYetExecuted()
🟢-1719886 -54.97% 3128864 1408978 TimelockControllerTest:testBatchReadyAfterTheExecutionTime()
🟢-1719886 -54.97% 3128870 1408984 TimelockControllerTest:testBatchReadyBeforeTheExecutionTime()
🟢-1719886 -54.97% 3128767 1408881 TimelockControllerTest:testBatchReadyOnTheExecutionTime()
🟢-1719886 -54.99% 3127898 1408012 TimelockControllerTest:testBatchTimestampHasNotBeenExecuted()
🟢-1719886 -55.23% 3114072 1394186 TimelockControllerTest:testCancellerCanCancelOperation()
🟢-1611238 -54.03% 2982016 1370778 TimelockControllerTest:testExecutorCannotBatchSchedule()
🟢-1611238 -53.95% 2986408 1375170 TimelockControllerTest:testProposerCannotBatchExecute()
🟢-859907 -55.19% 1558070 698163 TimelockControllerTest:testBatchInsufficientDelay()
🟢-859907 -55.52% 1548732 688825 TimelockControllerTest:testHashOperationBatch()
🟢-805619 -53.75% 1498840 693221 TimelockControllerTest:testAdminCannotBatchExecute()
🟢-805619 -53.83% 1496658 691039 TimelockControllerTest:testAdminCannotBatchSchedule()
🟢-805619 -53.82% 1496871 691252 TimelockControllerTest:testStrangerCannotBatchExecute()
🟢-805619 -53.90% 1494710 689091 TimelockControllerTest:testStrangerCannotBatchSchedule()
🟢-133542 -3.41% 3920524 3786982 TimelockControllerTest:testInitialSetup()
🟢-58358 -0.02% 239847460 239789102 P256Test:testVerifyWycheproofData()
🟢-57409 -2.15% 2669347 2611938 ERC1155Test:testUriNoBaseURI()
🟢-57372 -2.09% 2746422 2689050 ERC1155Test:testInitialSetup()
🟢-57371 -2.19% 2616810 2559439 ERC1155Test:testUriBaseAndTokenUriNotSet()
🟢-40647 -0.83% 4906856 4866209 ERC4626VaultTest:testInitialSetup()
🟢-16463 -0.69% 2383224 2366761 ERC721Test:testTokenURINoBaseURI()
🟢-16345 -0.73% 2230774 2214429 ERC721Test:testInitialSetup()
🟢-10772 -1.31% 821348 810576 Create3Test:testDeployCreate3Success()
🟢-10772 -1.29% 834712 823940 Create3Test:testDeployCreate3ValueSuccess()
🟢-10772 -10.07% 106925 96153 Create3Test:testDeployCreate3ZeroLengthBytecode()
🟢-9610 -1.22% 788690 779080 Create2Test:testDeployCreate2Success()
🟢-9610 -1.21% 795395 785785 Create2Test:testDeployCreate2ValueSuccess()
🟢-9610 -1.22% 785799 776189 CreateTest:testDeployCreateSuccess()
🟢-9610 -1.21% 792508 782898 CreateTest:testDeployCreateValueSuccess()
🟢-5830 -0.96% 605998 600168 ERC1155Test:testSafeBatchTransferFromWithData()
🟢-5824 -0.96% 604877 599053 ERC1155Test:testSafeBatchTransferFromNoData()
🟢-5824 -1.00% 583334 577510 ERC1155Test:testSafeBatchTransferFromReceiverInvalidReturnIdentifier()
🟢-5824 -0.96% 604918 599094 ERC1155Test:testSafeBatchTransferFromReceiverRevertsOnlySingle()
🟢-5817 -1.01% 577229 571412 ERC1155Test:testSafeBatchTransferFromReceiverReverts()
🟢-4654 -1.85% 251878 247224 ERC1155Test:testSafeBatchTransferFromReceiverFunctionNotImplemented()
🟢-4455 -0.31% 1424223 1419768 ERC20Test:testInitialSetup()
🟢-4375 -1.46% 299078 294703 ERC1155Test:testSafeBatchTransferFromByApprovedOperator()
🟢-4236 -1.84% 230708 226472 ERC1155Test:testSafeBatchTransferFromInsufficientBalance()
🟢-4236 -1.91% 221471 217235 ERC1155Test:testSafeBatchTransferFromToZeroAddress()
🟢-4236 -1.85% 228651 224415 ERC1155Test:testSafeMintBatchOverflow()
🟢-4027 -1.52% 265255 261228 ERC1155Test:testSafeBatchTransferFromEOAReceiver()
🟢-3438 -12.11% 28381 24943 ERC1155Test:testSafeBatchTransferFromLengthsMismatch()
🟢-3438 -10.88% 31585 28147 ERC1155Test:testSafeMintBatchLengthsMismatch()
🟢-3313 -0.58% 569262 565949 ERC1155Test:testSafeMintBatchWithData()
🟢-3307 -0.58% 568645 565338 ERC1155Test:testSafeMintBatchNoData()
🟢-3307 -0.60% 552051 548744 ERC1155Test:testSafeMintBatchReceiverInvalidReturnIdentifier()
🟢-3307 -0.58% 568622 565315 ERC1155Test:testSafeMintBatchReceiverRevertsOnlySingle()
🟢-3300 -1.58% 209228 205928 ERC1155Test:testSafeMintBatchReceiverFunctionNotImplemented()
🟢-3300 -0.60% 545922 542622 ERC1155Test:testSafeMintBatchReceiverReverts()
🟢-3196 -1.42% 225239 222043 ERC1155Test:testBurnBatchByApprovedOperator()
🟢-3196 -1.67% 191618 188422 ERC1155Test:testBurnBatchSuccess()
🟢-3196 -2.91% 109700 106504 ERC1155Test:testExistsAfterBatchBurn()
🟢-3196 -2.91% 109716 106520 ERC1155Test:testTotalSupplyAfterBatchBurn()
🟢-2558 -1.46% 174715 172157 ERC1155Test:testBurnBatchAmountExceedsBalance()
🟢-2517 -2.02% 124739 122222 ERC1155Test:testExistsAfterBatchMint()
🟢-2517 -1.14% 220149 217632 ERC1155Test:testSafeBatchTransferFromByNotApprovedOperator()
🟢-2517 -1.10% 227847 225330 ERC1155Test:testSafeMintBatchEOAReceiver()
🟢-2517 -2.02% 124670 122153 ERC1155Test:testTotalSupplyAfterBatchMint()
🔴+2008 +0.14% 1429654 1431662 ERC721Test:testSafeTransferFromNoData()
🟢-1719 -7.39% 23246 21527 ERC1155Test:testSafeMintBatchToZeroAddress()
🟢-1698 -1.58% 107646 105948 TimelockControllerTest:testOperationTargetRevert()
🔴+1627 +0.14% 1201685 1203312 ERC721Test:testSafeTransferFromWithData()
🟢-1448 -1.50% 96415 94967 TimelockControllerTest:testOperationPredecessorNotExecuted()
🟢-1360 -5.85% 23250 21890 ERC1155Test:testBurnBatchLengthsMismatch()
🟢-1180 -1.30% 90693 89513 TimelockControllerTest:testOperationPredecessorMultipleNotExecuted()
🟢-1168 -1.31% 88822 87654 TimelockControllerTest:testOperationEqualAndGreaterMinimumDelay()
🟢-1117 -1.72% 64816 63699 TimelockControllerTest:testOperationPredecessorNotScheduled()
🟢-981 -0.28% 350641 349660 ERC4626VaultTest:testMultipleMintDepositRedeemWithdraw()
🟢-936 -1.31% 71717 70781 TimelockControllerTest:testCompletePipelineOperationMinimumDelayUpdate()
🟢-918 -0.77% 119749 118831 TimelockControllerTest:testCompleteOperationWithAssignExecutorRoleToZeroAddress()
🟢-918 -0.94% 98117 97199 TimelockControllerTest:testCompletePipelineOperationSetRoleAdmin()
🟢-918 -0.92% 99570 98652 TimelockControllerTest:testOperationCancelFinished()
🟢-918 -0.95% 97053 96135 TimelockControllerTest:testOperationHasBeenExecuted()
🟢-918 -0.96% 96008 95090 TimelockControllerTest:testOperationPendingIfExecuted()
🟢-918 -0.96% 95839 94921 TimelockControllerTest:testOperationTimestampHasBeenExecuted()
🟢-918 -0.91% 101200 100282 TimelockControllerTest:testScheduleAndExecuteWithEmptySalt()
🟢-918 -0.88% 104536 103618 TimelockControllerTest:testScheduleAndExecuteWithNonEmptySalt()
🟢-855 -1.39% 61328 60473 TimelockControllerTest:testOperationPredecessorInvalid()
🟢-846 -1.64% 51530 50684 TimelockControllerTest:testOperationAlreadyScheduled()
🟢-846 -1.48% 57238 56392 TimelockControllerTest:testOperationOperationIsNotReady()
🟢-680 -4.04% 16839 16159 ERC1155Test:testBurnBatchFromZeroAddress()
🟢-680 -3.65% 18624 17944 ERC1155Test:testBurnBatchNonExistentTokenIds()
🟢-652 -0.32% 200758 200106 ERC4626VaultTest:testEmptyVaultwithdraw()
🟢-644 -0.86% 74796 74152 TimelockControllerTest:testProposerCanSchedule()
🟢-608 -1.00% 60593 59985 TimelockControllerTest:testOperationMinimumDelayUpdate()
🟢-593 -1.16% 51029 50436 TimelockControllerTest:testOperationHasNotBeenExecuted()
🟢-593 -1.16% 51072 50479 TimelockControllerTest:testOperationPendingIfNotYetExecuted()
🟢-593 -1.14% 52019 51426 TimelockControllerTest:testOperationReadyAfterTheExecutionTime()
🟢-593 -1.14% 51973 51380 TimelockControllerTest:testOperationReadyBeforeTheExecutionTime()
🟢-593 -1.14% 51856 51263 TimelockControllerTest:testOperationReadyOnTheExecutionTime()
🟢-593 -1.16% 50921 50328 TimelockControllerTest:testOperationTimestampHasNotBeenExecuted()
🟢-538 -0.32% 167389 166851 ERC1155Test:testBurnByApprovedOperator()
🟢-538 -0.48% 112882 112344 ERC1155Test:testBurnSuccess()
🟢-538 -0.49% 108752 108214 ERC1155Test:testExistsAfterSingleBurn()
🟢-538 -0.51% 105795 105257 ERC1155Test:testTotalSupplyAfterSingleBurn()
🟢-528 -0.10% 553889 553361 ERC4626VaultTest:testEmptyVaultDeposit()
🟢-528 -0.10% 554744 554216 ERC4626VaultTest:testEmptyVaultMint()
🟢-524 -1.79% 29323 28799 TimelockControllerTest:testExecutorCanExecute()
🟢-520 -0.51% 102937 102417 ERC1155Test:testBurnAmountExceedsBalance()
🟢-504 -0.27% 189519 189015 ERC4626VaultTest:testEmptyVaultRedeem()
🟢-484 -3.38% 14323 13839 ERC1155Test:testBurnNonExistentTokenId()
🟢-472 -0.07% 661593 661121 ERC721Test:testSafeMintSuccess()
🟢-472 -0.07% 686575 686103 ERC721Test:testTokenByIndex()
🟢-461 -0.10% 476498 476037 ERC4626VaultTest:test_RT_withdraw_deposit((address[4],uint256[4],uint256[4],int256),uint256)
🟢-425 -0.12% 362537 362112 ERC4626VaultTest:testVaultInteractionsForSomeoneElse()
🟢-380 -0.08% 476510 476130 ERC4626VaultTest:test_RT_mint_withdraw((address[4],uint256[4],uint256[4],int256),uint256)
🟢-376 -0.08% 476437 476061 ERC4626VaultTest:test_RT_deposit_withdraw((address[4],uint256[4],uint256[4],int256),uint256)
🟢-374 -0.05% 707533 707159 ERC721Test:testTokenOfOwnerByIndex()
🟢-369 -0.08% 475209 474840 ERC4626VaultTest:test_RT_mint_redeem((address[4],uint256[4],uint256[4],int256),uint256)
🟢-364 -0.08% 475205 474841 ERC4626VaultTest:test_RT_deposit_redeem((address[4],uint256[4],uint256[4],int256),uint256)
🟢-354 -0.08% 419698 419344 ERC721Test:testSafeMintTokenAlreadyMinted()
🟢-353 -0.07% 475230 474877 ERC4626VaultTest:test_RT_redeem_mint((address[4],uint256[4],uint256[4],int256),uint256)
🟢-350 -0.07% 475303 474953 ERC4626VaultTest:test_RT_redeem_deposit((address[4],uint256[4],uint256[4],int256),uint256)
🟢-335 -0.00% 1024179166 1024178831 Create3Test:testDeployCreate3Revert()
🟢-312 -0.07% 476358 476046 ERC4626VaultTest:test_RT_withdraw_mint((address[4],uint256[4],uint256[4],int256),uint256)
🟢-306 -0.07% 466310 466004 ERC4626VaultTest:test_deposit((address[4],uint256[4],uint256[4],int256),uint256,uint256)
🟢-301 -0.07% 461000 460699 ERC4626VaultTest:test_previewMint((address[4],uint256[4],uint256[4],int256),uint256)
🟢-295 -0.07% 428317 428022 ERC4626VaultTest:test_convertToAssets((address[4],uint256[4],uint256[4],int256),uint256)
🟢-288 -0.06% 466460 466172 ERC4626VaultTest:test_mint((address[4],uint256[4],uint256[4],int256),uint256,uint256)
🟢-288 -0.06% 468409 468121 ERC4626VaultTest:test_redeem((address[4],uint256[4],uint256[4],int256),uint256,uint256)
🟢-288 -0.06% 469600 469312 ERC4626VaultTest:test_withdraw((address[4],uint256[4],uint256[4],int256),uint256,uint256)
🟢-287 -0.06% 460815 460528 ERC4626VaultTest:test_previewDeposit((address[4],uint256[4],uint256[4],int256),uint256)
🟢-262 -2.73% 9580 9318 TimelockControllerTest:testHashOperation()
🟢-262 -1.36% 19242 18980 TimelockControllerTest:testOperationInsufficientDelay()
🟢-248 -1.28% 19362 19114 TimelockControllerTest:testExecutorCannotSchedule()
🟢-248 -1.04% 23880 23632 TimelockControllerTest:testProposerCannotExecute()
🟢-247 -0.06% 428390 428143 ERC4626VaultTest:test_convertToShares((address[4],uint256[4],uint256[4],int256),uint256)
🟢-241 -0.06% 425722 425481 ERC4626VaultTest:test_maxWithdraw((address[4],uint256[4],uint256[4],int256))
🟢-236 -0.06% 385543 385307 ERC721Test:testBalanceOfCase1()
🟢-236 -0.06% 386970 386734 ERC721Test:testTokenByIndexOutOfBounds()
🟢-236 -0.06% 385402 385166 ERC721Test:testTotalSupply()
🟢-228 -0.05% 425087 424859 ERC4626VaultTest:test_totalAssets((address[4],uint256[4],uint256[4],int256))
🟢-220 -0.13% 172536 172316 ERC4626VaultTest:testSingleDepositWithdraw()
🟢-217 -0.05% 436130 435913 ERC4626VaultTest:test_withdraw_zero_allowance((address[4],uint256[4],uint256[4],int256),uint256)
🟢-213 -0.05% 424569 424356 ERC4626VaultTest:test_maxRedeem((address[4],uint256[4],uint256[4],int256))
🟢-212 -0.05% 424496 424284 ERC4626VaultTest:test_asset((address[4],uint256[4],uint256[4],int256))
🟢-212 -0.05% 424420 424208 ERC4626VaultTest:test_maxDeposit((address[4],uint256[4],uint256[4],int256))
🟢-212 -0.05% 424462 424250 ERC4626VaultTest:test_maxMint((address[4],uint256[4],uint256[4],int256))
🟢-206 -0.12% 171496 171290 ERC4626VaultTest:testSingleMintRedeem()
🟢-196 -0.08% 257142 256946 ERC721Test:testPermitReplaySignature()
🟢-189 -0.05% 384629 384440 ERC721Test:testBurnSuccess()
🟢-189 -0.04% 466323 466134 ERC721Test:testBurnSuccessViaApproveAndSetApprovalForAll()
🟢-189 -0.03% 605550 605361 ERC721Test:testTransferFrom()
🟢-186 -0.03% 742240 742054 P256Test:testVerifyWithFlippedValues()
🟢-174 -0.04% 462270 462096 ERC4626VaultTest:test_previewRedeem((address[4],uint256[4],uint256[4],int256),uint256)
🟢-168 -0.00% 1040440742 1040440574 Create3Test:testDeployCreate3ProxyCreationFails()
🟢-167 -0.04% 434888 434721 ERC4626VaultTest:test_redeem_zero_allowance((address[4],uint256[4],uint256[4],int256),uint256)
🟢-160 -0.06% 253467 253307 ERC721Test:testPermitSuccess()
🟢-154 -0.07% 227466 227312 ERC721Test:testPermitBadChainId()
🟢-154 -0.07% 224657 224503 ERC721Test:testPermitBadNonce()
🟢-154 -0.07% 225506 225352 ERC721Test:testPermitOtherSignature()
🟢-152 -0.03% 537084 536932 ERC1155Test:testSafeTransferFromWithData()
🟢-150 -0.00% 1040433618 1040433468 Create2Test:testDeployCreate2Revert()
🟢-150 -0.00% 1040433551 1040433401 CreateTest:testDeployCreateRevert()
🟢-149 -0.04% 413837 413688 ERC721Test:testSafeMintReceiverContract()
🟢-149 -0.04% 336722 336573 ERC721Test:testSafeMintReceiverContractInvalidReturnIdentifier()
🟢-142 -0.12% 115209 115067 ERC721Test:testSafeMintReceiverContractFunctionNotImplemented()
🟢-142 -0.04% 334010 333868 ERC721Test:testSafeMintReceiverContractRevertsWithMessage()
🟢-142 -0.04% 334167 334025 ERC721Test:testSafeMintReceiverContractRevertsWithPanic()
🟢-142 -0.04% 333717 333575 ERC721Test:testSafeMintReceiverContractRevertsWithoutMessage()
🟢-140 -0.03% 534891 534751 ERC1155Test:testSafeTransferFromNoData()
🟢-140 -0.03% 509490 509350 ERC1155Test:testSafeTransferFromReceiverInvalidReturnIdentifier()
🟢-126 -0.08% 165881 165755 ERC1155Test:testSafeTransferFromReceiverFunctionNotImplemented()
🟢-126 -0.03% 503162 503036 ERC1155Test:testSafeTransferFromReceiverReverts()
🟢-124 -0.67% 18527 18403 TimelockControllerTest:testAdminCannotExecute()
🟢-124 -0.76% 16214 16090 TimelockControllerTest:testAdminCannotSchedule()
🟢-124 -0.75% 16556 16432 TimelockControllerTest:testStrangerCannotExecute()
🟢-124 -0.86% 14355 14231 TimelockControllerTest:testStrangerCannotSchedule()
🟢-118 -0.06% 205347 205229 ERC721Test:testApproveClearingApprovalWithNoPriorApproval()
🟢-118 -0.06% 213695 213577 ERC721Test:testApproveClearingApprovalWithPriorApproval()
🟢-118 -0.05% 227236 227118 ERC721Test:testApproveFromApprovedAddress()
🟢-118 -0.06% 201154 201036 ERC721Test:testApproveFromNonOwner()
🟢-118 -0.05% 251819 251701 ERC721Test:testApproveFromOperatorAddress()
🟢-118 -0.06% 199428 199310 ERC721Test:testApproveInvalidTokenId()
🟢-118 -0.06% 195917 195799 ERC721Test:testApproveToOwner()
🟢-118 -0.06% 213716 213598 ERC721Test:testApproveToZeroAddress()
🟢-118 -0.05% 224611 224493 ERC721Test:testApproveWithNoPriorApproval()
🟢-118 -0.05% 233008 232890 ERC721Test:testApproveWithPriorApprovalToDifferentAddress()
🟢-118 -0.05% 231577 231459 ERC721Test:testApproveWithPriorApprovalToSameAddress()
🟢-118 -0.05% 222136 222018 ERC721Test:testGetApprovedApprovedTokenId()
🟢-118 -0.06% 198720 198602 ERC721Test:testGetApprovedNotApprovedTokenId()
🟢-118 -0.06% 194449 194331 ERC721Test:testOwnerOf()
🟢-118 -0.06% 198591 198473 ERC721Test:testPermitExpiredDeadline()
🟢-118 -0.92% 12825 12707 ERC721Test:testSafeMintNonMinter()
🟢-118 -0.78% 15186 15068 ERC721Test:testSafeMintOverflow()
🟢-118 -0.31% 38164 38046 ERC721Test:testSafeMintToZeroAddress()
🟢-118 -0.06% 195699 195581 ERC721Test:testSetApprovalForAllOperatorIsOwner()
🟢-118 -0.05% 223797 223679 ERC721Test:testSetApprovalForAllSuccessCase1()
🟢-118 -0.05% 216156 216038 ERC721Test:testSetApprovalForAllSuccessCase2()
🟢-118 -0.05% 229971 229853 ERC721Test:testSetApprovalForAllSuccessCase3()
🟢-118 -0.06% 198859 198741 ERC721Test:testTokenURIDefault()
🟢-118 -0.07% 158761 158643 ERC721Test:testTokenURINoTokenUri()
🟢-116 -0.02% 469786 469670 ERC1155Test:testSafeMintWithData()
🟢-114 -0.02% 463386 463272 ERC4626VaultTest:test_previewWithdraw((address[4],uint256[4],uint256[4],int256),uint256)
🟢-112 -0.31% 36460 36348 ERC4626VaultTest:testDepositZero()
🟢-112 -0.31% 36603 36491 ERC4626VaultTest:testMintZero()
🟢-104 -0.02% 468603 468499 ERC1155Test:testSafeMintNoData()
🟢-104 -0.02% 459921 459817 ERC1155Test:testSafeMintReceiverInvalidReturnIdentifier()
🟢-94 -0.05% 178749 178655 ERC721Test:testTokenURIAfterBurning()
🟢-93 -0.13% 72065 71972 ERC20Test:testPermitReplaySignature()
🟢-93 -0.13% 72005 71912 ERC4626VaultTest:testPermitReplaySignature()
🟢-93 -0.03% 370321 370228 P256Test:testVerifyWithInvalidSignature()
🟢-93 -0.03% 371640 371547 P256Test:testVerifyWithValidSignature()
🟢-90 -0.08% 116369 116279 ERC1155Test:testSafeMintReceiverFunctionNotImplemented()
🟢-90 -0.02% 453614 453524 ERC1155Test:testSafeMintReceiverReverts()
🟢-85 -0.07% 121455 121370 ERC4626VaultTest:testWithdrawInsufficientAllowance()
🟢-72 -0.03% 235960 235888 ERC1155Test:testBalanceOfBatchCase1()
🟢-72 -0.04% 190530 190458 ERC1155Test:testBalanceOfBatchCase2()
🟢-72 -0.06% 130299 130227 ERC4626VaultTest:testRedeemInsufficientShares()
🟢-72 -0.06% 117044 116972 ERC4626VaultTest:testWithdrawInsufficientAssets()
🟢-60 -0.01% 627048 626988 ERC721Test:testTokenOfOwnerByIndexReverts()
🟢-54 -0.03% 173876 173822 ERC1155Test:testSafeTransferFromByApprovedOperator()
🟢-54 -0.04% 138287 138233 ERC1155Test:testSafeTransferFromEOAReceiver()
🟢-51 -0.01% 429585 429534 ERC721Test:testSafeTransferFromReceiverInvalidReturnIdentifier()
🟢-50 -0.28% 17589 17539 SignatureCheckerTest:testEIP1271NoIsValidSignatureFunction()
🟢-50 -0.22% 22398 22348 SignatureCheckerTest:testEIP1271WithInvalidSignature(bytes,string)
🟢-50 -0.18% 28523 28473 SignatureCheckerTest:testEIP1271WithInvalidSignature1()
🟢-50 -0.17% 30198 30148 SignatureCheckerTest:testEIP1271WithInvalidSignature2()
🟢-50 -0.17% 28601 28551 SignatureCheckerTest:testEIP1271WithInvalidSigner()
🟢-50 -0.27% 18498 18448 SignatureCheckerTest:testEIP1271WithMaliciousWallet()
🟢-50 -0.18% 28510 28460 SignatureCheckerTest:testEIP1271WithValidSignature()
🟢-48 -0.07% 68285 68237 ERC20Test:testPermitSuccess()
🟢-48 -0.07% 68204 68156 ERC4626VaultTest:testPermitSuccess()
🟢-47 -0.06% 81763 81716 ERC4626VaultTest:testDepositInsufficientAllowance()
🟢-47 -0.19% 24103 24056 ERC4626VaultTest:testDepositWithNoApproval()
🟢-47 -0.19% 24147 24100 ERC4626VaultTest:testMintWithNoApproval()
🟢-45 -0.01% 566632 566587 BatchDistributorTest:testDistributeTokenRevertWithInsufficientAllowance()
🟢-45 -0.01% 567285 567240 BatchDistributorTest:testDistributeTokenRevertWithInsufficientBalance()
🟢-45 -0.11% 42764 42719 ERC20Test:testPermitBadChainId()
🟢-45 -0.11% 39846 39801 ERC20Test:testPermitBadNonce()
🟢-45 -0.11% 40826 40781 ERC20Test:testPermitOtherSignature()
🟢-45 -0.11% 42752 42707 ERC4626VaultTest:testPermitBadChainId()
🟢-45 -0.11% 39948 39903 ERC4626VaultTest:testPermitBadNonce()
🟢-45 -0.11% 40794 40749 ERC4626VaultTest:testPermitOtherSignature()
🟢-44 -0.02% 208092 208048 ERC721Test:testSafeTransferFromReceiverFunctionNotImplemented()
🟢-44 -0.01% 426898 426854 ERC721Test:testSafeTransferFromReceiverRevertsWithMessage()
🟢-44 -0.01% 427100 427056 ERC721Test:testSafeTransferFromReceiverRevertsWithPanic()
🟢-44 -0.01% 426605 426561 ERC721Test:testSafeTransferFromReceiverRevertsWithoutMessage()
🟢-42 -0.37% 11252 11210 EIP712DomainSeparatorTest:testDomainSeparatorV4()
🟢-42 -0.37% 11418 11376 ERC20Test:testDomainSeparator()
🟢-42 -0.37% 11466 11424 ERC4626VaultTest:testDomainSeparator()
🟢-42 -0.37% 11485 11443 ERC721Test:testDomainSeparator()
🟢-41 -0.04% 100616 100575 ERC1155Test:testSetUri()
🟢-41 -0.04% 97448 97407 ERC1155Test:testUriBaseAndTokenUriSet()
🟢-38 -0.06% 61551 61513 ERC1155Test:testSetUriEmpty()
🟢-36 -0.03% 125404 125368 ERC1155Test:testBalanceOfCase1()
🟢-36 -0.03% 122460 122424 ERC1155Test:testBurnByNotApprovedOperator()
🟢-36 -0.04% 99346 99310 ERC1155Test:testExistsAfterSingleMint()
🟢-36 -0.03% 128498 128462 ERC1155Test:testSafeMintEOAReceiver()
🟢-36 -0.03% 124445 124409 ERC1155Test:testSafeTransferFromByNotApprovedOperator()
🟢-36 -0.04% 99275 99239 ERC1155Test:testTotalSupplyAfterSingleMint()
🔴+32 +0.01% 608972 609004 BatchDistributorTest:testDistributeTokenMultipleAddressesSuccess()
🟢-25 -0.14% 18045 18020 SignatureCheckerTest:testEOAWithInvalidSignature1()
🟢-25 -0.11% 22060 22035 SignatureCheckerTest:testEOAWithInvalidSignature2()
🟢-25 -0.14% 18137 18112 SignatureCheckerTest:testEOAWithInvalidSigner()
🟢-25 -0.13% 19007 18982 SignatureCheckerTest:testEOAWithTooHighSValue()
🟢-25 -0.14% 18053 18028 SignatureCheckerTest:testEOAWithValidSignature()
🟢-24 -0.13% 18006 17982 TimelockControllerTest:testReturnsLaterMinimumDelayForCalls()
🟢-18 -0.02% 74678 74660 ERC1155Test:testSafeMintOverflow()
🟢-18 -0.02% 72068 72050 ERC1155Test:testSafeTransferFromInsufficientBalance()
🟢-18 -0.02% 72095 72077 ERC1155Test:testSafeTransferFromToZeroAddress()
🟢-17 -0.08% 20924 20907 ERC4626VaultTest:testWithdrawWithNoAssets()
🟢-12 -0.00% 571704 571692 BatchDistributorTest:testDistributeTokenOneAddressSuccess()
🟢-6 -0.00% 1621946 1621940 BatchDistributorTest:testDistributeEtherReentrancy()

Summary

  • Total tests measured: 610
  • Changed: 284
  • Regressions (gas up): 3
  • Improvements (gas down): 281
  • New tests: 0
  • Deleted tests: 0
  • Newly failing: 0
  • Newly passing: 0
  • Top regression: ERC721Test:testSafeTransferFromNoData() (+2008)
  • Top improvement: TimelockControllerTest:testBatchTargetRevert() (-5159574)

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown

📊 Bytecode Size Changes (venom)

Contract legacy-O2 legacy-Os -O2 -O3 -Os
curvefi/amm/stableswap/meta_implementation/meta_implementation_v_700.vy 23610 22805 20114 (🟢-672) 19115 (🟢-640) 18673 (🟢-642)
curvefi/legacy/CurveStableSwapMetaNG.vy 24952 23578 19896 (🟢-594) 19291 (🟢-580) 18611 (🟢-564)
curvefi/amm/stableswap/implementation/implementation_v_700.vy 24962 23769 19891 (🟢-373) 19009 (🟢-384) 18502 (🟢-343)
curvefi/legacy/CurveStableSwapNG.vy 24473 23298 19326 (🟢-351) 18482 (🟢-362) 17993 (🟢-321)
curvefi/amm/tricryptoswap/implementation/implementation_v_200.vy 20724 19959 17591 (🟢-429) 17073 (🟢-445) 16532 (🟢-429)
yearnfi/VaultV3.vy 19972 19063 16834 (🟢-183) 14948 (🟢-183) 14294 (🟢-183)
curvefi/legacy/CurveCryptoSwap2.vy 18947 18382 15441 (🟢-193) 14899 (🟢-193) 14518 (🟢-193)
curvefi/amm/twocryptoswap/implementation/implementation_v_210.vy 17634 16894 15352 (🟢-333) 14810 (🟢-322) 14315 (🟢-333)
yearnfi/VaultV2.vy 16676 15763 13741 (🟢-122) 13283 (🟢-122) 12452 (🟢-122)
curvefi/amm/stableswap/factory/factory_v_100.vy 14558 13978 13015 (🟢-302) 11643 (🟢-182) 11606 (🟢-182)
curvefi/gauge/child_gauge/implementation/implementation_v_110.vy 12338 11561 10072 (🟢-198) 9607 (🟢-168) 9014 (🟢-168)
curvefi/amm/stableswap/views/views_v_120.vy 12784 12368 9870 (🟢-100) 9290 (🟢-123) 9432 (🟢-100)
curvefi/gauge/child_gauge/implementation/implementation_v_100.vy 12017 11249 9802 (🟢-196) 9336 (🟢-166) 8754 (🟢-166)
curvefi/gauge/child_gauge/implementation/implementation_v_020.vy 10665 9947 8833 (🟢-180) 8415 (🟢-150) 7878 (🟢-150)
curvefi/helpers/router/router_v_110.vy 6717 6717 6749 (🟢-254) 6122 (🟢-254) 6353 (🟢-254)
curvefi/registries/metaregistry/metaregistry_v_110.vy 7590 6732 6615 (🟢-36) 5852 (🟢-36) 5691 (🟢-36)
curvefi/amm/tricryptoswap/views/views_v_200.vy 7821 7776 6565 (🟢-132) 6318 (🟢-127) 6382 (🟢-132)
curvefi/amm/twocryptoswap/views/views_v_200.vy 6991 6946 6151 (🟢-121) 5910 (🟢-116) 5968 (🟢-121)
curvefi/helpers/stable_swap_meta_zap/stable_swap_meta_zap_v_100.vy 7302 7067 6044 (🟢-335) 5637 (🟢-375) 5779 (🟢-335)
curvefi/amm/twocryptoswap/factory/factory_v_200.vy 5540 5252 5714 (🟢-280) 4537 (🟢-160) 4683 (🟢-162)
curvefi/registries/metaregistry/registry_handlers/stableswap/handler_v_110.vy 6633 6259 5691 (🟢-168) 4933 (🟢-161) 5394 (🟢-168)
curvefi/amm/tricryptoswap/factory/factory_v_200.vy 5246 5021 5632 (🟢-291) 4755 (🟢-171) 4868 (🟢-171)
curvefi/gauge/child_gauge/factory/factory_v_201.vy 4844 4547 4012 (🟢-254) 3820 (🟢-194) 3586 (🟢-194)
yearnfi/VaultFactory.vy 3765 3617 3849 (🟢-136) 2429 (🟢-76) 2887 (🟢-78)
curvefi/registries/metaregistry/registry_handlers/tricryptoswap/handler_v_110.vy 4241 3939 3797 (🟢-41) 3473 (🟢-74) 3506 (🟢-41)
curvefi/registries/metaregistry/registry_handlers/twocryptoswap/handler_v_110.vy 4186 3884 3753 (🟢-24) 3393 (🟢-24) 3409 (🟢-24)
curvefi/gauge/child_gauge/factory/factory_v_100.vy 4183 3914 3468 (🟢-226) 3262 (🟢-166) 3047 (🟢-166)
curvefi/helpers/rate_provider/rate_provider_v_101.vy 3260 3260 2755 (🟢-24) 2413 (🟢-24) 2426 (🟢-24)
curvefi/registries/address_provider/address_provider_v_201.vy 2973 2782 2662 (🟢-51) 2548 (🟢-21) 2403 (🟢-21)
curvefi/helpers/rate_provider/rate_provider_v_100.vy 2847 2841 2344 (🟢-13) 2037 (🟢-13) 2045 (🟢-13)
curvefi/helpers/deposit_and_stake_zap/deposit_and_stake_zap_v_100.vy 2322 2316 2011 (🟢-112) 1777 (🟢-112) 1809 (🟢-112)
curvefi/governance/relayer/taiko/relayer_v_001.vy 2068 2064 1743 (🟢-41) 1538 (🟢-41) 1571 (🟢-41)
curvefi/governance/relayer/polygon_cdk/relayer_v_101.vy 1556 1523 1553 (🟢-34) 1371 (🟢-34) 1372 (🟢-34)
curvefi/governance/relayer/arb_orbit/relayer_v_101.vy 1266 1262 1264 (🟢-16) 1108 (🟢-16) 1139 (🟢-16)
curvefi/governance/relayer/op_stack/relayer_v_101.vy 1186 1182 1203 (🟢-16) 1050 (🟢-16) 1078 (🟢-16)
curvefi/governance/relayer/not_rollup/relayer_v_100.vy 1168 1153 1192 (🟢-16) 1045 (🟢-16) 1057 (🟢-16)
curvefi/governance/vault/vault_v_100.vy 964 941 874 (🟢-11) 855 (🟢-11) 853 (🟢-11)

Full bytecode sizes

Contract legacy-O2 legacy-Os -O2 -O3 -Os
curvefi/amm/stableswap/meta_implementation/meta_implementation_v_700.vy 23610 22805 20114 19115 18673
curvefi/legacy/CurveStableSwapMetaNG.vy 24952 23578 19896 19291 18611
curvefi/amm/stableswap/implementation/implementation_v_700.vy 24962 23769 19891 19009 18502
curvefi/legacy/CurveStableSwapNG.vy 24473 23298 19326 18482 17993
curvefi/amm/tricryptoswap/implementation/implementation_v_200.vy 20724 19959 17591 17073 16532
yearnfi/VaultV3.vy 19972 19063 16834 14948 14294
curvefi/legacy/CurveCryptoSwap2.vy 18947 18382 15441 14899 14518
curvefi/amm/twocryptoswap/implementation/implementation_v_210.vy 17634 16894 15352 14810 14315
yearnfi/VaultV2.vy 16676 15763 13741 13283 12452
curvefi/amm/stableswap/factory/factory_v_100.vy 14558 13978 13015 11643 11606
curvefi/gauge/child_gauge/implementation/implementation_v_110.vy 12338 11561 10072 9607 9014
curvefi/amm/stableswap/views/views_v_120.vy 12784 12368 9870 9290 9432
curvefi/gauge/child_gauge/implementation/implementation_v_100.vy 12017 11249 9802 9336 8754
curvefi/amm/tricryptoswap/math/math_v_200.vy 11189 11126 9520 8162 8424
curvefi/legacy/CurveCryptoMathOptimized3.vy 11188 11125 9519 8162 8424
curvefi/gauge/child_gauge/implementation/implementation_v_020.vy 10665 9947 8833 8415 7878
curvefi/helpers/router/router_v_110.vy 6717 6717 6749 6122 6353
curvefi/registries/metaregistry/metaregistry_v_110.vy 7590 6732 6615 5852 5691
curvefi/amm/tricryptoswap/views/views_v_200.vy 7821 7776 6565 6318 6382
curvefi/amm/twocryptoswap/views/views_v_200.vy 6991 6946 6151 5910 5968
curvefi/helpers/stable_swap_meta_zap/stable_swap_meta_zap_v_100.vy 7302 7067 6044 5637 5779
curvefi/amm/twocryptoswap/factory/factory_v_200.vy 5540 5252 5714 4537 4683
curvefi/registries/metaregistry/registry_handlers/stableswap/handler_v_110.vy 6633 6259 5691 4933 5394
curvefi/amm/tricryptoswap/factory/factory_v_200.vy 5246 5021 5632 4755 4868
curvefi/amm/twocryptoswap/math/math_v_210.vy 6800 6800 5581 5107 5112
curvefi/gauge/child_gauge/factory/factory_v_201.vy 4844 4547 4012 3820 3586
yearnfi/VaultFactory.vy 3765 3617 3849 2429 2887
curvefi/registries/metaregistry/registry_handlers/tricryptoswap/handler_v_110.vy 4241 3939 3797 3473 3506
curvefi/registries/metaregistry/registry_handlers/twocryptoswap/handler_v_110.vy 4186 3884 3753 3393 3409
curvefi/gauge/child_gauge/factory/factory_v_100.vy 4183 3914 3468 3262 3047
curvefi/helpers/rate_provider/rate_provider_v_101.vy 3260 3260 2755 2413 2426
curvefi/registries/address_provider/address_provider_v_201.vy 2973 2782 2662 2548 2403
curvefi/amm/stableswap/math/math_v_100.vy 3067 3046 2598 2403 2423
curvefi/helpers/rate_provider/rate_provider_v_100.vy 2847 2841 2344 2037 2045
curvefi/helpers/deposit_and_stake_zap/deposit_and_stake_zap_v_100.vy 2322 2316 2011 1777 1809
curvefi/governance/relayer/taiko/relayer_v_001.vy 2068 2064 1743 1538 1571
curvefi/governance/relayer/polygon_cdk/relayer_v_101.vy 1556 1523 1553 1371 1372
curvefi/governance/relayer/arb_orbit/relayer_v_101.vy 1266 1262 1264 1108 1139
curvefi/governance/relayer/op_stack/relayer_v_101.vy 1186 1182 1203 1050 1078
curvefi/governance/relayer/not_rollup/relayer_v_100.vy 1168 1153 1192 1045 1057
curvefi/governance/vault/vault_v_100.vy 964 941 874 855 853
curvefi/governance/relayer/relayer_v_100.vy 496 496 600 505 510
curvefi/governance/agent/agent_v_100.vy 541 541 443 415 419
curvefi/governance/agent/agent_v_101.vy 541 541 443 415 419

Comment thread vyper/codegen_venom/expr.py Fixed
@codecov

codecov Bot commented Jun 15, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 89.66006% with 73 lines in your changes missing coverage. Please review.
✅ Project coverage is 92.78%. Comparing base (172e262) to head (a9909d8).

Files with missing lines Patch % Lines
vyper/codegen_venom/expr.py 83.33% 28 Missing and 4 partials ⚠️
vyper/codegen_venom/module.py 78.16% 17 Missing and 2 partials ⚠️
vyper/codegen_venom/stmt.py 86.91% 12 Missing and 2 partials ⚠️
vyper/codegen_venom/builtins/abi.py 97.16% 2 Missing and 2 partials ⚠️
vyper/builtins/functions.py 87.50% 1 Missing and 1 partial ⚠️
vyper/codegen_venom/context.py 98.16% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5127      +/-   ##
==========================================
- Coverage   92.83%   92.78%   -0.05%     
==========================================
  Files         191      191              
  Lines       29374    29973     +599     
  Branches     5150     5240      +90     
==========================================
+ Hits        27268    27810     +542     
- Misses       1412     1460      +48     
- Partials      694      703       +9     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dca2b1107d

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread vyper/codegen_venom/builtins/create.py
Comment thread vyper/codegen_venom/builtins/create.py
Comment thread vyper/codegen_venom/expr.py
Comment thread vyper/semantics/analysis/global_.py
Comment thread vyper/codegen_venom/builtins/simple.py

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bbb57d0fc2

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread vyper/compiler/output.py

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d08b9fe7d8

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread vyper/semantics/analysis/global_.py Outdated
Comment thread vyper/semantics/analysis/global_.py

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 74358c418a

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread vyper/semantics/analysis/global_.py
Comment thread vyper/semantics/analysis/global_.py
Comment thread vyper/codegen_venom/builtins/convert.py
@harkal

harkal commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator Author

Notes on the implementation: https://gist.github.com/harkal/d4fad8226b19b8b76227f54285d77340

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants