All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- feat: Support Pectra EVM Type 4 Transaction Encoding (EIP-7702) (#2774)
- feat: HIP-1340 (#2569)
- feat: MirrorNodeAccountBalanceQuery (#2895)
- refactor: ping (#2870)
- feat: functions for remove/remove all signatures (#2838)
- feat: toJson method on receipt, record and response (#2836)
- chore(deps): bump hiero-solo-action to 0.20.0 and align local Solo network ports with new defaults (#2777)
- feat(tck): Added getTransactionReceipt method (#2762)
- refactor: fromBytes (#2773)
- feat: HIP-1137 (#2654)
- feat: HIP-1313 (#2572)
- refactor: hip-1261 (#2722)
- refactor: hooks proto and status (#2710)
- chore: refactor proto script (#2693)
- fix: Serialization for TokenClaimAirdropTransaction on fromScheduledTransaction (#2702)
- refactor: transaction validation (#2675)
- feat(TCK): added several tck endpoints
- refactor: ecdsa type (#2659)
- fix: TopicInfo customFixedFee to return valid feeCollectorAccountId when parse from proto (#2643)
- verifyTransaction method (#2661)
- feat: receipt/record query failover to other nodes
- feat(TCK): added several tck endpoints
- fix: block field and related logic for MirrorNodeContractQuery
- feat(TCK): TokenReject implementation - #2581
- feat(TCK): TokenInfoQuery implementation - #2594
- feat(TCK): AccountBalanceQuery implementation - #2597
- gRPC version updated from 1.75.0 to 1.76.0 - #2532
- HIP-1299: Refine Node Account ID Management in the Dynamic Address Book (DAB) - #2557
- HIP-1261: Simplified Fee Model for Hiero Networks: enables accurate fee estimation by the SDK - #2559
- HIP-1300: Add integration tests for Increased Transaction Size for Governance Accounts - #2560
- Include nonce in TransactionId equals method - #2555
- Add Hiero Hooks: programmable Hiero extension points that let users customize the behavior of their entities. Focuses on EVM hooks and account allowance hooks as the first extension point. #2538
- Fix reties on topic unsubscribe - #2456
- Make mirror node security protocol rely on port number - #2480
- Validation for non-empty message for
TopicMessageSubmitTransaction customFeeLimitsfor Scheduled Transactions (currently only forTopicSubmitTransaction)
- Introduced new method
deleteGrpcWebProxyEndpointforNodeUpdateTransaction#2400 Effectively sets the proxy tonullin the mirror node api and removes it from the address book state. #2420
- Package naming is expected to change from
hederatohieroin 6 months period. See the migration guide here https://github.com/hiero-ledger/hiero-sdk-java/blob/main/HIERO_MIGRATION.md
- Validation of nodeId explicitly before execution of transaction #2388
- Following PR introduces specific validation inside NodeUpdateTransaction and NodeDeleteTransaction https://github.com/hiero-ledger/hiero-sdk-java/pull/2406/files
- Migration document for publishing under the hieronamespace #2371
- A migration document with information for publishing under the Hiero namespace changes that developers can refer to #2411
- Java version update from 17 to 21 #2075
- EthereumFlow due to introduction of JumboTransactions. #2250
- EthereumTransaction should be used instead. https://github.com/hiero-ledger/hiero-sdk-java/pull/2402/files
- Persistent shard and realm support for Client #2376
- This PR adds persistent realm and shard support to the Client configuration, ensuring consistent address book queries across lifecycle events. #2362
- New fromEvmAddress and toEvmAddress APIs #2396
- Shard and realm encoding from evm address #2368
- deprecated unnecessary fromSolidityAddress & toSolidityAddress methods
- EthereumFlow transaction #2358
- Introduced changes to the flow where a single node handles all the transactions inside so pre-check errors are avoided https://github.com/hiero-ledger/hiero-sdk-java/pull/2379/files
- Manual Signature Injection Support for HSM-based Transaction Signing #2350
- new APIs added
- SignableNodeTransactionBodyBytes - class that represents a transaction body ready for external signing, explicitly associated with a node account ID and transaction ID.
- Transaction.signableNodeBodyBytesList() - array of SignableNodeTransactionBodyBytes containing the canonical bodyBytes paired explicitly with their respective nodeAccountId and transactionId for signing. #2356
- new APIs added
- Refactor of "fromBytes" method inside Transaction class #2357
- Introduced smaller private methods that improve readability and follow single responsibility principle #2338
- Support for HIP-1046. https://hips.hedera.com/hip/hip-1046
- Introduced new grpc web proxy field in the address book schema, making node operators manage their web proxies. #2337
- NodeCreateTransaction
- Endpoint grpcWebProxyEndpoint - A web proxy for gRPC from non-gRPC clients.
- Endpoint getGrpcWebProxyEndpoint()
- NodeCreateTransaction setGrpcWebProxyEndpoint(Endpoint)
- NodeUpdateTransaction
- Endpoint grpcWebProxyEndpoint - A web proxy for gRPC from non-gRPC clients.
- Endpoint getGrpcWebProxyEndpoint()
- NodeUpdateTransaction setGrpcWebProxyEndpoint(Endpoint)
- Support transaction size calculation before submission. This is useful for fee estimation, transaction validation, and batching logic. #2330
- Following APIs were implemented: #2324
-
Transaction.size: uint Returns the total size (in bytes) of the protobuf-encoded transaction, including signatures and metadata.
-
Transaction.bodySize: uint Returns the protobuf-encoded transaction body size (excluding signatures), using a placeholder node account ID.
-
ChunkTransaction.bodySizeAllChunks: uint[] For chunked transactions (e.g. FileAppendTransaction, TopicMessageSubmitTransaction), returns an array of body sizes for each chunk.
-
- Following APIs were implemented: #2324
- Improve
setECDSAKeyWithAliasandsetKeyWithAliasforAccountCreateTransaction#2319-
Update and unify the method signatures to accept a more flexible input type, such as Key, which can represent either an ECDSA PrivateKey or a PublicKey. The updated behavior should support both scenarios:
- If a PrivateKey is provided: use it to set the key and internally derive the alias from its corresponding public key.
- If a PublicKey is provided: use it directly to set the key and derive the alias from that public key.
This ensures that both PrivateKey and PublicKey inputs result in the same outcome: #2318
-
- Client.setNetwork() does not propagate address book #2317
- Now, on Node creation (after Client.setNetwork() call) we attach the corresponding address book if one is present #2322
- Support for HIP-551 Batch Transaction https://hips.hedera.com/hip/hip-551
It defines a mechanism to execute batch transactions such that a series of transactions (HAPI calls) depending on each other can be rolled into one transaction that passes the ACID test (atomicity, consistency, isolation, and durability).
#2285
- New BatchTransaction class that consists of List innerTransactions and List innerTransactionIds.
- batchKey field in Transaction class that must sign the BatchTransaction
- new batchify method that sets the batch key and marks a transaction as part of a batch transaction (inner transaction). The transaction is signed by the client of the operator and frozen.
- freezeWith: Additional check if batchKey is null. If not present → indication that this transaction is not meant to be inside a batch If preset → indication that this transaction is part of a batch and setting nodeAccountId to 0.0.0
- New TCK method that handles TokenAirdropTransaction #2280
- Handling of non-zero shard and realms for static files #2308
- Not verifying the receipt for multiple
THROTTLED_AT_COSENSUSresponses. Also enhancing the retry mechanism for this status code using backoffs.
- Support for HIP-1021: Improve Assignment of Auto-Renew Account ID for Topics (https://hips.hedera.com/hip/hip-1021). The autoRenewAccountId will automatically be set to the payer_account_id of the transaction if an Admin Key is not provided during topic creation #2301
- Upon
TopicUpdateTransactionyou are not able to clear the custom fees, feeExemptKey and feeScheduleKey #2284 The logic is updated as follows:- If we have null list (that is the default value) → Do nothing (don’t send a request).
- If we have empty list → Send a request to clear the list.
- For Non-empty list → Send a request with the provided list.
clearFeeScheduleKeysets the key to empty KeyList.
- Enabled gRPC retry option for more stable connection with nodes #2264
- Automatic setting of autorenew account for topic create.
ScheduledNetworkUpdateexample.
- Support for HIP-1021: Improve Assignment of Auto-Renew Account ID for Topics.
- Methods that explicitly set shard and realm to 0.
EthereumFlowfor large contract operations.
- Support for HIP-991: revenue generating topics.
AccountStakersQuery, since it was not supported in consensus node for a long time and now it's removed permanently.
Livehashtransactions and queriesSystemDeleteTransactionandSystemUndeleteTransaction.
- Race condition when updating the address books.
- New APIs in
AccountCreateTransaction:setKeyWithAlias(ECDSAKey),setKeyWithAlias(Key, ECDSAKey)andsetKeyWithoutAlias(Key).
- Deprecated
setKeyinAccountCreateTransaction.
- New query payment is generated when the SDK receives status
BUSY.
- Retry mechanism for resubmitting the transaction in case the SDK receives status
THROTTLED_AT_CONSENSUSin the transaction receipt.
nextExchangeRateproperty in theTransactionReceipt.- Warning log when trying to execute transaction against nodeID which is not in the client configuration.
- Optimised
MirrorNodeContractEstimateGasQueryandMirrorNodeContractCallQueryto calltoEvmAddressinstead calling the mirror node.
- 2 new queries
MirrorNodeContractCallQueryandMirrorNodeContractEstimateGasQueryfor estimation/simulation of contract operations. - Support for Long Term Scheduled Transactions (HIP-423).
- Validation for creating Public keys from bytes.
- A bug where service port was overridden for
NodeUpdateTransaction. - Runtime errors using older Android APIs (26+).
- A bug where optional fields for
NodeUpdateTransactionwere being set as default values.
- New api for creating client with mirror network -
forMirrorNetwork
- Do not shut down externally provided executor
- Fix
IllegalStateExceptionwhen specific node id is not present in address book
- Update protobufs from
hedera-services client.setNetworkFromAddressBookupdates the address book by default
addBytes4andaddBytes4Arraymethods forContractFunctionParameters- Support ports that are not well known for use with port forwarding
setFileIdresetscontractId, and similarly, whensetContractIdresetsfileId
- Android runtime errors for API levels 26-33.
- The ability to create multiple Clients using shared
ExecutorService closeChannelsmethod toClientto close the channels without closing the executor- New method to update security parameters when updating the addressbook
- handling of
BUSYstatus code
TokenAirdropTransaction,TokenClaimAirdropTransaction,TokenCancelAirdropTransaction(HIP-904)
- handling of
FEE_SCHEDULE_FILE_PART_UPLOADEDstatus code
NodeCreateTransaction,NodeUpdateTransaction,NodeDeleteTransaction(part of HIP-869)
- updated examples
- updated
bouncycastledependency - updated
protocdependency - other various codebase chores
- Token Reject functionality (part of HIP-904)
- Token Reject functionality (part of HIP-904)
toStandardECDSAsecp256k1PrivateKeyCustomDerivationPathfunction toMnemonicfromBytesfunction toKey
- build scripts rework
- handling of
PLATFORM_NOT_ACTIVEstatus code when callinggetReceipt()orgetRecord() - build scripts fix
- paths in examples/README.md
toStandardECDSAsecp256k1PrivateKeyCustomDerivationPathfunction toMnemonicfromBytesfunction toKey
- build scripts rework
- handling of
PLATFORM_NOT_ACTIVEstatus code when callinggetReceipt()orgetRecord()
- possibility to change or remove existing keys from a token (HIP-540)
AccountBalanceQuery,AccountInfoQuery, andContractInfoQueryget all the data from consensus nodes again
- add
decimalfield toTokenRelationshipclass
AccountBalanceQuery,AccountInfoQuery, andContractInfoQueryget part of the data from the Mirror Node REST API (HIP-367)- improved documentation in repository
- updated protobufs
- undeprecate
AccountBalance.tokens,AccountBalance.tokenDecimals,AccountInfo.tokenRelationships,ContractInfo.tokenRelationships
TokenRelationship.symbol, useTokenInfo.symbolinsteadAccountId.populateAccountNumAsync, useAccountId.populateAccountNuminsteadAccountId.populateAccountEvmAddressAsync, useAccountId.populateAccountEvmAddressinsteadContractId.populateContractNumAsync, useContractId.populateContractNuminstead
- METADATA key and possibility to update NFT metadata (HIP-657)
- Fungible Token Metadata Field (HIP-646)
- NFT Collection Token Metadata Field (HIP-765)
- a method to calculate the recoveryId for ECDSA signatures
- improved documentation in repository
- updated protobufs
- METADATA key and possibility to update NFT metadata (HIP-657)
- Fungible Token Metadata Field (HIP-646)
- NFT Collection Token Metadata Field (HIP-765)
- improved documentation in repository
- updated protobufs
- possibility to optionally send transaction data without required transaction fields (HIP-745)
signerNoncefield toContractFunctionResult(HIP-844)
- removed
streamsupportdependency
Transaction.fromBytes()andTransaction.getSignatures()throw an exception for transactions signed using an ECDSA key- spurious
INVALID_TRANSACTION_STARTinTransactionId.generate()
populateAccountEvmAddressandpopulateAccountEvmAddressAsynctoAccountId
- duplicate transaction IDs at high TPS (>25K)
- android compatibility issues
- GRPC configurations
addBoolArrayfunction toContractFunctionParameters
java.lang.VerifyErrorexception in examples
- updated addressbooks
- improved timeout handling
- Timeout for TransactionResponse.getReceipt not working well
contractNoncestoContractFunctionResult- Support for ECDSA keys generated by OpenSSL
- Custom logger used in
ClientandExecutable
- ThreeTen dependency
- Jabel dependency
- future-converter-java8-guava dependency
- sdk-jdk7 artifact
- Minimum Java version to 17
- Minimum supported Android version to 8
- The
transactionIdnanoseconds are now left padded with 0s for 9 chars - Importing and exporting ECDSA keys to DER format is now compatible with OpenSSL
- Alias support in
AccountCreateTransaction CreateAccountWithAliasExampleCreateAccountWithAliasAndReceiverSignatureRequiredExample
- Remove the insecure port of mirror nodes
- Documentation for all API classes, methods and fields
- Delegate spender functionality to
AccountAllowanceApproveTransaction
- Some failing integration tests
TransactionRecord.evmAddressPublicKeyECDSA.toEvmAddress()AccountId.fromEvmAddress()AccountId.fromString()now supports EVM addressTransferTransaction.addHbarTransfer()now supports EVM addressAutoCreateAccountTransferTransactionExampleTransferUsingEvmAddressExampleAccountCreationWaysExample
TRANSACTION_HAS_UNKNOWN_FIELDSandACCOUNT_IS_IMMUTABLEinStatustoStandard[Ed25519|ECDSAsecp256k1]PrivateKey()toMnemonicfromSeed[ED25519|ECDSAsecp256k1]()toPrivateKey[PrivateKeyED25519|PrivateKeyECDSA].fromSeed()Bip32Utilsclass
- Misleading logging when an unhealthy node is hit
- Default mirror node for mainnet is now
mainnet-public.mirrornode.hedera.com:443instead ofmainnet-public.mirrornode.hedera.com:5600 - Default mirror node for testnet is now
testnet.mirrornode.hedera.com:443instead ofhcs.testnet.mirrornode.hedera.com:5600 - Default mirror node for previewnet is now
previewnet.mirrornode.hedera.com:443instead ofhcs.previewnet.mirrornode.hedera.com:5600 - ECDSA secp256k1 keys now support derivation
Mnemonic.toPrivateKey()useMnemonic.toStandard[Ed25519|ECDSAsecp256k1]PrivateKeyinsteadPrivateKey.fromMnemonic()useMnemonic.toStandard[Ed25519|ECDSAsecp256k1]PrivateKeyinstead
freezeWith()andsign()toContractCreateFlow
Executable.execute(Client client, Duration timeout)now sets gRPC deadline to the underlying gRPC request- Transaction sometimes being reported as duplicate when submitting large number of transactions
RejectedExecutionExceptionunder heavy loadnodesnot clearing when reusing transaction- BIP-39 - unicode mnemonic passphrases are normalized to NFKD
- Renamed allowanceSpenderAccountId to spenderId in TokenNftInfo
Client.close()now tracks and automatically unsubscribes from Mirror Node Topic Queries
ContractHelpernow supportsbytecodeproperty in compiled contract JSON.ZeroTokenOperationsExampleTransactionResponse.[get|set]ValidateStatus()TransactionReceipt.validateStatus()TransactionRecord.validateReceiptStatus()TransactionReceipt.transactionIdTopicUpdateTransaction.[get|set]ExpirationTime()CustomFee.[set|get]AllCollectorsAreExempt()ExemptCustomFeesExampleAccountCreateWithHtsExample
- Execute with a timeout can ignore timeout and block indefinitely in CI tests
- The Android example can now be run with the local SDK version
AccountCreateTransaction.[set|get]alias[Key|EvmAddress]()ContractCreateFlow.[set|get]MaxChunks()Status.[to|from]ResponseCode()ContractCreateFlow.[set|get]AutoRenewAccountId()- Client now automatically updates the network via a mirror node query at regular intervals. You can set/get the interval with
Client.[set|get]NetworkUpdatePeriod() - Client can now be set from a
NodeAddressBookwithClient.setNetworkFromAddressBook() Client.setMirrorTransportSecurity()Client.mirrorIsTransportSecurity()SolidityPrecompileExample- Improved PEM file support via
PrivateKey.fromPem()
AccountIds withaliasEvmAddressnow serialize/deserialize correctly.TokenCreateTransaction's default fee is now 40 Hbar.validateChecksum(),toStringWithChecksum(),hashCode(),equals(), andcompareTo()now function correctly forAccountIds withaliasEvmAddresses.- Changed the default transaction fee for
AccountCreateTransactionto 5 Hbar. PrivateKey.is[ED25519|ECDSA]()is now correct for ED25519 private keys.- Default mirror node for mainnet is now
mainnet-public.mirrornode.hedera.com:443instead ofhcs.mainnet.mirrornode.hedera.com:5600
- Thread leak in
Client Client.setTransportSecurity()now updates mirror network
ContractUpdateTransaction.clearStaked[Account|Node]Id()
[Contract|Account]CreateTransaction.[set|get]ProxyAccountId()with no replacementContractCreateFlow.[set|get]ProxyAccountId()with no replacement
ContractCreateFlow.setMaxAutomaticTokenAssociations()ContractFunctionResult.senderAccountIdnow serializes correctlyCustomRoyaltyFeenow clones andtoString()s correctlyScheduleCreateTransaction.expirationTimenow deserializes correctlyScheduleInfonow deserializes correctly- Made
StakingInfo.[to|from]Bytes()public TransactionReceipt.topicRunningHashnowtoString()s correctlyTransactionRecord.[prngBytes|prngNumber|tokenNftTransfers]now serializes/deserializes correctly[Account|Contract]UpdateTransaction.getDeclineStakingReward()now returns@Nullable Booleaninstead ofboolean, and no longer throws aNullPointerExceptionClient.setNodeMaxBackoff()- Undeprecate
*ContractId.fromSolidityAddress()
TokenNftInfo.allowanceSpenderAccountId
AccountBalance.[tokens|tokenDecimals]use a mirror node query insteadAccountInfo.tokenRelationshipsuse a mirror node query insteadContractInfo.tokenRelationshipsuse a mirror node query instead
TokenNftInfo.[to|from]Bytes()
PrngThansactionTransactionRecord.prngBytesTransactionRecord.prngNumber
ContractFunctionResult.stateChanges- Use mirror node for contract traceability insteadContractStateChangesStorageChange
ContractCreateTransaction.autoRenewAccountIdContractUpdateTransaction.autoRenewAccountId
HbarUnit.getSymbol()SemanticVersion.toString()Executable.setRequestListener()Executable.setResponseListener()
PrivateKey.fromString()should support0xprefixManagedNodeAddress.equals()should compare ports
ScheduleInfo.waitForExpiryScheduleInfo.ledgerId"
StakingInfoAccountCreateTransaction.stakedAccountIdAccountCreateTransaction.stakedNodeIdAccountCreateTransaction.declineStakingRewardContractCreateTransaction.stakedAccountIdContractCreateTransaction.stakedNodeIdContractCreateTransaction.declineStakingRewardAccountUpdateTransaction.stakedAccountIdAccountUpdateTransaction.stakedNodeIdAccountUpdateTransaction.declineStakingRewardContractUpdateTransaction.stakedAccountIdContractUpdateTransaction.stakedNodeIdContractUpdateTransaction.declineStakingRewardTransactionRecord.paidStakingRewardsScheduleCreateTransaction.expirationTimeScheduleCreateTransaction.waitForExpiry- Protobuf requests and responses will be logged in hex
- There should be three artifacts now,
sdk-jdk7,sdk, andsdk-full
StakingInfoAccountCreateTransaction.stakedAccountIdAccountCreateTransaction.stakedNodeIdAccountCreateTransaction.declineStakingRewardContractCreateTransaction.stakedAccountIdContractCreateTransaction.stakedNodeIdContractCreateTransaction.declineStakingRewardAccountUpdateTransaction.stakedAccountIdAccountUpdateTransaction.stakedNodeIdAccountUpdateTransaction.declineStakingRewardContractUpdateTransaction.stakedAccountIdContractUpdateTransaction.stakedNodeIdContractUpdateTransaction.declineStakingRewardTransactionRecord.paidStakingRewardsScheduleCreateTransaction.expirationTimeScheduleCreateTransaction.waitForExpiry
EthereumFlowEthereumTransactionDataEthereumTransactionDataLegacyEthereumTransactionDataEip1559
- add missing javadoc to the sdk files
TransactionResponse.scheduledTransactionIdwith no replacement.
AccountId.aliasEvmAddressContractCreateTransaction.[get|set]MaxAutomaticTokenAssociations()ContractCreateTransaction.[get|set]Bytecode()ContractUpdateTransaction.[get|set]MaxAutomaticTokenAssociations()ContractCreateFlow.[get|set]MaxAutomaticTokenAssociations()AccountInfo.ethereumNonceContractCallResult.senderAccountIdContractCallQuery.[get|set]SenderAccountId()TransactionRecord.ethereumHashEthereumTransactionCustomRoyaltyFee.getFallbackFee()TransactionResponse.get[Receipt|Record]Query()
AccountAllowanceAdjustTransactionwith no replacement.AccountAllowanceDeleteTransactionContractFunctionResult.[gas|hbarAmount|contractFunctionParametersBytes]TransactionRecord.[hbar|token|tokenNft]AllowanceAdjustments.AccountInfo.[hbar|token|tokenNft]Allowances.AccountAllowanceExample- License Headers
AccountAllowanceDeleteTransactionContractFunctionResult.[gas|hbarAmount|contractFunctionParametersBytes]AccountAllowanceExample- License Headers
AccountAllowanceAdjustTransaction.revokeTokenNftAllowance()with no replacement.
AccountInfoFlowClient.[set|get]NodeMinReadmitPeriod()- Support for using any node from the entire network upon execution if node account IDs have no been locked for the request.
- Support for
ContractFunctionParametersintegers with different bit widths.
Transaction.fromBytes()now verifies that transaction bodies in transaction list match.
AccountInfoFlowClient.[set|get]NodeMinReadmitPeriod()- Support for using any node from the entire network upon execution if node account IDs have no been locked for the request.
- Support for
ContractFunctionParametersintegers with different bit widths. CreateTopicExampleGetAccountInfoExampleMultiSigOfflineExampleScheduledTransactionMultiSigThresholdExampleScheduleIdenticalTransactionExampleSignTransactionExample
Transaction.fromBytes()now verifies that transaction bodies in transaction list match.ConstructClientExampleCreateSimpleContractExampleCreateStatefulContractExampleDeleteAccountExample
AccountAllowanceApproveTransaction.approve[Hbar|Token|TokenNft]Allowance()AccountAllowanceApproveTransaction.get[Hbar|Token|TokenNft]Approvals()AccountAllowanceAdjustTransaction.[grant|revoke][Hbar|Token|TokenNft]Allowance()AccountAllowanceAdjustTransaction.[grant|revoke]TokenNftAllowanceAllSerials()TransactionRecord.[hbar|token|tokenNft]AllowanceAdjustmentsTransferTransaction.addApproved[Hbar|Token|Nft]Transfer()
AccountAllowanceApproveTransaction.get[Hbar|Token|TokenNft]Allowances(), useget*Approvals()instead.AccountAllowanceApproveTransaction.add[Hbar|Token|TokenNft]Allowance[WithOwner](), useapprove*Allowance()instead.AccountAllowanceAdjustTransaction.add[Hbar|Token|TokenNft]Allowance[WithOwner](), use[grant|revoke]*Allowance()instead.TransferTransaction.set[Hbar|Token|Nft]TransferApproval(), useaddApproved*Transfer()instead.
ContractCreateFlowto simplify contract creation.PrivateKey.isED25519()PrivateKey.isECDSA()PrivateKeyED25519.isED25519()PrivateKeyED25519.isECDSA()PrivateKeyECDSA.isED25519()PrivateKeyECDSA.isECDSA()PublicKey.isED25519()PublicKey.isECDSA()PublicKeyED25519.isED25519()PublicKeyED25519.isECDSA()PublicKeyECDSA.isED25519()PublicKeyECDSA.isECDSA()
- Regenerated AccountIDTest.snap
AddressBookQuery- Checksums. As a consequence, all previously generated checksums for
testnetorpreviewnetwill now be regarded as incorrect. Please generate new checksums for testnet and previewnet where necessary.
AccountUpdateTransaction.[set|get]AliasKey()with no replacement.AccountAllowance[Adjust|Approve]Transaction.add*AllowanceWithOwner()
- Checksums. As a consequence, all previously generated checksums for
testnetorpreviewnetwill now be regarded as incorrect. Please generate new checksums for testnet and previewnet where necessary.
AccountUpdateTransaction.[set|get]AliasKey()with no replacement.
ContractCreateFlowto simplify contract creation.PrivateKey.isED25519()PrivateKey.isECDSA()PrivateKeyED25519.isED25519()PrivateKeyED25519.isECDSA()PrivateKeyECDSA.isED25519()PrivateKeyECDSA.isECDSA()PublicKey.isED25519()PublicKey.isECDSA()PublicKeyED25519.isED25519()PublicKeyED25519.isECDSA()PublicKeyECDSA.isED25519()PublicKeyECDSA.isECDSA()
- Regenerated AccountIDTest.snap
AccountAllowance[Adjust|Approve]Transaction.add*AllowanceWithOwner()AddressBookQuery
AccountUpdateTransaction.[set|get]AliasKey()with no replacement.
ownerfield to*Allowanceclasses.Executable.[set|get]GrpcDeadline()
AccountAllowanceAdjustTransactionnow deserializes correctly withTransaction.fromBytes()
ownerfield to*Allowanceclasses.Executable.[set|get]GrpcDeadline()
AccountAllowanceAdjustTransactionnow deserializes correctly withTransaction.fromBytes()
- CREATE2 Solidity addresses can now be represented by a
ContractIdwithevmAddressset. ContractId.fromEvmAddress()ContractFunctionResult.stateChangesContractFunctionResult.evmAddressContractStateChangeStorageChange- New response codes.
ChunkedTransaction.[set|get]ChunkSize(), and changed default chunk size forFileAppendTransactionto 2048.
TransactionId.setRegenerateTransactionId()Transaction.execute(client, timeout)
ContractId.fromSolidityAddress(), useContractId.fromEvmAddress()instead.
- CREATE2 Solidity addresses can now be represented by a
ContractIdwithevmAddressset. ContractId.fromEvmAddress()ContractFunctionResult.stateChangesContractFunctionResult.evmAddressContractStateChangeStorageChange- New response codes.
ChunkedTransaction.[set|get]ChunkSize(), and changed default chunk size forFileAppendTransactionto 2048.AccountAllowance[Adjust|Approve]TransactionAccountInfo.[hbar|token|tokenNft]Allowances[Hbar|Token|TokenNft]Allowance[Hbar|Token|TokenNft]AllowanceTransferTransaction.set[Hbar|Token|TokenNft]TransferApproval()
TransactionId.setRegenerateTransactionId()Transaction.execute(client, timeout)
ContractId.fromSolidityAddress(), useContractId.fromEvmAddress()instead.
- Support for regenerating transaction IDs on demand if a request
responsed with
TRANSACITON_EXPIRED
- Support for regenerating transaction IDs on demand if a request
responds with
TRANSACTION_EXPIRED
LedgerIdClient.[set|get]LedgerId()TransferTransaction.addTokenTransferWithDecimals(),TransferTransaction.getTokenIdDecimals().ledgerIdfields inAccountInfo,ContractInfo,FileInfo,ScheduleInfo,TokenInfo,TokenNftInfo, andTopicInfoUNEXPECTED_TOKEN_DECIMALSresponse code.PublicKey.verifyTransaction()should use the correct protobuf field per key typeAccountId.aliasKey, includingAccountId.[to|from]String()support.[PublicKey|PrivateKey].toAccountId().aliasKeyfields inTransactionRecordandAccountInfo.noncefield inTransactionId, includingTransactionId.[set|get]Nonce()childrenfields inTransactionRecordandTransactionReceiptduplicatesfield inTransactionReceipt[TransactionReceiptQuery|TransactionRecordQuery].[set|get]IncludeChildren()TransactionReceiptQuery.[set|get]IncludeDuplicates()- New response codes.
- Support for ECDSA SecP256K1 keys.
PrivateKey.generate[ED25519|ECDSA]()[Private|Public]Key.from[Bytes|String][DER|ED25519|ECDSA]()[Private|Public]Key.to[Bytes|String][Raw|DER]()DelegateContractIdto easily distingish between having aContractIdandDelegateContractIdfor a key
NetworkName,Client.[set|get]NetworkName(), userLedgerIdandClient.[set|get]LedgerId()instead.PrivateKey.generate(), usePrivateKey.generate[ED25519|ECDSA]()instead.
LedgerIdClient.[set|get]LedgerId()TransferTransaction.addTokenTransferWithDecimals(),TransferTransaction.getTokenIdDecimals().ledgerIdfields inAccountInfo,ContractInfo,FileInfo,ScheduleInfo,TokenInfo,TokenNftInfo, andTopicInfoUNEXPECTED_TOKEN_DECIMALSresponse code.
NetworkName,Client.[set|get]NetworkName(), userLedgerIdandClient.[set|get]LedgerId()instead.
PublicKey.verifyTransaction()should use the correct protobuf field per key type
AccountId.aliasKey, includingAccountId.[to|from]String()support.[PublicKey|PrivateKey].toAccountId().aliasKeyfields inTransactionRecordandAccountInfo.noncefield inTransactionId, includingTransactionId.[set|get]Nonce()childrenfields inTransactionRecordandTransactionReceiptduplicatesfield inTransactionReceipt[TransactionReceiptQuery|TransactionRecordQuery].[set|get]IncludeChildren()TransactionReceiptQuery.[set|get]IncludeDuplicates()- New response codes.
- Support for ECDSA SecP256K1 keys.
PrivateKey.generate[ED25519|ECDSA]()[Private|Public]Key.from[Bytes|String][DER|ED25519|ECDSA]()[Private|Public]Key.to[Bytes|String][Raw|DER]()
PrivateKey.generate(), usePrivateKey.generate[ED25519|ECDSA]()instead.
- Support for adding multiple addresses for the same node to the network.
*Idobjects are now comparable.- Adds
createdContractIdstoContractFunctionResult - Makes
AccountBalance.[to|from]Bytes()public. - New smart contract response codes
- New smart contract response codes
- Implement gRPC connecting timeouts to prevent
TRANSACTION_EXPIREDfrom occurring due to nodes not responding ManagedNodeAddresswill no longer used named regex groups
- Deprecated
ContractCallQuery.[set|get]MaxResultSize()with no replacement. - Deprecated
ContractUpdateTransaction.[set|get]BytecodeFileId()with no replacement.
- Deprecated
ContractCallQuery.[set|get]MaxResultSize()with no replacement. - Deprecated
ContractUpdateTransaction.[set|get]BytecodeFileId()with no replacement.
- Support for toggling TLS for both mirror network and services network
FreezeTypeFreezeTransaction.[get|set]FreezeType()FreezeTransaction.[get|set]FileId()FreezeTransaction.[get|set]FileHash()
FreezeTransaction.[get|set]UpdateFileId(), use.[get|set]FileId()instead.FreezeTransaction.[get|set]UpdateFileHash(), use.[get|set]FileHash()instead.
- Make
TokenPauseTransactionandTokenUnpauseTransactionconstructors public
TokenPauseTransactionTokenUnpauseTransactionTokenPauseStatuspauseKeyfield inTokenUpdateTransactionandTokenCreateTransactionpauseKeyandpauseStatusfields inTokenInfo(TokenInfoQuery)
- Added keep alive timeout of 10 seconds to all gRPC connections
Client.setTransportSecurity()- Enable/Disable TLS for any node
- Updated
*.[execute|getReceipt|getRecord]()methods to not use the asynchronous version underneath
Transaction[Receipt|Record]Querywill no longer error whenTransactionReceipt.statusis notSUCCESS. Only*.get[Receipt|Record]()should error whenTransactionReceipt.statusis notSUCCESS.
NftId.[to|from]string()now uses format1.2.3/4instead of1.2.3@4TokenNftInfoQuery.setNftId()- Support for automatic token associations
TransactionRecord.automaticTokenAssociationsAccountInfo.maxAutomaticTokenAssociationsAccountCreateTransaction.maxAutomaticTokenAssociationsAccountUpdateTransaction.maxAutomaticTokenAssociationsTokenRelationship.automaticAssociationTokenAssociation
networkNameas a supported config file options
NftId.[to|from]string()now uses format1.2.3/4instead of1.2.3@4TokenNftInfoQuery.setNftId()- Support for automatic token associations
TransactionRecord.automaticTokenAssociationsAccountInfo.maxAutomaticTokenAssociationsAccountCreateTransaction.maxAutomaticTokenAssociationsAccountUpdateTransaction.maxAutomaticTokenAssociationsTokenRelationship.automaticAssociationTokenAssociation
TokenNftInfoQuery.byNftId()- UseTokenNftInfoQuery.setNftId()insteadTokenNftInfoQuery.byAccountId()with no replacementTokenNftInfoQuery.byTokenId()with no replacementTokenNftInfoQuery.[set|get]Start()with no replacementTokenNftInfoQuery.[set|get]End()with no replacementClient.networkNamecan now be specified via config file
Account[Create|Update]Transaction.[get|set]MaxAutomaticTokenAssociationsTokenAssociationandTransactionRecord.automaticTokenAssociationsAccountInfo.maxAutomaticTokenAssociationsTokenRelationship.automaticAssociationTokenNftInfoQuery.setNftId()- New status codes
TokenNftInfoQuery.[by|get]AccountId()with no replacementTokenNftInfoQuery.[by|get]TokenId()with no replacementTokenNftInfoQuery.[set|get]Start()with no replacementTokenNftInfoQuery.[set|get]End()with no replacementTokenNftInfoQuery.byNftId()use.setNftId()instead
- TLS connector failing when the networks address book did not have cert hashes
- Support for TLS connections with Hedera Services nodes when network addresses end in
50212or443 - Added
FeeAssessmentMethod. - Added
[get|set]AssessmentMethod()toCustomFractionalFee - Added
CustomRoyaltyFee - Added
payerAccountIdListtoAssessedCustomFee - Added fields to
FreezeTransaction - Added
[min|max]BackofftoClientandExecutable
- Bugs in [to|from]Bytes() in
TopicUpdateTransactionandTokenUpdateTransaction
- Deprecated
Client.setMax[TransactionFee|QueryPayment](), addedClient.setDefaultMax[TransactionFee|QueryPayment]()andClient.getDefaultMax[TransactionFee|QueryPayment]()
ChunkedTransaction.getAllSignatures()
Transaction.getSignatures()incorrectly building signature listTopicMessageQuerypending messages being discarded on retryChunkedTransaction.getAllTransactionHashesPerNode()incorrectly building signature mapScheduleInfo.getScheduledTransaction()still not setting max fee appropriately
*.setSerials()will now clone list passed in to prevent changes
Client.getRequestTimeout()Client.pingAsync()andClient.pingAllAsync()useful for validating all nodes within the network before executing any real requestClient.[set|get]MaxAttempts()default max attempts for all transactionsClient.[set|get]MaxNodeAttempts()set max attempts to retry a node which returns bad gRPC status such asUNAVAILBLEClient.[set|get]NodeWaitTime()change the default delay before attempting a node again which has returned a bad gRPC statusClient.setAutoValidateChecksums()set whether checksums on ids will be automatically validated upon attempting to execute a transaction or query. Disabled by default. Check status withClient.isAutoValidateChecksumsEnabled()*Id.toString()no longer stringifies with checksums. Use*Id.getChecksum()to get the checksum that was parsed, or use*Id.toStringWithChecksum(client)to stringify with the correct checksum for that ID on the client's network.*Id.validateChecksum()to validate a checksum. Throws newBadEntityIdExceptionClient.[set|get]NetworkName()declare which network this client is connected to, for purposes of checksum validation.CustomFixedFee.[set|get]HbarAmount()makes this fixed fee an Hbar fee of the specified amountCustomFixedFee.setDenominatingTokenToSameToken()this fixed fee will be charged in the same token.
*Id.validate()use*Id.validateChecksum()instead
ScheduleInfo.getTransaction()incorrectly setting max transaction fee to 2 Hbars
PrivateKey.legacyDerive()should behave the same as other SDKs
*.addCustomFee()use*.setCustomFees()instead
TokenUpdateTransaction.clearAutoRenewAccountId()- Scheduled
TransferTransaction
- Support for NFTS
- Creating NFT tokens
- Minting NFTs
- Burning NFTs
- Transfering NFTs
- Wiping NFTs
- Query NFT information
- Support for Custom Fees on tokens:
- Setting custom fees on a token
- Updating custom fees on an existing token
- Sign on demand functionality which should improve performance slightly
AccountBalance.tokenDecimalsincorrectly usingLongas the key in the map instead ofTokenId. Since this was a major bug makingtokenDecimalscompletely unusable, the change has been made directly ontokenDecimalsinstead of deprecating and adding another field.
- Support for entity ID checksums which are validated whenever a request begins execution. This includes the IDs within the request, the account ID within the transaction ID, and query responses will contain entity IDs with a checksum for the network the query was executed on.
- Node validation before execution
- Null checks for most parameters to catch stray
NullPointerException's
RequestTypemissingUNCHECKED_SUBMITfortoString()andvalueOf()methods.FeeSchedulesincorrectly serializing nulls causingNullPointerException
-
Add
FeeScheduletype to allow a structured parse of file0.0.111 -
Support for setting
maxBackoff,maxAttempts,retryHandler, andcompletionHandlerinTopicMessageQuery -
Default logging behavior to
TopicMessageQueryif an error handler or completion handler was not set -
(Internal) CI is run significantly more often, and against previewnet and the master branch of hedera-services.
-
Expose
tokenDecimalsfromAccountBalance
-
TopicMessageQueryretry handling; this should retry on more gRPC errors -
TopicMessageQuerymax retry timeout; before this would could wait up to 4m with no feedback -
Clientshould be more thread safe
- Support
memofor Tokens, Accounts, and Files.
- Scheduled transaction support:
ScheduleCreateTransaction,ScheduleDeleteTransaction, andScheduleSignTransaction - HMAC Calculation Does Not Include IV [NCC-E001154-010]
- Non-Constant Time Lookup of Mnemonic Words [NCC-E001154-009]
- Decreased
CHUNK_SIZE4096->1024 and increased default max chunks 10->20 - Remove use of
computeIfAbsentandputIfAbsentfrom JDK7 builds
new TransactionId(AccountId, Instant)- UseTransactionId.withValidStart()instead.
TransferTransaction.addTokenTransfer()was correctly adding tokens- HMAC Calculation Does Not Include IV [NCC-E001154-010]
- Non-Constant Time Lookup of Mnemonic Words [NCC-E001154-009]
- Decreased
CHUNK_SIZE4096->1024 and increased default max chunks 10->20 - Renamed
ScheduleInfo.getTransaction()->ScheduleInfo.getScheduledTransaction()
- Remove use of
computeIfAbsentandputIfAbsentfrom JDK7 builds
- Scheduled transactions should use new HAPI protobufs
ReceiptPrecheckExceptionshould be thrown when the erroring status was in theTransactionReceipt- Removed
noncefromTransactionId Transaction[Receipt|Record]Queryshould not error for statusIDENTICAL_SCHEDULE_ALREADY_CREATEDbecause the other fields on the receipt are present with that status.ScheduleMultiSigExampleshould use updated scheduled transaction API
ScheduleCreateTransaction.addScheduledSignature()ScheduleCreateTransaction.getScheduledSignatures()ScheduleSignTransaction.addScheduledSignature()ScheduleSignTransaction.getScheduledSignatures()
- Support for old
proto.Transactionraw bytes inTransaction.fromBytes()
TransactionRecord.scheduleRef- Reference to the scheduled transactionTransactionReceipt.scheduledTransactionIdScheduleInfo.scheduledTransactionId- Feature to copy
TransactionIdof a transaction being scheduled to the parentScheduleCreateTransactionif one is set.
TransactionId.toBytes()should supportnonceif setTransactionId.fromBytes()should supportnonceif set
- Support
memofor Tokens, Accounts, and Files. TransactionId.fromString()should support nonce and scheduled.
TransactionId.toString()will append?scheduledfor scheduled transaction IDs, and transaction IDs created from nonce will print in hex.
- Support for scheduled and nonce in
TransactionIdTransactionId.withNonce()- Supports creating transaction ID with random bytes.TransactionId.[set|get]Scheduled()- Supports scheduled transaction IDs.
TransactionId.withValidStart()
ScheduleCreateTransaction.setTransaction()andTransaction.schedule()not correctly setting existing signatures.
new TransactionId(AccountId, Instant)- UseTransactionId.withValidStart()instead.
Schedule[Create|Sign]Transaction.addScheduleSignature()didn't save added signatures correctly.
- Support for scheduled transactions.
ScheduleCreateTransaction- Create a new scheduled transactionScheduleSignTransaction- Sign an existing scheduled transaction on the networkScheduleDeleteTransaction- Delete a scheduled transactionScheduleInfoQuery- Query the info includingbodyBytesof a scheduled transactionScheduleId
- Implement
Client.forName()to support construction of client from network name. - Implement
PrivateKey.verifyTransaction()to allow a user to verify a transaction was signed with a partiular key. - Rename
HederaPreCheckStatusExceptiontoPrecheckStatusExceptionand deprecateHederaPreCheckStatusException - Rename
HederaReceipStatusExceptiontoReceipStatusExceptionand deprecateHederaReceipStatusException
long getAutoRenewPeriod()->Duration getAutoRenewPeriod()setAutoRenewPeriod(long)->setAutoRenewPeriod(Duration)long getExpirationTime()->Instant getExpirationTime()setExpirationTime(long)->setExpirationTime(Instant)
long getAutoRenewPeriod()->Duration getAutoRenewPeriod()setAutoRenewPeriod(long)->setAutoRenewPeriod(Duration)long getExpirationTime()->Instant getExpirationTime()setExpirationTime(long)->setExpirationTime(Instant)
AccountId treasury()->AccountId treasuryAccountId()long autoRenewPeriod()->Duration autoRenewPeriod()long expirationTime()->Instant expirationTime()
- No longer support the use of
longforHbarparameters. Meaning you can no longer doAccountCreateTransaction().setInitialBalance(5)and instead mustAccountCreateTransaction().setInitialBalance(new Hbar(5)). This of course applies to more than justsetInitialBalance(). - Any method that used to require a
PublicKeywill now requireKey.AccountCreateTransaction.setKey(PublicKey)is nowAccountCreateTransaction.setKey(Key)as an example.
- All
Idtypes (Account,File,Contract,Topic, andTransactionId)- Support
fromBytes()andtoBytes() - No longer have the
toProto()method.
- Support
- The use of
Durationin the SDK will be eitherjava.time.Durationororg.threeten.bp.Durationdepending on which JDK and platform you're developing on. - The use of
Instantin the SDK will be eitherjava.time.Instantororg.threeten.bp.Instantdepending on which JDK and platform you're developing on. - All transactions and queries will now attempt to execute on more than one node.
- More
getCostAsyncandexecuteAsyncvariantsvoid executeAsync(Client)Future executeAsync(Client, BiConsumer<O, T>)void executeAsync(Client, Duration timeout, BiConsumer<O, T>)void getCostAsync(Client)Future getCostAsync(Client, BiConsumer<O, T>)void getCostAsync(Client, Duration timeout, BiConsumer<O, T>)
- Building different types from a protobuf type is no longer supported. Use
fromBytesinstead. getSignatureCase()is no longer accessible- Field which were
byte[]are nowByteStringto prevent extra copy operation. This includes the response type ofFileContentsQuery
ConsensusSubmitMessageTransaction->MessageSubmitTransactionConsensusTopicCreateTransaction->TopicCreateTransactionConsensusTopicDeleteTransaction->TopicDeleteTransactionConsensusTopicUpdateTransaction->TopicUpdateTransactionConsensusTopicId->TopicIdEd25519PublicKey->PublicKeyEd25519PrivateKey->PrivateKey
HederaNetworkExceptionMnemonicValidationResultHederaConstantsThresholdKeyuseKeyList.withThreshold()instead.
- LiveHash: Support for Hedera LiveHashes
- Key: A common base for the signing authority or key entities in Hedera may have.
Client()->Client.forNetwork()Client.fromFile()->Client.fromJsonFile()Client.replaceNodes()->Client.setNetwork()
sign()no longer requires offset or length parameters
writePem()
verify()verifies the message was signed by public key
as()->to()asTinybar()->toTinybars()fromTinybar()->fromTinybars()
negated()getValue()
Hbar(BigDecimal, HbarUnit)Hbar.from(long)Hbar.from(BigDecimal)Hbar.of()
KeyList.withThreshold()size()isEmpty()contains()containsAll()iterator()toArray()remove()removeAll()retainAll()clear()toString()
Mnemonic(List<? extends CharSequence>)->Mnemonic.fromWords() throws BadMnemonicException
ContractId(long)
toKeyProto()implements PublicKeymeaning it can no longer be used in place of a Key
FileId(long)
fromSolidityAddress()toSolidityAddress()
TransactionId.withValidStart()TransactionId.generate()
Transaction.hash()Transaction.signWithOperator()
getReceipt()getRecord()
toProto()setPaymentTransaction()
List<LiveHash> liveHashes
setDeleteAccountId()->setAccountId()- Removed
addKey(), usesetKeys(Key...)instead.
- Removed
addKey(), usesetKeys(Key...)instead.
-
Support for loading Ed25519 keys from encrypted PEM files (generated from OpenSSL).
-
Add a method to validate a mnemonic word list for accurate entry.
- Fixed
TransactionReceiptQuerynot waiting for consensus some times.
- Add additional error classes to allow more introspection on errors:
HederaPrecheckStatusException- Thrown when the transaction fails at the node (the precheck)HederaReceiptStatusException- Thrown when the receipt is checked and has a failing status. The error object contains the full receipt.HederaRecordStatusException- Thrown when the record is checked and it has a failing status. The error object contains the full record.
-
Add missing
setTransferAccountIdandsetTransferContractIdmethods toContractDeleteTransaction -
Override
executeAsyncto sign by the operator (if not already)
- Deprecate
toSolidityAddressandfromSolidityAddressonFileId
Add support for Hedera Consensus Service (HCS).
-
Add
ConsensusTopicCreateTransaction,ConsensusTopicUpdateTransaction,ConsensusTopicDeleteTransaction, andConsensusMessageSubmitTransactiontransactions -
Add
ConsensusTopicInfoQueryquery (returnsConsensusTopicInfo) -
Add
MirrorClientandMirrorConsensusTopicQuerywhich can be used to listen for HCS messages from a mirror node
Removed all deprecated APIs from v1.0.0.
-
Instead of returning
ResponseCodeEnumfrom the generated protos, return a newStatustype that wraps that and provides some Java conveniences. -
Rename
HederaExceptiontoHederaStatusException -
Rename
QueryBuilder.MaxPaymentExceededExceptiontoMaxQueryPaymentExceededException -
Change
AccountBalanceQueryto returnHbar(instead ofLong) -
Change
ContractGetBytecodeQueryto returnbyte[](instead of the internal proto type) -
Remove
GetBySolidityIdQuery. Instead, you should useAccountId.toSolidityAddress. -
Change
ContractRecordsQueryto returnTransactionRecord[]
All changes are not immediately breaking as the previous method still should exist and be working. The previous methods are flagged as deprecated and will be removed upon v1.0.
-
Transactions and queries do not take
Clientin the constructor; instead,Clientis passed toexecute. -
Removed
Transaction.executeForReceiptandTransaction.executeForRecordThese methods have been identified as harmful as they hide too much. If one fails, you do not know if the transaction failed to execute; or, the receipt/record could not be retrieved. In a mission-critical application, that is, of course, an important distinction.
Now there is only
Transaction.executewhich returns aTransactionId. If you don't care about waiting for consensus or retrieving a receipt/record in your application, you're done. Otherwise you can now use anyTransactionIdand ask for the receipt/record (with a stepped retry interval until consensus) withTransactionId.getReceiptandTransactionId.getRecord.v0.8.x and below
AccountId newAccountId = new AccountCreateTransaction(hederaClient) .setKey(newKey.getPublicKey()) .setInitialBalance(1000) .executeForReceipt() // TransactionReceipt .getAccountId();
v0.9.x
AccountId newAccountId = new AccountCreateTransaction() .setKey(newKey.getPublicKey()) .setInitialBalance(1000) .execute(hederaClient) // TranactionId .getReceipt(hederaClient) // TransactionReceipt .getAccountId();
-
TransactionReceipt,AccountInfo,TransactionRecord, etc. now expose public final fields instead of getters (where possible and it makes sense). -
Rename
getCallResultandgetCreateResulttogetContractExecuteResultandgetContractCreateResultfor consistency -
TransactionBuilder.setMemois renamed toTransactionBuilder.setTransactionMemoto avoid confusion as there are 2 other kinds of memos on transactions -
CallParamsis removed in favor ofContractFunctionParamsand closely mirrors type names from solidityaddInt32addInt256ArrayaddString- etc.
-
ContractFunctionResultnow closely mirrors the solidity type namesgetInt32- etc.
-
setFunctionParams(params)onContractCallQueryandContractExecuteTransactionis nowsetFunction(name, params)
-
TransactionId.getReceipt -
TransactionId.getRecord -
FileId.ADDRESS_BOOK,FileId.FEE_SCHEDULE,FileId.EXCHANGE_RATES -
Experimental support for the Hedera Consensus Service (HCS). HCS is not yet generally available but if you have access the SDK can work with the current iteration of it. Due to its experimental nature, a system property must be set before use.
System.setPropery("com.hedera.hashgraph.sdk.experimental", "true")
-
Client.forTestnetmakes a new client configured to talk to TestNet (use.setOperatorto set an operater) -
Client.forMainnetmakes a new client configured to talk to Mainnet (use.setOperatorto set an operater)
-
FileCreateTransactionsets a default expiration time; fixesAUTORENEW_DURATION_NOT_IN_RANGE. -
BUSYis now internally retried in all cases. -
The maximum query payment is now defaulted to 1 Hbar. By default, just before a query is executed we ask Hedera how much the query will cost and if it costs under the defined maximum, an exact payment is sent.
TransactionandQuerytypes related to claims
Fixes compatibility with Android.
- The
Keyinterface has been renamed toPublicKey - You are now required to depend on the gRPC transport dependency for your specific environment
<!-- SELECT ONE: -->
<!-- netty transport (for server or desktop applications) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.24.0</version>
</dependency>
<!-- netty transport, unshaded (if you have a matching Netty dependency already) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>1.24.0</version>
</dependency>
<!-- okhttp transport (for lighter-weight applications or Android) -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-okhttp</artifactId>
<version>1.24.0</version>
</dependency>// SELECT ONE:
// netty transport (for high throughput applications)
implementation 'io.grpc:grpc-netty-shaded:1.24.0'
// netty transport, unshaded (if you have a matching Netty dependency already)
implementation 'io.grpc:grpc-netty:1.24.0'
// okhttp transport (for lighter-weight applications or Android)
implementation 'io.grpc:grpc-okhttp:1.24.0'