Skip to content

vendor fvm-solidity mocks; convert DDO test off MockAllocationFacet#669

Merged
parkan merged 2 commits intomainfrom
feat/datacap-actor-mock
Apr 23, 2026
Merged

vendor fvm-solidity mocks; convert DDO test off MockAllocationFacet#669
parkan merged 2 commits intomainfrom
feat/datacap-actor-mock

Conversation

@parkan
Copy link
Copy Markdown
Collaborator

@parkan parkan commented Apr 23, 2026

Summary

  • Vendors fvm-solidity sources under `util/testutil/sol/` (pin `b0404b9`, includes upstream PR Content Provider / GraphSync #16 DataCap dispatch)
  • `make bytecode` regenerates the embedded `.txt` blobs via forge; `make drift` audits against the upstream pin. CI unchanged -- forge is a developer-only dep
  • `TestIntegration_DDOFullDealFlow` now exercises the real `createAllocationRequests` path. `MockAllocationFacet` (`util/testutil/mock_ddo.go` + bytecode) and the obsolete tripwire test are removed
  • `SendImpersonatedTx` gas bumped 500k -> 5M to fit the allocation + payment-rail-creation path

Test plan

  • `go test -run 'TestIntegration_FVM' ./util/testutil` -- mock self-tests
  • `go test -run 'TestIntegration_DDOFullDealFlow' ./service/dealpusher` -- real allocation path through DataCap mock
  • `make -C util/testutil/sol bytecode` -- forge build reproduces checked-in bytecode
  • `make -C util/testutil/sol drift` -- vendored sources match upstream pin

util/testutil/sol/ vendors the upstream fvm-solidity sources (pin
b0404b9, includes the DataCap dispatch from upstream PR #16). The
DataCap mock returns a canned single-allocation VerifregResponse, which
drives TestIntegration_DDOFullDealFlow through the real
createAllocationRequests path -- the MockAllocationFacet bypass
(mock_ddo.go, mock_allocation_facet_bytecode.txt) is removed as
obsolete, along with the now-redundant tripwire test.

`make bytecode` regenerates the embedded .txt blobs via forge.
`make drift` fetches the pinned upstream files and diffs against the
vendored copies. CI is unchanged -- forge is a developer-only dep,
checked-in bytecode is what runs.

SendImpersonatedTx gas bumped 500k -> 5M to fit the full
register-allocation + payment-rail-creation path.
@parkan parkan requested a review from anjor April 23, 2026 11:41
@parkan
Copy link
Copy Markdown
Collaborator Author

parkan commented Apr 23, 2026

upstreamed here: filecoin-project/fvm-solidity#16 (comment)

@anjor
Copy link
Copy Markdown
Collaborator

anjor commented Apr 23, 2026

lgtm

@parkan parkan enabled auto-merge (squash) April 23, 2026 13:19
@parkan parkan merged commit 5c89423 into main Apr 23, 2026
1 check passed
@parkan parkan deleted the feat/datacap-actor-mock branch April 23, 2026 13:29
parkan added a commit that referenced this pull request Apr 23, 2026
## Summary
PR #669 added \`//go:generate make -C sol bytecode\` to
\`util/testutil/fvm_precompiles.go\`, which calls \`forge build\` +
\`forge inspect\`. The devcontainer's Dockerfile only copied \`anvil\`
from the Foundry image, not \`forge\`.

Effect: CI's \"Generate swagger code\" step runs \`go generate ./...\`
whenever codegen-gated paths (\`api/\`, \`handler/\`, \`cmd/\`,
\`storagesystem/\`, \`docs/gen/\`, \`model/\`, \`singularity.go\`,
\`docgen.sh\`) change. On those PRs, \`make -C sol bytecode\` fails with
\`forge: No such file or directory\`.

Currently blocks #670, #673, #674.

## Test plan
- [ ] CI devcontainer build includes \`/usr/local/bin/forge\`
- [ ] \`go generate ./...\` succeeds inside the devcontainer
parkan added a commit that referenced this pull request Apr 23, 2026
## Summary
\`forge inspect\` appends a CBOR metadata section to the
deployedBytecode: an IPFS hash of the compiler metadata JSON plus the
solc version tag. That IPFS hash drifts between forge versions even with
\`solc\` pinned in \`foundry.toml\`. Locally (forge 1.5.1) it matches
what was committed in #669; in CI (\`foundry:latest\`, newer) \`go
generate ./...\` produces different trailing bytes and \`git diff
--exit-code\` fails.

Fix: \`bytecode_hash = \"none\"\` + \`cbor_metadata = false\` -- solc
omits the metadata section entirely. Output is deterministic across
forge versions and solc patches. Regenerated the three .txt files
against the new config; runtime bytecode is unchanged (FVM precompile
mocks don't consult the metadata).

Currently blocks #670, #673, #674 after #675 unblocked the
missing-\`forge\` issue.

## Test plan
- [x] \`make -C util/testutil/sol clean bytecode\` produces the
committed output under forge 1.5.1
- [x] \`go test ./util/testutil/...\` pass
- [x] \`go test ./service/dealpusher/...\` pass (DDO / PDP mocks
exercise the stripped bytecode)
- [ ] CI
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.

2 participants