Installing
Install using npm:
npm install @irys/sdk
or yarn:
yarn add @irys/sdk
Importing
import Irys from "@irys/sdk";
Connecting to a node
Connect to any of our three nodes, using a serialized JWK file when using an Arweave wallet:
const getIrysArweave = async () => {
const url = "https://devnet.irys.xyz";
const token = "arweave";
const key = JSON.parse(fs.readFileSync("arweaveWallet.json").toString());
const irys = new Irys({
url, // URL of the node you want to connect to
token, // Token used for payment and signing
key, // Arweave wallet
});
return irys;
};
Or a private key when using an EVM or Solana wallet:
const getIrys = async () => {
const url = "https://devnet.irys.xyz";
// Devnet RPC URLs change often, use a recent one from https://chainlist.org/chain/80001
const providerUrl = "";
const token = "matic";
const irys = new Irys({
url, // URL of the node you want to connect to
token, // Token used for payment
key: process.env.PRIVATE_KEY, // ETH or SOL private key
config: { providerUrl }, // Optional provider URL, only required when using Devnet
});
return irys;
};
Funding a node
Fund a node using any of our supported tokens:
const fundNode = async () => {
const irys = await getIrys();
try {
const fundTx = await irys.fund(irys.utils.toAtomic(0.05));
console.log(`Successfully funded ${irys.utils.fromAtomic(fundTx.quantity)} ${irys.token}`);
} catch (e) {
console.log("Error uploading data ", e);
}
};
Uploading
Data uploaded to Irys is given a millisecond-accurate timestamp, attributes and authorship details before being passed to Arweave for permanent storage. This information is used to create a signed receipt that can be used to verify the data's provenance at any time.
Uploading data
const uploadData = async () => {
const irys = await getIrys();
const dataToUpload = "GM world.";
try {
const receipt = await irys.upload(dataToUpload);
console.log(`Data uploaded ==> https://gateway.irys.xyz/${receipt.id}`);
} catch (e) {
console.log("Error uploading data ", e);
}
};
Uploading a file
const uploadFile = async () => {
const irys = await getIrys();
// Your file
const fileToUpload = "./myImage.png";
const tags = [{ name: "application-id", value: "MyNFTDrop" }];
try {
const receipt = await irys.uploadFile(fileToUpload, { tags });
console.log(`File uploaded ==> https://gateway.irys.xyz/${receipt.id}`);
} catch (e) {
console.log("Error uploading file ", e);
}
};
Uploading a folder
When uploading a folder, files can be accessed either directly at https://gateway.irys.xyz/[transaction-id]
or https://gateway.irys.xyz/[manifest-id]/[file-name]
const uploadFolder = async () => {
const irys = await getIrys();
// Upload an entire folder
const folderToUpload = "./my-images/"; // Path to folder
try {
const receipt = await irys.uploadFolder("./" + folderToUpload, {
indexFile: "", // optional index file (file the user will load when accessing the manifest)
batchSize: 50, //number of items to upload at once
keepDeleted: false, // whether to keep now deleted items from previous uploads
}); //returns the manifest ID
console.log(`Files uploaded. Manifest ID ${receipt.id}`);
} catch (e) {
console.log("Error uploading file ", e);
}
};
Querying
In addition to using the query package to search Irys and Arweave, you can also search directly from the Irys SDK. The following shows how to search for all transactions posted to Node 1, paid for with Matic, and uploaded during a three day period.
For more details on all search functions, see query package documentation.
const result = await irys
.search("irys:transactions")
.url("https://node1.irys.xyz/graphql")
.token("matic")
.fromTimestamp(new Date("2023-07-01"))
.toTimestamp(new Date("2023-07-03"));
3rd party build tools
Parcel
If using Parcel (opens in a new tab), you will need to manually enable package exports (opens in a new tab) by adding the following to the package.json
file in your project root directory.
{
"@parcel/resolver-default": {
"packageExports": true
}
}