Skip to content

Commit c73d6fd

Browse files
committed
first topic transactions
1 parent 31d1fff commit c73d6fd

File tree

6 files changed

+132
-1
lines changed

6 files changed

+132
-1
lines changed

hedera-base/src/main/java/com/openelements/hedera/base/implementation/ProtocolLayerClientImpl.java

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020
import com.hedera.hashgraph.sdk.PrivateKey;
2121
import com.hedera.hashgraph.sdk.PublicKey;
2222
import com.hedera.hashgraph.sdk.Query;
23+
import com.hedera.hashgraph.sdk.TopicCreateTransaction;
24+
import com.hedera.hashgraph.sdk.TopicDeleteTransaction;
25+
import com.hedera.hashgraph.sdk.TopicMessageSubmitTransaction;
2326
import com.hedera.hashgraph.sdk.Transaction;
2427
import com.hedera.hashgraph.sdk.TransactionReceipt;
2528
import com.hedera.hashgraph.sdk.TransactionRecord;
2629
import com.hedera.hashgraph.sdk.TransactionResponse;
27-
import com.hedera.hashgraph.sdk.proto.ConsensusCreateTopic;
2830
import com.openelements.hedera.base.ContractParam;
2931
import com.openelements.hedera.base.HederaException;
3032
import com.openelements.hedera.base.protocol.AccountBalanceRequest;
@@ -52,6 +54,11 @@
5254
import com.openelements.hedera.base.protocol.FileUpdateRequest;
5355
import com.openelements.hedera.base.protocol.FileUpdateResult;
5456
import com.openelements.hedera.base.protocol.ProtocolLayerClient;
57+
import com.openelements.hedera.base.protocol.TopicCreateResult;
58+
import com.openelements.hedera.base.protocol.TopicDeleteRequest;
59+
import com.openelements.hedera.base.protocol.TopicDeleteResult;
60+
import com.openelements.hedera.base.protocol.TopicSubmitMessageRequest;
61+
import com.openelements.hedera.base.protocol.TopicSubmitMessageResult;
5562
import edu.umd.cs.findbugs.annotations.NonNull;
5663
import java.util.List;
5764
import java.util.Objects;
@@ -243,6 +250,44 @@ public AccountDeleteResult executeAccountDeleteTransaction(@NonNull final Accoun
243250
return new AccountDeleteResult(record.transactionId, record.receipt.status, record.transactionHash, record.consensusTimestamp, record.transactionFee);
244251
}
245252

