Repository navigation
Conversation
The timelock, storage and bindings crates become strata-timelock, strata-storage and strata-bindings, so a path such as strata_timelock::DAY_DURATION names the kit's own code. The contract interfaces are unchanged.
Both manifests that use proptest now pin the version Cargo.lock already holds, like every other dependency.
In the kit's own entrypoints, caller is the account that signs and holder is the account whose request or position the call is about. When one account is both, the entrypoint takes holder and that account signs. The vault's deposit, redemption and request-view entrypoints take holder instead of from, caller or controller, and fund takes caller. legal_transfer and the compliance contract's own admin calls take caller instead of operator. OpenZeppelin trait methods keep their names. Argument order and types do not change. The harness and the docs follow the new names.
A short section states how the kit's code is named and written: the strata- crate prefix, caller and holder in entrypoints, named errors, separate functions instead of boolean switches, guards, doc comments, design notes and exact pins.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
The vault's request events name the account holder instead of controller, and Funded names the payer caller instead of from. These are topic fields, so the emitted topics and data do not change; only their names in the contract spec do. The vault's internal helpers, the token's co-sign check, the vault's error docs and the design doc use the same names.
hpmaxi
marked this pull request as ready for review
October 19, 2026 21:19
luchobonatti
approved these changes
Oct 23, 2026
9 tasks
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
Closes #323
One kind of address had several names. The vault called the account behind a request
from,caller,controllerorholder, depending on the entrypoint, and the token and the compliance contract called their signeroperatorin their own entrypoints. The shared crates read like library modules, andproptestwas pinned loosely.Now
calleris the account that signs andholderis the account whose request or position the call is about; when one account is both, the entrypoint takesholder. Events and internal helpers use the same names. The crates carry astrata-prefix, every dependency is pinned exactly, and AGENTS.md writes these conventions down. No behaviour changes.Changes
strata-timelock,strata-storageandstrata-bindingsholder;fundtakescallerlegal_transferand the compliance contract's own admin calls takecallerinstead ofoperatorholder, andFundednames the payercallerproptestis pinned exactly in both manifests that use itDeviations
legal_transferkeepsfromandto, the two ends of the transfer; only its signer becomescaller.allowandis_allowedkeepaccount: it names an allowlist entry, not a position.caller.require_auth()forclaim_wind_down; it now saysholder.require_auth(), as the code does.compliance::storageand the SDK'stestutils::storage, which are not the kit's crates.Acceptance criteria
callerorholderfor its acting address, with argument order and types unchangedproptestis pinned with=Test plan
Automated tests
cargo test --locked: 583 passed (379 vault, 80 oracle, 64 token, 29 compliance, 6 identity verifier, 19 timelock, 6 storage).cargo clippy --locked --all-targets -- -D warningson the eight crates: clean.Manual verification
docker run --rm -d -p 8000:8000 --name stellar-local stellar/quickstart --local --enable core,rpc.stellar contract build, thenCARGO_TARGET_DIR=target/short-wind-down stellar contract build --package async-vault --features short_wind_down.npm run build:clients, thennpm run typecheck -w scripts/harness. Against the new clients, the harness before this change had 63 type errors, one per old argument name.HARNESS_NETWORK=local npm run deploy -w scripts/harness, thentest:happy-path,test:guardsandtest:wind-downwithnpm run <script> -w scripts/harness.Breaking changes
Fresh deployments only. The names below change in the contract spec, so a client that passes arguments by name, or labels event fields from the spec, must follow. Argument order and types, error codes, and the topics and data each event emits are unchanged.
async_vault:request_deposit,cancel_deposit,request_redeemandcancel_redeemtakeholder(wasfrom);claim_depositandclaim_redeemtakeholder(wascaller);get_deposit_requestandget_redeem_requesttakeholder(wascontroller);fundtakescaller(wasfrom).share_token:legal_transfertakescaller(wasoperator).compliance:bind_vault,finish_setup,propose_change,cancel_changeandapply_changetakecaller(wasoperator).async_vaultevents: the topic field ofDepositRequested,DepositClaimed,DepositCancelled,DepositConvertedToExit,RedeemRequested,RedeemClaimed,RedeemCancelledandRedemptionSurrenderedisholder(wascontroller);Funded's iscaller(wasfrom).The console is not edited here. It builds its clients from the deployed testnet contracts, so it keeps working until the redeploy; then its calls to
request_deposit,cancel_deposit,claim_deposit,request_redeem,cancel_redeem,claim_redeemandfundmust use the new names. It reads event topics by position, so the event renames do not affect it.Checklist
Screenshots
None.