Skip to content

feat: add GetNoteError endpoint in ntx builder#1792

Open
SantiagoPittella wants to merge 1 commit intonextfrom
santiagopittella-get-note-error-ntx-builder
Open

feat: add GetNoteError endpoint in ntx builder#1792
SantiagoPittella wants to merge 1 commit intonextfrom
santiagopittella-get-note-error-ntx-builder

Conversation

@SantiagoPittella
Copy link
Collaborator

closes #1758

  • Add a GetNoteError gRPC endpoint that returns the latest execution error for a network note, including attempt count and last attempt block number.
  • The NTX builder now runs its own internal gRPC server. The RPC component proxies GetNoteError requests to it.
  • Store last_error and last_attempt_block_num for each note in the NTX builder database.

Comment on lines +445 to +457
per_note
.into_iter()
.map(|f| {
let note_error = f.error.as_report();
tracing::info!(
note.id = %f.note.id(),
nullifier = %f.note.nullifier(),
err = %note_error,
"note failed: consumability check",
);
(f.note.nullifier(), note_error)
})
.collect()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: might be worth deduping this and its use above. Maybe not though

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The match statement is pretty long in general. If we could reduce it that would be good.

async fn mark_notes_failed(&self, nullifiers: &[Nullifier], block_num: BlockNumber) {
async fn mark_notes_failed(
&self,
failed_notes: &[(Nullifier, String)],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would maybe be nice to replace String with Box<dyn ErrorReport> but the problem is that one of the branches doesn't provide an Error: (note.nullifier(), error_msg.clone()).

//
// This is useful for debugging notes that are failing to be consumed by
// the network transaction builder.
rpc GetNoteError(note.NoteId) returns (GetNoteErrorResponse) {}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its starting to feel like we are implementing a manual gateway/reverse proxy. But maybe thats not a bad thing.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean the RPC proxy into the "internal" components? It is essentially a gateway yeah.. If this was non gRPC we could probably use some off the shelf implementation for this, though maybe not, because there are some non-trivial validation steps happening.


## gRPC Server

The NTB exposes an internal gRPC server for querying its state. The RPC component proxies public
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: NTX Builder, not NTB

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose network note failures

3 participants