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