Skip to content

Commit

Permalink
Clearer logging for Construction API
Browse files Browse the repository at this point in the history
  • Loading branch information
patrick-ogrady committed Jul 23, 2020
1 parent 7b37fa6 commit cea111c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 27 deletions.
29 changes: 17 additions & 12 deletions internal/processor/check_construction_sync_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import (
"log"
"math/big"
"sync"
"time"

"github.com/coinbase/rosetta-sdk-go/types"
"github.com/fatih/color"
)

const (
Expand Down Expand Up @@ -125,24 +127,27 @@ func (t *CheckConstructionHandler) BlockRemoved(
return nil
}

// Transaction waits for a certain transaction to be present
// before returning.
func (t *CheckConstructionHandler) Transaction(
ctx context.Context,
transaction *types.TransactionIdentifier,
) (*types.BlockIdentifier, *types.Transaction) {
block, ok := t.txStore[transaction.Hash]
if !ok {
return nil, nil
}

var matchingTx *types.Transaction
for _, txn := range block.Transactions {
if types.Hash(transaction) == types.Hash(txn.TransactionIdentifier) {
matchingTx = txn
break
) (*types.BlockIdentifier, *types.Transaction, error) {
color.Magenta("Waiting for transaction %s on-chain", transaction.Hash)
for ctx.Err() == nil {
block, ok := t.txStore[transaction.Hash]
if ok {
for _, txn := range block.Transactions {
if types.Hash(transaction) == types.Hash(txn.TransactionIdentifier) {
return block.BlockIdentifier, txn, nil
}
}
}

time.Sleep(10 * time.Second)
}

return block.BlockIdentifier, matchingTx
return nil, nil, ctx.Err()
}

type UTXO struct {
Expand Down
24 changes: 9 additions & 15 deletions internal/tester/construction.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ func (t *ConstructionTester) ProduceTransaction(ctx context.Context, ops []*type
if err := parser.ExpectedOperations(ops, parsedOps, false); err != nil {
return nil, fmt.Errorf("%w: unsigned parsed ops do not match intent", err)
}
color.Magenta("Transaction constructed")

requestedSigners := []string{}
for _, payload := range payloads {
Expand Down Expand Up @@ -207,6 +208,7 @@ func (t *ConstructionTester) ProduceTransaction(ctx context.Context, ops []*type
if err := parser.ExpectedSigners(payloads, signers); err != nil {
return nil, fmt.Errorf("%w: signed transactions signers do not match intent", err)
}
color.Magenta("Transaction signed")

txHash, err := t.offlineFetcher.ConstructionHash(
ctx,
Expand All @@ -226,7 +228,7 @@ func (t *ConstructionTester) ProduceTransaction(ctx context.Context, ops []*type
if err != nil {
return nil, fmt.Errorf("%w transaction submission failed", err)
}
log.Printf("trasaction broadcast %s\n", txID.Hash)
color.Magenta("Transaction %s broadcast", txID.Hash)

if txID.Hash != txHash {
return nil, fmt.Errorf("derived transaction hash %s does not match hash returned by submit %s", txHash, txID.Hash)
Expand All @@ -235,21 +237,12 @@ func (t *ConstructionTester) ProduceTransaction(ctx context.Context, ops []*type
// TODO: Look for TX in mempool (if enabled) and compare intent vs parsed ops
// -> may need to differentiate between /mempool and /mempool/transaction support

// Look at blocks and wait for tx
var block *types.BlockIdentifier
var chainTransaction *types.Transaction
for ctx.Err() == nil {
block, chainTransaction = t.handler.Transaction(ctx, txID)
if block == nil { // wait for transaction to appear on-chain
time.Sleep(10 * time.Second)
} else {
break
}
}
if ctx.Err() != nil {
return nil, ctx.Err()
block, chainTransaction, err := t.handler.Transaction(ctx, txID)
if err != nil {
return nil, fmt.Errorf("%w: unable to find transaction", err)
}
log.Printf("transaction found on-chain in block %s:%d\n", block.Hash, block.Index)

color.Magenta("Transaction found in block %s:%d", block.Hash, block.Index)

if err := parser.ExpectedOperations(ops, chainTransaction.Operations, false); err != nil {
return nil, fmt.Errorf("%w: on-chain parsed ops do not match intent", err)
Expand Down Expand Up @@ -544,6 +537,7 @@ func (t *ConstructionTester) TransferLoop(ctx context.Context) error {
}

// Perform and Recognize Transaction
color.Magenta("Sending %s from %s to %s", recipientValue.String(), sender, recipient)
_, err = t.ProduceTransaction(ctx, ops)
if err != nil {
return fmt.Errorf("%w: unable to produce transaction with operations %s", err, types.PrettyPrintStruct(ops))
Expand Down

0 comments on commit cea111c

Please sign in to comment.