diff --git a/factory.go b/factory.go
index d0ec5588..375bdbd9 100644
--- a/factory.go
+++ b/factory.go
@@ -2,6 +2,7 @@ package fil_parser
 
 import (
 	"errors"
+	"fmt"
 	"github.com/filecoin-project/go-address"
 	"github.com/filecoin-project/go-state-types/big"
 	types2 "github.com/filecoin-project/lotus/chain/types"
@@ -33,8 +34,6 @@ type FilecoinParser struct {
 }
 
 type Parser interface {
-	VersionStable() string
-	VersionNext() string
 	Version() string
 	ParseTransactions(traces []byte, tipSet *types.ExtendedTipSet, ethLogs []types.EthLog) ([]*types.Transaction, *types.AddressInfoMap, error)
 	GetBaseFee(traces []byte) (uint64, error)
@@ -62,23 +61,22 @@ func NewFilecoinParser(lib *rosettaFilecoinLib.RosettaConstructionFilecoin, cach
 }
 
 func (p *FilecoinParser) ParseTransactions(traces []byte, tipSet *types.ExtendedTipSet, ethLogs []types.EthLog, metadata *types.BlockMetadata) ([]*types.Transaction, *types.AddressInfoMap, error) {
-	version := p.detectTraceVersion(*metadata)
-	if version == "" {
+	parserVersion, err := p.translateParserVersionFromMetadata(*metadata)
+	if err != nil {
 		return nil, nil, errUnknownVersion
 	}
 
 	var txs []*types.Transaction
 	var addrs *types.AddressInfoMap
-	var err error
 
-	p.logger.Sugar().Debugf("node version found on trace files %s to parse transactions", version)
-	switch {
-	case p.parserV21.IsVersionCompatible(version):
+	p.logger.Sugar().Debugf("node version found on trace files %s to parse transactions", parserVersion)
+	switch parserVersion {
+	case parser.ParserV1:
 		txs, addrs, err = p.parserV21.ParseTransactions(traces, tipSet, ethLogs)
-	case p.parserV23.IsVersionCompatible(version):
+	case parser.ParserV2:
 		txs, addrs, err = p.parserV23.ParseTransactions(traces, tipSet, ethLogs)
 	default:
-		p.logger.Sugar().Errorf("[parser] implementation not supported: %s", version)
+		p.logger.Sugar().Errorf("[parser] implementation not supported: %s", parserVersion)
 		return nil, nil, errUnknownImpl
 	}
 
@@ -89,15 +87,16 @@ func (p *FilecoinParser) ParseTransactions(traces []byte, tipSet *types.Extended
 	return p.FilterDuplicated(txs), addrs, nil
 }
 
-func (p *FilecoinParser) detectTraceVersion(metadata types.BlockMetadata) string {
+func (p *FilecoinParser) translateParserVersionFromMetadata(metadata types.BlockMetadata) (string, error) {
 	switch {
-	case p.parserV21.IsVersionCompatible(metadata.NodeMajorMinorVersion), metadata.NodeMajorMinorVersion == "": // The empty string is for backwards compatibility with older traces versions
-		return V21.VersionNext
+	// The empty string is for backwards compatibility with older traces versions
+	case p.parserV21.IsVersionCompatible(metadata.NodeMajorMinorVersion), metadata.NodeMajorMinorVersion == "":
+		return parser.ParserV1, nil
 	case p.parserV23.IsVersionCompatible(metadata.NodeMajorMinorVersion):
-		return V23.VersionNext
+		return parser.ParserV2, nil
 	default:
 		p.logger.Sugar().Errorf("[parser] unsupported node version: %s", metadata.NodeFullVersion)
-		return ""
+		return "", fmt.Errorf("node version not supported %s", metadata.NodeFullVersion)
 	}
 }
 
@@ -116,16 +115,16 @@ func (p *FilecoinParser) FilterDuplicated(txs []*types.Transaction) []*types.Tra
 }
 
 func (p *FilecoinParser) GetBaseFee(traces []byte, metadata types.BlockMetadata) (uint64, error) {
-	version := p.detectTraceVersion(metadata)
-	if version == "" {
+	parserVersion, err := p.translateParserVersionFromMetadata(metadata)
+	if err != nil {
 		return 0, errUnknownVersion
 	}
 
-	p.logger.Sugar().Debugf("node version found on trace files %s to get base fee", version)
-	switch {
-	case p.parserV21.IsVersionCompatible(version):
+	p.logger.Sugar().Debugf("node version found on trace files %s to get base fee", parserVersion)
+	switch parserVersion {
+	case parser.ParserV1:
 		return p.parserV21.GetBaseFee(traces)
-	case p.parserV23.IsVersionCompatible(version):
+	case parser.ParserV2:
 		return p.parserV23.GetBaseFee(traces)
 	}
 
diff --git a/parser/V21/parserImpl_V21.go b/parser/V21/parserImpl_V21.go
index 105ca07f..6fb982d6 100644
--- a/parser/V21/parserImpl_V21.go
+++ b/parser/V21/parserImpl_V21.go
@@ -19,10 +19,7 @@ import (
 	"strings"
 )
 
-const (
-	VersionNext   = "v1.21"
-	VersionStable = "v1.22"
-)
+var NodeVersionsSupported = []string{"v1.21", "v1.22"}
 
 type Parser struct {
 	actorParser *actors.ActorParser
@@ -40,20 +37,18 @@ func NewParserV21(helper *helper.Helper, logger *zap.Logger) *Parser {
 	}
 }
 
-func (p *Parser) VersionStable() string {
-	return VersionStable
-}
-
-func (p *Parser) VersionNext() string {
-	return VersionNext
-}
-
 func (p *Parser) Version() string {
-	return VersionNext + "/" + VersionStable
+	return strings.Join(NodeVersionsSupported, "/")
 }
 
 func (p *Parser) IsVersionCompatible(ver string) bool {
-	return strings.EqualFold(VersionStable, ver) || strings.EqualFold(VersionNext, ver)
+	for _, i := range NodeVersionsSupported {
+		if strings.EqualFold(i, ver) {
+			return true
+		}
+	}
+
+	return false
 }
 
 func (p *Parser) ParseTransactions(traces []byte, tipset *types.ExtendedTipSet, ethLogs []types.EthLog) ([]*types.Transaction, *types.AddressInfoMap, error) {
diff --git a/parser/V23/parserImpl_V23.go b/parser/V23/parserImpl_V23.go
index 7e500d44..7a43b385 100644
--- a/parser/V23/parserImpl_V23.go
+++ b/parser/V23/parserImpl_V23.go
@@ -19,10 +19,7 @@ import (
 	"strings"
 )
 
-const (
-	VersionNext   = "v1.23"
-	VersionStable = "v1.24"
-)
+var NodeVersionsSupported = []string{"v1.23", "v1.24"}
 
 type Parser struct {
 	actorParser *actors.ActorParser
@@ -40,20 +37,18 @@ func NewParserV23(helper *helper.Helper, logger *zap.Logger) *Parser {
 	}
 }
 
-func (p *Parser) VersionStable() string {
-	return VersionStable
-}
-
-func (p *Parser) VersionNext() string {
-	return VersionNext
-}
-
 func (p *Parser) Version() string {
-	return VersionNext + "/" + VersionStable
+	return strings.Join(NodeVersionsSupported, "/")
 }
 
 func (p *Parser) IsVersionCompatible(ver string) bool {
-	return strings.EqualFold(VersionStable, ver) || strings.EqualFold(VersionNext, ver)
+	for _, i := range NodeVersionsSupported {
+		if strings.EqualFold(i, ver) {
+			return true
+		}
+	}
+
+	return false
 }
 
 func (p *Parser) ParseTransactions(traces []byte, tipset *types.ExtendedTipSet, ethLogs []types.EthLog) ([]*types.Transaction, *types.AddressInfoMap, error) {
diff --git a/parser/constants.go b/parser/constants.go
index 5cee0ef2..25674811 100644
--- a/parser/constants.go
+++ b/parser/constants.go
@@ -1,6 +1,9 @@
 package parser
 
 const (
+	ParserV1 = "v1"
+	ParserV2 = "v2"
+
 	// Fees
 
 	TotalFeeOp           = "Fee"