Skip to content

Commit

Permalink
fix: check for kyc key in TokenUpdateTransaction (#553)
Browse files Browse the repository at this point in the history
  • Loading branch information
andrix10 authored Aug 2, 2022
1 parent a999398 commit 01729a7
Show file tree
Hide file tree
Showing 9 changed files with 122 additions and 104 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
## v2.17.1

### Deprecated

* `AccountBalance.[tokens|tokenDecimals]` use a mirror node query instead
* `AccountInfo.tokenRelationships` use a mirror node query instead
* `ContractInfo.tokenRelationships` use a mirror node query instead

### Fixed

* Requests should retry on `PLATFOR_NOT_ACTIVE`
* `Token[Update|Create]Transaction.KycKey`
* `TokenCreateTransaction.FreezeDefaul` wasn't being set properly.
* Requests should retry on `PLATFORM_NOT_ACTIVE`

## v2.17.0

Expand Down
18 changes: 4 additions & 14 deletions account_balance.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,28 +30,18 @@ type AccountBalance struct {
// Deprecated: Use `AccountBalance.Tokens` instead
Token map[TokenID]uint64

Tokens TokenBalanceMap
// Deprecated
Tokens TokenBalanceMap
// Deprecated
TokenDecimals TokenDecimalMap
}

func _AccountBalanceFromProtobuf(pb *services.CryptoGetAccountBalanceResponse) AccountBalance {
if pb == nil {
return AccountBalance{}
}
var tokens map[TokenID]uint64
if pb.TokenBalances != nil {
tokens = make(map[TokenID]uint64, len(pb.TokenBalances))
for _, token := range pb.TokenBalances {
if t := _TokenIDFromProtobuf(token.TokenId); t != nil {
tokens[*t] = token.Balance
}
}
}

return AccountBalance{
Hbars: HbarFromTinybar(int64(pb.Balance)),
Token: tokens,
Tokens: _TokenBalanceMapFromProtobuf(pb.TokenBalances),
TokenDecimals: _TokenDecimalMapFromProtobuf(pb.TokenBalances),
Hbars: HbarFromTinybar(int64(pb.Balance)),
}
}
31 changes: 7 additions & 24 deletions account_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,13 @@ type AccountInfo struct {
ExpirationTime time.Time
AutoRenewPeriod time.Duration
LiveHashes []*LiveHash
TokenRelationships []*TokenRelationship
AccountMemo string
OwnedNfts int64
MaxAutomaticTokenAssociations uint32
AliasKey *PublicKey
LedgerID LedgerID
// Deprecated
TokenRelationships []*TokenRelationship
AccountMemo string
OwnedNfts int64
MaxAutomaticTokenAssociations uint32
AliasKey *PublicKey
LedgerID LedgerID
// Deprecated
HbarAllowances []HbarAllowance
// Deprecated
Expand All @@ -69,15 +70,6 @@ func _AccountInfoFromProtobuf(pb *services.CryptoGetInfoResponse_AccountInfo) (A
return AccountInfo{}, err
}

tokenRelationship := make([]*TokenRelationship, len(pb.TokenRelationships))

if pb.TokenRelationships != nil {
for i, relationship := range pb.TokenRelationships {
singleRelationship := _TokenRelationshipFromProtobuf(relationship)
tokenRelationship[i] = &singleRelationship
}
}

liveHashes := make([]*LiveHash, len(pb.LiveHashes))

if pb.LiveHashes != nil {
Expand Down Expand Up @@ -121,7 +113,6 @@ func _AccountInfoFromProtobuf(pb *services.CryptoGetInfoResponse_AccountInfo) (A
GenerateSendRecordThreshold: HbarFromTinybar(int64(pb.GenerateSendRecordThreshold)), // nolint
GenerateReceiveRecordThreshold: HbarFromTinybar(int64(pb.GenerateReceiveRecordThreshold)), // nolint
ReceiverSigRequired: pb.ReceiverSigRequired,
TokenRelationships: tokenRelationship,
ExpirationTime: _TimeFromProtobuf(pb.ExpirationTime),
AccountMemo: pb.Memo,
AutoRenewPeriod: _DurationFromProtobuf(pb.AutoRenewPeriod),
Expand All @@ -136,13 +127,6 @@ func _AccountInfoFromProtobuf(pb *services.CryptoGetInfoResponse_AccountInfo) (A
}

func (info AccountInfo) _ToProtobuf() *services.CryptoGetInfoResponse_AccountInfo {
tokenRelationship := make([]*services.TokenRelationship, len(info.TokenRelationships))

for i, relationship := range info.TokenRelationships {
singleRelationship := relationship._ToProtobuf()
tokenRelationship[i] = singleRelationship
}

liveHashes := make([]*services.LiveHash, len(info.LiveHashes))

for i, liveHash := range info.LiveHashes {
Expand All @@ -168,7 +152,6 @@ func (info AccountInfo) _ToProtobuf() *services.CryptoGetInfoResponse_AccountInf
ExpirationTime: _TimeToProtobuf(info.ExpirationTime),
AutoRenewPeriod: _DurationToProtobuf(info.AutoRenewPeriod),
LiveHashes: liveHashes,
TokenRelationships: tokenRelationship,
Memo: info.AccountMemo,
OwnedNfts: info.OwnedNfts,
MaxAutomaticTokenAssociations: int32(info.MaxAutomaticTokenAssociations),
Expand Down
31 changes: 0 additions & 31 deletions token_balance_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@ package hedera
*
*/

import (
"github.com/hashgraph/hedera-protobufs-go/services"
)

type TokenBalanceMap struct {
balances map[string]uint64
}
Expand All @@ -35,30 +31,3 @@ func (tokenBalances *TokenBalanceMap) Get(tokenID TokenID) uint64 {
Token: tokenID.Token,
}.String()]
}

func _TokenBalanceMapFromProtobuf(pb []*services.TokenBalance) TokenBalanceMap {
balances := make(map[string]uint64)

for _, tokenBalance := range pb {
balances[_TokenIDFromProtobuf(tokenBalance.TokenId).String()] = tokenBalance.Balance
}

return TokenBalanceMap{balances}
}

func (tokenBalances *TokenBalanceMap) _ToProtobuf() []*services.TokenBalance { // nolint
decimals := make([]*services.TokenBalance, 0)

for s, t := range tokenBalances.balances {
token, err := TokenIDFromString(s)
if err != nil {
return []*services.TokenBalance{}
}
decimals = append(decimals, &services.TokenBalance{
TokenId: token._ToProtobuf(),
Balance: t,
})
}

return decimals
}
2 changes: 1 addition & 1 deletion token_create_transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ func (transaction *TokenCreateTransaction) _ConstructScheduleProtobuf() (*servic
body.FeeScheduleKey = transaction.scheduleKey._ToProtoKey()
}

if transaction.adminKey != nil {
if transaction.kycKey != nil {
body.KycKey = transaction.kycKey._ToProtoKey()
}

Expand Down
49 changes: 49 additions & 0 deletions token_create_transaction_unit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,4 +176,53 @@ func TestUnitTokenCreateTransactionNothingSet(t *testing.T) {
transaction.GetRegenerateTransactionID()
transaction.GetMaxTransactionFee()
transaction.GetRegenerateTransactionID()
proto := transaction._Build().GetTokenCreation()
require.Nil(t, proto.AutoRenewAccount)
require.Nil(t, proto.AdminKey)
require.Nil(t, proto.Expiry)
require.Nil(t, proto.FeeScheduleKey)
require.Nil(t, proto.FreezeKey)
require.Nil(t, proto.KycKey)
require.Nil(t, proto.FeeScheduleKey)
require.Nil(t, proto.PauseKey)
require.Nil(t, proto.SupplyKey)
require.Nil(t, proto.Treasury)
}

func TestUnitTokenCreateTransactionKeyCheck(t *testing.T) {
nodeAccountID := []AccountID{{Account: 10}, {Account: 11}, {Account: 12}}
transactionID := TransactionIDGenerate(AccountID{Account: 324})

keys := make([]PrivateKey, 7)
var err error

for i := 0; i < 7; i++ {
keys[i], err = PrivateKeyGenerateEd25519()
require.NoError(t, err)
}

transaction, err := NewTokenCreateTransaction().
SetTransactionID(transactionID).
SetNodeAccountIDs(nodeAccountID).
SetAdminKey(keys[0]).
SetFreezeKey(keys[1]).
SetWipeKey(keys[2]).
SetKycKey(keys[3]).
SetSupplyKey(keys[4]).
SetPauseKey(keys[5]).
SetFeeScheduleKey(keys[6]).
Freeze()
require.NoError(t, err)

transaction.GetTransactionID()
transaction.GetNodeAccountIDs()

proto := transaction._Build().GetTokenCreation()
require.Equal(t, proto.AdminKey.String(), keys[0]._ToProtoKey().String())
require.Equal(t, proto.FreezeKey.String(), keys[1]._ToProtoKey().String())
require.Equal(t, proto.WipeKey.String(), keys[2]._ToProtoKey().String())
require.Equal(t, proto.KycKey.String(), keys[3]._ToProtoKey().String())
require.Equal(t, proto.SupplyKey.String(), keys[4]._ToProtoKey().String())
require.Equal(t, proto.PauseKey.String(), keys[5]._ToProtoKey().String())
require.Equal(t, proto.FeeScheduleKey.String(), keys[6]._ToProtoKey().String())
}
31 changes: 0 additions & 31 deletions token_decimal_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@ package hedera
*
*/

import (
"github.com/hashgraph/hedera-protobufs-go/services"
)

type TokenDecimalMap struct {
decimals map[string]uint64
}
Expand All @@ -35,30 +31,3 @@ func (tokenDecimals *TokenDecimalMap) Get(tokenID TokenID) uint64 {
Token: tokenID.Token,
}.String()]
}

func _TokenDecimalMapFromProtobuf(pb []*services.TokenBalance) TokenDecimalMap {
decimals := make(map[string]uint64)

for _, tokenDecimal := range pb {
decimals[_TokenIDFromProtobuf(tokenDecimal.TokenId).String()] = uint64(tokenDecimal.Decimals)
}

return TokenDecimalMap{decimals}
}

func (tokenDecimals TokenDecimalMap) _ToProtobuf() []*services.TokenBalance { // nolint
decimals := make([]*services.TokenBalance, 0)

for s, t := range tokenDecimals.decimals {
token, err := TokenIDFromString(s)
if err != nil {
return []*services.TokenBalance{}
}
decimals = append(decimals, &services.TokenBalance{
TokenId: token._ToProtobuf(),
Decimals: uint32(t),
})
}

return decimals
}
4 changes: 2 additions & 2 deletions token_update_transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ func (transaction *TokenUpdateTransaction) _Build() *services.TransactionBody {
body.FeeScheduleKey = transaction.scheduleKey._ToProtoKey()
}

if transaction.adminKey != nil {
if transaction.kycKey != nil {
body.KycKey = transaction.kycKey._ToProtoKey()
}

Expand Down Expand Up @@ -472,7 +472,7 @@ func (transaction *TokenUpdateTransaction) _ConstructScheduleProtobuf() (*servic
body.FeeScheduleKey = transaction.scheduleKey._ToProtoKey()
}

if transaction.adminKey != nil {
if transaction.kycKey != nil {
body.KycKey = transaction.kycKey._ToProtoKey()
}

Expand Down
50 changes: 50 additions & 0 deletions token_update_transaction_unit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,54 @@ func TestUnitTokenUpdateTransactionNothingSet(t *testing.T) {
transaction.GetRegenerateTransactionID()
transaction.GetMaxTransactionFee()
transaction.GetRegenerateTransactionID()
proto := transaction._Build().GetTokenUpdate()
require.Nil(t, proto.Token)
require.Nil(t, proto.AutoRenewAccount)
require.Nil(t, proto.AdminKey)
require.Nil(t, proto.Expiry)
require.Nil(t, proto.FeeScheduleKey)
require.Nil(t, proto.FreezeKey)
require.Nil(t, proto.KycKey)
require.Nil(t, proto.FeeScheduleKey)
require.Nil(t, proto.PauseKey)
require.Nil(t, proto.SupplyKey)
require.Nil(t, proto.Treasury)
}

func TestUnitTokenUpdateTransactionKeyCheck(t *testing.T) {
nodeAccountID := []AccountID{{Account: 10}, {Account: 11}, {Account: 12}}
transactionID := TransactionIDGenerate(AccountID{Account: 324})

keys := make([]PrivateKey, 7)
var err error

for i := 0; i < 7; i++ {
keys[i], err = PrivateKeyGenerateEd25519()
require.NoError(t, err)
}

transaction, err := NewTokenUpdateTransaction().
SetTransactionID(transactionID).
SetNodeAccountIDs(nodeAccountID).
SetAdminKey(keys[0]).
SetFreezeKey(keys[1]).
SetWipeKey(keys[2]).
SetKycKey(keys[3]).
SetSupplyKey(keys[4]).
SetPauseKey(keys[5]).
SetFeeScheduleKey(keys[6]).
Freeze()
require.NoError(t, err)

transaction.GetTransactionID()
transaction.GetNodeAccountIDs()

proto := transaction._Build().GetTokenUpdate()
require.Equal(t, proto.AdminKey.String(), keys[0]._ToProtoKey().String())
require.Equal(t, proto.FreezeKey.String(), keys[1]._ToProtoKey().String())
require.Equal(t, proto.WipeKey.String(), keys[2]._ToProtoKey().String())
require.Equal(t, proto.KycKey.String(), keys[3]._ToProtoKey().String())
require.Equal(t, proto.SupplyKey.String(), keys[4]._ToProtoKey().String())
require.Equal(t, proto.PauseKey.String(), keys[5]._ToProtoKey().String())
require.Equal(t, proto.FeeScheduleKey.String(), keys[6]._ToProtoKey().String())
}

0 comments on commit 01729a7

Please sign in to comment.