253+
public TopicCreateResult executeTopicCreateTransaction() throws HederaException {
254+
try {
255+
final TopicCreateTransaction transaction = new TopicCreateTransaction();
256+
final TransactionResponse response = transaction.execute(client);
257+
final TransactionReceipt receipt = response.getReceipt(client);
258+
return new TopicCreateResult(receipt.transactionId, receipt.status, receipt.topicId);
259+
} catch (final Exception e) {
260+
throw new HederaException("Failed to execute create topic transaction", e);
261+
}
262+
}
263+
264+
public TopicDeleteResult executeTopicDeleteTransaction(@NonNull final TopicDeleteRequest request) throws HederaException {
265+
Objects.requireNonNull(request, "request must not be null");
266+
try {
267+
final TopicDeleteTransaction transaction = new TopicDeleteTransaction();
268+
transaction.setTopicId(request.topicId());
269+
final TransactionResponse response = transaction.execute(client);
270+
final TransactionReceipt receipt = response.getReceipt(client);
271+
return new TopicDeleteResult(receipt.transactionId, receipt.status);
272+
} catch (final Exception e) {
273+
throw new HederaException("Failed to execute create topic transaction", e);
274+
}
275+
}
276+
277+
public TopicSubmitMessageResult executeTopicMessageSubmitTransaction(@NonNull final TopicSubmitMessageRequest request) throws HederaException {
278+
Objects.requireNonNull(request, "request must not be null");
279+
try {
280+
final TopicMessageSubmitTransaction transaction = new TopicMessageSubmitTransaction();
281+
transaction.setTopicId(request.topicId());
282+
transaction.setMessage(request.message());
283+
final TransactionResponse response = transaction.execute(client);
284+
final TransactionReceipt receipt = response.getReceipt(client);
285+
return new TopicSubmitMessageResult(receipt.transactionId, receipt.status);
286+
} catch (final Exception e) {
287+
throw new HederaException("Failed to execute create topic transaction", e);
288+
}
289+
}
290+
246291
@NonNull
247292
private ContractFunctionParameters createParameters(@NonNull List<ContractParam<?>> params) {
248293
Objects.requireNonNull(params, "params must not be null");
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.openelements.hedera.base.protocol;
2+
3+
import com.hedera.hashgraph.sdk.Status;
4+
import com.hedera.hashgraph.sdk.TopicId;
5+
import com.hedera.hashgraph.sdk.TransactionId;
6+
7+
public record TopicCreateResult(TransactionId transactionId, Status status, TopicId fileId) implements TransactionResult{
8+
9+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.openelements.hedera.base.protocol;
2+
3+
import com.hedera.hashgraph.sdk.FileId;
4+
import com.hedera.hashgraph.sdk.Hbar;
5+
import com.hedera.hashgraph.sdk.TopicId;
6+
import edu.umd.cs.findbugs.annotations.NonNull;
7+
import edu.umd.cs.findbugs.annotations.Nullable;
8+
import java.time.Duration;
9+
import java.time.Instant;
10+
import java.util.Objects;
11+
12+
public record TopicDeleteRequest(Hbar maxTransactionFee,
13+
14+
Duration transactionValidDuration,
15+
16+
@NonNull TopicId topicId) implements TransactionRequest {
17+
18+
public TopicDeleteRequest {
19+
Objects.requireNonNull(topicId, "TopicId cannot be null");
20+
}
21+
22+
public static TopicDeleteRequest of(@NonNull TopicId topicId) {
23+
return new TopicDeleteRequest(DEFAULT_MAX_TRANSACTION_FEE, DEFAULT_TRANSACTION_VALID_DURATION, topicId);
24+
}
25+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.openelements.hedera.base.protocol;
2+
3+
import com.hedera.hashgraph.sdk.Status;
4+
import com.hedera.hashgraph.sdk.TopicId;
5+
import com.hedera.hashgraph.sdk.TransactionId;
6+
7+
public record TopicDeleteResult(TransactionId transactionId, Status status) implements TransactionResult{
8+
9+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.openelements.hedera.base.protocol;
2+
3+
import com.hedera.hashgraph.sdk.Hbar;
4+
import com.hedera.hashgraph.sdk.TopicId;
5+
import edu.umd.cs.findbugs.annotations.NonNull;
6+
import java.nio.charset.StandardCharsets;
7+
import java.time.Duration;
8+
import java.util.Objects;
9+
10+
public record TopicSubmitMessageRequest(Hbar maxTransactionFee,
11+
12+
Duration transactionValidDuration,
13+
14+
@NonNull TopicId topicId,
15+
@NonNull byte[] message) implements TransactionRequest {
16+
17+
static final int MAX_MESSAGE_LENGTH = 1024;
18+
19+
public TopicSubmitMessageRequest {
20+
Objects.requireNonNull(topicId, "TopicId cannot be null");
21+
Objects.requireNonNull(message, "Message cannot be null");
22+
if(message.length > MAX_MESSAGE_LENGTH) {
23+
throw new IllegalArgumentException("Message cannot be longer than " + MAX_MESSAGE_LENGTH + " bytes");
24+
}
25+
}
26+
27+
public static TopicSubmitMessageRequest of(@NonNull TopicId topicId, @NonNull String message) {
28+
Objects.requireNonNull(message, "Message cannot be null");
29+
return new TopicSubmitMessageRequest(DEFAULT_MAX_TRANSACTION_FEE, DEFAULT_TRANSACTION_VALID_DURATION, topicId, message.getBytes(StandardCharsets.UTF_8));
30+
}
31+
32+
public static TopicSubmitMessageRequest of(@NonNull TopicId topicId, @NonNull byte[] message) {
33+
return new TopicSubmitMessageRequest(DEFAULT_MAX_TRANSACTION_FEE, DEFAULT_TRANSACTION_VALID_DURATION, topicId, message);
34+
}
35+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.openelements.hedera.base.protocol;
2+
3+
import com.hedera.hashgraph.sdk.Status;
4+
import com.hedera.hashgraph.sdk.TransactionId;
5+
6+
public record TopicSubmitMessageResult(TransactionId transactionId, Status status) implements TransactionResult{
7+
8+
}

0 commit comments

Comments
 (0)