From 4a478a546df07079926f22fc494be2701839750b Mon Sep 17 00:00:00 2001 From: Christopher Tarry Date: Fri, 4 Oct 2024 13:52:11 -0400 Subject: [PATCH 1/2] fix bug where confirmation/proof index were not set for all but the latest revision of a contract --- persist/sqlite/contracts.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persist/sqlite/contracts.go b/persist/sqlite/contracts.go index fbd2e3de..c9975753 100644 --- a/persist/sqlite/contracts.go +++ b/persist/sqlite/contracts.go @@ -86,7 +86,7 @@ func (s *Store) ContractRevisions(id types.FileContractID) (revisions []explorer err = s.transaction(func(tx *txn) error { query := `SELECT fc.id, fc.contract_id, fc.leaf_index, fc.resolved, fc.valid, rev.confirmation_index, rev.confirmation_transaction_id, rev.proof_index, rev.proof_transaction_id, fc.filesize, fc.file_merkle_root, fc.window_start, fc.window_end, fc.payout, fc.unlock_hash, fc.revision_number FROM file_contract_elements fc - LEFT JOIN last_contract_revision rev ON (rev.contract_element_id = fc.id) + JOIN last_contract_revision rev ON (rev.contract_id = fc.contract_id) WHERE fc.contract_id = ? ORDER BY fc.revision_number ASC` rows, err := tx.Query(query, encode(id)) From 1b3d82f11d68ae875dad9459ac4d9dd983563da4 Mon Sep 17 00:00:00 2001 From: Christopher Tarry Date: Wed, 9 Oct 2024 11:33:14 -0400 Subject: [PATCH 2/2] check confirmation index/tx id in tests --- persist/sqlite/consensus_test.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/persist/sqlite/consensus_test.go b/persist/sqlite/consensus_test.go index 4a0757ff..507a4c64 100644 --- a/persist/sqlite/consensus_test.go +++ b/persist/sqlite/consensus_test.go @@ -82,11 +82,13 @@ func CheckChainIndices(t *testing.T, db explorer.Store, txnID types.TransactionI } // CheckFCRevisions checks that the revision numbers for the file contracts match. -func CheckFCRevisions(t *testing.T, revisionNumbers []uint64, fcs []explorer.FileContract) { +func CheckFCRevisions(t *testing.T, confirmationIndex types.ChainIndex, confirmationTransactionID types.TransactionID, revisionNumbers []uint64, fcs []explorer.FileContract) { t.Helper() testutil.Equal(t, "number of revisions", len(revisionNumbers), len(fcs)) for i := range revisionNumbers { + testutil.Equal(t, "confirmation index", confirmationIndex, *fcs[i].ConfirmationIndex) + testutil.Equal(t, "confirmation transaction ID", confirmationTransactionID, *fcs[i].ConfirmationTransactionID) testutil.Equal(t, "revision number", revisionNumbers[i], fcs[i].FileContract.RevisionNumber) } } @@ -572,6 +574,9 @@ func TestFileContract(t *testing.T) { } syncDB(t, db, cm) + confirmationIndex := cm.Tip() + confirmationTransactionID := txn.ID() + { dbFCs, err := db.Contracts([]types.FileContractID{fcID}) if err != nil { @@ -588,7 +593,7 @@ func TestFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0}, dbFCs) } { @@ -668,7 +673,7 @@ func TestFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0, 1}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0, 1}, dbFCs) } { @@ -838,6 +843,9 @@ func TestEphemeralFileContract(t *testing.T) { } syncDB(t, db, cm) + confirmationIndex := cm.Tip() + confirmationTransactionID := txn.ID() + CheckMetrics(t, db, cm, explorer.Metrics{ TotalHosts: 0, ActiveContracts: 1, @@ -874,7 +882,7 @@ func TestEphemeralFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0, 1}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0, 1}, dbFCs) } { @@ -954,7 +962,7 @@ func TestEphemeralFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0, 1, 2, 3}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0, 1, 2, 3}, dbFCs) } { @@ -2212,6 +2220,9 @@ func TestMultipleReorgFileContract(t *testing.T) { } syncDB(t, db, cm) + confirmationIndex := cm.Tip() + confirmationTransactionID := txn.ID() + CheckMetrics(t, db, cm, explorer.Metrics{ TotalHosts: 0, ActiveContracts: 1, @@ -2235,7 +2246,7 @@ func TestMultipleReorgFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0}, dbFCs) } { @@ -2315,7 +2326,7 @@ func TestMultipleReorgFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0, 1}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0, 1}, dbFCs) } { @@ -2371,7 +2382,7 @@ func TestMultipleReorgFileContract(t *testing.T) { if err != nil { t.Fatal(err) } - CheckFCRevisions(t, []uint64{0}, dbFCs) + CheckFCRevisions(t, confirmationIndex, confirmationTransactionID, []uint64{0}, dbFCs) } // storage utilization should be back to testutil.ContractFilesize instead of