File Output
Summary
This how-to guide explains how to create a file transaction to store a file's contents on the Bitcoin blockchain using the mintBlue SDK.
Prerequisites
We recommend you complete the Getting Started section to learn how to interact with mintBlue through the mintBlue SDK.
Video Guide
In this video, we show you how to create a transaction with file output using the mintBlue SDK.
Prepare data outputs
First, we need to prepare file outputs. Here is the interface for the file output.
interface FileOutput {
type: 'file';
value: {
contentType: string;
content: Buffer;
};
sign?: boolean;
encrypt?: boolean;
}
The file
type indicates a file output. We need to define the content type
, which is a MIME type, and the content
, which is a Buffer.
Here's an example of a plain text file we want to store for a customer order.
const outputs = [
{
type: 'file',
value: {
contentType: 'text/plain',
content: Buffer.from("Order #1234 [...]"),
}
}
];
However, we can also create a file output containing an image. Let's imagine we have an image stored in a directory called /images
. Here's a code snippet that reads the image as a Buffer.
const imageBuffer = fs.readFileSync(path.join(__dirname, 'images', 'image.png'), 'base64');
const outputs = [
{
type: 'file',
value: {
contentType: 'image/png',
content: imageBuffer,
},
sign: false,
encrypt: false,
}
];
In short, any file type is supported. You need to make sure you set the correct contentType
and load the file as a Buffer or string.
Send the transaction to mintBlue
Next, let's send the customer order to mintBlue to handle the final Bitcoin blockchain storage. Here's how you can do this using the mintBlue SDK. Make sure to replace the <YOUR-PROJECT-ID>
with your project ID.
const { txid, rawtx } = await client.createTransaction({
project_id: "<YOUR-PROJECT-ID>",
outputs,
});
Once the file transaction has been created, the createTransaction
 function returns a transaction ID and the raw transaction data. To look up the transaction on a blockchain explorer, let's print the txid
 variable.
console.log(`https://whatsonchain.com/tx/${txid}`);
Look up the transaction output
Let's look up the transaction output via the mintBlue console. Make sure to access the correct project. Here's what your transaction output should look like. The first object in the array is your file output. Here, the data is represented in its Buffer format.
[
{
"type": "file",
"value": {
"content": {
"type": "Buffer",
"data": [
79,
114,
100,
101,
114,
32,
35,
49,
50,
51,
52,
32,
91,
46,
46,
46,
93
]
},
"contentType": "text/plain"
},
"encrypt": false,
"sign": false
},
{
"type": "payment",
"to": "1MFbKnKAt4LMUmRvDohmhiYgYhFsAaSDux",
"satoshis": 24701
}
]
Code Check  ✅
const fs = require("fs");
const path = require("path");
const { Mintblue } = require("@mintblue/sdk");
async function main() {
const token = "<YOUR-SDK-TOKEN>";
const client = await Mintblue.create({ token });
const imageBuffer = fs.readFileSync(path.join(__dirname, 'images', 'image.png'), 'base64');
const outputs = [
{
type: 'file',
value: {
contentType: 'image/png',
content: imageBuffer,
},
sign: false,
encrypt: false,
}
];
const { txid, rawtx } = await client.createTransaction({
project_id: "<YOUR-PROJECT-ID>",
outputs,
});
console.log(`https://whatsonchain.com/tx/${txid}`);
}
main();