Skip to content

Commit 56aca7f

Browse files
authored
JSON-RPC method endpoint for TokenClaimAirdropTransaction (#2386)
Signed-off-by: Naydenov <nikola.naydenov@limechain.tech>
1 parent a845448 commit 56aca7f

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

tck/src/main/java/com/hedera/hashgraph/tck/methods/sdk/TokenService.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
package com.hedera.hashgraph.tck.methods.sdk.param.token;
3+
4+
import com.hedera.hashgraph.tck.methods.JSONRPC2Param;
5+
import com.hedera.hashgraph.tck.methods.sdk.param.CommonTransactionParams;
6+
import com.hedera.hashgraph.tck.util.JSONRPCParamParser;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Optional;
10+
import lombok.AllArgsConstructor;
11+
import lombok.Getter;
12+
import lombok.NoArgsConstructor;
13+
14+
@Getter
15+
@AllArgsConstructor
16+
@NoArgsConstructor
17+
public class TokenClaimAirdropParams extends JSONRPC2Param {
18+
private Optional<String> senderAccountId;
19+
private Optional<String> receiverAccountId;
20+
private Optional<String> tokenId;
21+
private Optional<List<String>> serialNumbers;
22+
private Optional<CommonTransactionParams> commonTransactionParams;
23+
24+
@Override
25+
public JSONRPC2Param parse(Map<String, Object> jrpcParams) throws Exception {
26+
var parsedSenderAccountId = Optional.ofNullable((String) jrpcParams.get("senderAccountId"));
27+
var parsedReceiverAccountId = Optional.ofNullable((String) jrpcParams.get("receiverAccountId"));
28+
var parsedTokenId = Optional.ofNullable((String) jrpcParams.get("tokenId"));
29+
var parsedSerialNumbers = Optional.ofNullable((List<String>) jrpcParams.get("serialNumbers"));
30+
var parsedCommonTransactionParams = JSONRPCParamParser.parseCommonTransactionParams(jrpcParams);
31+
32+
return new TokenClaimAirdropParams(
33+
parsedSenderAccountId,
34+
parsedReceiverAccountId,
35+
parsedTokenId,
36+
parsedSerialNumbers,
37+
parsedCommonTransactionParams);
38+
}
39+
}

0 commit comments

Comments
 (0)