@@ -3,10 +3,10 @@ package api
33import (
44 "encoding/hex"
55 "fmt"
6+ "github.com/cloudstruct/go-cardano-ledger"
67 "github.com/cloudstruct/go-cardano-submit-api/internal/config"
78 "github.com/cloudstruct/go-cardano-submit-api/internal/logging"
89 ouroboros "github.com/cloudstruct/go-ouroboros-network"
9- "github.com/cloudstruct/go-ouroboros-network/block"
1010 "github.com/cloudstruct/go-ouroboros-network/protocol/localtxsubmission"
1111 "github.com/fxamacker/cbor/v2"
1212 ginzap "github.com/gin-contrib/zap"
@@ -54,8 +54,8 @@ func Start(cfg *config.Config) error {
5454 }
5555 router .Use (ginzap .GinzapWithConfig (accessLogger , & ginzap.Config {
5656 TimeFormat : time .RFC3339 ,
57- UTC : true ,
58- SkipPaths : skipPaths ,
57+ UTC : true ,
58+ SkipPaths : skipPaths ,
5959 }))
6060 router .Use (ginzap .RecoveryWithZap (accessLogger , true ))
6161
@@ -235,12 +235,44 @@ func handleSubmitTx(c *gin.Context) {
235235 },
236236 }
237237 oConn .LocalTxSubmission .Start (localTxSubmissionCallbackConfig )
238- // TODO: figure out better way to determine era
239- if err = oConn .LocalTxSubmission .SubmitTx (block .TX_TYPE_ALONZO , txRawBytes ); err != nil {
238+ // Determine transaction type (era)
239+ txType , err := determineTransactionType (txRawBytes )
240+ if err != nil {
241+ c .String (400 , "could not parse transaction to determine type" )
242+ return
243+ }
244+ // Submit the transaction
245+ if err := oConn .LocalTxSubmission .SubmitTx (txType , txRawBytes ); err != nil {
240246 logger .Errorf ("failure submitting transaction: %s" , err )
241247 c .String (500 , "failure communicating with node" )
242248 return
243249 }
244250 // Wait for async process to finish
245251 <- doneChan
246252}
253+
254+ func determineTransactionType (data []byte ) (uint16 , error ) {
255+ // TODO: uncomment this once the following issue is resolved:
256+ // https://github.com/cloudstruct/go-cardano-ledger/issues/9
257+ /*
258+ if _, err := ledger.NewByronTransactionFromCbor(data); err == nil {
259+ return ledger.TX_TYPE_BYRON, nil
260+ }
261+ */
262+ if _ , err := ledger .NewShelleyTransactionFromCbor (data ); err == nil {
263+ return ledger .TX_TYPE_SHELLEY , nil
264+ }
265+ if _ , err := ledger .NewAllegraTransactionFromCbor (data ); err == nil {
266+ return ledger .TX_TYPE_ALLEGRA , nil
267+ }
268+ if _ , err := ledger .NewMaryTransactionFromCbor (data ); err == nil {
269+ return ledger .TX_TYPE_MARY , nil
270+ }
271+ if _ , err := ledger .NewAlonzoTransactionFromCbor (data ); err == nil {
272+ return ledger .TX_TYPE_ALONZO , nil
273+ }
274+ if _ , err := ledger .NewBabbageTransactionFromCbor (data ); err == nil {
275+ return ledger .TX_TYPE_BABBAGE , nil
276+ }
277+ return 0 , fmt .Errorf ("unknown transaction type" )
278+ }
0 commit comments