You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This HIP enables frictionless airdrops of both fungible and non-fungible tokens by removing the requirement to pre-associate tokens with the receiver’s account, and by allowing the sender to create associations on the receiver’s account automatically at transfer time by paying for any token-associations created as a result of the airdrop. The sovereignty of account holders who do not wish to receive unsolicited tokens is preserved by supporting the concept of pending token transfers to such an account. Potential token receivers may claim their token airdrop while available if desired and airdrop senders may cancel their sent airdrop should they change their mind.
With this HIP, accounts will no longer prepay for unused token association slots. Association fees will be charged for those slots only when a token is actually associated with an account.
This HIP also introduces the concept of token rejection. Here an undesired token class value is returned to the treasury with all custom fees waived.
Update HIP-904: TransactionRecord support for pendingAirdropRecords
Test Plan
Given a fungible token, a sender account with a balance of the fungible token, and a receiver account with unlimited auto associations, when the token is airdropped from the sender to the receiver account, then the receiver account contains the sent balance of the token
Given a fungible token, a sender account with a balance of the fungible token, a receiver account with no auto associations, and the fungible token is manually associated with the receiver account, when the token is airdropped from the sender to the receiver account, then the receiver account contains the sent balance of the token
Given a fungible token, a holder account with a balance of the fungible token, a spender account which has an allowance of the fungible token, and a receiver account with unlimited auto associations, when the token is airdropped from the spender to the receiver account, then the receiver account contains the sent balance of the token and the airdropped amount is debited from the holder account
Given a fungible token with decimals, a sender account with a balance of the fungible token, and a receiver account with unlimited auto associations, when the token is airdropped from the sender to the receiver account, then the receiver account contains the sent balance of the token
Given an NFT, a sender account with 1 minted NFT, and a receiver account with unlimited auto associations, when the NFT is airdropped from the sender to the receiver account, then the receiver account contains the NFT
Given an NFT, a sender account with 1 minted NFT, a receiver account with no auto associations, and the NFT is manually associated with the receiver account, when the NFT is airdropped from the sender to the receiver account, then the receiver account contains the NFT
Given an NFT, a holder account with 1 minted NFT, a spender account which has an allowance of the NFT, and a receiver account with unlimited auto associations, when the NFT is airdropped from the spender to the receiver account, then the receiver account contains the NFT and the NFT is debited from the holder account
Given a fungible token, a sender account with a balance of the fungible token, and a receiver account with no auto associations, when the token is airdropped from the sender to the receiver account, then the receiver account does not contain the sent balance of the token and the TransactionRecord for the transaction contains a pending airdrop.
Given an NFT, a sender account with 1 minted NFT, and a receiver account with no auto associations, when the NFT is airdropped from the sender to the receiver account, then the receiver account does not contain the NFT and the TransactionRecord for the transaction contains a pending airdrop
Given a fungible token, a sender account with a balance of the fungible token, a receiver account with no auto associations, and the token is airdropped from the sender to the receiver account, when the receiver account goes to claim the airdrop, then the receiver account contains the sent balance of the token
Given an NFT, a sender account with 1 minted NFT, a receiver account with no auto associations, and the NFT is airdropped from the sender to the receiver account, when the receiver account goes to claim the airdrop, then the receiver account contains the sent NFT
Given a fungible token, a sender account with a balance of the fungible token, a receiver account with no auto associations, and the token is attempted to be airdropped from the sender to the receiver account, when the sender account goes to cancel the airdrop, then the sender account still contains the balance of the token and the receiver account does not contain any balance of the token
Given an NFT, a sender account with 1 minted NFT, a receiver account with no auto associations, and the NFT is attempted to be airdropped from the sender to the receiver account, when the sender account goes to cancel the airdrop, then the sender account still contains the NFT and the receiver account does not contain the NFT
Given a fungible token, a treasury account for the token, and a holding account with a balance of the fungible token, when the holding account rejects the token, then the treasury account contains the full balance of the token from the holding account, the holding account no longer contains any balance of the token, and no fees were charged
Given an NFT, a treasury account for the NFT, and a holding account with 1 minted NFT, when the holding account rejects the NFT, then the treasury account contains the sent NFT, the holding account no longer contains the NFT, and no fees were charged
Given a fungible token, a sender account with a balance of the fungible token, a receiver account with no auto associations, and a pending airdrop is created from the sender to the receiver of the fungible token, when the receiver account is updated to have unlimited auto associations and the first airdrop is cancelled, then the sender account can airdrop the token again and the receiver account contains the sent balance of the token
Given an NFT, a sender account with 1 minted NFT, a receiver account with no auto associations, and a pending airdrop is created from the sender to the receiver of the NFT, when the receiver account is updated to have unlimited auto associations and the first airdrop is cancelled, then the sender account can airdrop the NFT again and the receiver account contains the NFT
Example
Create four accounts
Account 1 has unlimited auto associations
Account 2 has one auto association
Account 3 has no auto associations
Account 4 is the treasury account for the tokens about to be created
Create a new fungible token
Create a new NFT
Mint 3 of the NFTs
Associate Account 2 with the fungible token
Airdrop the fungible token to all three accounts
Get the transaction record and see one pending airdrop (for Account 3)
Query to verify Account 1 and Account 2 received the airdrops and Account 3 did not
Claim the airdrop for Account 3
Query to verify Account 3 received the airdrop
Airdrop the NFTs to all three accounts
Get the transaction record and verify two pending airdrops (for Account 2 & 3)
Query to verify Account 1 received the airdrop and Account 2 and Account 3 did not
Claim the airdrop for Account 2
Query to verify Account 2 received the airdrop
Cancel the airdrop for Account 3
Query to verify Account 3 did not receive the airdrop
Reject the NFT for Account 2
Query to verify Account 2 no longer has the NFT
Query to verify the NFT was returned to Account 4
Reject the fungible tokens for Account 3
Query to verify Account 3 no longer has the fungible tokens
Query to verify Account 4 received the rejected fungible tokens
Solution
Add support for each feature according to the Services release plan for this HIP.
Alternatives
No response
The text was updated successfully, but these errors were encountered:
Problem
This HIP enables frictionless airdrops of both fungible and non-fungible tokens by removing the requirement to pre-associate tokens with the receiver’s account, and by allowing the sender to create associations on the receiver’s account automatically at transfer time by paying for any token-associations created as a result of the airdrop. The sovereignty of account holders who do not wish to receive unsolicited tokens is preserved by supporting the concept of pending token transfers to such an account. Potential token receivers may claim their token airdrop while available if desired and airdrop senders may cancel their sent airdrop should they change their mind.
With this HIP, accounts will no longer prepay for unused token association slots. Association fees will be charged for those slots only when a token is actually associated with an account.
This HIP also introduces the concept of token rejection. Here an undesired token class value is returned to the treasury with all custom fees waived.
Hedera Improvement Proposal
Hedera Protobufs
New APIs
PendingAirdropId
#1952PendingAirdropRecord
#1953TokenAirdropTransaction
#1955TokenCancelAirdropTransaction
#1954TokenClaimAidropTranasction
#1956TokenRejectTransaction
#1846TokenRejectFlow
#1957Update APIs
AccountUpdateTransaction
to allowmaxAutomaticTokenAssociations
value to support-1
as a valid value #1848AccountCreateTransaction
to allowmaxAutomaticTokenAssociations
value to support-1
as a valid value #1847pendingAirdropRecords
Test Plan
TransactionRecord
for the transaction contains a pending airdrop.TransactionRecord
for the transaction contains a pending airdropExample
Solution
Add support for each feature according to the Services release plan for this HIP.
Alternatives
No response
The text was updated successfully, but these errors were encountered: