- Implemented generics in
Transaction.go
- Replaced go-ethereum library
- Replace
/common/math
package from go-ethereum - Update protobufs from
hedera-services
- Reset
stakedAccountID
when settingstakedNodeID
and vice versa - Fix
FEE_SCHEDULE_FILE_PART_UPLOADED
marked as error
- Functionality to pass a string in
SetMessage
function forTopicMessageSubmitTransaction
- Resubmit transaction in case of throttle status at receipt
TokenClaimAirdropTransaction
andTokenCancelAirdropTransaction
(part of HIP-904)
- Handling of
0x
prefix when constructing ECDSA keys
TokenAirdropTransaction
(part of HIP-904)
- Handling of
THROTTLED_AT_CONSENSUS
status code
NodeCreateTransaction
,NodeUpdateTransaction
,NodeDeleteTransaction
(part of HIP-869)
Key
functions such asKeyFromBytes
KeyToBytes
KeyList
functions such asSetThreshold
TokenReject
functionality (part of HIP-904)
TransactionReceiptQuery
andAccountBalanceQuery
execution flows
- Modified
AccountUpdateTransaction
to allowmaxAutomaticTokenAssociations
to support-1
as a valid value
- Implemented custom derivation paths in Menmonic ECDSA private key derivation
- Revisited and fix failing examples
- Gracefully handle
PlatformNotActive
status code
- Implemented HIP-540: Change or remove existing keys from a token
AccountBalanceQuery
,AccountInfoQuery
, andContractInfoQuery
get all the data from consensus nodes again
AccountBalanceQuery
,AccountInfoQuery
, andContractInfoQuery
get part of the data from the Mirror Node REST API (HIP-367)- Fungible Token Metadata Field (HIP-646)
- NFT Collection Token Metadata Field (HIP-765)
- Raise an error if the transaction is not frozen while signing
- Undeprecate
AccountBalance.TokenDecimals
,AccountInfo.TokenRelationships
- Account alias for hollow account Mirror Node Queries
TokenRelationship.Symbol
, useTokenInfo.Symbol
instead
- METADATA key and possibility to update NFT metadata (HIP-657)
- Fungible Token Metadata Field (HIP-646)
- NFT Collection Token Metadata Field (HIP-765)
- updated protobufs
- Implemented HIP-844 (Add signerNonce field)
- Implemented HIP-745 (Serialize transaction without freezing)
- Fixed bug for fetching nodes from Client.
- Refactored structures
executable
,transaction
&query
to define common methods in one place and reduce the code repetition
PopulateAccount
toAccountID
MarshalJSON
toTransactionResponse
,TransactionReceipt
,TransactionRecord
IsApproved
boolean toTransfer
- Node/Managed node concurrency issues
- Serialization issues with
FileAppendTransaction
,TokenCreateTransaction
,TopicCreateTransaction
,TopicMessageSubmitTransaction
- SDK Panics if node account id not in the network list
- non-exhaustive switch statement errors for
AccountAllowanceApproveTransaction
andAccountAllowanceDeleteTransaction
PopulateAccount
toAccountID
PopulateContract
toContractID
- Data race in
TopicMessageQuery
ContractCreateFlow
to work with larger contract's bytecode
ContractNonces
toContractFunctionResult
to support HIP-729
AddInt*BigInt
functions toContractFunctionParameters
for sendingbig.int
GetResult
function toContractFunctionResult
for parsing result to an interfaceGetBigInt
function toContractFunctionResult
for parsing result to abig.int
- DER and PEM formats for private and public keys
- Network concurrency issues
- Some
ContractFunctionParameters
were sent/received as wrong data/data type
- Added logging functionality to Client, Transaction and Query
- Option to create a client from config file without mirror network
- Finished LegderID implementation
- Comments on the rest of the functions
- Comments on
client
and allquery
andtransaction
types
TransactionID.String()
will now return the TransactionID string without trimming the leading zeroes
- Alias support in
AccountCreateTransaction
CreateAccountWithAliasExample
CreateAccountWithAliasAndReceiverSignatureRequiredExample
CustomFractionalFee.SetAssessmentMethod()
AccountAllowanceApproveTransaction.ApproveTokenNftAllowanceWithDelegatingSpender()
PrivateKeyFromStringECDSA()
- New mirror node endpoints, only 443 port is now supported
mainnet-public.mirrornode.hedera.com:443
,testnet.mirrornode.hedera.com:443
,previewnet.mirrornode.hedera.com:443
- Minimum query cost can now be less than 25 tinybars
TransactionFromBytes()
now correctly sets transactionValidDuration
PrivateKeyFromStringECSDA()
- Support for HIP-583
- Example for HIP-583
account_create_token_transfer
which autocreates an account by sending HBAR to an Etherum Account Address Mnemonic.ToStandardEd25519PrivateKey
which uses the correct derivation pathMnemonic.ToStandardECDSAsecp256k1PrivateKey
which uses the correct derivation path
Mnemonic.ToPrivateKey()
was using incorrect derivation pathPrivateKeyFromMnemonic()
was using incorrect derivation path
- Panic in multiple node account id locking
- Regenerating transaction id, when not expired
- Signs more than once per node/transaction
- Not retrying other nodes when there are multiple nodes are locked
- Panic when locking multiple nodes
- Panic when too many nodes are not healthy
- INVALID_NODE_ACCOUNT error
- Setting MaxAutomaticTokenAssociations on ContractUpdate even if not set
IsZero()
andEquals()
inAccountID
GetSignedTransactionBodyBytes()
inTransaction
SetDefaultMaxQueryPayment
andSetDefaultMaxTransactionFee
inClient
- Schedule network recursive call
- Wrongly deprecated
SpenderID
field inTokenNFTInfo
CustomFee.AllCollectorsAreExempt
- Addressbook Query no logner panics
- Example for HIP-542
- Example for HIP-573
- 10 seconds blocking on creating a
Client
NewAccountBallanceQuery
to correctly return account balance
- Update documentation for
ContractFunction[Parameters|Result]
to show how to use large integer variants - Implement
TransactionResponse.ValidateStatus
*Transactions
now don't sign twice
AccountCreateTransaction.[Set|Get]Alias[Key|EvmAddress]()
ContractCreateFlow.[Set|Get]MaxChunks()
- Support for automatically updating networks
Client.[Set|Get]NetworkUpdatePeriod()
Client
constructor supports_ScheduleNetworkUpdate
to disable auto updatestask update
for manual address book updating
- Removed deprecated flags for wrongfully deprecated
Client.[Set|Get]LedgerID
- Added
SetGrpcDeadline
toEthereumTransaction
andTokenUpdateTransaction
- Deprecated
LiveHash.Duration
useLiveHash.LiveHashDuration
- Added missing
LiveHashQuery.[Set|Get]MaxRetry
- Added missing
TopicInfoQuery.SetPaymentTransactionID
AccountBalance.[tokens|tokenDecimals]
use a mirror node query insteadAccountInfo.tokenRelationships
use a mirror node query insteadContractInfo.tokenRelationships
use a mirror node query insteadTokenNftInfo.SpenderID
replaced byTokenNftInfo.AllowanceSpenderAccountID
Token[Update|Create]Transaction.KycKey
TokenCreateTransaction.FreezeDefaul
wasn't being set properly.- Requests should retry on
PLATFORM_NOT_ACTIVE
PrngThansaction
TransactionRecord.PrngBytes
TransactionRecord.PrngNumber
task
runner support
ContractFunctionResult.ContractStateChanges
with no replacement.
PrngThansaction
TransactionRecord.PrngBytes
TransactionRecord.PrngNumber
ContractFunctionResult.ContractStateChanges
with no replacement.
StakingInfo.PendingHbarReward
StakingInfo
AccountCreateTransaction.[Set|Get]StakedAccountID
AccountCreateTransaction.[Set|Get]StakedNodeID
AccountCreateTransaction.[Set|Get]DeclineStakingReward
AccountInfo.StakingInfo
AccountUpdateTransaction.[Set|Get]StakedAccountID
AccountUpdateTransaction.[Set|Get]StakedNodeID
AccountUpdateTransaction.[Set|Get]DeclineStakingReward
AccountUpdateTransaction.ClearStaked[AccountID|NodeID]
ContractCreateTransaction.[Set|Get]StakedNodeAccountID
ContractCreateTransaction.[Set|Get]StakedNodeID
ContractCreateTransaction.[Set|Get]DeclineStakingReward
ContractInfo.StakingInfo
ContractUpdateTransaction.[Set|Get]StakedNodeAccountID
ContractUpdateTransaction.[Set|Get]StakedNodeID
ContractUpdateTransaction.[Set|Get]DeclineStakingReward
ContractUpdateTransaction.ClearStaked[AccountID|NodeID]
TransactionRecord.PaidStakingRewards
ScheduleCreateTransaction.[Set|Get]ExpirationTime
ScheduleCreateTransaction.[Set|Get]WaitForExpiry
- Protobuf requests and responses will be logged, for
TRACE
, in hex.
TopicMessageSubmitTransaction
emptyChunkInfo
would always cause an error
StakingInfo
AccountCreateTransaction.[Set|Get]StakedNodeAccountID
AccountCreateTransaction.[Set|Get]StakedNodeID
AccountCreateTransaction.[Set|Get]DeclineStakingReward
AccountInfo.StakingInfo
AccountUpdateTransaction.[Set|Get]StakedNodeAccountID
AccountUpdateTransaction.[Set|Get]StakedNodeID
AccountUpdateTransaction.[Set|Get]DeclineStakingReward
ContractCreateTransaction.[Set|Get]StakedNodeAccountID
ContractCreateTransaction.[Set|Get]StakedNodeID
ContractCreateTransaction.[Set|Get]DeclineStakingReward
ContractInfo.StakingInfo
ContractUpdateTransaction.[Set|Get]StakedNodeAccountID
ContractUpdateTransaction.[Set|Get]StakedNodeID
ContractUpdateTransaction.[Set|Get]DeclineStakingReward
TransactionRecord.PaidStakingRewards
ScheduleCreateTransaction.[Set|Get]ExpirationTime
ScheduleCreateTransaction.[Set|Get]WaitForExpiry
EthereumFlow
EthereumTransactionData
Transaction.[From|To]Bytes
would ignore some variables- Fixed naming for
Ethereum.SetCallDataFileID()
andEthereum.SetMaxGasAllowanceHbar()
to be consistent with other sdks.
ContractCreateTransaction.[Get|Set]MaxAutomaticTokenAssociations()
ContractCreateTransaction.[Get|Set]AutoRenewAccountId()
ContractCreateTransaction.[Get|Set]Bytecode()
ContractUpdateTransaction.[Get|Set]MaxAutomaticTokenAssociations()
ContractUpdateTransaction.[Get|Set|clear]AutoRenewAccountId()
ContractCreateFlow.[Get|Set]MaxAutomaticTokenAssociations()
ContractCreateFlow.[Get|Set]AutoRenewAccountId()
ContractInfo.AutoRenewAccountID
ContractDeleteTransaction.[Get|Set]PermanentRemoval
ContractCallQuery.[Get|Set]SenderID
ScheduleCreateTransaction.[Get|Set]ExpirationTime
ScheduleCreateTransaction.[Get|Set]WaitForExpiry
ScheduleInfo.WaitForExpiry
EthereumTransaction
TransactionRecord.EthereumHash
AccountInfo.EthereumNonce
AccountID.AliasEvmAddress
AccountID.AccountIDFromEvmAddress()
TransactionResponse.Get[Record|Receipt]Query
FileUpdateTransaction
andTopicMessageSubmitTransaction
duplicate transaction errors.*Transaction.ToBytes()
now properly chunked transactions.
*Query
payment signatures weren't getting updated after updating body with new random node.
ContractCreateTransaction.[Get|Set]MaxAutomaticTokenAssociations()
ContractCreateTransaction.[Get|Set]AutoRenewAccountId()
ContractCreateTransaction.[Get|Set]Bytecode()
ContractUpdateTransaction.[Get|Set]MaxAutomaticTokenAssociations()
ContractUpdateTransaction.[Get|Set|clear]AutoRenewAccountId()
ContractCreateFlow.[Get|Set]MaxAutomaticTokenAssociations()
ContractCreateFlow.[Get|Set]AutoRenewAccountId()
ContractInfo.AutoRenewAccountID
ContractDeleteTransaction.[Get|Set]PermanentRemoval
ContractCallQuery.[Get|Set]SenderID
ScheduleCreateTransaction.[Get|Set]ExpirationTime
ScheduleCreateTransaction.[Get|Set]WaitForExpiry
ScheduleInfo.WaitForExpiry
EthereumTransaction
TransactionRecord.EthereumHash
AccountInfo.EthereumNonce
AccountID.AliasEvmAddress
AccountID.AccountIDFromEvmAddress()
FileUpdateTransaction
andTopicMessageSubmitTransaction
duplicate transaction errors.*Transaction.ToBytes()
now properly chunked transactions.
*Query
payment signatures weren't getting updated after updating body with new random node.
*Query.GetMaxQueryPayment()
*Query.GetQueryPayment()
*Query.GetPaymentTransactionID()
panic when not set.`- Removed unneeded parameter in
AccountDeleteTransaction.GetTransferAccountID()
. FileUpdateTransaction.GeFileMemo()
is nowFileUpdateTransaction.GetFileMemo()
TopicMessageSubmitTransaction
failing to send all messages, instead was getting duplicated transaction error.TopicMessageSubmitTransaction
would panic if no message was set.
TokenNftAllowance.DelegatingSpender
AccountAllowanceApproveTransaction.AddAllTokenNftApprovalWithDelegatingSpender()
AccountAllowanceApproveTransaction.ApproveTokenNftAllowanceAllSerialsWithDelegatingSpender()
AccountAllowanceAdjustTransaction
with no replacement.AccountAllowanceDeleteTransaction.DeleteAllTokenAllowances()
with no replacement.AccountAllowanceDeleteTransaction.DeleteAllHbarAllowances()
with no replacement.AccountInfo.[Hbar|Toke|Nft]Allowances
, with no replacement.TransactionRecord.[Hbar|Toke|Nft]Allowances
, with no replacement.
AccountAllowanceDeleteTransaction
ContractFunctionResult.[gas|hbarAmount|contractFunctionParametersBytes]
AccountAllowanceExample
ScheduleTransferExample
AccountAllowanceAdjustTransaction.revokeTokenNftAllowance()
with no replacement.AccountAllowanceApproveTransaction.AddHbarApproval()
, useApproveHbarAllowance()
instead.AccountAllowanceApproveTransaction.ApproveTokenApproval()
, useGrantTokenNftAllowance()
instead.AccountAllowanceApproveTransaction.ApproveTokenNftApproval()
, useApproveTokenNftAllowance()
instead.
*Transaction.GetTransactionID()
panic when not set.Transaction.Freeze()
now properly sets NodeAccountIDs*Query
payment transaction now properly contains the right NodeAccountIDs.
AccountAllowanceDeleteTransaction
ContractFunctionResult.[gas|hbarAmount|contractFunctionParametersBytes]
AccountAllowanceExample
ScheduleTransferExample
AccountAllowanceAdjustTransaction.revokeTokenNftAllowance()
with no replacement.AccountAllowanceApproveTransaction.AddHbarApproval()
, useApproveHbarAllowance()
instead.AccountAllowanceApproveTransaction.ApproveTokenApproval()
, useGrantTokenNftAllowance()
instead.AccountAllowanceApproveTransaction.ApproveTokenNftApproval()
, useApproveTokenNftAllowance()
instead.
AccountInfoFlowVerify[Signature|Transaction]()
Client.[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 all integer widths for
ContractFunction[Result|Selector|Params]
- Ledger ID checksums
TransactionFromBytes()
should validate all the transaction bodies are the same
- Network behavior to follow a more standard approach (remove the sorting we used to do).
AccountInfoFlowVerify[Signature|Transaction]()
Client.[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 all integer widths for
ContractFunction[Result|Selector|Params]
- Ledger ID checksums
TransactionFromBytes()
should validate all the transaction bodies are the same
- Network behavior to follow a more standard approach (remove the sorting we used to do).
ContractCreateFlow
Query.[Set|Get]PaymentTransactionID
- Verbose logging using zerolog
*[Transaction|Query].[Set|Get]GrpcDeadline()
TransactionRecord.[hbar|Token|TokenNft]AllowanceAdjustments
TransferTransaction.AddApproved[Hbar|Token|Nft]Transfer()
AccountAllowanceApproveTransaction.Approve[Hbar|Token|TokenNft]Allowance()
AccountAllowanceAdjustTransaction.[Grant|Revoke][Hbar|Token|TokenNft]Allowance()
AccountAllowanceAdjustTransaction.[Grant|Revoke]TokenNftAllowanceAllSerials()
HbarAllowance.OwnerAccountID
, wasn't being set.- Min/max backoff for nodes should start at 8s to 60s
- The current backoff for nodes should be used when sorting inside of network meaning nodes with a smaller current backoff will be prioritized
TopicMessageQuery
start time should have a default
AccountUpdateTransaction.[Set|Get]AliasKey
Account[Approve|Adjust]AllowanceTransaction.Add[Hbar|Token|TokenNft]AllowanceWithOwner()
ContractCreateFlow
Account[Approve|Adjust]AllowanceTransaction.add[Hbar|Token|TokenNft]AllowanceWithOwner()
Query.[Set|Get]PaymentTransactionID
- Verbose logging using zerolog
*[Transaction|Query].[Set|Get]GrpcDeadline()
HbarAllowance.OwnerAccountID
, wasn't being set.- Min/max backoff for nodes should start at 8s to 60s
- The current backoff for nodes should be used when sorting inside of network meaning nodes with a smaller current backoff will be prioritized
AccountUpdateTransaction.[Set|Get]AliasKey
owner
field to*Allowance
.- Added free
AddressBookQuery
.
- Changed mirror node port to correct one, 443.
- Occasional ECDSA invalid length error.
- ContractIDFromString() now sets EvmAddress correctly to nil, when evm address is not detected
owner
field to*Allowance
.- Added free
AddressBookQuery
.
- Changed mirror node port to correct one, 443.
- CREATE2 Solidity addresses can now be represented by a
ContractId
withEvmAddress
set. ContractId.FromEvmAddress()
ContractFunctionResult.StateChanges
ContractFunctionResult.EvmAddress
ContractStateChange
StorageChange
- New response codes.
ChunkedTransaction.[Set|Get]ChunkSize()
, and changed default chunk size forFileAppendTransaction
to 2048.AccountAllowance[Adjust|Approve]Transaction
AccountInfo.[hbar|token|tokenNft]Allowances
[Hbar|Token|TokenNft]Allowance
[Hbar|Token|TokenNft]Allowance
TransferTransaction.set[Hbar|Token|TokenNft]TransferApproval()
- Requests not cycling though nodes.
- Free queries not attempting to retry on different nodes.
ContractId.FromSolidityAddress()
, useContractId.FromEvmAddress()
instead.ContractFunctionResult.CreatedContractIDs
.
- CREATE2 Solidity addresses can now be represented by a
ContractId
withEvmAddress
set. ContractId.FromEvmAddress()
ContractFunctionResult.StateChanges
ContractFunctionResult.EvmAddress
ContractStateChange
StorageChange
- New response codes.
ChunkedTransaction.[Set|Get]ChunkSize()
, and changed default chunk size forFileAppendTransaction
to 2048.AccountAllowance[Adjust|Approve]Transaction
AccountInfo.[hbar|token|tokenNft]Allowances
[Hbar|Token|TokenNft]Allowance
[Hbar|Token|TokenNft]Allowance
TransferTransaction.set[Hbar|Token|TokenNft]TransferApproval()
- Requests not cycling though nodes.
- Free queries not attempting to retry on different nodes.
ContractId.FromSolidityAddress()
, useContractId.FromEvmAddress()
instead.ContractFunctionResult.CreatedContractIDs
.
- CREATE2 Solidity addresses can now be represented by a
ContractId
withEvmAddress
set. ContractId.FromEvmAddress()
ContractFunctionResult.StateChanges
ContractFunctionResult.EvmAddress
ContractStateChange
StorageChange
- New response codes.
ChunkedTransaction.[Set|Get]ChunkSize()
, and changed default chunk size forFileAppendTransaction
to 2048.AccountAllowance[Adjust|Approve]Transaction
AccountInfo.[hbar|token|tokenNft]Allowances
[Hbar|Token|TokenNft]Allowance
[Hbar|Token|TokenNft]Allowance
TransferTransaction.set[Hbar|Token|TokenNft]TransferApproval()
- Requests not cycling though nodes.
- Free queries not attempting to retry on different nodes.
ContractId.FromSolidityAddress()
, useContractId.FromEvmAddress()
instead.ContractFunctionResult.CreatedContractIDs
.
- Support for regenerating transaction IDs on demand if a request
responses with
TRANSACITON_EXPIRED
- Support for regenerating transaction IDs on demand if a request
responses with
TRANSACITON_EXPIRED
AccountId.AliasKey
, includingAccountId.[From]String()
support.[PublicKey|PrivateKey].ToAccountId()
.AliasKey
fields inTransactionRecord
andAccountInfo
.Nonce
field inTransactionId
, includingTransactionId.[set|get]Nonce()
Children
fields inTransactionRecord
andTransactionReceipt
Duplicates
field inTransactionReceipt
[TransactionReceiptQuery|TransactionRecordQuery].[Set|Get]IncludeChildren()
TransactionReceiptQuery.[Set|Get]IncludeDuplicates()
- New response codes.
- Support for ECDSA SecP256K1 keys.
PrivateKeyGenerate[ED25519|ECDSA]()
[Private|Public]KeyFrom[Bytes|String][DER|ED25519|ECDSA]()
[Private|Public]Key.[Bytes|String][Raw|DER]()
DelegateContractId
*Id.[from|to]SolidityAddress()
PrivateKeyGenerate()
, usePrivateKeyGenerate[ED25519|ECDSA]()
instead.
AccountId.AliasKey
, includingAccountId.[From]String()
support.[PublicKey|PrivateKey].ToAccountId()
.AliasKey
fields inTransactionRecord
andAccountInfo
.Nonce
field inTransactionId
, includingTransactionId.[set|get]Nonce()
Children
fields inTransactionRecord
andTransactionReceipt
Duplicates
field inTransactionReceipt
[TransactionReceiptQuery|TransactionRecordQuery].[Set|Get]IncludeChildren()
TransactionReceiptQuery.[Set|Get]IncludeDuplicates()
- New response codes.
- Support for ECDSA SecP256K1 keys.
PrivateKeyGenerate[ED25519|ECDSA]()
[Private|Public]KeyFrom[Bytes|String][DER|ED25519|ECDSA]()
[Private|Public]Key.[Bytes|String][Raw|DER]()
PrivateKeyGenerate()
, usePrivateKeyGenerate[ED25519|ECDSA]()
instead.
- New smart contract response codes
ContractCallQuery.[Set|Get]MaxResultSize()
ContractUpdateTransaction.[Set|Get]ByteCodeFileID()
- New smart contract response codes
ContractCallQuery.[Set|Get]MaxResultSize()
ContractUpdateTransaction.[Set|Get]ByteCodeFileID()
TransferTransaction.GetTokenTransfers()
TransferTransaction.AddTokenTransfer()
- Persistent error not being handled correctly
TransactionReceiptQuery
should return even on a bad status codes. Only *.GetReceipt()should error on non
SUCCESS` status codes
- Refactored and updated node account ID handling to err whenever a node account ID of 0.0.0 is being set
ContractCallQuery.[Set|Get]MaxResultSize()
ContractUpdateTransaction.[Set|Get]ByteCodeFileID()
TransactionReceiptQuery
should fill outTransactionReceipt
even when a badStatus
is returned
TransferTransaction
should serialize the transfers list deterministically
- Support for toggling TLS for both mirror network and services network
FreezeType
FreezeTransaction.[get|set]FreezeType()
- Support for HIP-24 (token pausing)
TokenInfo.PauseKey
TokenInfo.PauseStatus
TokenCreateTransaction.PauseKey
TokenUpdateTransaction.PauseKey
TokenPauseTransaction
TokenUnpauseTransaction
- Support for automatic token associations
TransactionRecord.AutomaticTokenAssociations
AccountInfo.MaxAutomaticTokenAssociations
AccountCreateTransaction.MaxAutomaticTokenAssociations
AccountUpdateTransaction.MaxAutomaticTokenAssociations
TokenRelationship.AutomaticAssociation
TokenAssociation
Transaction*
helper methods - should make it easier to use the result ofTransactionFromBytes()
- TLS now properly confirms certificate hashes
TokenUpdateTransaction.GetExpirationTime()
returns the correct time- Several
*.Get*()
methods required a parameter similiar to*.Set*()
This has been changed completely instead of deprecated because we treated this as hard bug - Several
nil
dereference issues related to to/from protobuf conversions
- Support for automatic token associations
TransactionRecord.AutomaticTokenAssociations
AccountInfo.MaxAutomaticTokenAssociations
AccountCreateTransaction.MaxAutomaticTokenAssociations
AccountUpdateTransaction.MaxAutomaticTokenAssociations
TokenRelationship.AutomaticAssociation
TokenAssociation
- Support for TLS
- Setters which follow the builder pattern to
Custom*Fee
Client.[min|max]Backoff()
support
TokenNftInfoQuery.ByNftID()
- useTokenNftInfoQuery.SetNftID()
insteadTokenNftInfoQuery.[By|Set|Get]AccountId()
with no replacementTokenNftInfoQuery.[By|Set|Get]TokenId()
with no replacementTokenNftInfoQuery.[Set|Get]Start()
with no replacementTokenNftInfoQuery.[Set|Get]End()
with no replacement
AssessedCustomFee.PayerAccountIDs
was misspelled
- Support for
CustomRoyaltyFee
- Support for
AssessedCustomFee.payerAccountIds
nil
dereference issues within*.validateNetworkIDs()
- Implement
Client.pingAll()
- Implement
Client.SetAutoChecksumValidation()
which validates all entity ID checksums on requests before executing
- nil dereference errors when decoding invalid PEM files
- Updated
Status
with new response codes - Support for
Hbar.[from|to]String()
to be reversible
*.AddCustomFee()
use*.SetCustomFees()
instead
- Update
Status
with new codes
PrivateKey.LegacyDerive()
should correctly handle indicies
- 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
- All requests should retry on gRPC error
INTERNAL
if the message containsRST_STREAM
AccountBalance.Tokens
as a replacement forAccountBalance.Token
AccountBalance.TokenDecimals
- All transactions will now
sign-on-demand
which should result in improved performance
TopicMessageQuery
not callingUnsubscribe
when a stream is cancelledTopicMessageQuery
should add 1 nanosecond to theStartTime
of the last received messageTopicMessageQuery
allocate space for entire chunked message ahead of time for retriesTokenDeleteTransaction.SetTokenID()
incorrectly settingtokenID
resulting inGetTokenID()
always returning an emptyTokenID
TransferTransaction.GetTokenTransfers()
incorrectly setting an empty value
AccountBalance.Token
useAccountBalance.Tokens
instead
Client.SetMirroNetwork()
producing a nil pointer exception on next use of a mirror network- Mirror node TLS no longer producing nil pointer exception
- Support TLS for mirror node connections.
- 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.
TransactionTransaction.AddHbarTransfer()
incorrectly determine total transfer per account ID
TopicMessageQuery.MaxBackoff
was not being used at allTopicMessageQuery.Limit
was being incorrectly update with fullTopicMessages
rather than per chunkTopicMessageQuery.StartTime
was not being updated each time a message was receivedTopicMessageQuery.CompletionHandler
was be called at incorrect times- Removed the use of locks and
sync.Map
withinTopicMessageQuery
as it is unncessary - Added default logging to
ErrorHandler
andCompletionHandler
- Support for
MaxBackoff
,MaxAttempts
,RetryHandler
, andCompletionHandler
inTopicMessageQuery
- Default logging behavior to
TopicMessageQuery
if an error handler or completion handler was not set
- Renamed
ScheduleInfo.Signers
->ScheduleInfo.Signatories
TopicMessageQuery
retry handling; this should retry on more gRPC errorsTopicMessageQuery
max retry timeout; before this would could wait up to 4m with no feedbackdurationFromProtobuf()
incorrectly calculation duration*Token.GetAutoRenewPeriod()
and*Token.GetExpirationTime()
nil dereferenceHbar.As()
using multiplication instead of division, and should return afloat64
- Exposed
Hbar.Negated()
- Scheduled transaction support:
ScheduleCreateTransaction
,ScheduleDeleteTransaction
, andScheduleSignTransaction
- Non-Constant Time Comparison of HMACs [NCC-E001154-006]
- Decreased
CHUNK_SIZE
4096->1024 and increased default max chunks 10->20
- Non-Constant Time Comparison of HMACs [NCC-E001154-006]
- Decreased
CHUNK_SIZE
4096->1024 and increased default max chunks 10->20 - Renamed
ScheduleInfo.GetTransaction()
->ScheduleInfo.getScheduledTransaction()
Transaction.Schedule()
should error when scheduling un-scheduable tranasctions
nonce
fromTransactionID
ScheduleTransactionBody
- should not be part of the public API
Transaction[Receipt|Record]Query
should not error for statusIDENTICAL_SCHEDULE_ALREADY_CREATED
because the other fields on the receipt are present with that status.ErrHederaReceiptStatus
should printexception receipt status ...
instead ofexception precheck status ...
- Executiong should retry on status
PLATFORM_TRANSACTION_NOT_CREATED
- Error handling throughout the SDK
- A precheck error shoudl be returned when the exceptional status is in the header
- A receipt error should be returned when the exceptional status is in the receipt
TransactionRecordQuery
should retry on node precheck codeOK
only if we're not getting cost of query.Transaction[Receipt|Record]Query
should retry on bothRECEIPT_NOT_FOUND
andRECORD_NOT_FOUND
status codes when node precheck code isOK
- Updated scheduled transaction to use new HAPI porotubfs
ScheduleCreateTransaction.AddScheduledSignature()
ScheduleCreateTransaction.GetScheduledSignatures()
ScheduleSignTransaction.addScheduledSignature()
ScheduleSignTransaction.GetScheduledSignatures()
- 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 includingbodyBytes
of a scheduled transactionScheduleId
- Support for scheduled and nonce in
TransactionId
TransactionIdWithNonce()
- Supports creating transaction ID with random bytes.TransactionId.[Set|Get]Scheduled()
- Supports scheduled transaction IDs.
TransactionIdWithValidStart()
- Updated protobufs #120
NewTransactionId()
- UseTransactionIdWithValidStart()
instead.
- All requests support getter methods as well as setters.
- All requests support multiple node account IDs being set.
TransactionFromBytes()
supports multiple node account IDs and existing signatures.- All requests support a max retry count using
SetMaxRetry()