diff --git a/CHANGELOG.md b/CHANGELOG.md
index a23e47901..8c266ccb9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## 2.37.0
+
+### Changed
+- updated `bouncycastle` dependency
+- updated `protoc` dependency
+- other various codebase chores
+
## 2.36.0
### Added
diff --git a/docs/android-app/android-app-quickstart.md b/docs/android-app/android-app-quickstart.md
index 128c785df..daf60d3fb 100644
--- a/docs/android-app/android-app-quickstart.md
+++ b/docs/android-app/android-app-quickstart.md
@@ -6,7 +6,7 @@ To get started with an Android project, you'll need to add the following **two**
1. **Hedera™ Java SDK:**
```groovy
-implementation 'com.hedera.hashgraph:sdk:2.36.0'
+implementation 'com.hedera.hashgraph:sdk:2.37.0'
```
2. **gRPC implementation:**
diff --git a/docs/java-app/java-app-quickstart.md b/docs/java-app/java-app-quickstart.md
index f921d6d26..61f690ced 100644
--- a/docs/java-app/java-app-quickstart.md
+++ b/docs/java-app/java-app-quickstart.md
@@ -8,7 +8,7 @@ To get started with a Java project, you'll need to add the following **three** d
_Gradle:_
```groovy
-implementation 'com.hedera.hashgraph:sdk:2.36.0'
+implementation 'com.hedera.hashgraph:sdk:2.37.0'
```
_Maven:_
@@ -16,7 +16,7 @@ _Maven:_
+ * Requester should cancel all pending airdrops before resending
+ * this transaction.
+ */
+ ACCOUNT_HAS_PENDING_AIRDROPS(ResponseCodeEnum.ACCOUNT_HAS_PENDING_AIRDROPS);
final ResponseCodeEnum code;
@@ -2013,6 +2046,12 @@ static Status valueOf(ResponseCodeEnum code) {
case INVALID_IPV4_ADDRESS -> INVALID_IPV4_ADDRESS;
case EMPTY_TOKEN_REFERENCE_LIST -> EMPTY_TOKEN_REFERENCE_LIST;
case UPDATE_NODE_ACCOUNT_NOT_ALLOWED -> UPDATE_NODE_ACCOUNT_NOT_ALLOWED;
+ case TOKEN_HAS_NO_METADATA_OR_SUPPLY_KEY -> TOKEN_HAS_NO_METADATA_OR_SUPPLY_KEY;
+ case EMPTY_PENDING_AIRDROP_ID_LIST -> EMPTY_PENDING_AIRDROP_ID_LIST;
+ case PENDING_AIRDROP_ID_REPEATED -> PENDING_AIRDROP_ID_REPEATED;
+ case MAX_PENDING_AIRDROP_ID_EXCEEDED -> MAX_PENDING_AIRDROP_ID_EXCEEDED;
+ case PENDING_NFT_AIRDROP_ALREADY_EXISTS -> PENDING_NFT_AIRDROP_ALREADY_EXISTS;
+ case ACCOUNT_HAS_PENDING_AIRDROPS -> ACCOUNT_HAS_PENDING_AIRDROPS;
case UNRECOGNIZED ->
// NOTE: Protobuf deserialization will not give us the code on the wire
throw new IllegalArgumentException(
diff --git a/sdk/src/main/proto/account.proto b/sdk/src/main/proto/account.proto
index e418f7db4..0eda66289 100644
--- a/sdk/src/main/proto/account.proto
+++ b/sdk/src/main/proto/account.proto
@@ -203,6 +203,17 @@ message Account {
* It will be null if if the account is not a contract or the contract has no storage mappings.
*/
bytes first_contract_storage_key = 33;
+
+ /**
+ * A pending airdrop ID at the head of the linked list for this account
+ * from the account airdrops map.
+ * The account airdrops are connected by including the "next" and "previous"
+ * `PendingAirdropID` in each `AccountAirdrop` message.
+ *
+ * This value SHALL NOT be empty if this account is "sender" for any
+ * pending airdrop, and SHALL be empty otherwise.
+ */
+ PendingAirdropId head_pending_airdrop_id = 34;
}
/**
diff --git a/sdk/src/main/proto/account_pending_airdrop.proto b/sdk/src/main/proto/account_pending_airdrop.proto
new file mode 100644
index 000000000..6b2c7b47b
--- /dev/null
+++ b/sdk/src/main/proto/account_pending_airdrop.proto
@@ -0,0 +1,70 @@
+syntax = "proto3";
+
+package proto;
+
+/*
+ * Copyright (C) 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.
+ */
+
+import "basic_types.proto";
+
+option java_package = "com.hedera.hashgraph.sdk.proto";
+// <<
+ * This SHALL match `pending_airdrop_id` if this is the only entry
+ * in the "list".
+ */
+ PendingAirdropId previous_airdrop = 2;
+
+ /**
+ * A pending airdrop identifier.
+ * This SHALL match `pending_airdrop_id` if this is the only entry
+ * in the "list".
+ */
+ PendingAirdropId next_airdrop = 3;
+}
diff --git a/sdk/src/main/proto/basic_types.proto b/sdk/src/main/proto/basic_types.proto
index 827123e35..c19afc6cf 100644
--- a/sdk/src/main/proto/basic_types.proto
+++ b/sdk/src/main/proto/basic_types.proto
@@ -1211,6 +1211,21 @@ enum HederaFunctionality {
* Transfer one or more token balances held by the requesting account to the treasury for each token type.
*/
TokenReject = 92;
+
+ /**
+ * Airdrop one or more tokens to one or more accounts.
+ */
+ TokenAirdrop = 93;
+
+ /**
+ * Remove one or more pending airdrops from state on behalf of the sender(s) for each airdrop.
+ */
+ TokenCancelAirdrop = 94;
+
+ /**
+ * Claim one or more pending airdrops
+ */
+ TokenClaimAirdrop = 95;
}
/**
@@ -1669,3 +1684,69 @@ message StakingInfo {
int64 staked_node_id = 6;
}
}
+
+/**
+ * A unique, composite, identifier for a pending airdrop.
+ *
+ * Each pending airdrop SHALL be uniquely identified by a PendingAirdropId.
+ * A PendingAirdropId SHALL be recorded when created and MUST be provided in any transaction
+ * that would modify that pending airdrop (such as a `claimAirdrop` or `cancelAirdrop`).
+ */
+message PendingAirdropId {
+ /**
+ * A sending account.
+ * This transaction MUST be signed by the account referenced by a `sender_id` for
+ * each entry in this list.
+ * This transaction MUST be signed by the account identified by
+ * the `receiver_id` for each entry in this list.
+ * This transaction MUST be signed by _each_ account *sending* an airdrop to be canceled.
+ */
+ rpc cancelAirdrop (Transaction) returns (TransactionResponse);
+
+ /**
+ * Claim one or more pending airdrops.
+ *
+ * This transaction MUST be signed by _each_ account **receiving** an
+ * airdrop to be claimed.
+ * This internal state message forms the entries in a doubly-linked list
+ * of references to pending airdrop entries that are "owed" by a particular
+ * account as "sender".
+ *
+ * Each entry in this list MUST refer to an existing pending airdrop.
+ * The pending airdrop MUST NOT be claimed.
+ * The pending airdrop MUST NOT be canceled.
+ * The pending airdrop `sender` account's `head_pending_airdrop_id` field
+ * MUST match the `pending_airdrop_id` field in this message.
+ *
+ * ### Record Stream Effects
+ * This value is not currently published in the record stream.
+ */
+message AccountPendingAirdrop {
+ /**
+ * The value of the current airdrop id. SHALL NOT be set for non fungible tokens
+ */
+ PendingAirdropValue pending_airdrop_value = 1;
+
+ /**
+ * A pending airdrop identifier.
+ * This identifies the specific pending airdrop that precedes this position
+ * within the doubly linked list of pending airdrops "owed" by the sending
+ * account associated with this account airdrop "list".
+ *
+ * This identifies the specific pending airdrop that follows this position
+ * within the doubly linked list of pending airdrops "owed" by the sending
+ * account associated with this account airdrop "list".
+ *
+ * This is the account that initiated, and SHALL fund, this pending airdrop.
+ * This field is REQUIRED.
+ */
+ AccountID sender_id = 1;
+
+ /**
+ * A receiving account.
+ * This is the ID of the account that SHALL receive the airdrop.
+ * This field is REQUIRED.
+ */
+ AccountID receiver_id = 2;
+
+ oneof token_reference {
+ /**
+ * A token ID.
+ * This is the type of token for a fungible/common token airdrop.
+ * This field is REQUIRED for a fungible/common token and MUST NOT be used for a
+ * non-fungible/unique token.
+ */
+ TokenID fungible_token_type = 3;
+
+ /**
+ * The id of a single NFT, consisting of a Token ID and serial number.
+ * This is the type of token for a non-fungible/unique token airdrop.
+ * This field is REQUIRED for a non-fungible/unique token and MUST NOT be used for a
+ * fungible/common token.
+ */
+ NftID non_fungible_token = 4;
+ }
+}
+
+/**
+ * A single pending airdrop value.
+ *
+ * This message SHALL record the airdrop amount for a fungible/common token.
+ * This message SHOULD be null for a non-fungible/unique token.
+ * If a non-null `PendingAirdropValue` is set for a non-fungible/unique token, the amount
+ * field MUST be `0`.
+ *
+ * It is RECOMMENDED that implementations store pending airdrop information as a key-value map
+ * from `PendingAirdropId` to `PendingAirdropValue`, with a `null` value used for non-fungible
+ * pending airdrops.
+ */
+message PendingAirdropValue {
+ /**
+ * An amount to transfer for fungible/common tokens.
+ * This is expressed in the smallest available units for that token
+ * (i.e. 10-`decimals` whole tokens).
+ * This amount SHALL be transferred from the sender to the receiver, if claimed.
+ * If the token is a fungible/common token, this value MUST be strictly greater than `0`.
+ * If the token is a non-fungible/unique token, this message SHOULD NOT be set, and if
+ * set, this field MUST be `0`.
+ */
+ uint64 amount = 1;
+}
diff --git a/sdk/src/main/proto/response_code.proto b/sdk/src/main/proto/response_code.proto
index cd1aeb5e4..4d91c09c2 100644
--- a/sdk/src/main/proto/response_code.proto
+++ b/sdk/src/main/proto/response_code.proto
@@ -1529,4 +1529,37 @@ enum ResponseCodeEnum {
* The node account is not allowed to be updated
*/
UPDATE_NODE_ACCOUNT_NOT_ALLOWED = 359;
+
+ /*
+ * The token has no metadata or supply key
+ */
+ TOKEN_HAS_NO_METADATA_OR_SUPPLY_KEY = 360;
+
+ /**
+ * The transaction attempted to the use an empty List of `PendingAirdropId`.
+ */
+ EMPTY_PENDING_AIRDROP_ID_LIST = 361;
+
+ /**
+ * The transaction attempted to the same `PendingAirdropId` twice.
+ */
+ PENDING_AIRDROP_ID_REPEATED = 362;
+
+ /**
+ * The transaction attempted to use more than the allowed number of `PendingAirdropId`.
+ */
+ MAX_PENDING_AIRDROP_ID_EXCEEDED = 363;
+
+ /*
+ * A pending airdrop already exists for the specified NFT.
+ */
+ PENDING_NFT_AIRDROP_ALREADY_EXISTS = 364;
+
+ /*
+ * The identified account is sender for one or more pending airdrop(s)
+ * and cannot be deleted.
+ * Requester should cancel all pending airdrops before resending
+ * this transaction.
+ */
+ ACCOUNT_HAS_PENDING_AIRDROPS = 365;
}
diff --git a/sdk/src/main/proto/schedulable_transaction_body.proto b/sdk/src/main/proto/schedulable_transaction_body.proto
index 99e5e09b4..1cfa1cd28 100644
--- a/sdk/src/main/proto/schedulable_transaction_body.proto
+++ b/sdk/src/main/proto/schedulable_transaction_body.proto
@@ -66,6 +66,9 @@ import "token_pause.proto";
import "token_unpause.proto";
import "token_update_nfts.proto";
import "token_reject.proto";
+import "token_cancel_airdrop.proto";
+import "token_claim_airdrop.proto";
+import "token_airdrop.proto";
import "schedule_delete.proto";
import "util_prng.proto";
@@ -324,5 +327,20 @@ message SchedulableTransactionBody {
* SHALL NOT be charged for this transaction.
*/
TokenRejectTransactionBody tokenReject = 45;
+
+ /**
+ * Transaction body for a scheduled transaction to cancel an airdrop.
+ */
+ TokenCancelAirdropTransactionBody tokenCancelAirdrop = 46;
+
+ /**
+ * Transaction body for a scheduled transaction to claim an airdrop.
+ */
+ TokenClaimAirdropTransactionBody tokenClaimAirdrop = 47;
+
+ /**
+ * Transaction body for a scheduled transaction to airdrop tokens.
+ */
+ TokenAirdropTransactionBody tokenAirdrop = 48;
}
}
diff --git a/sdk/src/main/proto/token_airdrop.proto b/sdk/src/main/proto/token_airdrop.proto
new file mode 100644
index 000000000..fb7b06099
--- /dev/null
+++ b/sdk/src/main/proto/token_airdrop.proto
@@ -0,0 +1,104 @@
+/**
+ * # Token Airdrop
+ * Messages used to implement a transaction to "airdrop" tokens.
+ * An "airdrop" is a distribution of tokens from a funding account
+ * to one or more recipient accounts, ideally with no action required
+ * by the recipient account(s).
+ *
+ * ### Keywords
+ * The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ * "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ * document are to be interpreted as described in [RFC2119](https://www.ietf.org/rfc/rfc2119).
+ */
+syntax = "proto3";
+
+package proto;
+
+/*-
+ *
+ * Hedera Network Services Protobuf
+ *
+ * Copyright (C) 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.
+ *
+ */
+
+option java_package = "com.hedera.hashgraph.sdk.proto";
+// <<
+ * The fee for this transfer SHALL include the transfer, the airdrop fee, and any custom fees.
+ * - An account with available automatic association slots SHALL be automatically
+ * associated to the token, and SHALL immediately receive the airdropped tokens to the
+ * recipient account balance.
+ * The fee for this transfer SHALL include the transfer, the association, the cost to renew
+ * that association once, the airdrop fee, and any custom fees.
+ * - An account with "receiver signature required" set SHALL have a "Pending Airdrop" created
+ * and must claim that airdrop with a `claimAirdrop` transaction.
+ * The fee for this transfer SHALL include the transfer, the association, the cost to renew
+ * that association once, the airdrop fee, and any custom fees. If the pending airdrop is not
+ * claimed immediately, the `sender` SHALL pay the cost to renew the token association, and
+ * the cost to maintain the pending airdrop, until the pending airdrop is claimed or cancelled.
+ * - An account with no available automatic association slots SHALL have a "Pending Airdrop"
+ * created and must claim that airdrop with a `claimAirdrop` transaction.
+ * The fee for this transfer SHALL include the transfer, the association, the cost to renew
+ * that association once, the airdrop fee, and any custom fees. If the pending airdrop is not
+ * claimed immediately, the `sender` SHALL pay the cost to renew the token association, and
+ * the cost to maintain the pending airdrop, until the pending airdrop is claimed or cancelled.
+ *
+ * If an airdrop would create a pending airdrop for a fungible/common token, and a pending airdrop
+ * for the same sender, receiver, and token already exists, the existing pending airdrop
+ * SHALL be updated to add the new amount to the existing airdrop, rather than creating a new
+ * pending airdrop.
+ *
+ * Any airdrop that completes immediately SHALL be irreversible. Any airdrop that results in a
+ * "Pending Airdrop" MAY be canceled via a `cancelAirdrop` transaction.
+ *
+ * All transfer fees (including custom fees and royalties), as well as the rent cost for the
+ * first auto-renewal period for any automatic-association slot occupied by the airdropped
+ * tokens, SHALL be charged to the account paying for this transaction.
+ *
+ * ### Record Stream Effects
+ * - Each successful transfer SHALL be recorded in `token_transfer_list` for the transaction record.
+ * - Each successful transfer that consumes an automatic association slot SHALL populate the
+ * `automatic_association` field for the record.
+ * - Each pending transfer _created_ SHALL be added to the `pending_airdrops` field for the record.
+ * - Each pending transfer _updated_ SHALL be added to the `pending_airdrops` field for the record.
+ */
+message TokenAirdropTransactionBody {
+ /**
+ * A list of token transfers representing one or more airdrops.
+ * The sender for each transfer MUST have sufficient balance to complete the transfers.
+ *
+ * All token transfers MUST successfully transfer tokens or create a pending airdrop
+ * for this transaction to succeed.
+ * This list MUST contain between 1 and 10 transfers, inclusive.
+ *
+ * Note that each transfer of fungible/common tokens requires both a debit and
+ * a credit, so each _fungible_ token transfer MUST have _balanced_ entries in the
+ * TokenTransferList for that transfer.
+ */
+ repeated TokenTransferList token_transfers = 1;
+}
diff --git a/sdk/src/main/proto/token_cancel_airdrop.proto b/sdk/src/main/proto/token_cancel_airdrop.proto
new file mode 100644
index 000000000..074aee7ee
--- /dev/null
+++ b/sdk/src/main/proto/token_cancel_airdrop.proto
@@ -0,0 +1,60 @@
+/**
+ * # Token Cancel Airdrop
+ * Messages used to implement a transaction to cancel a pending airdrop.
+ *
+ * ### Keywords
+ * The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ * "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ * document are to be interpreted as described in [RFC2119](https://www.ietf.org/rfc/rfc2119).
+ */
+syntax = "proto3";
+
+package proto;
+
+/*
+ * Copyright (C) 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.
+ *
+ */
+
+option java_package = "com.hedera.hashgraph.sdk.proto";
+// <<
+ * Remove one or more pending airdrops from state on behalf of the sender(s)
+ * for each airdrop.
+ *
+ * Each pending airdrop canceled SHALL be removed from state and SHALL NOT be available to claim.
+ * Each cancellation SHALL be represented in the transaction body and SHALL NOT be restated
+ * in the record file.
+ * All cancellations MUST succeed for this transaction to succeed.
+ */
+message TokenCancelAirdropTransactionBody {
+ /**
+ * A list of one or more pending airdrop identifiers.
+ * This list declares the set of pending airdrop entries that the client
+ * wishes to cancel; on success all listed pending airdrop entries
+ * will be removed.
+ *
+ * This list MUST NOT have any duplicate entries.
+ * This list MUST contain between 1 and 10 entries, inclusive.
+ */
+ repeated PendingAirdropId pending_airdrops = 1;
+}
diff --git a/sdk/src/main/proto/token_claim_airdrop.proto b/sdk/src/main/proto/token_claim_airdrop.proto
new file mode 100644
index 000000000..2d89789c4
--- /dev/null
+++ b/sdk/src/main/proto/token_claim_airdrop.proto
@@ -0,0 +1,64 @@
+/**
+ * # Token Claim Airdrop
+ * Messages used to implement a transaction to claim a pending airdrop.
+ *
+ * ### Keywords
+ * The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ * "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ * document are to be interpreted as described in [RFC2119](https://www.ietf.org/rfc/rfc2119).
+ */
+syntax = "proto3";
+
+package proto;
+
+/*
+ * Copyright (C) 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.
+ *
+ */
+
+option java_package = "com.hedera.hashgraph.sdk.proto";
+// <<
+ * Complete one or more pending transfers on behalf of the
+ * recipient(s) for an airdrop.
+ *
+ * The sender MUST have sufficient balance to fulfill the airdrop at the
+ * time of claim. If the sender does not have sufficient balance, the
+ * claim SHALL fail.
+ * Each pending airdrop successfully claimed SHALL be removed from state and
+ * SHALL NOT be available to claim again.
+ * Each claim SHALL be represented in the transaction body and
+ * SHALL NOT be restated in the record file.
+ * All claims MUST succeed for this transaction to succeed.
+ *
+ * ### Record Stream Effects
+ * The completed transfers SHALL be present in the transfer list.
+ */
+message TokenClaimAirdropTransactionBody {
+ /**
+ * A list of one or more pending airdrop identifiers.
+ *
+ * This list MUST contain between 1 and 10 entries, inclusive.
+ * This list MUST NOT have any duplicate entries.
+ */
+ repeated PendingAirdropId pending_airdrops = 1;
+}
diff --git a/sdk/src/main/proto/token_service.proto b/sdk/src/main/proto/token_service.proto
index 266b52418..65e30c9ec 100644
--- a/sdk/src/main/proto/token_service.proto
+++ b/sdk/src/main/proto/token_service.proto
@@ -150,4 +150,46 @@ service TokenService {
*
*/
rpc rejectToken (Transaction) returns (TransactionResponse);
+
+ /**
+ * Airdrop one or more tokens to one or more accounts.
+ * This distributes tokens from the balance of one or more sending account(s) to the balance
+ * of one or more recipient accounts. Accounts will receive the tokens in one of four ways.
+ *
+ *
+ * Any airdrop that completes immediately SHALL be irreversible. Any airdrop that results in a
+ * "Pending Airdrop" MAY be canceled via a `cancelAirdrop` transaction.
+ * All transfer fees (including custom fees and royalties), as well as the rent cost for the
+ * first auto-renewal period for any automatic-association slot occupied by the airdropped
+ * tokens, SHALL be charged to the account submitting this transaction.
+ */
+ rpc airdropTokens (Transaction) returns (TransactionResponse);
+
+ /**
+ * Cancel one or more pending airdrops.
+ *
+ * If a "Sender" lacks sufficient balance to fulfill the airdrop at the
+ * time the claim is made, that claim SHALL fail.
+ */
+ rpc claimAirdrop (Transaction) returns (TransactionResponse);
+
}
diff --git a/sdk/src/main/proto/transaction_body.proto b/sdk/src/main/proto/transaction_body.proto
index 674d17f03..fb74bc04f 100644
--- a/sdk/src/main/proto/transaction_body.proto
+++ b/sdk/src/main/proto/transaction_body.proto
@@ -74,6 +74,9 @@ import "token_pause.proto";
import "token_unpause.proto";
import "token_update_nfts.proto";
import "token_reject.proto";
+import "token_airdrop.proto";
+import "token_cancel_airdrop.proto";
+import "token_claim_airdrop.proto";
import "schedule_create.proto";
import "schedule_delete.proto";
@@ -400,5 +403,20 @@ message TransactionBody {
* SHALL NOT be charged for this transaction.
*/
TokenRejectTransactionBody tokenReject = 57;
+
+ /**
+ * A transaction body for a `tokenAirdrop` request.
+ */
+ TokenAirdropTransactionBody tokenAirdrop = 58;
+
+ /**
+ * A transaction body for a `cancelAirdrop` request.
+ */
+ TokenCancelAirdropTransactionBody tokenCancelAirdrop = 59;
+
+ /**
+ * A transaction body for a `claimAirdrop` request.
+ */
+ TokenClaimAirdropTransactionBody tokenClaimAirdrop = 60;
}
}
diff --git a/sdk/src/main/proto/transaction_record.proto b/sdk/src/main/proto/transaction_record.proto
index df6f9cb4b..87b84c117 100644
--- a/sdk/src/main/proto/transaction_record.proto
+++ b/sdk/src/main/proto/transaction_record.proto
@@ -152,4 +152,37 @@ message TransactionRecord {
* This field is populated only when the EVM address is not specified in the related transaction body.
*/
bytes evm_address = 21;
+
+ /**
+ * A list of pending token airdrops.
+ * Each pending airdrop represents a single requested transfer from a
+ * sending account to a recipient account. These pending transfers are
+ * issued unilaterally by the sending account, and MUST be claimed by the
+ * recipient account before the transfer MAY complete.
+ * A sender MAY cancel a pending airdrop before it is claimed.
+ * An airdrop transaction SHALL emit a pending airdrop when the recipient has no
+ * available automatic association slots available or when the recipient
+ * has set `receiver_sig_required`.
+ */
+ repeated PendingAirdropRecord new_pending_airdrops = 22;
+}
+
+/**
+ * A record of a new pending airdrop.
+ */
+message PendingAirdropRecord {
+ /**
+ * A unique, composite, identifier for a pending airdrop.
+ * This field is REQUIRED.
+ */
+ PendingAirdropId pending_airdrop_id = 1;
+
+ /**
+ * A single pending airdrop amount.
+ * If the pending airdrop is for a fungible/common token this field is REQUIRED
+ * and SHALL be the current amount of tokens offered.
+ * If the pending airdrop is for a non-fungible/unique token, this field SHALL NOT
+ * be set.
+ */
+ PendingAirdropValue pending_airdrop_value = 2;
}
diff --git a/sdk/src/main/resources/addressbook/previewnet.pb b/sdk/src/main/resources/addressbook/previewnet.pb
index e2a46a2d7..3b5388c0d 100644
--- a/sdk/src/main/resources/addressbook/previewnet.pb
+++ b/sdk/src/main/resources/addressbook/previewnet.pb
@@ -1,22 +1,22 @@
"308201a2300d06092a864886f70d01010105000382018f003082018a02820181009f1f8a121c2fd6c76fd508d3e429f0c64bcb44c82a70573552aadcad071569e721958f5a5d09f9587ffafcfbe5341a2f0114acae346ef3c90213d3436ebb27f4350c990c5c8c3f8e1e36707bc08d42560823e3f24e09a03ad0955a5098019629dd04b27b251dce055f3ddcb0a41d66f0941b0b87cdfe3498d46038ab5df06f62a5ade08598573a88c8f5860dc1492a6e186485a9b13250e6d17b80cd39c5c819109e73ca732db23ef8baa776ec85ce0091becb2edefbaa5ed3e5dbfbd1f885a4fa881af3f144a8a565853533d89393592086b2d1d362e45bfe1fb45683aba6c640979ad6b46877184726c6ebd58b2eae85c7cfe3fbabef5f6cced850034b3847206c2d678c361876026b8d351e002af5e0ffe6f5b1f295fdc2f469caa2d2381ea0b48ca987cc2c8e635e8b19ce5e172a93761a8d490a9a4518d7255880a14d77b7ba774892b92a40bb81362e34fc6d5178d9b30112934205cb77fb9a282427394564a8554ea47286a47f86239e75c94789ce98c99844782462944f613167d7b502030100012:`ffd6ada74a3a34a904bea47603086f8bef3b6be18abed44c4d40e12fb130b97bd6b855aec5d0b90b0b8c7354d5f3b0e4B
-B
+#ДB
B
#ДB
-#ДJ"Hosted by Hedera | East Coast, USA
+J"Hosted by Hedera | East Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c557af579fa83501be899b28907765bfdfcd52ab432b0195a1f1ecd86fc00ab6c5509b0fdd97edd3cb5cea56a295f312abb550831dbf963f450118b4fcc6e22cf4676200ce9cc8edfbbf558dc69f024264ad7d3dab23bed2133c274e6934489155db1087f90370905c64185a6211dc742fb9a6909d82186947b277463dfb3ff0acd47eff12ead1f6972ef2c1203793c45e77575be4fa110c7e40fa8db9c6187d113f4704014179071abf59be7d2b0de82de4215dc25506b1c9c26e4917401c997506e377e6bf03b688727e7940fad69c5e0da3cd5cbd2be777350aea2d0d47e97a448c84be6ce134d64bee0985c29162f4c1e567cca93d06a3c1be8abce35b557fb77f4fe671a66dec790756d0e8818165f2bacaa891aae7ac7437fc7175b6eb6deb7472378751bb6bf9b0e1483f9668e9fdbd5604c39b14d9e2bedeec846a980d704d171e7ba4b7fcd1a30d945ca12f47a325d9398aa18f97066054d4d15fc8994e2debe73e9271d548683f61ea44fb25071e3518a78ed3eb37e71a0691f2670203010001(2:`f0d94accf6dff372874c9dbd8d7992eb317af5001ca4196aba265809cb3d200ba961a5438c3a5ed05c83bdf9cd115d22B
+#B
+
ՒB
#B
-ՒB
-
-#J"Hosted by Hedera | East Coast, USA
+ՒJ"Hosted by Hedera | East Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a02820181009ba457b73305f04a91cc46b1b965c4e841751abc8b1415a0badfd1f32c2482386a22725eb7ec74dea21e50617d648ea5ac393741ab01b8efb321239b8d4fdb1dfbeb9e3f39aa46580dd045d18ca44d002c37ddb527cce4ddc32bfc73419671f4ca4464a3f2a84fc85c71acf0e5a89626df69a81474ed16529f801a8afa97e435c4e04a964a357527288843e58f0a05cf5153ee4507b2c68b3d7fb54ae6a95a959c87a12f630e95c7b1b3c3695e858662417926d76c16983faf61225038745907e9cf13d67c2acd503ca451c85933ac4118acc279801cb968349903145ced27629dd08916317093587a77c2205cfa52543b53c3b6ea15b84e3d2c30c1ed752a4633c36b25b9893ea02ad562eb9b7868b3b4f47f4a25e356064962ac7b25e582944f00d30798a262f9214d8c5e74d0a8376cc2d6ba64e18f5e4a40afac625062d2ca23cd2800708321d3834314f0e5844859232673a32e70ae0d711e310581bcdb14e87134694c6e0930f46b37b96d49a64573947331e7e507d9e56de5e6146f2f0203010001(2:`ca678ebcbd3dc8648f7ed03fb59f0e21af67513eaee51318e6b549be5ace906edc1ffa26d93a57acec9be77f40eaeed7B
#B
@@ -28,37 +28,37 @@
#JHosted by Hedera | Central, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c42ccac5fbc691fbbebda87ffd1e75bdcd8922494cf44fdbccee49788521c378bf77db0934ec0d2183d7c51db66f864c11ab7de1ac3c4cfdc1f093a2d6f37e2b34cbe4c8131f9683ad42878c83d3554c645aa167bcfb064a83dc45c5b1158499f9d92587fff7abcd5f221cd8150548413000fa6e5659089b1dfd65766ea78eaedfca6b45455fd8ab5984dbe35e5795d2c635ea7974d43e8eae4febffe492e707b48b1b0fc6481ae9e09d39133009b7d26402e6e52e5e91b2b380d88f0be7fb4b303e70219785057aa94ce924c4926e916569286e86b3ba651ca2a0a63df4f6907fefe3483d93b4ce1d4d03c7142111375b2c2c51d4eb839e37af530b2cbd6f50d4cb36e27937170d9cddac0ace2cc24b804b0a27351cf830b76525e26dfb9dbf49a056624a76862494e7263d0d70cebae952943e55842f5cad13fcf60a2e6dcf7a1d533f3a5bb54ec21918c76e525ba29146675831e17e36c61fe85498828d09b762015412b2e527849baec1cffc77de4c294c550811e598ff24da15a34569dd0203010001(2:`2471f3fe8140681fe91913d2cc063f065e4490ae62ff5d548a5abe131d2af96cbe3ac25bbe24366ca4f8f0e76cf945f3B
-6&B
+#mB
-6&B
+6&B
#mB
-#mJ"Hosted by Hedera | West Coast, USA
+6&J"Hosted by Hedera | West Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100902f0490a9b7f5d2cd1c0d96c6a6990f573b5f0eb5bdbba39661ef023092419344669969a68a4c7071d329990fb1792e9001cb5598ea71c2d6676824320ee4cabf1dd357ae7f2adbedc1b1b0a9d95623779b4c4c7b47c4787a16ee7188c7217177624a9264ab39c41f7ff0b45a89bda40c4ad07c4d596d5f09d7056bcb5a35f44f95a59c266e09892dcbe46ad51f2d2b3e991a8f6658e1f2cb94c773eb44c44e892d1e55c1076f1608319ee657e40f192967543ab42ab222386d17586e253748dabd025e50b50ae6050720e239d64ee6fb4507c0614dd4be7afdb1330890ff3a6e176527c3116af129a9ac5e336d9f601e7127a6d7d820ad2f902dac9b248668a1bab08d10342ea69a7097132ff7120cc64fcde7840c656ba1732ba95e9c36751175e4ec3d84a7e0d28842b41bbbbd6f28e46c3a6633e1827965c55820d50dae2b0465cc0d42e195b9d1532e6225eb998d6a49079a8a1cd4d0175de3c87f97614847b3cbb17aa34be820b7b3ad98ac3faef993a6778974782c0c4ae3fabbcc430203010001(2:`f357873d4114a1aef03adc6ba69efaf2690e227abc16a6fc6e5049a63fbd9688004b14e463c20e38436a3a24d3182dd8B
+63B
+
#A3B
63B
-#A3B
-
-63J"Hosted by Hedera | West Coast, USA
+#A3J"Hosted by Hedera | West Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a028201810091d7dfff78f4efbe5890450c5bc9e3534bffadad93fb7afb15bc7bcf67d3d3b413bd99940dd82564ada04ab2e4edf0a1c0b8fb7e1a8092e9138e960be2cc68b5b97f57d281c5872e97a479fc848363160e3863b57b33e4869b185ace5e36bd43ae5fa678c9eb66f1f4014786826b2f8fa7e0060f4405c0a8f9da7205ff4683a243fa0f315f1afbb4a4d140d02234e4473fb92fcb38f3eb28c60cf7cbfb64e069c18086e4dd61938920ae0fd7c193e6e104e65b817ed9398e232237fdf08322c9cec09d4099272a7c015d22b4dcc969f6ea1f518902105df60092b55a41b4f32b957b57d84e5b223905e8698951733ea9f2e2461ec0d6522ee816d5850facfeb412cff9b99943a87dc0d046447ce93b97e16d73b96b4263962f81fcf9458e57577c780a6f1615aa7a12326738e269bb731f89e891622e577ea54420bf0ca46be6fc4f71cf2681ac0252aa885e13be672cd284590427dcd137cf311625e8bee3b08fdcaaf465b387ce7cb33816f2c14a6b99ac7d734318cfc59b7ed939bafef8790203010001(2:`4931a78202d55f10b31575785c3f439db6819bd11003df7bc2ce92e29a517b7c21880deb4c01795744b576cd43b8498dB
-"jAB
+#SYB
-#SYB
+"jAB
"jAB
-#SYJ"Hosted by Hedera | West Coast, USA
+#SYJ"Hosted by Hedera | West Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c6e18c8fbf4cd4eb104542cb20aaaa252d95f052f1086d581c44ad737bf6676c0c3f789af5265b8afb79b50912da84e0afcf7547cb1fff08d0527017eb6dc5cdf83b51969d44336a6387cd70b94bf4c9baf2029840e5f4f863d7081f0fa81e0863adedb8b89a5dac2bb552d6e7b9fba222ac28c57075538fc957992942d341fa2876e6b507e9ce7ed572e8cfda5defa364fdf8d8e23829a4ccbb478f11eee3b32ab85e072951c5d9420115fba327073494f43b5f6bebf84152e356e7b16ba764b7a3b52cb2734640163be1465e6d1fa4c6e6f66684a635c9a556aa7100dbe645df8f4c423ae45a08cb35b4bc187886e2299b5c0210a5fba3b9449f483ef94ed922e1e98c113be166b89c73582243135d442306abe5a71b77018ff335d6dd79542697b168238b96727fd1339b5f82a3b6a597d976037ae2506456c8b34e9fbf3bc32410441c4bfc8eba58597254efebfaa78809a5c8854729a5ba78ece19fc8407dd8894a6bc7844037d878cace6c152c2e89e8a64b068a6c237e09993be806890203010001(2 :`64e098615bf405f7ed5a4013446b89c488cfcd6bb25a4a676dc77eea11d33d702682f0a69a8030e8c5777d0e42203799B
"}1B
-2]B
+2]B
-"}1B
+2]B
-2]J"Hosted by Hedera | West Coast, USA
\ No newline at end of file
+"}1J"Hosted by Hedera | West Coast, USA
\ No newline at end of file
diff --git a/sdk/src/main/resources/addressbook/testnet.pb b/sdk/src/main/resources/addressbook/testnet.pb
index 138b3e527..bddabc0e4 100644
--- a/sdk/src/main/resources/addressbook/testnet.pb
+++ b/sdk/src/main/resources/addressbook/testnet.pb
@@ -1,64 +1,64 @@
"308201a2300d06092a864886f70d01010105000382018f003082018a02820181009f1f8a121c2fd6c76fd508d3e429f0c64bcb44c82a70573552aadcad071569e721958f5a5d09f9587ffafcfbe5341a2f0114acae346ef3c90213d3436ebb27f4350c990c5c8c3f8e1e36707bc08d42560823e3f24e09a03ad0955a5098019629dd04b27b251dce055f3ddcb0a41d66f0941b0b87cdfe3498d46038ab5df06f62a5ade08598573a88c8f5860dc1492a6e186485a9b13250e6d17b80cd39c5c819109e73ca732db23ef8baa776ec85ce0091becb2edefbaa5ed3e5dbfbd1f885a4fa881af3f144a8a565853533d89393592086b2d1d362e45bfe1fb45683aba6c640979ad6b46877184726c6ebd58b2eae85c7cfe3fbabef5f6cced850034b3847206c2d678c361876026b8d351e002af5e0ffe6f5b1f295fdc2f469caa2d2381ea0b48ca987cc2c8e635e8b19ce5e172a93761a8d490a9a4518d7255880a14d77b7ba774892b92a40bb81362e34fc6d5178d9b30112934205cb77fb9a282427394564a8554ea47286a47f86239e75c94789ce98c99844782462944f613167d7b502030100012:`a171e3ba83476747aeb2e2ac4d0e115caaab918203b0dfe1cdeab443438fc289abc8ba8a6aff83db5f1b334046da88c8B
-2B
+2B
"^j=B
-"^j=B
+2B
-2J"Hosted by Hedera | West Coast, USA
+"^j=J"Hosted by Hedera | West Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c557af579fa83501be899b28907765bfdfcd52ab432b0195a1f1ecd86fc00ab6c5509b0fdd97edd3cb5cea56a295f312abb550831dbf963f450118b4fcc6e22cf4676200ce9cc8edfbbf558dc69f024264ad7d3dab23bed2133c274e6934489155db1087f90370905c64185a6211dc742fb9a6909d82186947b277463dfb3ff0acd47eff12ead1f6972ef2c1203793c45e77575be4fa110c7e40fa8db9c6187d113f4704014179071abf59be7d2b0de82de4215dc25506b1c9c26e4917401c997506e377e6bf03b688727e7940fad69c5e0da3cd5cbd2be777350aea2d0d47e97a448c84be6ce134d64bee0985c29162f4c1e567cca93d06a3c1be8abce35b557fb77f4fe671a66dec790756d0e8818165f2bacaa891aae7ac7437fc7175b6eb6deb7472378751bb6bf9b0e1483f9668e9fdbd5604c39b14d9e2bedeec846a980d704d171e7ba4b7fcd1a30d945ca12f47a325d9398aa18f97066054d4d15fc8994e2debe73e9271d548683f61ea44fb25071e3518a78ed3eb37e71a0691f2670203010001(2:`7409dec2e494b627ee49c69b294be1ceaebca3fdcaf36789e88fc7d5b0eef5561f52b82d35191a39c2fbed6027267166B
-
B
+#w7B
-
B
+
B
-#w7B
+#w7B
-#w7J"Hosted by Hedera | East Coast, USA
+
J"Hosted by Hedera | East Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a02820181009ba457b73305f04a91cc46b1b965c4e841751abc8b1415a0badfd1f32c2482386a22725eb7ec74dea21e50617d648ea5ac393741ab01b8efb321239b8d4fdb1dfbeb9e3f39aa46580dd045d18ca44d002c37ddb527cce4ddc32bfc73419671f4ca4464a3f2a84fc85c71acf0e5a89626df69a81474ed16529f801a8afa97e435c4e04a964a357527288843e58f0a05cf5153ee4507b2c68b3d7fb54ae6a95a959c87a12f630e95c7b1b3c3695e858662417926d76c16983faf61225038745907e9cf13d67c2acd503ca451c85933ac4118acc279801cb968349903145ced27629dd08916317093587a77c2205cfa52543b53c3b6ea15b84e3d2c30c1ed752a4633c36b25b9893ea02ad562eb9b7868b3b4f47f4a25e356064962ac7b25e582944f00d30798a262f9214d8c5e74d0a8376cc2d6ba64e18f5e4a40afac625062d2ca23cd2800708321d3834314f0e5844859232673a32e70ae0d711e310581bcdb14e87134694c6e0930f46b37b96d49a64573947331e7e507d9e56de5e6146f2f0203010001(2:`9b1416584a4a380bb86a6c7d7207d8aeddbc3b63ea305998255bce8351ba4b5dca52c9282a54a6bed60de63ce03aaa24B
-4VB
+#B
4VB
-#B
+#B
-#J"Hosted by Hedera | East Coast, USA
+4VJ"Hosted by Hedera | East Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c42ccac5fbc691fbbebda87ffd1e75bdcd8922494cf44fdbccee49788521c378bf77db0934ec0d2183d7c51db66f864c11ab7de1ac3c4cfdc1f093a2d6f37e2b34cbe4c8131f9683ad42878c83d3554c645aa167bcfb064a83dc45c5b1158499f9d92587fff7abcd5f221cd8150548413000fa6e5659089b1dfd65766ea78eaedfca6b45455fd8ab5984dbe35e5795d2c635ea7974d43e8eae4febffe492e707b48b1b0fc6481ae9e09d39133009b7d26402e6e52e5e91b2b380d88f0be7fb4b303e70219785057aa94ce924c4926e916569286e86b3ba651ca2a0a63df4f6907fefe3483d93b4ce1d4d03c7142111375b2c2c51d4eb839e37af530b2cbd6f50d4cb36e27937170d9cddac0ace2cc24b804b0a27351cf830b76525e26dfb9dbf49a056624a76862494e7263d0d70cebae952943e55842f5cad13fcf60a2e6dcf7a1d533f3a5bb54ec21918c76e525ba29146675831e17e36c61fe85498828d09b762015412b2e527849baec1cffc77de4c294c550811e598ff24da15a34569dd0203010001(2:`6486685b4e6e0cb963472c01fe99931fd9e4c44887ba83423ae7feed22d648484cf8a3bc5ccca6a37387bf96d3867280B
-6F!B
+6F!B
"SptB
-6F!B
+6F!B
"SptJ"Hosted by Hedera | West Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100902f0490a9b7f5d2cd1c0d96c6a6990f573b5f0eb5bdbba39661ef023092419344669969a68a4c7071d329990fb1792e9001cb5598ea71c2d6676824320ee4cabf1dd357ae7f2adbedc1b1b0a9d95623779b4c4c7b47c4787a16ee7188c7217177624a9264ab39c41f7ff0b45a89bda40c4ad07c4d596d5f09d7056bcb5a35f44f95a59c266e09892dcbe46ad51f2d2b3e991a8f6658e1f2cb94c773eb44c44e892d1e55c1076f1608319ee657e40f192967543ab42ab222386d17586e253748dabd025e50b50ae6050720e239d64ee6fb4507c0614dd4be7afdb1330890ff3a6e176527c3116af129a9ac5e336d9f601e7127a6d7d820ad2f902dac9b248668a1bab08d10342ea69a7097132ff7120cc64fcde7840c656ba1732ba95e9c36751175e4ec3d84a7e0d28842b41bbbbd6f28e46c3a6633e1827965c55820d50dae2b0465cc0d42e195b9d1532e6225eb998d6a49079a8a1cd4d0175de3c87f97614847b3cbb17aa34be820b7b3ad98ac3faef993a6778974782c0c4ae3fabbcc430203010001(2:`39e909915a8528030154a6c770950c7b4777ba401357c0e6187654215cc20aaccdd8e5ff29e9c4d95cf4101fa68be45cB
-6mB
-
"^B
-6mB
+6mB
+
+"^B
-"^J"Hosted by Hedera | West Coast, USA
+6mJ"Hosted by Hedera | West Coast, USA
"308201a2300d06092a864886f70d01010105000382018f003082018a028201810091d7dfff78f4efbe5890450c5bc9e3534bffadad93fb7afb15bc7bcf67d3d3b413bd99940dd82564ada04ab2e4edf0a1c0b8fb7e1a8092e9138e960be2cc68b5b97f57d281c5872e97a479fc848363160e3863b57b33e4869b185ace5e36bd43ae5fa678c9eb66f1f4014786826b2f8fa7e0060f4405c0a8f9da7205ff4683a243fa0f315f1afbb4a4d140d02234e4473fb92fcb38f3eb28c60cf7cbfb64e069c18086e4dd61938920ae0fd7c193e6e104e65b817ed9398e232237fdf08322c9cec09d4099272a7c015d22b4dcc969f6ea1f518902105df60092b55a41b4f32b957b57d84e5b223905e8698951733ea9f2e2461ec0d6522ee816d5850facfeb412cff9b99943a87dc0d046447ce93b97e16d73b96b4263962f81fcf9458e57577c780a6f1615aa7a12326738e269bb731f89e891622e577ea54420bf0ca46be6fc4f71cf2681ac0252aa885e13be672cd284590427dcd137cf311625e8bee3b08fdcaaf465b387ce7cb33816f2c14a6b99ac7d734318cfc59b7ed939bafef8790203010001(2:`a44874a7aa1b37741a071adaae78fb152b696d1c58d8defbe1d82304532a0c019ee96cc19d75686578d39a1e6c31a1eeB
"jfB
-#1B
-
#1B
-"jfJ"Hosted by Hedera | West Coast, USA
-"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c6e18c8fbf4cd4eb104542cb20aaaa252d95f052f1086d581c44ad737bf6676c0c3f789af5265b8afb79b50912da84e0afcf7547cb1fff08d0527017eb6dc5cdf83b51969d44336a6387cd70b94bf4c9baf2029840e5f4f863d7081f0fa81e0863adedb8b89a5dac2bb552d6e7b9fba222ac28c57075538fc957992942d341fa2876e6b507e9ce7ed572e8cfda5defa364fdf8d8e23829a4ccbb478f11eee3b32ab85e072951c5d9420115fba327073494f43b5f6bebf84152e356e7b16ba764b7a3b52cb2734640163be1465e6d1fa4c6e6f66684a635c9a556aa7100dbe645df8f4c423ae45a08cb35b4bc187886e2299b5c0210a5fba3b9449f483ef94ed922e1e98c113be166b89c73582243135d442306abe5a71b77018ff335d6dd79542697b168238b96727fd1339b5f82a3b6a597d976037ae2506456c8b34e9fbf3bc32410441c4bfc8eba58597254efebfaa78809a5c8854729a5ba78ece19fc8407dd8894a6bc7844037d878cace6c152c2e89e8a64b068a6c237e09993be806890203010001(2 :`69832a73a3602e8d1fbe5ad58d1c2637a1b672d71ee87af10db648eb91afb228253b1f47e57d3d4a44ff547b3394aa22B
+"jfB
-"B
+#1J"Hosted by Hedera | West Coast, USA
+"308201a2300d06092a864886f70d01010105000382018f003082018a0282018100c6e18c8fbf4cd4eb104542cb20aaaa252d95f052f1086d581c44ad737bf6676c0c3f789af5265b8afb79b50912da84e0afcf7547cb1fff08d0527017eb6dc5cdf83b51969d44336a6387cd70b94bf4c9baf2029840e5f4f863d7081f0fa81e0863adedb8b89a5dac2bb552d6e7b9fba222ac28c57075538fc957992942d341fa2876e6b507e9ce7ed572e8cfda5defa364fdf8d8e23829a4ccbb478f11eee3b32ab85e072951c5d9420115fba327073494f43b5f6bebf84152e356e7b16ba764b7a3b52cb2734640163be1465e6d1fa4c6e6f66684a635c9a556aa7100dbe645df8f4c423ae45a08cb35b4bc187886e2299b5c0210a5fba3b9449f483ef94ed922e1e98c113be166b89c73582243135d442306abe5a71b77018ff335d6dd79542697b168238b96727fd1339b5f82a3b6a597d976037ae2506456c8b34e9fbf3bc32410441c4bfc8eba58597254efebfaa78809a5c8854729a5ba78ece19fc8407dd8894a6bc7844037d878cace6c152c2e89e8a64b068a6c237e09993be806890203010001(2 :`69832a73a3602e8d1fbe5ad58d1c2637a1b672d71ee87af10db648eb91afb228253b1f47e57d3d4a44ff547b3394aa22B
-4B
+4B
"B
-4JHosted by Hedera | Central, USA
\ No newline at end of file
+"B
+
+4JHosted by Hedera | Central, USA
\ No newline at end of file
diff --git a/version.txt b/version.txt
index 3a05135cd..c94fd315f 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-2.36.0
+2.37.0