feat: add Safe inscription APIs - #511
Merged
hundredark merged 3 commits intoSep 18, 2026
Merged
Conversation
added 3 commits
September 18, 2026 20:02
- Add client.safe.transferInscription for transferring inscriptions, with the spend private key defaulting to keystore.spend_private_key - Add inscription_hash to SafeSnapshot, SafeMultisigsResponse and the blaze TransferSafeView, plus SYSTEM_SAFE_SNAPSHOT / SYSTEM_SAFE_INSCRIPTION message categories, aligned with the Go SDK - Add inscription operation payload types (deploy/inscribe/distribute/occupy) with buildInscriptionOperationExtra / decodeInscriptionOperationExtra - Add getInscriptionOutput to locate the unspent output carrying an inscription - Skip inscription outputs in getUnspentOutputsForRecipients by default to avoid spending collectibles as fungible inputs (opt-in via includeInscriptions) - Add treasury to SafeCollection and spend_private_key to AppKeystore - Add unit tests and an example
Add optional inscription and inscriptionCollection fields to PaymentParams and include them as the inscription and inscription_collection query params in buildMixinOneSafePaymentUri, so a payment deep link can request a specific NFT collectible or let the payer pick one from a collection. Both params are omitted from the URI when not provided, as with the existing optional params.
The distribution extra wire format is defined by the Mixin inscription
protocol and the Go SDK as the JSON key distribute, i.e.
{"distribute":"distribute","sequence":N}, not
{"operation":"distribute",...}. Rename the field and update the
decoder accordingly, and reject the operation-keyed shape as unknown.
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
Add Safe inscription (collectible) support to the Node SDK, aligned with the Go SDK (bot-api-go-client v3.25.7).
New APIs
Transfer
keystore.spend_private_key, so bots can transfer with just their keystoreutxodirectly to skip the output lookup, andsignerIndexfor multisig-owned inscriptionsUtilities
getInscriptionOutput(utxoClient, inscriptionHash)— locates the unspent output carrying a given inscription (paginates/safe/outputs)buildInscriptionOperationExtra/decodeInscriptionOperationExtra— encode/decode inscription operation payloads (deploy/inscribe/distribute/occupy) carried in transaction extrasFields & types
SafeSnapshot.inscription_hash,SafeMultisigsResponse.inscription_hashTransferSafeView(withdeposit_hash/inscription_hash),SYSTEM_SAFE_SNAPSHOTandSYSTEM_SAFE_INSCRIPTIONmessage categoriesSafeCollection.treasury, inscription operation payload typesAppKeystore.spend_private_key(already present in bot dashboard keystores)Safety
getUnspentOutputsForRecipientsnow skips inscription outputs by default so ordinary transfers never spend collectibles as fungible inputs (opt-in via{ includeInscriptions: true }).Tests
Unit tests for extra encoding/decoding, inscription-aware output selection, output pagination, and the full transfer flow (build → verify → sign → submit) with a mocked client.