All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hedera.hashgraph.sdk.TopicCreateTransaction Maven / Gradle / Ivy

The newest version!
/*-
 *
 * Hedera Java SDK
 *
 * Copyright (C) 2020 - 2024 Hedera Hashgraph, LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
package com.hedera.hashgraph.sdk;

import com.google.protobuf.InvalidProtocolBufferException;
import com.hedera.hashgraph.sdk.proto.ConsensusCreateTopicTransactionBody;
import com.hedera.hashgraph.sdk.proto.ConsensusServiceGrpc;
import com.hedera.hashgraph.sdk.proto.SchedulableTransactionBody;
import com.hedera.hashgraph.sdk.proto.TransactionBody;
import com.hedera.hashgraph.sdk.proto.TransactionResponse;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.grpc.MethodDescriptor;
import java.time.Duration;

import javax.annotation.Nullable;
import java.util.LinkedHashMap;
import java.util.Objects;

/**
 * Create a topic to be used for consensus.
 * 

* If an autoRenewAccount is specified, that account must also sign this transaction. *

* If an adminKey is specified, the adminKey must sign the transaction. *

* On success, the resulting TransactionReceipt contains the newly created TopicId. * * See Hedera Documentation * See Hedera Documentation */ public final class TopicCreateTransaction extends Transaction { /** * Optional account to be used at the topic's expirationTime to extend * the life of the topic (once autoRenew functionality is supported by * HAPI). * * The topic lifetime will be extended up to a maximum of the * autoRenewPeriod or however long the topic can be extended using all * funds on the account (whichever is the smaller duration/amount and * if any extension is possible with the account's funds). * If specified, there must be an adminKey and the autoRenewAccount * must sign this transaction. */ @Nullable private AccountId autoRenewAccountId = null; /** * The initial lifetime of the topic and the amount of time to attempt * to extend the topic's lifetime by,automatically at the topic's * expirationTime if the autoRenewAccount is configured (once autoRenew * functionality is supported by HAPI). Limited to MIN_AUTORENEW_PERIOD * and MAX_AUTORENEW_PERIOD value by server-side configuration. * Required. */ @Nullable private Duration autoRenewPeriod = null; /** * Short publicly visible memo about the topic. * * No guarantee of uniqueness. * * 100 bytes max. */ private String topicMemo = ""; /** * Access control for updateTopic/deleteTopic. Anyone can increase the * topic's expirationTime via ConsensusService.updateTopic(), regardless * of the adminKey. If no adminKey is specified, updateTopic may only be * used to extend the topic's expirationTime, and deleteTopic is disallowed. */ @Nullable private Key adminKey = null; /** * Access control for submitMessage. If unspecified, no access control * is performed on ConsensusService.submitMessage (all submissions are * allowed). */ @Nullable private Key submitKey = null; /** * Constructor. */ public TopicCreateTransaction() { setAutoRenewPeriod(DEFAULT_AUTO_RENEW_PERIOD); } /** * Constructor. * * @param txs Compound list of transaction id's list of (AccountId, Transaction) * records * @throws InvalidProtocolBufferException when there is an issue with the protobuf */ TopicCreateTransaction(LinkedHashMap> txs) throws InvalidProtocolBufferException { super(txs); initFromTransactionBody(); } /** * Constructor. * * @param txBody protobuf TransactionBody */ TopicCreateTransaction(com.hedera.hashgraph.sdk.proto.TransactionBody txBody) { super(txBody); initFromTransactionBody(); } /** * Extract the topic memo. * * @return the topic memo */ public String getTopicMemo() { return topicMemo; } /** * Set a short publicly visible memo on the new topic. * * @param memo The memo to be set * @return {@code this} */ public TopicCreateTransaction setTopicMemo(String memo) { Objects.requireNonNull(memo); requireNotFrozen(); topicMemo = memo; return this; } /** * Extract the admin key. * * @return the admin key */ @Nullable public Key getAdminKey() { return adminKey; } /** * Set the admin key for the new topic. *

* Access control for updateTopic/deleteTopic. *

* Anyone can increase the topic's expirationTime regardless of the adminKey. * If no adminKey is specified, updateTopic may only be used to extend the topic's expirationTime, and deleteTopic * is disallowed. * * @param adminKey The Key to be set * @return {@code this} */ public TopicCreateTransaction setAdminKey(Key adminKey) { Objects.requireNonNull(adminKey); requireNotFrozen(); this.adminKey = adminKey; return this; } /** * Extract the submit key. * * @return the submit key */ @Nullable public Key getSubmitKey() { return submitKey; } /** * Set the submit key for the new topic. *

* Access control for submitMessage. * If unspecified, no access control is performed on ConsensusService.submitMessage (all submissions are allowed). * * @param submitKey The Key to be set * @return {@code this} */ public TopicCreateTransaction setSubmitKey(Key submitKey) { Objects.requireNonNull(submitKey); requireNotFrozen(); this.submitKey = submitKey; return this; } /** * Extract the auto renew period. * * @return the auto renew period */ @Nullable @SuppressFBWarnings( value = "EI_EXPOSE_REP", justification = "A Duration can't actually be mutated" ) public Duration getAutoRenewPeriod() { return autoRenewPeriod; } /** * Set the auto renew period for the new topic. *

* The initial lifetime of the topic and the amount of time to attempt to extend the topic's lifetime by * automatically at the topic's expirationTime, if the autoRenewAccount is configured (once autoRenew functionality * is supported by HAPI). * * @param autoRenewPeriod The Duration to be set for auto renewal * @return {@code this} */ @SuppressFBWarnings( value = "EI_EXPOSE_REP2", justification = "A Duration can't actually be mutated" ) public TopicCreateTransaction setAutoRenewPeriod(Duration autoRenewPeriod) { Objects.requireNonNull(autoRenewPeriod); requireNotFrozen(); this.autoRenewPeriod = autoRenewPeriod; return this; } /** * Extract the auto renew account id. * * @return the auto renew account id */ @Nullable public AccountId getAutoRenewAccountId() { return autoRenewAccountId; } /** * Set the ID of the auto renew account for the new topic. *

* Optional account to be used at the topic's expirationTime to extend the life of the topic (once autoRenew * functionality is supported by HAPI). *

* The topic lifetime will be extended up to a maximum of the autoRenewPeriod or however long the topic * can be extended using all funds on the account (whichever is the smaller duration/amount and if any extension * is possible with the account's funds). *

* If specified, there must be an adminKey and the autoRenewAccount must sign this transaction. * * @param autoRenewAccountId The AccountId to be set for auto renewal * @return {@code this} */ public TopicCreateTransaction setAutoRenewAccountId(AccountId autoRenewAccountId) { Objects.requireNonNull(autoRenewAccountId); requireNotFrozen(); this.autoRenewAccountId = autoRenewAccountId; return this; } /** * Initialize from the transaction body. */ void initFromTransactionBody() { var body = sourceTransactionBody.getConsensusCreateTopic(); if (body.hasAutoRenewAccount()) { autoRenewAccountId = AccountId.fromProtobuf(body.getAutoRenewAccount()); } if (body.hasAdminKey()) { adminKey = Key.fromProtobufKey(body.getAdminKey()); } if (body.hasSubmitKey()) { submitKey = Key.fromProtobufKey(body.getSubmitKey()); } if (body.hasAutoRenewPeriod()) { autoRenewPeriod = DurationConverter.fromProtobuf(body.getAutoRenewPeriod()); } topicMemo = body.getMemo(); } /** * Build the transaction body. * * @return {@link * com.hedera.hashgraph.sdk.proto.ConsensusCreateTopicTransactionBody} */ ConsensusCreateTopicTransactionBody.Builder build() { var builder = ConsensusCreateTopicTransactionBody.newBuilder(); if (autoRenewAccountId != null) { builder.setAutoRenewAccount(autoRenewAccountId.toProtobuf()); } if (adminKey != null) { builder.setAdminKey(adminKey.toProtobufKey()); } if (submitKey != null) { builder.setSubmitKey(submitKey.toProtobufKey()); } if (autoRenewPeriod != null) { builder.setAutoRenewPeriod(DurationConverter.toProtobuf(autoRenewPeriod)); } builder.setMemo(topicMemo); return builder; } @Override void validateChecksums(Client client) throws BadEntityIdException { if (autoRenewAccountId != null) { autoRenewAccountId.validateChecksum(client); } } @Override MethodDescriptor getMethodDescriptor() { return ConsensusServiceGrpc.getCreateTopicMethod(); } @Override void onFreeze(TransactionBody.Builder bodyBuilder) { bodyBuilder.setConsensusCreateTopic(build()); } @Override void onScheduled(SchedulableTransactionBody.Builder scheduled) { scheduled.setConsensusCreateTopic(build()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy