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

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 = irys.approval.getCreatedApprovals({
	approvedAddresses: ["<address>"],
});

Get the first 100 approvals you've created:

const createdApprovals = 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=<...>