Repository navigation
Conversation
…Ts and issue CATs A vault's DIDs and options are clear signed by Sage, since the SDK doesn't parse them: each must be locked to the vault's own address and run the delegated puzzle the vault approved. Clawbacks are spent through whichever side the vault is, and the vault asserts that the path is open. A vault can mint NFTs as their minter, by creating their intermediate launchers itself, and issue CATs with a TAIL that only it can issue more of.
A vault's offers pay each offered asset into a coin locked to the offer's fixed conditions, which the offer spends without the vault's signature, so the vault stays usable while the offer is open. Each coin asserts the requested payments and needs a signature from a random key that's discarded once the offer is signed, so the offer can't be taken from what the vault's transaction reveals on chain. Cancelling takes the coins back through the vault, which asserts each coin's id. Offers that would spend the vault directly are refused.
…ear signing A DID's child is parsed from its spend, like sync parses it, rather than taken from its delegated conditions. Minting NFTs from the vault or its DIDs takes a mojo for each launcher, which is no longer shown as XCH leaving the vault.
…s to the API issue_cat can issue a CAT that only the vault can issue more of, with the new issue_more_cat. bulk_mint_nfts can leave out the DID for a vault, which mints as itself. Making and taking offers sign through the vault, and confirmations list the DIDs and options a vault spends.
…lways pre-split offers
Rigidity
force-pushed
the
rigidity/vault-assets-offers
branch
from
November 15, 2026 06:00
62476b9 to
227852b
Compare
This branch has not been 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.
Closes #953 and #955. Part of #945. Stacked on #1016.
Summary
A vault can now hold and manage every asset Sage supports, and make, take and cancel offers.
Assets (#953)
bulk_mint_nftswithoutdid_id): the vault spend creates the intermediate launchers itself, so the existing minter detection finds the vault.issue_catwithmulti_issuance, then the newissue_more_cat) useEverythingWithSingletonTail. The vault pipeline adds the TAIL's extra-delta messages automatically. This is ported from the SDK's test-onlyvault_tail_messages.Offers (#955)
P2ConditionsOrSingletoncoin (FixedPuzzleMember) locked to fixed conditions. Their memos are(vault address, conditions). The offer spends those coins through the fixed path with no vault signature, so the vault stays usable while the offer is open.make_offerpre-splits a vault's offers even whenpre_split_feeisn't set, so WalletConnect'schia_createOfferworks.AGG_SIG_MEfrom a random key generated for that offer and dropped after signing. It's never stored. Without it, anyone could take the offer from the fixed conditions the memos reveal on chain, not just people it was shared with.Decisions
VaultDirectOfferNotSupported.VaultOfferAssetNotSupported, until sync can track singletons in pre-split coins.Deferred
Testing
make_offerpre-splitting withoutpre_split_fee.test_vault_receives_clawbacksfailed in two of three full workspace runs. Alice's second clawback send sometimes ran before her change from the first had synced ("no spendable coins"). Both clawbacks now go in one transaction. Three fullsage-walletruns passed after that.tsc -b, unit tests, fmt, clippy, workspace tests, machete, the sqlx check, and a bindings regen with no changes.Screenshots