-
Notifications
You must be signed in to change notification settings - Fork 199
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Link inner tx to results #6527
Link inner tx to results #6527
Changes from 4 commits
a4b532d
11422d8
dc57ade
d0c2435
d1235cc
96d44b7
a2de898
666fd47
f6e69dc
a9a0019
3ff37f2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -55,7 +55,13 @@ func NewAPITransactionProcessor(args *ArgAPITransactionProcessor) (*apiTransacti | |
return nil, err | ||
} | ||
|
||
txUnmarshalerAndPreparer := newTransactionUnmarshaller(args.Marshalizer, args.AddressPubKeyConverter, args.DataFieldParser, args.ShardCoordinator) | ||
txUnmarshalerAndPreparer := newTransactionUnmarshaller( | ||
args.Marshalizer, | ||
args.AddressPubKeyConverter, | ||
args.DataFieldParser, | ||
args.ShardCoordinator, | ||
args.Hasher, | ||
) | ||
txResultsProc := newAPITransactionResultProcessor( | ||
args.AddressPubKeyConverter, | ||
args.HistoryRepository, | ||
|
@@ -542,6 +548,7 @@ func (atp *apiTransactionProcessor) lookupHistoricalTransaction(hash []byte, wit | |
encodedParentTxHash := hex.EncodeToString(parentTxHash) | ||
tx.OriginalTransactionHash = encodedParentTxHash | ||
tx.PreviousTransactionHash = encodedParentTxHash | ||
tx.Type = string(transaction.TxTypeInner) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should announce this, or should be extra careful on downstream applications. Can be considered a somehow-breaking change. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We need to double check from downstream applications. |
||
} | ||
|
||
putMiniblockFieldsInTransaction(tx, miniblockMetadata) | ||
|
@@ -575,6 +582,7 @@ func (atp *apiTransactionProcessor) lookupHistoricalTransaction(hash []byte, wit | |
func putMiniblockFieldsInTransaction(tx *transaction.ApiTransactionResult, miniblockMetadata *dblookupext.MiniblockMetadata) *transaction.ApiTransactionResult { | ||
tx.Epoch = miniblockMetadata.Epoch | ||
tx.Round = miniblockMetadata.Round | ||
putRoundAndEpochOnInnerTxs(tx) | ||
|
||
tx.MiniBlockType = block.Type(miniblockMetadata.Type).String() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. no need for the next fields to be set in the inner txs? |
||
tx.MiniBlockHash = hex.EncodeToString(miniblockMetadata.MiniblockHash) | ||
|
@@ -591,6 +599,17 @@ func putMiniblockFieldsInTransaction(tx *transaction.ApiTransactionResult, minib | |
return tx | ||
} | ||
|
||
func putRoundAndEpochOnInnerTxs(tx *transaction.ApiTransactionResult) { | ||
if len(tx.InnerTransactions) == 0 { | ||
return | ||
} | ||
|
||
for _, innerTx := range tx.InnerTransactions { | ||
innerTx.Epoch = tx.Epoch | ||
innerTx.Round = tx.Round | ||
} | ||
} | ||
|
||
func (atp *apiTransactionProcessor) getTransactionFromStorage(hash []byte) (*transaction.ApiTransactionResult, error) { | ||
txBytes, txType, found := atp.getTxBytesFromStorage(hash) | ||
if !found { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,6 +9,7 @@ import ( | |
rewardTxData "github.com/multiversx/mx-chain-core-go/data/rewardTx" | ||
"github.com/multiversx/mx-chain-core-go/data/smartContractResult" | ||
"github.com/multiversx/mx-chain-core-go/data/transaction" | ||
"github.com/multiversx/mx-chain-core-go/hashing" | ||
"github.com/multiversx/mx-chain-core-go/marshal" | ||
"github.com/multiversx/mx-chain-go/sharding" | ||
) | ||
|
@@ -19,6 +20,7 @@ type txUnmarshaller struct { | |
shardCoordinator sharding.Coordinator | ||
addressPubKeyConverter core.PubkeyConverter | ||
marshalizer marshal.Marshalizer | ||
hasher hashing.Hasher | ||
dataFieldParser DataFieldParser | ||
} | ||
|
||
|
@@ -27,12 +29,14 @@ func newTransactionUnmarshaller( | |
addressPubKeyConverter core.PubkeyConverter, | ||
dataFieldParser DataFieldParser, | ||
shardCoordinator sharding.Coordinator, | ||
hasher hashing.Hasher, | ||
) *txUnmarshaller { | ||
return &txUnmarshaller{ | ||
marshalizer: marshalizer, | ||
addressPubKeyConverter: addressPubKeyConverter, | ||
dataFieldParser: dataFieldParser, | ||
shardCoordinator: shardCoordinator, | ||
hasher: hasher, | ||
} | ||
} | ||
|
||
|
@@ -160,20 +164,32 @@ func (tu *txUnmarshaller) prepareNormalTx(tx *transaction.Transaction) *transact | |
return apiTx | ||
} | ||
|
||
func (tu *txUnmarshaller) prepareInnerTxs(tx *transaction.Transaction) []*transaction.FrontendTransaction { | ||
func (tu *txUnmarshaller) prepareInnerTxs(tx *transaction.Transaction) []*transaction.ApiTransactionResult { | ||
if len(tx.InnerTransactions) == 0 { | ||
return nil | ||
} | ||
|
||
innerTxs := make([]*transaction.FrontendTransaction, 0, len(tx.InnerTransactions)) | ||
innerTxs := make([]*transaction.ApiTransactionResult, 0, len(tx.InnerTransactions)) | ||
for _, innerTx := range tx.InnerTransactions { | ||
frontEndTx := &transaction.FrontendTransaction{ | ||
innerTxHash, err := core.CalculateHash(tu.marshalizer, tu.hasher, innerTx) | ||
if err != nil { | ||
innerTxHash = make([]byte, 0) | ||
} | ||
|
||
tu.shardCoordinator.ComputeId(innerTx.RcvAddr) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this can be removed |
||
|
||
frontEndTx := &transaction.ApiTransactionResult{ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. rename the variable ? |
||
Tx: innerTx, | ||
Type: string(transaction.TxTypeInner), | ||
Hash: hex.EncodeToString(innerTxHash), | ||
Nonce: innerTx.Nonce, | ||
Value: innerTx.Value.String(), | ||
Receiver: tu.addressPubKeyConverter.SilentEncode(innerTx.RcvAddr, log), | ||
Sender: tu.addressPubKeyConverter.SilentEncode(innerTx.SndAddr, log), | ||
SenderUsername: innerTx.SndUserName, | ||
ReceiverUsername: innerTx.RcvUserName, | ||
SourceShard: tu.shardCoordinator.ComputeId(innerTx.SndAddr), | ||
DestinationShard: tu.shardCoordinator.ComputeId(innerTx.RcvAddr), | ||
GasPrice: innerTx.GasPrice, | ||
GasLimit: innerTx.GasLimit, | ||
Data: innerTx.Data, | ||
|
@@ -189,7 +205,7 @@ func (tu *txUnmarshaller) prepareInnerTxs(tx *transaction.Transaction) []*transa | |
} | ||
|
||
if len(innerTx.RelayerAddr) > 0 { | ||
frontEndTx.Relayer = tu.addressPubKeyConverter.SilentEncode(innerTx.RelayerAddr, log) | ||
frontEndTx.RelayerAddress = tu.addressPubKeyConverter.SilentEncode(innerTx.RelayerAddr, log) | ||
} | ||
|
||
innerTxs = append(innerTxs, frontEndTx) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