DEVELOPER DOCS
Balance approvals

Balance approvals

Use balance approvals to share balances between multiple addresses. This helps to onboard users without requiring them to own tokens.

With balance approvals:

  • You pay for transactions.
  • Users sign transactions.

Balance approvals:

  • Are based on the token set when connecting to an Irys node. Both approver and approvee must use the same token.
  • Are registered instantly upon upload completion.
  • Are non-transferable.
  • Can be configured to expire automatically.

Create an approval

To update an existing approval, create a new approval with the same address (it will overwrite the existing approval).

const receipt = await irys.approval.createApproval({
	amount: irys.utils.toAtomic(1), // Amount in atomic units
	approvedAddress: "<address>",
	expiresInSeconds: 100, // Expires in 100 seconds. Delete to remove expiration.
});

Upload using an approval

If you have available approvals, Irys will use them automatically. In cases where you've been approved by more than one account, you can pick the one to use with:

const receipt = await irys.upload("GM World", { upload: { paidBy: "<address>" } });

Combine approvals and tags:

const uploadOptions = {
	upload: {
		paidBy: "<address>",
	},
	tags: [{ name: "Content-Type", value: "text/plain" }],
};
const receipt = await irys.upload(dataToUpload, uploadOptions);

Revoke an approval

const receipt = await irys.approval.revokeApproval({ approvedAddress: "<address>" });

Get balances you're approved to use

Get approvals from the array of addresses provided:

const approvals = await irys.approval.getApprovals({
	payingAddresses: ["<address>"],
});

Get the first 100 approvals:

const approvals = await irys.approval.getApprovals({});

Return type:

{
	amount: string; // Amount approved in atomic units
	payingAddress: string; // Address of the payer's wallet
	approvedAddress: string; // Address of the wallet that received the approval
	expiresBy: number; // Timestamp (in milliseconds) when approval expires
	timestamp: number; // Timestamp (in milliseconds) when the approval was created
	token: string; // Approved token
}
[];

Get approvals you've created

Get approvals for the array of addresses provided:

const createdApprovals = await irys.approval.getCreatedApprovals({
	approvedAddresses: ["<address>"],
});

Get the first 100 approvals you've created:

const createdApprovals = await irys.approval.getCreatedApprovals({});

Return type:

{
	amount: string; // Amount approved in atomic units
	payingAddress: string; // Address of the payer's wallet
	approvedAddress: string; // Address of the wallet that received the approval
	expiresBy: number; // Timestamp (in milliseconds) when approval expires
	timestamp: number; // Timestamp (in milliseconds) when the approval was created
	token: string; // Approved token
}
[];

Get balance approvals via HTTP

You can also request balance approvals via HTTP:

Devnet:

https://arweave.devnet.irys.xyz/account/approval?payingAddress=<...>&token=<...>&approvedAddress=<...>

Mainnet:

https://arweave.mainnet.irys.xyz/account/approval?payingAddress=<...>&token=<...>&approvedAddress=<...>