planetmint-go/x/dao/abci.go
Jürgen Eckel 4f5b1e5777
Multi validator setup in test cases (#333)
* Initializing rootDir of dao and machine keeper with the home path of the validator key material
* added Block height logging of context decorator
* removed SetRoot usage
* fixed data races of the attest machine go-routine
* reproduction of the issue
* fixed testing URL issue
* refactored the machine-nft functions/mock
* fixed keeper.param read-bug that increased the gas prices in an inconsistent way
* increased the validator number to 3 for all e2e tests
* added go routine to attest machine workflow

---------

Signed-off-by: Julian Strobl <jmastr@mailbox.org>
Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>
Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
Co-authored-by: Julian Strobl <jmastr@mailbox.org>
Co-authored-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
2024-03-05 11:37:01 +01:00

74 lines
2.5 KiB
Go

package dao
import (
"encoding/hex"
"github.com/planetmint/planetmint-go/util"
"github.com/planetmint/planetmint-go/x/dao/keeper"
abci "github.com/cometbft/cometbft/abci/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock, k keeper.Keeper) {
proposerAddress := req.Header.GetProposerAddress()
// Check if node is block proposer
// take the following actions only once, that's why we filter for the Block Proposer
if !util.IsValidatorBlockProposer(ctx, proposerAddress, k.RootDir) {
return
}
currentBlockHeight := req.Header.GetHeight()
hexProposerAddress := hex.EncodeToString(proposerAddress)
if isPopHeight(ctx, k, currentBlockHeight) {
// select PoP participants
challenger, challengee := k.SelectPopParticipants(ctx)
// Init PoP - independent from challenger and challengee
// The keeper will send the MQTT initializing message to challenger && challengee
util.SendInitPoP(ctx, hexProposerAddress, challenger, challengee, currentBlockHeight)
}
if isReissuanceHeight(ctx, k, currentBlockHeight) {
reissuance, err := k.CreateNextReissuanceObject(ctx, currentBlockHeight)
if err == nil {
util.SendInitReissuance(ctx, hexProposerAddress, reissuance.GetCommand(), currentBlockHeight,
reissuance.GetFirstIncludedPop(), reissuance.GetLastIncludedPop())
} else {
util.GetAppLogger().Error(ctx, "error while computing the RDDL reissuance ", err)
}
}
if isDistributionHeight(ctx, k, currentBlockHeight) {
distribution, err := k.GetDistributionForReissuedTokens(ctx, currentBlockHeight)
if err != nil {
util.GetAppLogger().Error(ctx, "error while computing the RDDL distribution ", err)
}
distribution.Proposer = hexProposerAddress
util.SendDistributionRequest(ctx, distribution)
}
}
func isPopHeight(ctx sdk.Context, k keeper.Keeper, height int64) bool {
return height%k.GetParams(ctx).PopEpochs == 0
}
func isReissuanceHeight(ctx sdk.Context, k keeper.Keeper, height int64) bool {
// e.g. 483840 % 17280 = 0
return height%k.GetParams(ctx).ReissuanceEpochs == 0
}
func isDistributionHeight(ctx sdk.Context, k keeper.Keeper, height int64) bool {
// e.g. 360 % 17280 = 360
if height <= k.GetParams(ctx).ReissuanceEpochs {
return false
}
// e.g. 484200 % 17280 = 360
return height%k.GetParams(ctx).ReissuanceEpochs == k.GetParams(ctx).DistributionOffset
}
func EndBlocker(_ sdk.Context, _ abci.RequestEndBlock, _ keeper.Keeper) {
// EndBlocker is currently not implemented and used by planetmint
}