# Input Redemption

Ty Everett (<ty@projectbabbage.com>)

## Abstract

We define a mechanism by which [BRC-1](/wallet/0001.md) applications can denote UTXOs to be unlocked and redeemed by wallets as part of new Bitcoin transactions. We extend the message format defined by [BRC-1](/wallet/0001.md) with information about the inputs requested by the application, including all information needed for a wallet to check the veracity of any inputs being redeemed.

## Motivation

[BRC-1](/wallet/0001.md) defines a mechanism for an application to request the creation of a Bitcoin transaction by a wallet, but it is incomplete without a way for applications to consume and use tokens that previously existed. Allowing applications to unlock and redeem inputs as part of their transactions also facilitates their ability to update, extend or delete assets that are tokenized within Bitcoin UTXOs.

## Status Note

BRC-4 is historical. Current wallets consume application-provided inputs through [BRC-100](/wallet/0100.md) `createAction` with `inputBEEF`, `inputs[].outpoint`, `inputs[].unlockingScript` or `inputs[].unlockingScriptLength`, `inputs[].inputDescription`, and optional `sequenceNumber`. Extended BRC-8 input envelopes are deprecated for current implementations.

## Specification

We extend the [BRC-1](/wallet/0001.md) Transaction Creation Request message with an additional field, the `inputs` field. This is an object whose keys are the TXIDs of transactions that contain outputs which are to be spent as part of this transaction, and whose values comprise extended [BRC-8](/transactions/0008.md) transaction envelopes.

In addition to the normal envelope fields, we specify that these input envelopes contain an additional field called `outputsToRedeem`, which is an array of objects. Each of the objects comprises an output from the subject transaction that is to be redeemed and used as input to the transaction being requested by the application.

We specify that each of the objects in the array contains `index` and `unlockingScript`. The `index` value is an integer that denotes which output to redeem from the transaction, and the `unlockingScript` comprises a [BRC-14](/scripts/0014.md) hex-formatted input script.

We further specify that each of the elements in each of the `outputsToRedeem` arrays may contain an additional `spendingDescription` string that describes the redemption of the tokens being used.

### Example

Here is an example of a Transaction Creation Request object that contains an input:

```json
{
    "inputs": {
      "900b7e9ced44f8a7605bd4c1b7054b8fb958385998954d772820a8b81eabb56f": {
        "rawTx": "010000000135620d3a8fb626b763cb7b9a3c3197eda9bd6709ef1e4ebc2b359607800eaa95020000006b483045022100c3ec1792f1780e453c6ea692271bcc5388fb179d6455897f4b4200706e8b9f150220352cc2ff81a5c698e4626aec8976643134efab91ca1c80729670c2d007c77cfd4121037798f038cb7fc18b9d67baa87ed33122eb7be65b95b0dd304dc476c60043773dffffffff03e803000000000000c4210399322f558d92ced9c45d3bfe7dc5c01b830a4b61d71695ab0a1fa2cd90aba8b9ac2131546f446f44744b7265457a6248594b466a6d6f42756475466d53585855475a473462812d4eeb030fa496c2965f7e0f0b0e825d0547aceb7a9d4c76fd17e795753d8e2e0e82274ab36744a7968a43dc45b1cbdfab6c473045022100a58914da5346960ecb4de964f0f1e1be43a7645a11449c3a209f3fd69b34209b02205d4d4294d04c5f87fb16c2cdc3d9b41f9866fb3d7a690da08089c972d1393d816d75c8000000000000001976a91473a95c0b12e33b3d79f80508200a075bbab0906588ac4ea80200000000001976a91478daf10df51b3ea4c9292a72bf2e1e1d48ebe11288ac00000000",
      "proof": {
          "index": 2,
        "txOrId": "900b7e9ced44f8a7605bd4c1b7054b8fb958385998954d772820a8b81eabb56f",
        "targetType": "header",
        "target": "00000020ed40984238c0d6ed157cfd4fda4b284b48bb5c3b00b3172a2b030000000000006dfcabcc55b822548d10198ad1ddc62700947c8053213bf254b5229c92b9f448c6d32f64f13d051aa8201615",
        "nodes": [
            "9c97050e4c5fcc7f3ae7f7de83668d1968a626d70690654dab0398b75ca447a1",
          "fde37bbbec5cb48c085749aea7059412cc59c339bbc3e98960c081632382d538"
        ]
      },
      "outputsToRedeem": [
          {
            "index": 0,
          "unlockingScript": "473044022040ac4ef063c5139ef940860ec993dea2b38f2226cb841c231d60833d185934d50220760c48202fc150e3090ffbda4ccfe4ebce36715b4396d3555fb2f3dc03346e5cc2",
          "spendingDescription": "Complete a ToDo list item"
        }
      ]
    }
  },
  "description": "Complete a TODO task: \\"test\\""
}
```

## Implementations

This functionality is implemented by current `bsv-blockchain/ts-sdk` BRC-100 wallet interfaces and `bsv-blockchain/wallet-toolbox` storage/action processing.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bsv.brc.dev/wallet/0004.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
