Closed sergio-mena closed 2 years ago
Sketch of items discussed in yesterday's meeting (Attendees: Sergio, Josef; Date: 2021-11-22):
VerifyVoteExtension
nil
) precommit value?
VerifyVoteExtension
's Application logic be part or PrepareProsoal
and ProcessProposal
of the next block?PreparePrososal
PreparePrososal
doesn't return Accept/Reject in Dev's pseudo-code, so they are not asking for it.
Sketch of items discussed in today's meeting (Attendees: Sergio, Josef; Date: 2021-11-29):
PrepareProposal
PrepareProposal
?These are my notes from today's meeting with Callum (goal: record decisions made):
PrepareProposal
: remove all params marked with (*) in the draft, as the App's modification options of the header are limited. Check the "two modes" comment below regarding what the App can modify.ProcessProposal
(in the round it is proposing), just as any other process? Or should we just assume there's no value added in doing that?PrepareProposal
(so, remove the corresponding params). The App can keep them and send them at FinalizeBlock
time. This makes sense for most Apps. Add this in "Usage".PrepareProposal
, only the TXsProcessProposal
: We agreed to not consider evidence collecting at this point, since the App can keep them and provide them at FinalizeBlock
time (just like events in PrepareProposal
). I'll remove it from the textPrepareProposal
or ProcessProposal
that forces the latter to reject proposals it shouldn't.
Notes from meeting with Callum yesterday (2021-12-01):
PrepareProposal
. It should explain what happens when validValue is not nil
.ExtendVote
(as of tendermint/spec#348 ) passed the whole Vote
message to the app. We went through the fields inside Vote
and only the ones currently present in the current spec are needed.VerifyVoteExtension
not forcing Tendermint to precommit nil
should be discussed in the ABCI++ meeting.height
as parameter in RequestPrepareProposal
, RequestProcessProposal
, and FinalizeBlock
is redundant, as it is also contained in the Header
structure.VerifyVoteExtensionRequest
should also have these parameters: block_id, and validator's address (sender of the extended vote).ExtendVote
is non-deterministic, just as PrepareProposal
. Should probably go into Properties section.FinalizeBlockRequest
only include the block's hash for efficiency (the block was part of a PrepareProposal
or ProcessProposal
)?
Notes from ABCI++ meeting yesterday (2021-12-01, attendees Michael, William, Marko, Josef, Callum, Sergio, John, [anyone I'm forgetting?]):
VerifyVoteExtension
be prevented from forcing Tendermint to precommit nil on the block the extended vote is referring to?
b) if the answer to a) is yes, can the logic of VerifyVoteExtension
always be implemented as part of (next block's) PrepareProposal
, thus rendering VerifyVoteExtension
unnecessary?ExtendVote
/VerifyVoteExtension
is not a reason to stop Consensus progress (validators getting stuck on very high round numbers, unable to decide).
VerifyVoteExtension
returns "reject", butVerifyVoteExtension
in the spec's text.ProcessProposal
time.ProcessProposal
, just as any other? Or can we assume that PrepareProposal
has done the job?
ProcessProposal
in the draft, there is not point in calling ProcessProposal
on a block already received in a previous round of the current height. Is this correct?PrepareProposal
and ProcessProposal
now stand in the critical execution pathI think another thing worth considering in this document is how blocksync
might use the new ABCI calls. So far we've just considered the conditions within the consensus state machine in which the ABCI call needs to happen but I assume we will use these calls also in blocksync
(but perhaps just ProcessPropsoal
and FinalizeBlock
).
I also talked to William and Daniel today about how they were handling proto changes in the spec and they said they were doing it in a long-lived branch. I think ABCI++ should follow the same pattern.
@cmwaters , regarding blocksync. I'm adding an AI in my notes to extend the document regarding this aspect.
@cmwaters , as for the branch. I agree with the proposed approach. Moreover, as I mentioned yesterday, I'd propose to go even further: the spec should have the same release branch structure as the Tendermint Go repo (and probably, as you said, the spec versions should match the code's versions for simplicity). E.g., the spec for existing ABCI should still live unmodified in the release (or throttle) branches corresponding to versions that still contain it (and which people may still use), and the new spec for ABCI++ should live in all release branches where ABCI++ is present; and ABCI++ branches should not contain ABCI spec. For the moment, I'll work on the protobufs in the ABCI++ branch in the Go repo (so won't touch those on the spec). Then, when rebasing or merging the ABCI++ branch, I'll "export" any protobuf changes back to the spec repo. Let me know if you have any thoughts on this.
For the moment, I'll work on the protobufs in the ABCI++ branch in the Go repo (so won't touch those on the spec). Then, when rebasing or merging the ABCI++ branch, I'll "export" any protobuf changes back to the spec repo.
This makes sense to me considering the ABCI++ branch already contains a set of proto changes
My notes on Monday's meeting with Josef & Dev (2021-12-06) and follow-up conversations with Josef and Callum:
VerifyVoteExtension
should nevertheless be accepted as a valid precommit message (part of the 2/3+ precommits used for deciding)PrepareProposal
are valid.ExtendVote
-VerfiyVoteExtension
pair, e.g., a deterministic bug, the block production will halt, even if the transactions in the proposed blocks are all valid.PrepareProposal
-ProcessProposal
pair. The implications of a problem in that code are not the same, but similar, as all discussions we've had boiled down to
Thanks for responding! I left a few comments, but a lot of my previous queries were addressed.
Thanks William. Pushing a small commit to address your latest comments
My notes on the Tendermint Core meeting on 2021-12-09, where core points of ABCI++ design were discussed:
ProcessProposal
using fork-join as described in v4.md
in the spec files (Item#1 in the slides)
join
just before Tendermint locks on a valuePrepareProposal
-ProcessProposal
, and ExtendVote
-VerifyVoteExtension
ProcessProposal
and VerifyVoteExtension
, unless they are ready to shoot themselves in the foot, regarding livenessMy current question on this spec: Are there additional specification questions that need to be answered before implementation can begin? I think that the design for most of this is reasonably clear, with a few minor exceptions like how/if verifyVoteExtension
will initially be implemented if the data is not signed over by Tendermint. Given that many of the major technical decisions seem settled, I'm wondering if anything stops us from starting to implement?
My current question on this spec: Are there additional specification questions that need to be answered before implementation can begin? I think that the design for most of this is reasonably clear, with a few minor exceptions like how/if
verifyVoteExtension
will initially be implemented if the data is not signed over by Tendermint. Given that many of the major technical decisions seem settled, I'm wondering if anything stops us from starting to implement?
There is already an implementation in a long-lived branch. It consists of 5 PRs (4 merged, 1 outstanding) AFAICT. I wanted to dive into those to identify the differences between that implementation and the current spec. But I haven't had the time so far :-( ... maybe this week
There is already an implementation in a long-lived branch. It consists of 5 PRs (4 merged, 1 outstanding) AFAICT. I wanted to dive into those to identify the differences between that implementation and the current spec. But I haven't had the time so far :-( ... maybe this week
That definitely makes sense, you've been making a lot of great progress on the spec so it makes sense that you have not dug into all parts of the code. I was more wondering if there were additional pieces of this spec that you felt were blocking us from beginning an implementation? I.e. major unanswered questions or risks that would require us to completely shift after we'd begun? As far as I can tell, we have a few clearly-defined new method calls that we are planning to add to tendermint. These will interact directly with the consensus engine in well specified places. Because of the specificity of the changes, I think we can begin implementing a lot of this without answers to each and every question.
There is already an implementation in a long-lived branch. It consists of 5 PRs (4 merged, 1 outstanding) AFAICT. I wanted to dive into those to identify the differences between that implementation and the current spec. But I haven't had the time so far :-( ... maybe this week
That definitely makes sense, you've been making a lot of great progress on the spec so it makes sense that you have not dug into all parts of the code. I was more wondering if there were additional pieces of this spec that you felt were blocking us from beginning an implementation? I.e. major unanswered questions or risks that would require us to completely shift after we'd begun? As far as I can tell, we have a few clearly-defined new method calls that we are planning to add to tendermint. These will interact directly with the consensus engine in well specified places. Because of the specificity of the changes, I think we can begin implementing a lot of this without answers to each and every question.
I agree with you: I don't see any major uncertainty that would force us to rethink the implementation. The remaining points to figure out in the spec are the TODOs that haven't been deleted yet. An additional question for which I am not sure there's a TODO is how to modify the vote data structures to not break the light client.
Just came up with a regex which should be equivalent to the grammar. However I find the grammar way more readable:
(I((OA*)*OA+N)?|N)((E(R*V?R*)|(R*(CR*V?)?R*))*D)*
I := InitChain
O := OfferSnapshot
A := ApplySnapshotChunk
N := Info
E := PrepareProposal
C := ProcessProposal
V := ExtendVote
R := VerifyVoteExtension
D := FinalizeBlock
Once the grammar is reviewed, I might consider turning this regex into a graph with the corresponding FSA.
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Rebasing the branch to tip of master to get the lint problems fixed...
As agreed during today's ABCI++ biweekly, I just reverted the commit that was addressing https://github.com/tendermint/tendermint/issues/1909 (i.e., adding boolean "need_new_block" in ResponseFinalizeBlock
)
On Monday morning, I will post the rest of the notes I took during the meeting.
Rebasing the branch again to tip of master...
My notes on the ABCI++ meeting last Friday (2022-01-14), where some points of ABCI++ design were discussed:
config.toml
, rather than on ConsensusParams for v0.36 (as an interim solution)
create_empty_blocks
/create_empty_blocks_interval
in config.toml
, there are some combinations that don't make sense, or shouldn't be supported.CheckTx
Here are a few comments regarding the spec. In general it looks nice; great job. I’d just add a bit more context and structure. Here is a list with more detailed comments:
Basic concepts and definitions
Application requirements
Tendermint’s expected behavior
Methods
This PR is addressing (some of) the comments in tendermint/spec#351 The first steps are: