Skip to content

Commit

Permalink
feat: add transfer_tokens example
Browse files Browse the repository at this point in the history
  • Loading branch information
janaakhterov committed Oct 19, 2020
1 parent e26df3f commit 8e83f5b
Show file tree
Hide file tree
Showing 2 changed files with 201 additions and 13 deletions.
183 changes: 183 additions & 0 deletions examples/transfer_tokens/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
package main

import (
"fmt"
"github.com/hashgraph/hedera-sdk-go"
"os"
"time"
)

func main() {
operatorID, err := hedera.AccountIDFromString(os.Getenv("OPERATOR_ID"))
if err != nil {
panic(err)
}

operatorPrivateKey, err := hedera.Ed25519PrivateKeyFromString(os.Getenv("OPERATOR_KEY"))
if err != nil {
panic(err)
}

operatorKey := operatorPrivateKey.PublicKey()

client, err := hedera.ClientFromFile(os.Getenv("CONFIG_FILE"))
if err != nil {
panic(err)
}

client.SetOperator(operatorID, operatorPrivateKey)

key, err := hedera.GenerateEd25519PrivateKey()
if err != nil {
panic(err)
}

fmt.Printf("privateKey = %v\n", key.String())
fmt.Printf("publicKey = %v\n", key.PublicKey().String())

response, err := hedera.NewAccountCreateTransaction().
SetKey(key.PublicKey()).
Execute(client)
if err != nil {
panic(err)
}

receipt, err := response.GetReceipt(client)
if err != nil {
panic(err)
}

accountID := receipt.GetAccountID()

fmt.Printf("account = %v\n", accountID.String())

response, err = hedera.NewTokenCreateTransaction().
SetName("ffff").
SetSymbol("F").
SetDecimals(3).
SetInitialSupply(1000000).
SetTreasury(operatorID).
SetAdminKey(operatorKey).
SetFreezeKey(operatorKey).
SetWipeKey(operatorKey).
SetKycKey(operatorKey).
SetSupplyKey(operatorKey).
SetFreezeDefault(false).
SetExpirationTime(uint64(time.Now().Add(7890000 * time.Second).Unix())).
Execute(client)
if err != nil {
panic(err)
}

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

tokenID := receipt.GetTokenID()

fmt.Printf("token = %v\n", tokenID.String())

transaction, err := hedera.NewTokenAssociateTransaction().
SetAccountID(accountID).
SetTokenIDs(tokenID).
Build(client)
if err != nil {
panic(err)
}

response, err = transaction.
Sign(key).
Sign(operatorPrivateKey).
Execute(client)
if err != nil {
panic(err)
}

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

fmt.Printf("Associated account %v with token %v\n", accountID.String(), tokenID.String())

response, err = hedera.NewTokenGrantKycTransaction().
SetTokenID(tokenID).
SetAccountID(accountID).
Execute(client)
if err != nil {
panic(err)
}

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

fmt.Printf("Granted KYC for account %v on token %v\n", accountID.String(), tokenID.String())

response, err = hedera.NewTokenTransferTransaction().
AddSender(tokenID, operatorID, 10).
AddRecipient(tokenID, accountID, 10).
Execute(client)
if err != nil {
panic(err)
}

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

fmt.Printf("Sent 10 tokens from account %v to account %v on token %v\n", operatorID.String(), accountID.String(), tokenID.String())

response, err = hedera.NewTokenWipeTransaction().
SetTokenID(tokenID).
SetAccountID(accountID).
SetAmount(10).
Execute(client)
if err != nil {
panic(err)
}

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

fmt.Printf("Wiped balance of account %v\n", accountID.String())

response, err = hedera.NewTokenDeleteTransaction().
SetTokenID(tokenID).
Execute(client)

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

fmt.Printf("Deleted token %v\n", tokenID.String())

transaction, err = hedera.NewAccountDeleteTransaction().
SetDeleteAccountID(accountID).
SetTransferAccountID(operatorID).
Build(client)
if err != nil {
panic(err)
}

response, err = transaction.
Sign(key).
Sign(operatorPrivateKey).
Execute(client)
if err != nil {
panic(err)
}

receipt, err = response.GetReceipt(client)
if err != nil {
panic(err)
}

fmt.Printf("Deleted account %v\n", accountID.String())
}
31 changes: 18 additions & 13 deletions query_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,16 @@ func execute(node *node, paymentID *TransactionID, pb *proto.Query, deadline tim
continue
}

status := Status(respHeader.NodeTransactionPrecheckCode)

switch status {
case StatusBusy,
StatusPlatformNotActive,
StatusReceiptNotFound,
StatusRecordNotFound:
continue
}

// If the query is `Transaction[Receipt|Record]Query` we need to inspect the
// receipts status and retry on that as well as the `resp.NodeTransactionPrecheckCode`
var receiptStatus *proto.ResponseCodeEnum = nil
Expand All @@ -402,21 +412,16 @@ func execute(node *node, paymentID *TransactionID, pb *proto.Query, deadline tim
proto.ResponseCodeEnum_UNKNOWN:
continue
}
}

status := Status(respHeader.NodeTransactionPrecheckCode)

switch status {
case StatusBusy,
StatusPlatformNotActive,
StatusReceiptNotFound,
StatusRecordNotFound:
continue
}
if status.isExceptional(true) {
// precheck failed, paymentID should never be nil in this case
return resp, newErrHederaPreCheckStatus(*paymentID, status)
}

if status.isExceptional(true) {
// precheck failed, paymentID should never be nil in this case
return resp, newErrHederaPreCheckStatus(*paymentID, status)
if Status(*receiptStatus).isExceptional(true) {
// precheck failed, paymentID should never be nil in this case
return resp, newErrHederaPreCheckStatus(TransactionID{}, Status(*receiptStatus))
}
}

// success
Expand Down

0 comments on commit 8e83f5b

Please sign in to comment.