@@ -33,7 +33,6 @@ type PriceOracleVoteExtHandler struct {
3333}
3434
3535var LOCAL_ADDRESS = ""
36- var CURRENT_PROPOSER = ""
3736
3837func NewPriceOracleVoteExtHandler (logger log.Logger , valStore baseapp.ValidatorStore , oracleKeeper keeper.Keeper , config * types.OracleConfig ) PriceOracleVoteExtHandler {
3938 client , err := rpcclient .New (& rpcclient.ConnConfig {
@@ -48,7 +47,7 @@ func NewPriceOracleVoteExtHandler(logger log.Logger, valStore baseapp.ValidatorS
4847 }
4948
5049 return PriceOracleVoteExtHandler {
51- logger : logger ,
50+ logger : logger . With ( "module" , types . ModuleName ) ,
5251 currentBlock : 0 ,
5352 valStore : valStore ,
5453 Keeper : oracleKeeper ,
@@ -65,27 +64,23 @@ func (h *PriceOracleVoteExtHandler) ExtendVoteHandler() sdk.ExtendVoteHandler {
6564 }
6665
6766 proposer := hex .EncodeToString (req .ProposerAddress )
68- h .logger .Warn ("Prepare vote extension" , "proposer" , CURRENT_PROPOSER , "my" , LOCAL_ADDRESS )
69- // here we'd have a helper function that gets all the prices and does a weighted average
7067
71- prices := make ( map [string ]string )
68+ var prices map [string ]string
7269 blocks := newBlock (0 , nil )
73- if proposer != LOCAL_ADDRESS {
74- // prices = h.getAllVolumeWeightedPrices()
75- for {
76- prices = h .getAllVolumeWeightedPrices ()
77- if len (prices ) > 0 {
78- break
79- }
80- time .Sleep (time .Second * 2 )
81- }
82- height , headers , err := h .getBitcoinHeaders (ctx , req .Height )
83- if err != nil {
84- h .logger .Error ("failed to fetch bitcoin headers" , "error" , err )
70+ // prices = h.getAllVolumeWeightedPrices()
71+ for {
72+ prices = h .getAllVolumeWeightedPrices ()
73+ if len (prices ) > 0 {
74+ break
8575 }
86- blocks = newBlock (height , headers )
87- h .lastPriceSyncTS = req .Time .UnixMilli ()
76+ time .Sleep (time .Second * 2 )
8877 }
78+ height , headers , err := h .getBitcoinHeaders (ctx , req .Height )
79+ if err != nil {
80+ h .logger .Error ("failed to fetch bitcoin headers" , "error" , err )
81+ }
82+ blocks = newBlock (height , headers )
83+ h .lastPriceSyncTS = req .Time .UnixMilli ()
8984
9085 voteExt := types.OracleVoteExtension {
9186 Height : req .Height ,
@@ -127,11 +122,11 @@ func (h *PriceOracleVoteExtHandler) VerifyVoteExtensionHandler() sdk.VerifyVoteE
127122 }
128123
129124 if voteExt .Proposer != validator && (len (voteExt .Prices ) == 0 || voteExt .Blocks .Best == 0 ) {
130- h .logger .Error ("VerifyVoteExtensionHandler " , "height" , voteExt .Blocks .Best , "validator" , validator , "Price" , len (voteExt .Prices ), "proposer" , voteExt .Proposer )
125+ h .logger .Error ("verification failed " , "height" , voteExt .Blocks .Best , "validator" , validator , "Price" , len (voteExt .Prices ), "proposer" , voteExt .Proposer )
131126 return & abci.ResponseVerifyVoteExtension {Status : abci .ResponseVerifyVoteExtension_REJECT }, nil
132127 }
133128
134- h .logger .Info ( "VerifyVoteExtensionHandler " , "height" , voteExt .Blocks .Best , "validator" , validator , "Price" , len (voteExt .Prices ), "proposer" , voteExt .Proposer )
129+ h .logger .Debug ( "verification succeeded " , "height" , voteExt .Blocks .Best , "validator" , validator , "Price" , len (voteExt .Prices ), "proposer" , voteExt .Proposer )
135130
136131 for _ , blk := range voteExt .Blocks .Headers {
137132 if err = blk .Validate (); err != nil {
@@ -246,7 +241,7 @@ func (h *PriceOracleVoteExtHandler) PreBlocker(ctx sdk.Context, req *abci.Reques
246241 return nil , err
247242 }
248243
249- prices , headers , err := h .extractPricesAndBlockHeaders (ctx , injectedVoteExtTx )
244+ count , prices , headers , err := h .extractPricesAndBlockHeaders (ctx , injectedVoteExtTx )
250245 if err != nil {
251246 return nil , err
252247 }
@@ -262,7 +257,7 @@ func (h *PriceOracleVoteExtHandler) PreBlocker(ctx sdk.Context, req *abci.Reques
262257 return nil , err
263258 }
264259
265- h .logger .Warn ("Oracle Final States" , "price" , prices , "headers" , headers , "votes" , len ( injectedVoteExtTx . Votes ) )
260+ h .logger .Info ("Oracle Final States" , "price" , prices , "headers" , headers , "votes" , count )
266261
267262 return res , nil
268263}
@@ -363,7 +358,7 @@ func (h *PriceOracleVoteExtHandler) getAllVolumeWeightedPrices() map[string]stri
363358 }
364359 }
365360
366- h .logger .Debug ("AvgPrice " , "prices" , avgPrices )
361+ h .logger .Debug ("average prices from exchanges " , "prices" , avgPrices )
367362
368363 textPrices := make (map [string ]string )
369364 for symbol , price := range avgPrices {
@@ -373,7 +368,7 @@ func (h *PriceOracleVoteExtHandler) getAllVolumeWeightedPrices() map[string]stri
373368 return textPrices
374369}
375370
376- func (h * PriceOracleVoteExtHandler ) extractPricesAndBlockHeaders (_ sdk.Context , commit abci.ExtendedCommitInfo ) (map [string ]math.LegacyDec , []* types.BlockHeader , error ) {
371+ func (h * PriceOracleVoteExtHandler ) extractPricesAndBlockHeaders (_ sdk.Context , commit abci.ExtendedCommitInfo ) (int , map [string ]math.LegacyDec , []* types.BlockHeader , error ) {
377372 var totalStake int64
378373
379374 stakeWeightedPrices := make (map [string ]math.LegacyDec , len (types .PRICE_CACHE )) // base -> average stake-weighted price
@@ -382,6 +377,7 @@ func (h *PriceOracleVoteExtHandler) extractPricesAndBlockHeaders(_ sdk.Context,
382377 blockHeaders := make (map [string ][]* types.BlockHeader )
383378 headerStakes := make (map [string ]int64 )
384379
380+ count := 0
385381 for _ , v := range commit .Votes {
386382 if v .BlockIdFlag != cmtproto .BlockIDFlagCommit {
387383 continue
@@ -390,10 +386,10 @@ func (h *PriceOracleVoteExtHandler) extractPricesAndBlockHeaders(_ sdk.Context,
390386 var voteExt types.OracleVoteExtension
391387 if err := voteExt .Unmarshal (v .VoteExtension ); err != nil {
392388 h .logger .Error ("failed to decode vote extension" , "err" , err , "validator" , fmt .Sprintf ("%x" , v .Validator .Address ))
393- return nil , nil , err
389+ return count , nil , nil , err
394390 }
395391
396- h .logger .Warn ( "extension " , "validator" , hex .EncodeToString (v .Validator .Address ), "extension" , voteExt )
392+ h .logger .Debug ( "received " , "validator" , hex .EncodeToString (v .Validator .Address ), "extension" , voteExt )
397393
398394 totalStake += v .Validator .Power
399395
@@ -431,16 +427,17 @@ func (h *PriceOracleVoteExtHandler) extractPricesAndBlockHeaders(_ sdk.Context,
431427 } else {
432428 headerStakes [key ] = v .Validator .Power
433429 }
430+ count ++
434431 }
435432
436433 if totalStake == 0 {
437- return nil , nil , types .ErrInsufficientVotingPower
434+ return count , nil , nil , types .ErrInsufficientVotingPower
438435 }
439436
440437 // finalize average by dividing by total stake, i.e. total weights
441438 for base , price := range stakeWeightedPrices {
442439 if price .GT (math .LegacyZeroDec ()) {
443- if vp , ok := stakeWeightedVotingPower [base ]; ok && vp .RoundInt64 ()* 2 + 1 > totalStake {
440+ if vp , ok := stakeWeightedVotingPower [base ]; ok && vp .RoundInt64 ()* 2 >= totalStake {
444441 finalPrice [base ] = price .Quo (vp )
445442 }
446443 } else {
@@ -450,12 +447,13 @@ func (h *PriceOracleVoteExtHandler) extractPricesAndBlockHeaders(_ sdk.Context,
450447
451448 headers := []* types.BlockHeader {}
452449 for key , power := range headerStakes {
453- if selected , ok := blockHeaders [key ]; ok && power * 2 + 1 > totalStake {
450+ if selected , ok := blockHeaders [key ]; ok && power * 2 >= totalStake {
454451 headers = append (headers , selected ... )
455452 break
456453 }
457454 }
458- return finalPrice , headers , nil
455+
456+ return count , finalPrice , headers , nil
459457}
460458
461459func voteExtensionEnabled (ctx sdk.Context , height int64 ) bool {
0 commit comments