@@ -609,4 +609,48 @@ public Map<String, String> cancelAirdrop(final TokenAirdropCancelParams params)
609609
610610 return Map .of ("status" , receipt .status .toString ());
611611 }
612+
613+ @ JSONRPC2Method ("claimToken" )
614+ public Map <String , String > claimToken (final TokenClaimAirdropParams params ) throws Exception {
615+ TokenClaimAirdropTransaction tokenClaimAirdropTransaction = new TokenClaimAirdropTransaction ();
616+
617+ Duration threeSecondsDuration = Duration .ofSeconds (3 );
618+ tokenClaimAirdropTransaction .setGrpcDeadline (threeSecondsDuration );
619+
620+ String senderAccountId = params .getSenderAccountId ()
621+ .orElseThrow (() -> new InvalidJSONRPC2ParamsException ("senderAccountId is required" ));
622+ String receiverAccountId = params .getReceiverAccountId ()
623+ .orElseThrow (() -> new InvalidJSONRPC2ParamsException ("receiverAccountId is required" ));
624+ String tokenId =
625+ params .getTokenId ().orElseThrow (() -> new InvalidJSONRPC2ParamsException ("tokenId is required" ));
626+
627+ // NFT token claiming
628+ if (params .getSerialNumbers ().isPresent ()
629+ && !params .getSerialNumbers ().get ().isEmpty ()) {
630+ List <String > serialNumbers = params .getSerialNumbers ().get ();
631+ for (String serialNumber : serialNumbers ) {
632+ PendingAirdropId pendingAirdropId = new PendingAirdropId (
633+ AccountId .fromString (senderAccountId ),
634+ AccountId .fromString (receiverAccountId ),
635+ new NftId (TokenId .fromString (tokenId ), Long .parseLong (serialNumber )));
636+ tokenClaimAirdropTransaction .addPendingAirdrop (pendingAirdropId );
637+ }
638+ } else {
639+ // Fungible token claiming
640+ PendingAirdropId pendingAirdropId = new PendingAirdropId (
641+ AccountId .fromString (senderAccountId ),
642+ AccountId .fromString (receiverAccountId ),
643+ TokenId .fromString (tokenId ));
644+ tokenClaimAirdropTransaction .addPendingAirdrop (pendingAirdropId );
645+ }
646+
647+ params .getCommonTransactionParams ()
648+ .ifPresent (commonTransactionParams -> commonTransactionParams .fillOutTransaction (
649+ tokenClaimAirdropTransaction , sdkService .getClient ()));
650+
651+ TransactionResponse txResponse = tokenClaimAirdropTransaction .execute (sdkService .getClient ());
652+ TransactionReceipt receipt = txResponse .getReceipt (sdkService .getClient ());
653+
654+ return Map .of ("status" , receipt .status .toString ());
655+ }
612656}
0 commit comments