Upload API
uploader.uploadBundle(tx, bundleOptions?)
Enables users to upload an array of transactions as a single bundled transaction.
While this function exists for obtaining transaction IDs beforehand, most developers should use uploadFolder() instead, which handles uploading, signing, and bundling automatically.
Parameters
| Name | Type | Description |
|---|---|---|
| data | (DataItem | Buffer | string)[] | Array of transactions to upload. |
| bundleOptions | DataItemCreateOptions | (Optional) Upload settings including tags. |
The function automatically signs unsigned transactions using a temporary throwaway key, enabling transactions to be associated with a randomly-generated address. When buffers are provided, they are converted to transactions and signed by the throwaway key. The method returns the throwaway key, address, and all bundled transactions.
Returns
Returns a receipt as a JSON object with the following values:
response = {
id, // Transaction ID (used to download the data)
timestamp, // Timestamp (UNIX milliseconds) of when the transaction was created and verified
version, // The version of this JSON file, currently 1.0.0
public, // Public key of the bundler node used
signature, // A signed deep hash of the JSON receipt
deadlineHeight, // The block number by which the transaction must be finalized
block, // Deprecated
validatorSignatures, // Deprecated
verify, // An async function used to verify the receipt at any time
}Funding
Example
getIrysUploader() to connect to an Irys Bundler before uploading. Choose one from the setup documentation.const uploadBundle = async () => {
const irys = await getIrysUploader();
const maxTxs = 5;
const txs = [];
// First create and sign a group of transactions
for (let i = 0; i < maxTxs; i++) {
const newTx = await irys.createTransaction(`Hirys World! ${i + 1}`, {
tags: [{ name: "Content-Type", value: "text/plain" }],
});
await newTx.sign(); // ID is now set
txs.push(newTx);
}
// Or send an array of Buffers
// If a Buffer is provided, it is converted into a transaction and then signed by the throwaway key
// const txs: Buffer[] = [
// Buffer.from("This is transaction data 1"),
// Buffer.from("This is transaction data 2"),
// ];
try {
const options = {
// throwawayKey: undefined, // Optional, pass a JWK if you have a throwaway key
bundleOpts: {
tags: [
{ name: "application-id", value: "foo" }, // Add optional tags
],
}
};
const uploadReceipt = await irys.uploader.uploadBundle(txs, options);
console.log(`All Txs uploaded.`);
for (let i = 0; i < uploadReceipt.txs.length; i++) {
console.log(`https://gateway.irys.xyz/${uploadReceipt.txs[i].id}`);
}
} catch (e) {
console.log("Error uploading bundle ", e);
}
};Downloading
Use the transaction ID returned as part of the response to download the data by creating a URL in the format https://gateway.irys.xyz/:transactionId.