Repository navigation
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
hpmaxi
marked this pull request as ready for review
October 17, 2026 19:48
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Governance could add a compliance module that refuses every mint, or unbind the token, at once. Module, binding and admin changes on the compliance contract now wait for the vault's timelock after setup, like every other change in the kit.
Changes
bind_vaultandfinish_setupon the compliance contractpropose_change/apply_changeon the vault's clock; direct calls answerUseTimelockafter setupfinish_setupandhealth().compliance_boundneed a kit compliance contract on its clock; one that does not answerVaultBindingis accepted as an external modulenpm run extendcovers the compliance queue, and the guards check the refusal and the queueDeviations
ComplianceContractError(8001–8011): OpenZeppelin'sComplianceErroris already in this contract's spec, and two enums with one name break the generated TypeScript client.controls.rstest, the wiring tables gain two cases (bound elsewhere, setup open), and a test accepts an external compliance contract.Acceptance criteria
bind_vaultonce during setup;finish_setupneeds a bound vault and closes the window for goodadd_module_to,remove_module_from,bind_tokenandunbind_tokenare refused withUseTimelockpropose_change,cancel_change,apply_changeandpending_changesfollow the vault's clockfinish_setuprequires a kit compliance contract bound to it with setup finishedfinish_setuprefuses while a hand-over is pendingTest plan
Automated tests
CARGO_TARGET_DIR=<repo>/target SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2=1 nix develop -c cargo test --locked -p compliance: 29 tests pass, 26 of them intest::changes.--workspace: async-vault 371, compliance 29, nav-oracle 80, share-token 64, timelock 19, identity-verifier 6 and storage 6 pass.cargo test --locked -p async-vault -p nav-oracle --features upgrade_wasm with_wasmpasses 5 + 2.npm run deploy -w scripts/harnessprintscompliance bound to the vault, setup finishedand"compliance_bound":true; thentest:happy-path(24/24),test:guards(48/48) andtest:wind-down(6/6) pass.Manual verification
On the same network, governance proposed an
UnbindTokenchange through the CLI.npm run extendprintedcompliance pending change 3 live until ledger 518975. A directunbind_tokenreturnedError(Contract, #8005)(UseTimelock). Aftercancel_change,pending_changesread[]and the token stayed bound.Breaking changes
After
finish_setup, the compliance contract refusesadd_module_to,remove_module_from,bind_token,unbind_tokenand a non-zerotransfer_admin_rolewithUseTimelock(8005). A deployment must bind the compliance contract to the vault and finish its setup before the vault'sfinish_setup, or the vault refuses withSetupIncomplete. The compliance contract's spec gains entrypoints, events and errors 8001–8011, so its client must be regenerated. The console does not call the compliance contract.Checklist
Screenshots
None.