Skip to content

Commit

Permalink
Add adapter for starknet.TransactionStatus in rpc (#2072)
Browse files Browse the repository at this point in the history
  • Loading branch information
kirugan authored Aug 20, 2024
1 parent 6f1d6d9 commit 4e99b58
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 22 deletions.
50 changes: 31 additions & 19 deletions rpc/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -613,28 +613,13 @@ func (h *Handler) TransactionStatus(ctx context.Context, hash felt.Felt) (*Trans
return nil, jsonrpc.Err(jsonrpc.InternalError, err.Error())
}

var status TransactionStatus
switch txStatus.FinalityStatus {
case starknet.AcceptedOnL1:
status.Finality = TxnStatusAcceptedOnL1
case starknet.AcceptedOnL2:
status.Finality = TxnStatusAcceptedOnL2
case starknet.Received:
status.Finality = TxnStatusReceived
default:
status, err := adaptTransactionStatus(txStatus)
if err != nil {
h.log.Errorw("Failed to adapt transaction status", "err", err)
return nil, ErrTxnHashNotFound
}

switch txStatus.ExecutionStatus {
case starknet.Succeeded:
status.Execution = TxnSuccess
case starknet.Reverted:
status.Execution = TxnFailure
case starknet.Rejected:
status.Finality = TxnStatusRejected
default: // Omit the field on error. It's optional in the spec.
}
return &status, nil
return status, nil
}
return nil, txErr
}
Expand Down Expand Up @@ -787,6 +772,33 @@ func AdaptReceipt(receipt *core.TransactionReceipt, txn core.Transaction,
}
}

func adaptTransactionStatus(txStatus *starknet.TransactionStatus) (*TransactionStatus, error) {
var status TransactionStatus

switch finalityStatus := txStatus.FinalityStatus; finalityStatus {
case starknet.AcceptedOnL1:
status.Finality = TxnStatusAcceptedOnL1
case starknet.AcceptedOnL2:
status.Finality = TxnStatusAcceptedOnL2
case starknet.Received:
status.Finality = TxnStatusReceived
default:
return nil, fmt.Errorf("unknown finality status: %v", finalityStatus)
}

switch txStatus.ExecutionStatus {
case starknet.Succeeded:
status.Execution = TxnSuccess
case starknet.Reverted:
status.Execution = TxnFailure
case starknet.Rejected:
status.Finality = TxnStatusRejected
default: // Omit the field on error. It's optional in the spec.
}

return &status, nil
}

// https://github.com/starkware-libs/starknet-specs/blob/a789ccc3432c57777beceaa53a34a7ae2f25fda0/api/starknet_api_openrpc.json#L1605
func adaptInvokeTransaction(t *core.InvokeTransaction) *Transaction {
tx := &Transaction{
Expand Down
7 changes: 4 additions & 3 deletions rpc/transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1355,6 +1355,7 @@ func TestTransactionStatus(t *testing.T) {
}

ctx := context.Background()
log := utils.NewNopZapLogger()

for _, test := range tests {
t.Run(test.network.String(), func(t *testing.T) {
Expand Down Expand Up @@ -1395,7 +1396,7 @@ func TestTransactionStatus(t *testing.T) {
BlockNumber: block.Number + 1,
}, nil)

handler := rpc.New(mockReader, nil, nil, "", nil)
handler := rpc.New(mockReader, nil, nil, "", log)

want := &rpc.TransactionStatus{
Finality: rpc.TxnStatusAcceptedOnL1,
Expand Down Expand Up @@ -1425,7 +1426,7 @@ func TestTransactionStatus(t *testing.T) {
t.Run(description, func(t *testing.T) {
mockReader := mocks.NewMockReader(mockCtrl)
mockReader.EXPECT().TransactionByHash(notFoundTest.hash).Return(nil, db.ErrKeyNotFound).Times(2)
handler := rpc.New(mockReader, nil, nil, "", nil)
handler := rpc.New(mockReader, nil, nil, "", log)
_, err := handler.TransactionStatus(ctx, *notFoundTest.hash)
require.Equal(t, rpc.ErrTxnHashNotFound.Code, err.Code)

Expand All @@ -1442,7 +1443,7 @@ func TestTransactionStatus(t *testing.T) {
t.Run("transaction not found in db and feeder ", func(t *testing.T) {
mockReader := mocks.NewMockReader(mockCtrl)
mockReader.EXPECT().TransactionByHash(test.notFoundTxHash).Return(nil, db.ErrKeyNotFound)
handler := rpc.New(mockReader, nil, nil, "", nil).WithFeeder(client)
handler := rpc.New(mockReader, nil, nil, "", log).WithFeeder(client)

_, err := handler.TransactionStatus(ctx, *test.notFoundTxHash)
require.NotNil(t, err)
Expand Down

0 comments on commit 4e99b58

Please sign in to comment.