From 0701de152bd5259fb1ed4b091eff1ff0c2d57eef Mon Sep 17 00:00:00 2001 From: arkadiuszos4chain Date: Thu, 1 Feb 2024 20:06:02 +0100 Subject: [PATCH 1/5] fix: return submit errors with context information --- broadcast/internal/arc/arc_submit_tx.go | 57 ++++++++++++------------- broadcast/internal/outter_errors.go | 44 +++++++++++++++++++ 2 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 broadcast/internal/outter_errors.go diff --git a/broadcast/internal/arc/arc_submit_tx.go b/broadcast/internal/arc/arc_submit_tx.go index 6abc4f5..556e6c6 100644 --- a/broadcast/internal/arc/arc_submit_tx.go +++ b/broadcast/internal/arc/arc_submit_tx.go @@ -10,6 +10,7 @@ import ( "strconv" "github.com/bitcoin-sv/go-broadcast-client/broadcast" + outter_errors "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal" arc_utils "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal/arc/utils" "github.com/bitcoin-sv/go-broadcast-client/httpclient" "github.com/libsv/go-bt/v2" @@ -23,7 +24,6 @@ var ErrSubmitTxMarshal = errors.New("error while marshalling submit tx body") func (a *ArcClient) SubmitTransaction(ctx context.Context, tx *broadcast.Transaction, opts ...broadcast.TransactionOptFunc) (*broadcast.SubmitTxResponse, error) { if a == nil { - a.Logger.Error().Msgf("Failed to submit tx: %s", broadcast.ErrClientUndefined.Error()) return nil, broadcast.ErrClientUndefined } @@ -34,13 +34,11 @@ func (a *ArcClient) SubmitTransaction(ctx context.Context, tx *broadcast.Transac result, err := submitTransaction(ctx, a, tx, options) if err != nil { - a.Logger.Error().Msgf("Failed to submit tx: %s", err.Error()) - return nil, err + return nil, outter_errors.New("SubmitTransaction: submiting failed", err) } if err := validateSubmitTxResponse(result); err != nil { - a.Logger.Error().Msgf("Failed to validate submit tx response: %s", err.Error()) - return nil, err + return nil, outter_errors.New("SubmitTransaction: validation of submit tx response failed", err) } response := &broadcast.SubmitTxResponse{ @@ -49,20 +47,17 @@ func (a *ArcClient) SubmitTransaction(ctx context.Context, tx *broadcast.Transac } a.Logger.Debug().Msgf("Got submit tx response from miner: %s", response.Miner) - return response, nil } func (a *ArcClient) SubmitBatchTransactions(ctx context.Context, txs []*broadcast.Transaction, opts ...broadcast.TransactionOptFunc) (*broadcast.SubmitBatchTxResponse, error) { if a == nil { - a.Logger.Error().Msgf("Failed to submit batch txs: %s", broadcast.ErrClientUndefined.Error()) return nil, broadcast.ErrClientUndefined } if len(txs) == 0 { err := errors.New("invalid request, no transactions to submit") - a.Logger.Error().Msgf("Failed to submit batch txs: %s", err.Error()) - return nil, err + return nil, outter_errors.New("SubmitBatchTransactions: bad request", err) } options := &broadcast.TransactionOpts{} @@ -72,13 +67,11 @@ func (a *ArcClient) SubmitBatchTransactions(ctx context.Context, txs []*broadcas result, err := submitBatchTransactions(ctx, a, txs, options) if err != nil { - a.Logger.Error().Msgf("Failed to submit batch txs: %s", err.Error()) - return nil, err + return nil, outter_errors.New("SubmitBatchTransactions: submiting failed", err) } if err := validateBatchResponse(result); err != nil { - a.Logger.Error().Msgf("Failed to validate batch txs response: %s", err.Error()) - return nil, err + return nil, outter_errors.New("SubmitBatchTransactions: validation of batch submit tx response failed", err) } response := &broadcast.SubmitBatchTxResponse{ @@ -272,18 +265,18 @@ func efTxRequest(rawTx string) (*SubmitTxRequest, error) { } func beefTxRequest(rawTx string) (*SubmitTxRequest, error) { - return nil, fmt.Errorf("submitting transactions in BEEF format is unimplemented yet...") + return nil, errors.New("submitting transactions in BEEF format is unimplemented yet...") } func rawTxRequest(arc *ArcClient, rawTx string) (*SubmitTxRequest, error) { transaction, err := bt.NewTxFromString(rawTx) if err != nil { - return nil, err + return nil, outter_errors.New("rawTxRequest: bt.NewTxFromString failed", err) } for _, input := range transaction.Inputs { if err = updateUtxoWithMissingData(arc, input); err != nil { - return nil, err + return nil, outter_errors.New("rawTxRequest: updateUtxoWithMissingData() failed", err) } } @@ -293,19 +286,8 @@ func rawTxRequest(arc *ArcClient, rawTx string) (*SubmitTxRequest, error) { return request, nil } -func decodeJunblebusTransaction(resp *http.Response) (*junglebusTransaction, error) { - tx := &junglebusTransaction{} - err := arc_utils.DecodeResponseBody(resp.Body, &tx) - if err != nil { - return nil, err - } - - return tx, nil -} - func updateUtxoWithMissingData(arc *ArcClient, input *bt.Input) error { txid := input.PreviousTxIDStr() - pld := httpclient.NewPayload( httpclient.GET, fmt.Sprintf("https://junglebus.gorillapool.io/v1/transaction/get/%s", txid), @@ -318,16 +300,20 @@ func updateUtxoWithMissingData(arc *ArcClient, input *bt.Input) error { arc.HTTPClient.DoRequest, pld, decodeJunblebusTransaction, - parseArcError, + nil, ) if err != nil { - return err + return fmt.Errorf("junglebus request failed: %w", err) + } + + if len(tx.Transaction) == 0 { + return errors.New("junglebus responded with empty tx.Transaction[]") } actualTx, err := bt.NewTxFromBytes(tx.Transaction) if err != nil { - return err + return outter_errors.New("converting junglebusTransaction.Transaction to bt.Tx failed", err) } o := actualTx.Outputs[input.PreviousTxOutIndex] @@ -336,6 +322,17 @@ func updateUtxoWithMissingData(arc *ArcClient, input *bt.Input) error { return nil } +func decodeJunblebusTransaction(resp *http.Response) (*junglebusTransaction, error) { + tx := &junglebusTransaction{} + err := arc_utils.DecodeResponseBody(resp.Body, &tx) + if err != nil { + return nil, fmt.Errorf("decodeJunblebusTransaction: %w", err) + } + + fmt.Println(tx) + return tx, nil +} + type junglebusTransaction struct { ID string `json:"id"` Transaction []byte `json:"transaction"` diff --git a/broadcast/internal/outter_errors.go b/broadcast/internal/outter_errors.go new file mode 100644 index 0000000..201ebf7 --- /dev/null +++ b/broadcast/internal/outter_errors.go @@ -0,0 +1,44 @@ +package outter_errors + +import ( + "fmt" + "strings" +) + +func New(msg string, inner error) error { + return &outterErr{ + msg: msg, + inner: inner, + } +} + +type outterErr struct { + msg string + inner error +} + +func (e *outterErr) Error() string { + return e.error(1) +} + +func (e *outterErr) Unwrap() error { + return e.inner +} + +func (e *outterErr) error(level uint8) string { + + if e.inner != nil { + var innerMsg string + if oie, ok := e.inner.(*outterErr); ok { + innerMsg = oie.error(level + 1) + } else { + innerMsg = e.inner.Error() + } + + indent := strings.Repeat("\t", int(level)) + return fmt.Sprintf("%s\n%sinner error: %s", e.msg, indent, innerMsg) + + } else { + return e.msg + } +} From 55666fa89cb6248da85a7970158b9ce69055678d Mon Sep 17 00:00:00 2001 From: arkadiuszos4chain Date: Thu, 1 Feb 2024 20:33:34 +0100 Subject: [PATCH 2/5] fix: fix tests --- broadcast/internal/arc/arc_submit_tx.go | 4 ++-- broadcast/internal/arc/arc_submit_tx_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/broadcast/internal/arc/arc_submit_tx.go b/broadcast/internal/arc/arc_submit_tx.go index 556e6c6..48db157 100644 --- a/broadcast/internal/arc/arc_submit_tx.go +++ b/broadcast/internal/arc/arc_submit_tx.go @@ -34,7 +34,7 @@ func (a *ArcClient) SubmitTransaction(ctx context.Context, tx *broadcast.Transac result, err := submitTransaction(ctx, a, tx, options) if err != nil { - return nil, outter_errors.New("SubmitTransaction: submiting failed", err) + return nil, outter_errors.New("SubmitTransaction: submitting failed", err) } if err := validateSubmitTxResponse(result); err != nil { @@ -67,7 +67,7 @@ func (a *ArcClient) SubmitBatchTransactions(ctx context.Context, txs []*broadcas result, err := submitBatchTransactions(ctx, a, txs, options) if err != nil { - return nil, outter_errors.New("SubmitBatchTransactions: submiting failed", err) + return nil, outter_errors.New("SubmitBatchTransactions: submitting failed", err) } if err := validateBatchResponse(result); err != nil { diff --git a/broadcast/internal/arc/arc_submit_tx_test.go b/broadcast/internal/arc/arc_submit_tx_test.go index 5294758..1c837e4 100644 --- a/broadcast/internal/arc/arc_submit_tx_test.go +++ b/broadcast/internal/arc/arc_submit_tx_test.go @@ -103,7 +103,7 @@ func TestSubmitTransaction(t *testing.T) { // then assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) + assert.Equal(t, tc.expectedError, errors.Unwrap(err)) // assert Expectations on the mock mockHttpClient.AssertExpectations(t) From 63608cbfa57358d3984d8ab81ca93f301683e359 Mon Sep 17 00:00:00 2001 From: arkadiuszos4chain Date: Fri, 2 Feb 2024 13:29:12 +0100 Subject: [PATCH 3/5] fix: add WithCause(err, err) --- broadcast/internal/arc/arc_fee_quote.go | 5 ++- broadcast/internal/arc/arc_fee_quote_test.go | 9 ++-- broadcast/internal/arc/arc_policy_quote.go | 4 +- .../internal/arc/arc_policy_quote_test.go | 9 ++-- broadcast/internal/arc/arc_query_tx.go | 7 +-- broadcast/internal/arc/arc_query_tx_test.go | 6 ++- broadcast/internal/arc/arc_submit_tx.go | 17 ++++--- broadcast/internal/arc/arc_submit_tx_test.go | 5 ++- broadcast/internal/arc/utils/arc_utils.go | 6 +++ broadcast/internal/outter_errors.go | 44 ------------------- examples/submit_transaction/submit_tx.go | 9 ++-- 11 files changed, 48 insertions(+), 73 deletions(-) delete mode 100644 broadcast/internal/outter_errors.go diff --git a/broadcast/internal/arc/arc_fee_quote.go b/broadcast/internal/arc/arc_fee_quote.go index 8796fb0..938060f 100644 --- a/broadcast/internal/arc/arc_fee_quote.go +++ b/broadcast/internal/arc/arc_fee_quote.go @@ -2,15 +2,16 @@ package arc import ( "context" + "errors" "github.com/bitcoin-sv/go-broadcast-client/broadcast" + arc_utils "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal/arc/utils" ) func (a *ArcClient) GetFeeQuote(ctx context.Context) ([]*broadcast.FeeQuote, error) { policyQuotes, err := a.GetPolicyQuote(ctx) if err != nil { - a.Logger.Error().Msgf("Failed to get policy quote: %s", err.Error()) - return nil, err + return nil, arc_utils.WithCause(errors.New("GetFeeQuote: request failed"), err) } feeQuote := &broadcast.FeeQuote{ diff --git a/broadcast/internal/arc/arc_fee_quote_test.go b/broadcast/internal/arc/arc_fee_quote_test.go index 73c04ad..3802797 100644 --- a/broadcast/internal/arc/arc_fee_quote_test.go +++ b/broadcast/internal/arc/arc_fee_quote_test.go @@ -4,11 +4,13 @@ import ( "bytes" "context" "errors" - "github.com/rs/zerolog" "io" "net/http" + "strings" "testing" + "github.com/rs/zerolog" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -81,8 +83,9 @@ func TestFeeQuote(t *testing.T) { // then assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - + if err != nil { + assert.True(t, strings.Contains(err.Error(), tc.expectedError.Error())) + } // assert Expectations on the mock mockHttpClient.AssertExpectations(t) }) diff --git a/broadcast/internal/arc/arc_policy_quote.go b/broadcast/internal/arc/arc_policy_quote.go index c73652e..709b87f 100644 --- a/broadcast/internal/arc/arc_policy_quote.go +++ b/broadcast/internal/arc/arc_policy_quote.go @@ -2,6 +2,7 @@ package arc import ( "context" + "errors" "net/http" "github.com/bitcoin-sv/go-broadcast-client/broadcast" @@ -16,8 +17,7 @@ func (a *ArcClient) GetPolicyQuote(ctx context.Context) ([]*broadcast.PolicyQuot model, err := getPolicyQuote(ctx, a) if err != nil { - a.Logger.Error().Msgf("Failed to get policy quote: %s", err.Error()) - return nil, err + return nil, arc_utils.WithCause(errors.New("GetPolicyQuote: request failed"), err) } model.Miner = a.apiURL diff --git a/broadcast/internal/arc/arc_policy_quote_test.go b/broadcast/internal/arc/arc_policy_quote_test.go index fb7a7c2..0990437 100644 --- a/broadcast/internal/arc/arc_policy_quote_test.go +++ b/broadcast/internal/arc/arc_policy_quote_test.go @@ -4,11 +4,13 @@ import ( "bytes" "context" "errors" - "github.com/rs/zerolog" "io" "net/http" + "strings" "testing" + "github.com/rs/zerolog" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -86,8 +88,9 @@ func TestPolicyQuote(t *testing.T) { // then assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) - + if err != nil { + assert.True(t, strings.Contains(err.Error(), tc.expectedError.Error())) + } // assert Expectations on the mock mockHttpClient.AssertExpectations(t) }) diff --git a/broadcast/internal/arc/arc_query_tx.go b/broadcast/internal/arc/arc_query_tx.go index 8c435b8..6d03922 100644 --- a/broadcast/internal/arc/arc_query_tx.go +++ b/broadcast/internal/arc/arc_query_tx.go @@ -14,20 +14,17 @@ var ErrMissingTxID = errors.New("missing tx id") func (a *ArcClient) QueryTransaction(ctx context.Context, txID string) (*broadcast.QueryTxResponse, error) { if a == nil { - a.Logger.Error().Msgf("Failed to query tx: %s", broadcast.ErrClientUndefined.Error()) return nil, broadcast.ErrClientUndefined } result, err := queryTransaction(ctx, a, txID) if err != nil { - a.Logger.Error().Msgf("Failed to query tx: %s", err.Error()) - return nil, err + return nil, arcutils.WithCause(errors.New("QueryTransaction: querying failed"), err) } err = validateQueryTxResponse(result) if err != nil { - a.Logger.Error().Msgf("Failed to validate query tx response: %s", err.Error()) - return nil, err + return nil, arcutils.WithCause(errors.New("QueryTransaction: validation of query tx response failed"), err) } a.Logger.Debug().Msgf("Got query tx response from miner: %s", result.Miner) diff --git a/broadcast/internal/arc/arc_query_tx_test.go b/broadcast/internal/arc/arc_query_tx_test.go index 1836bd9..288b32f 100644 --- a/broadcast/internal/arc/arc_query_tx_test.go +++ b/broadcast/internal/arc/arc_query_tx_test.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/http" + "strings" "testing" "github.com/rs/zerolog" @@ -86,7 +87,10 @@ func TestQueryTransaction(t *testing.T) { // then assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, err) + + if err != nil { + assert.True(t, strings.Contains(err.Error(), tc.expectedError.Error())) + } // assert Expectations on the mock mockHttpClient.AssertExpectations(t) diff --git a/broadcast/internal/arc/arc_submit_tx.go b/broadcast/internal/arc/arc_submit_tx.go index 48db157..663ff84 100644 --- a/broadcast/internal/arc/arc_submit_tx.go +++ b/broadcast/internal/arc/arc_submit_tx.go @@ -10,7 +10,6 @@ import ( "strconv" "github.com/bitcoin-sv/go-broadcast-client/broadcast" - outter_errors "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal" arc_utils "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal/arc/utils" "github.com/bitcoin-sv/go-broadcast-client/httpclient" "github.com/libsv/go-bt/v2" @@ -34,11 +33,11 @@ func (a *ArcClient) SubmitTransaction(ctx context.Context, tx *broadcast.Transac result, err := submitTransaction(ctx, a, tx, options) if err != nil { - return nil, outter_errors.New("SubmitTransaction: submitting failed", err) + return nil, arc_utils.WithCause(errors.New("SubmitTransaction: submitting failed"), err) } if err := validateSubmitTxResponse(result); err != nil { - return nil, outter_errors.New("SubmitTransaction: validation of submit tx response failed", err) + return nil, arc_utils.WithCause(errors.New("SubmitTransaction: validation of submit tx response failed"), err) } response := &broadcast.SubmitTxResponse{ @@ -57,7 +56,7 @@ func (a *ArcClient) SubmitBatchTransactions(ctx context.Context, txs []*broadcas if len(txs) == 0 { err := errors.New("invalid request, no transactions to submit") - return nil, outter_errors.New("SubmitBatchTransactions: bad request", err) + return nil, arc_utils.WithCause(errors.New("SubmitBatchTransactions: bad request"), err) } options := &broadcast.TransactionOpts{} @@ -67,11 +66,11 @@ func (a *ArcClient) SubmitBatchTransactions(ctx context.Context, txs []*broadcas result, err := submitBatchTransactions(ctx, a, txs, options) if err != nil { - return nil, outter_errors.New("SubmitBatchTransactions: submitting failed", err) + return nil, arc_utils.WithCause(errors.New("SubmitBatchTransactions: submitting failed"), err) } if err := validateBatchResponse(result); err != nil { - return nil, outter_errors.New("SubmitBatchTransactions: validation of batch submit tx response failed", err) + return nil, arc_utils.WithCause(errors.New("SubmitBatchTransactions: validation of batch submit tx response failed"), err) } response := &broadcast.SubmitBatchTxResponse{ @@ -271,12 +270,12 @@ func beefTxRequest(rawTx string) (*SubmitTxRequest, error) { func rawTxRequest(arc *ArcClient, rawTx string) (*SubmitTxRequest, error) { transaction, err := bt.NewTxFromString(rawTx) if err != nil { - return nil, outter_errors.New("rawTxRequest: bt.NewTxFromString failed", err) + return nil, arc_utils.WithCause(errors.New("rawTxRequest: bt.NewTxFromString failed"), err) } for _, input := range transaction.Inputs { if err = updateUtxoWithMissingData(arc, input); err != nil { - return nil, outter_errors.New("rawTxRequest: updateUtxoWithMissingData() failed", err) + return nil, arc_utils.WithCause(errors.New("rawTxRequest: updateUtxoWithMissingData() failed"), err) } } @@ -313,7 +312,7 @@ func updateUtxoWithMissingData(arc *ArcClient, input *bt.Input) error { actualTx, err := bt.NewTxFromBytes(tx.Transaction) if err != nil { - return outter_errors.New("converting junglebusTransaction.Transaction to bt.Tx failed", err) + return arc_utils.WithCause(errors.New("converting junglebusTransaction.Transaction to bt.Tx failed"), err) } o := actualTx.Outputs[input.PreviousTxOutIndex] diff --git a/broadcast/internal/arc/arc_submit_tx_test.go b/broadcast/internal/arc/arc_submit_tx_test.go index 1c837e4..6bcad1c 100644 --- a/broadcast/internal/arc/arc_submit_tx_test.go +++ b/broadcast/internal/arc/arc_submit_tx_test.go @@ -6,6 +6,7 @@ import ( "errors" "io" "net/http" + "strings" "testing" "github.com/rs/zerolog" @@ -103,8 +104,10 @@ func TestSubmitTransaction(t *testing.T) { // then assert.Equal(t, tc.expectedResult, result) - assert.Equal(t, tc.expectedError, errors.Unwrap(err)) + if err != nil { + assert.True(t, strings.Contains(err.Error(), tc.expectedError.Error())) + } // assert Expectations on the mock mockHttpClient.AssertExpectations(t) }) diff --git a/broadcast/internal/arc/utils/arc_utils.go b/broadcast/internal/arc/utils/arc_utils.go index c497a6a..a7f35a2 100644 --- a/broadcast/internal/arc/utils/arc_utils.go +++ b/broadcast/internal/arc/utils/arc_utils.go @@ -2,6 +2,8 @@ package arcutils import ( "encoding/json" + "errors" + "fmt" "io" "github.com/bitcoin-sv/go-broadcast-client/broadcast" @@ -15,3 +17,7 @@ func DecodeResponseBody(body io.ReadCloser, resultOutput any) error { return nil } + +func WithCause(err error, cause error) error { + return errors.Join(err, fmt.Errorf("\tcaused by: %w\t", cause)) +} diff --git a/broadcast/internal/outter_errors.go b/broadcast/internal/outter_errors.go deleted file mode 100644 index 201ebf7..0000000 --- a/broadcast/internal/outter_errors.go +++ /dev/null @@ -1,44 +0,0 @@ -package outter_errors - -import ( - "fmt" - "strings" -) - -func New(msg string, inner error) error { - return &outterErr{ - msg: msg, - inner: inner, - } -} - -type outterErr struct { - msg string - inner error -} - -func (e *outterErr) Error() string { - return e.error(1) -} - -func (e *outterErr) Unwrap() error { - return e.inner -} - -func (e *outterErr) error(level uint8) string { - - if e.inner != nil { - var innerMsg string - if oie, ok := e.inner.(*outterErr); ok { - innerMsg = oie.error(level + 1) - } else { - innerMsg = e.inner.Error() - } - - indent := strings.Repeat("\t", int(level)) - return fmt.Sprintf("%s\n%sinner error: %s", e.msg, indent, innerMsg) - - } else { - return e.msg - } -} diff --git a/examples/submit_transaction/submit_tx.go b/examples/submit_transaction/submit_tx.go index a3540de..6da4488 100644 --- a/examples/submit_transaction/submit_tx.go +++ b/examples/submit_transaction/submit_tx.go @@ -13,9 +13,12 @@ import ( // This example shows how to submit a transaction. func main() { logger := zerolog.Nop() - token := "" - apiURL := "https://arc.gorillapool.io" - tx := broadcast.Transaction{Hex: "01000000026d9a56036235bb5b5e39b04b6f188c74bc45189a9122f235cad5f0c4b668817d000000006b483045022100ae4c9b06376c42bf82f7910de20bb025d8b43daf33eb2db1966f0f1fd361d499022063594799502920ceceb17e3301e44066431a5ae1e221ce1bd89b446e602adf62412102dd2063cc1d4fbc5a770b156f8cd9f5c80cc586df4c7d148444d6bb66c81a10daffffffff6e574c52ebc1c724a13d0afd525adbcfe0b134d9666ab9004240d9d072a7906b000000006a4730440220191c938793953f931c9297a27a651b07e5cb60432fd5750a3f53488ed23fae8702204c503822986ef959af741609dfe98a51004e36596ca52a865c5e029fdbcfb3d641210253085022df5ebbdc71f9e8f555443660cda4a3d36d732685be317d7e11b9eda4ffffffff0214000000000000001976a914553236189ff9fed552837b952e404e09f78c03fa88ac01000000000000001976a914d8f00ced3f960ffa6f0516b4e352e0a9feccc3af88ac00000000"} + token := "mainnet_06770f425eb00298839a24a49cbdc02c" + apiURL := "https://api.taal.com/arc" + + //hex := "0100000001c73ec4cebb3f4fbb4eba6fd8e481d0e50ec004e74abc160ab595b0797222ed04010000006b483045022100edf7220bd6ba442180593d618bc22c863756cd759912412e8d4affff064120ba0220206c97625bcedb19f5edb6f063da5ed1d07f8aa4ad7c5885e304760a1c0357674121028725265e99175bd3c5f356ab93415b6d8da75d6c23da5f2ac49990db8b8e6bb5ffffffff0200000000000000000a006a07616b756b7520365d000000000000001976a9142f1609de754218a8489b6d021ebc9d0a7d35802088ac00000000" + hex := "0100000002f52bcbe41d5339b08c81bf8f50312cb164867a5d6ffb54465570332b02c05330010000006a4730440220222c63eb9b7b84f8812cc09dae554da4aecb868b26c33bcd06b8ac6d1cf7868702202a7a41326d3d10dfb059c25700722863db9be730c4df077d089aa37f3db3a55d412102c7a5a1b2e739ad5ef9e4d1626151208bf4aefe27cff8cb0b6ec8ef4f1cf702a8ffffffff0200000000000000000a006a07616b756b7520355e000000000000001976a914c45076ef1b386d75f1036b8225fc2715ca8f267d88ac00000000" + tx := broadcast.Transaction{Hex: hex} cfg := broadcast_client.ArcClientConfig{ Token: token, From 1b6942692c3c7ee108c14a189795acdf8eaec9e2 Mon Sep 17 00:00:00 2001 From: arkadiuszos4chain Date: Fri, 2 Feb 2024 13:47:29 +0100 Subject: [PATCH 4/5] fix: revert changes in example --- examples/submit_transaction/submit_tx.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/examples/submit_transaction/submit_tx.go b/examples/submit_transaction/submit_tx.go index 4f8b6ec..c0a08d9 100644 --- a/examples/submit_transaction/submit_tx.go +++ b/examples/submit_transaction/submit_tx.go @@ -13,12 +13,9 @@ import ( // This example shows how to submit a transaction. func main() { logger := zerolog.Nop() - token := "mainnet_06770f425eb00298839a24a49cbdc02c" - apiURL := "https://api.taal.com/arc" - - //hex := "0100000001c73ec4cebb3f4fbb4eba6fd8e481d0e50ec004e74abc160ab595b0797222ed04010000006b483045022100edf7220bd6ba442180593d618bc22c863756cd759912412e8d4affff064120ba0220206c97625bcedb19f5edb6f063da5ed1d07f8aa4ad7c5885e304760a1c0357674121028725265e99175bd3c5f356ab93415b6d8da75d6c23da5f2ac49990db8b8e6bb5ffffffff0200000000000000000a006a07616b756b7520365d000000000000001976a9142f1609de754218a8489b6d021ebc9d0a7d35802088ac00000000" - hex := "0100000002f52bcbe41d5339b08c81bf8f50312cb164867a5d6ffb54465570332b02c05330010000006a4730440220222c63eb9b7b84f8812cc09dae554da4aecb868b26c33bcd06b8ac6d1cf7868702202a7a41326d3d10dfb059c25700722863db9be730c4df077d089aa37f3db3a55d412102c7a5a1b2e739ad5ef9e4d1626151208bf4aefe27cff8cb0b6ec8ef4f1cf702a8ffffffff0200000000000000000a006a07616b756b7520355e000000000000001976a914c45076ef1b386d75f1036b8225fc2715ca8f267d88ac00000000" - tx := broadcast.Transaction{Hex: hex} + token := "" + apiURL := "https://arc.gorillapool.io" + tx := broadcast.Transaction{Hex: "01000000026d9a56036235bb5b5e39b04b6f188c74bc45189a9122f235cad5f0c4b668817d000000006b483045022100ae4c9b06376c42bf82f7910de20bb025d8b43daf33eb2db1966f0f1fd361d499022063594799502920ceceb17e3301e44066431a5ae1e221ce1bd89b446e602adf62412102dd2063cc1d4fbc5a770b156f8cd9f5c80cc586df4c7d148444d6bb66c81a10daffffffff6e574c52ebc1c724a13d0afd525adbcfe0b134d9666ab9004240d9d072a7906b000000006a4730440220191c938793953f931c9297a27a651b07e5cb60432fd5750a3f53488ed23fae8702204c503822986ef959af741609dfe98a51004e36596ca52a865c5e029fdbcfb3d641210253085022df5ebbdc71f9e8f555443660cda4a3d36d732685be317d7e11b9eda4ffffffff0214000000000000001976a914553236189ff9fed552837b952e404e09f78c03fa88ac01000000000000001976a914d8f00ced3f960ffa6f0516b4e352e0a9feccc3af88ac00000000"} cfg := broadcast_client.ArcClientConfig{ Token: token, From 3aa89ff3950f2a64a28a5f85d2eb9b7587524267 Mon Sep 17 00:00:00 2001 From: arkadiuszos4chain Date: Tue, 6 Feb 2024 07:37:15 +0100 Subject: [PATCH 5/5] fix: adjust to review - rename arcutils alias -> arc_utils --- broadcast/internal/arc/arc_query_tx.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/broadcast/internal/arc/arc_query_tx.go b/broadcast/internal/arc/arc_query_tx.go index e3083e9..fefb435 100644 --- a/broadcast/internal/arc/arc_query_tx.go +++ b/broadcast/internal/arc/arc_query_tx.go @@ -6,7 +6,7 @@ import ( "net/http" "github.com/bitcoin-sv/go-broadcast-client/broadcast" - arcutils "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal/arc/utils" + arc_utils "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal/arc/utils" "github.com/bitcoin-sv/go-broadcast-client/httpclient" ) @@ -19,12 +19,12 @@ func (a *ArcClient) QueryTransaction(ctx context.Context, txID string) (*broadca result, err := queryTransaction(ctx, a, txID) if err != nil { - return nil, arcutils.WithCause(errors.New("QueryTransaction: querying failed"), err) + return nil, arc_utils.WithCause(errors.New("QueryTransaction: querying failed"), err) } err = validateQueryTxResponse(result) if err != nil { - return nil, arcutils.WithCause(errors.New("QueryTransaction: validation of query tx response failed"), err) + return nil, arc_utils.WithCause(errors.New("QueryTransaction: validation of query tx response failed"), err) } a.Logger.Debug().Msgf("Got query tx response from miner: %s", result.Miner) @@ -59,7 +59,7 @@ func queryTransaction(ctx context.Context, arc *ArcClient, txHash string) (*broa func decodeQueryResponseBody(resp *http.Response, arc *ArcClient) (*broadcast.QueryTxResponse, error) { base := broadcast.BaseTxResponse{} - err := arcutils.DecodeResponseBody(resp.Body, &base) + err := arc_utils.DecodeResponseBody(resp.Body, &base) if err != nil { return nil, err }