[DISCUSSION] - BRC-100 - createAction clarification #85
-
BRC ID100 DiscussionI would like clarification regarding the
|
Beta Was this translation helpful? Give feedback.
Replies: 4 comments
-
I will answer a few of these now, and I'll also ask my team to provide answers to the ones that I haven't covered.
An Action is a transaction. See "Action Oriented Programming" from https://projectbabbage.com/docs/babbage-sdk/concepts/actions-aop Action = Bitcoin transaction.
Actions need at least one input OR one output. If there is neither, it is an error.
Labels are for allowing a transaction to later be found using
When
This endpoint should be used when your goal is to create a new transaction. If your goal is to let a recipient wallet know about a transaction that you've already created, then you should use
To allow the user to know the context around when a previous token is consumed.
It's required so that there's always an accounting of why a particular token was spent, updated, or consumed, for the purpose of the user's record-keeping. It's named this way primarily for historical purposes.
If no basket is provided, then the wallet will not track the output at all, and it will be an untracked output (the wallet will not store information about it, and it can never appear in
A transaction label is transaction-level categorization, used when retrieving or filtering a list of transactions (from
We must strike
Output tags, like transaction labels, are a mechanism of categorization and filtering, not a triggering mechanism. They allow tagged outputs to be later retrieved based on various criterion from the wallet, using the
Tags must be strings that comply with the restrictions on byte length. Beyond this, tags may be any valid string.
Paging @tonesnotes to provide an answer on these. However, I will speak to the
The signable action structure is used when a user wants to redeem custom tokens, not controlled by the wallet.
Because the
A user doe not indicate this to the wallet. Instead, if an input is externally-managed (an application-managed input), then:
A new key derivation scheme will not be required, and the API for transaction creation does not closely relate to key derivation. Beyond the requirement for The only methods that are related are related to cryptographic operations, digital signatures, and identity management. For these components, the BKDS (BSV Key Derivation Scheme) is used, and it's a dependency of this specification. There is no backwards-compatibility, and no changes to the scheme are ever permitted by the specification. The key derivation scheme is foundational, and required to be fixed. Any change would break all implementations.
This specification forces compatibility with a new scheme, and forces a full migration to the new system. BIP32 is fundamentally incompatible with the primitives used for all foundational operations, including identity management and digital certificates. Use of this older scheme would open many attack vectors and privacy issues. To achieve compliance, wallets must upgrade to BKDS. |
Beta Was this translation helpful? Give feedback.
-
Options
Many options are opitonal boolean values. They are typed as
By default new transactions are broadcast by a background process, that is the createAction call will likely return before the transaction has been broadcast to the bitcoin network. In some cases the application is willing to wait for an initial broadcast attempt to be made in which case createAction (or signAction) doesn't return until that happens.
Setting trustSelf: 'known' allows for significantly slimmer Beefs to be sent from the wallet to the backend servers.
When the wallet returns a Beef to the user, if there are transactions whose validity is already known to the application layer, they can include these txids in knownTxids to avoid redundant data being returned by the backend services or wallet.
noSendChange is critical when building batches of transactions. To create a batch, use the noSend flag on all of the createAction calls and set sendWith to all previously created actions for the final action. noSendChain allows for effecient change management when transactions will be sent as a batch. The change from the previous noSend action starts the funding for the next noSend action.
no Response Values
Forward the noSendChange response from on noSend createAction call to the next through the noSendChange option.
Unproven transactions are known to the bitcoin network but have not been mined into a block yet and therefore lack merkle proof data. A transaction is completed once it has merkle proof data. A transaction with status 'sending' has not yet been successfully broadcast to the bitcoin network. Typically 'sending' status doesn't last long, but due to network outages, service failures or other issues it may take time for the bitcoin network to accept the transaction.
The signableTransaction response allows the user to call
The parsed unsigned
Create a new unlockingScriptTemplate for the derivation scheme and use it.
Use a BIP32 unlockingScriptTemplate. Error Handling
This is a weak point in the current specification that we are moving to improve through the NinjaWallet proposed work.
This area of the specification needs work... |
Beta Was this translation helpful? Give feedback.
-
Further clarification has been added to BRC-100: #82 |
Beta Was this translation helpful? Give feedback.
-
Further clarification of this standard may be gained through viewing the OpenAPI Swagger or the Wallet docs page. |
Beta Was this translation helpful? Give feedback.
I will answer a few of these now, and I'll also ask my team to provide answers to the ones that I haven't covered.
An Action is a transaction. See "Action Oriented Programming" from https://projectbabbage.com/docs/babbage-sdk/concepts/actions-aop
Action = Bitcoin transaction.
Actions need at least one input OR one output. If there is neither, it is an error.