forked from cerc-io/ipld-eth-server
(VDB-68) Verify log block hash matches header block hash
- Delete header on conflict to prompt data refresh (cascade deletes all data associated with that block) - Derive header hash from rpc payload rather than computing it from data (prevents hash mismatch between blockchain and cache)
This commit is contained in:
@@ -75,11 +75,10 @@ func (FlipKickConverter) ToModels(entities []interface{}) ([]interface{}, error)
|
||||
end := time.Unix(endValue, 0)
|
||||
urn := common.BytesToAddress(flipKickEntity.Urn[:common.AddressLength]).String()
|
||||
tab := shared.BigIntToString(flipKickEntity.Tab)
|
||||
rawLogJson, err := json.Marshal(flipKickEntity.Raw)
|
||||
rawLog, err := json.Marshal(flipKickEntity.Raw)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rawLogString := string(rawLogJson)
|
||||
|
||||
model := FlipKickModel{
|
||||
BidId: id,
|
||||
@@ -91,7 +90,7 @@ func (FlipKickConverter) ToModels(entities []interface{}) ([]interface{}, error)
|
||||
Tab: tab,
|
||||
TransactionIndex: flipKickEntity.TransactionIndex,
|
||||
LogIndex: flipKickEntity.LogIndex,
|
||||
Raw: rawLogString,
|
||||
Raw: rawLog,
|
||||
}
|
||||
models = append(models, model)
|
||||
}
|
||||
|
||||
@@ -53,16 +53,13 @@ var _ = Describe("FlipKick Converter", func() {
|
||||
var emptyString = ""
|
||||
var emptyTime = time.Unix(0, 0)
|
||||
var emptyEntity = flip_kick.FlipKickEntity{}
|
||||
var emptyRawLog string
|
||||
var emptyRawLog []byte
|
||||
var err error
|
||||
|
||||
BeforeEach(func() {
|
||||
emptyEntity.Id = big.NewInt(1)
|
||||
var emptyRawLogJson, err = json.Marshal(types.Log{})
|
||||
emptyRawLog, err = json.Marshal(types.Log{})
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
emptyRawLogJson, err = json.Marshal(types.Log{})
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
emptyRawLog = string(emptyRawLogJson)
|
||||
})
|
||||
|
||||
It("converts an Entity to a Model", func() {
|
||||
|
||||
@@ -26,5 +26,5 @@ type FlipKickModel struct {
|
||||
Tab string
|
||||
TransactionIndex uint `db:"tx_idx"`
|
||||
LogIndex uint `db:"log_idx"`
|
||||
Raw string `db:"raw_log"`
|
||||
Raw []byte `db:"raw_log"`
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ type FlipKickRepository struct {
|
||||
db *postgres.DB
|
||||
}
|
||||
|
||||
func (fkr FlipKickRepository) Create(headerId int64, models []interface{}) error {
|
||||
tx, err := fkr.db.Begin()
|
||||
func (repository FlipKickRepository) Create(headerID int64, models []interface{}) error {
|
||||
tx, err := repository.db.Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -37,17 +37,24 @@ func (fkr FlipKickRepository) Create(headerId int64, models []interface{}) error
|
||||
if !ok {
|
||||
return fmt.Errorf("model of type %T, not %T", model, FlipKickModel{})
|
||||
}
|
||||
_, err := tx.Exec(
|
||||
|
||||
err = shared.ValidateHeaderConsistency(headerID, flipKickModel.Raw, repository.db)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = tx.Exec(
|
||||
`INSERT into maker.flip_kick (header_id, bid_id, lot, bid, gal, "end", urn, tab, tx_idx, log_idx, raw_log)
|
||||
VALUES($1, $2::NUMERIC, $3::NUMERIC, $4::NUMERIC, $5, $6, $7, $8::NUMERIC, $9, $10, $11)`,
|
||||
headerId, flipKickModel.BidId, flipKickModel.Lot, flipKickModel.Bid, flipKickModel.Gal, flipKickModel.End, flipKickModel.Urn, flipKickModel.Tab, flipKickModel.TransactionIndex, flipKickModel.LogIndex, flipKickModel.Raw,
|
||||
headerID, flipKickModel.BidId, flipKickModel.Lot, flipKickModel.Bid, flipKickModel.Gal, flipKickModel.End, flipKickModel.Urn, flipKickModel.Tab, flipKickModel.TransactionIndex, flipKickModel.LogIndex, flipKickModel.Raw,
|
||||
)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
err = shared.MarkHeaderCheckedInTransaction(headerId, tx, constants.FlipKickChecked)
|
||||
err = shared.MarkHeaderCheckedInTransaction(headerID, tx, constants.FlipKickChecked)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
@@ -55,14 +62,14 @@ func (fkr FlipKickRepository) Create(headerId int64, models []interface{}) error
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (fkr FlipKickRepository) MarkHeaderChecked(headerId int64) error {
|
||||
return shared.MarkHeaderChecked(headerId, fkr.db, constants.FlipKickChecked)
|
||||
func (repository FlipKickRepository) MarkHeaderChecked(headerId int64) error {
|
||||
return shared.MarkHeaderChecked(headerId, repository.db, constants.FlipKickChecked)
|
||||
}
|
||||
|
||||
func (fkr FlipKickRepository) MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
|
||||
return shared.MissingHeaders(startingBlockNumber, endingBlockNumber, fkr.db, constants.FlipKickChecked)
|
||||
func (repository FlipKickRepository) MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
|
||||
return shared.MissingHeaders(startingBlockNumber, endingBlockNumber, repository.db, constants.FlipKickChecked)
|
||||
}
|
||||
|
||||
func (fkr *FlipKickRepository) SetDB(db *postgres.DB) {
|
||||
fkr.db = db
|
||||
func (repository *FlipKickRepository) SetDB(db *postgres.DB) {
|
||||
repository.db = db
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user