feat: max quorum num

This commit is contained in:
MiniFrenchBread 2024-05-16 23:39:07 +08:00 committed by 0g-wh
parent e3e47e5e2f
commit 1e0194262d
4 changed files with 51 additions and 44 deletions

View File

@ -11,7 +11,7 @@ option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types";
message Params { message Params {
string tokens_per_vote = 1; string tokens_per_vote = 1;
uint64 max_votes = 2; uint64 max_quorums = 2;
uint64 epoch_blocks = 3; uint64 epoch_blocks = 3;
uint64 encoded_slices = 4; uint64 encoded_slices = 4;
} }

View File

@ -2,7 +2,6 @@ package keeper
import ( import (
"bytes" "bytes"
"math/big"
"sort" "sort"
"github.com/0glabs/0g-chain/x/dasigners/v1/types" "github.com/0glabs/0g-chain/x/dasigners/v1/types"
@ -56,9 +55,6 @@ func (k Keeper) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {
continue continue
} }
num := validator.Tokens.Quo(sdk.NewInt(1_000_000_000_000_000_000)).Quo(tokensPerVote).Abs().BigInt() num := validator.Tokens.Quo(sdk.NewInt(1_000_000_000_000_000_000)).Quo(tokensPerVote).Abs().BigInt()
if num.Cmp(big.NewInt(int64(params.MaxVotes))) > 0 {
num = big.NewInt(int64(params.MaxVotes))
}
content := registration.content content := registration.content
ballotNum := num.Int64() ballotNum := num.Int64()
for j := 0; j < int(ballotNum); j += 1 { for j := 0; j < int(ballotNum); j += 1 {
@ -78,6 +74,9 @@ func (k Keeper) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {
} }
if len(ballots) >= int(params.EncodedSlices) { if len(ballots) >= int(params.EncodedSlices) {
for i := 0; i+int(params.EncodedSlices) < len(ballots); i += 1 { for i := 0; i+int(params.EncodedSlices) < len(ballots); i += 1 {
if int(params.MaxQuorums) < len(quorums.Quorums) {
break
}
quorum := types.Quorum{ quorum := types.Quorum{
Signers: make([]string, params.EncodedSlices), Signers: make([]string, params.EncodedSlices),
} }
@ -86,6 +85,15 @@ func (k Keeper) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {
} }
quorums.Quorums = append(quorums.Quorums, &quorum) quorums.Quorums = append(quorums.Quorums, &quorum)
} }
if len(ballots)%int(params.EncodedSlices) != 0 && int(params.MaxQuorums) < len(quorums.Quorums) {
quorum := types.Quorum{
Signers: make([]string, 0),
}
for j := len(ballots) - int(params.EncodedSlices); j < len(ballots); j += 1 {
quorum.Signers = append(quorum.Signers, ballots[j].account)
}
quorums.Quorums = append(quorums.Quorums, &quorum)
}
} else if len(ballots) > 0 { } else if len(ballots) > 0 {
quorum := types.Quorum{ quorum := types.Quorum{
Signers: make([]string, params.EncodedSlices), Signers: make([]string, params.EncodedSlices),

View File

@ -16,7 +16,7 @@ func NewGenesisState(params Params, epoch uint64, signers []*Signer, quorumsByEp
func DefaultGenesisState() *GenesisState { func DefaultGenesisState() *GenesisState {
return NewGenesisState(Params{ return NewGenesisState(Params{
TokensPerVote: "100", TokensPerVote: "100",
MaxVotes: 100, MaxQuorums: 100,
EpochBlocks: 1000, EpochBlocks: 1000,
EncodedSlices: 3072, EncodedSlices: 3072,
}, 0, make([]*Signer, 0), []*Quorums{{ }, 0, make([]*Signer, 0), []*Quorums{{

View File

@ -28,7 +28,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
type Params struct { type Params struct {
TokensPerVote string `protobuf:"bytes,1,opt,name=tokens_per_vote,json=tokensPerVote,proto3" json:"tokens_per_vote,omitempty"` TokensPerVote string `protobuf:"bytes,1,opt,name=tokens_per_vote,json=tokensPerVote,proto3" json:"tokens_per_vote,omitempty"`
MaxVotes uint64 `protobuf:"varint,2,opt,name=max_votes,json=maxVotes,proto3" json:"max_votes,omitempty"` MaxQuorums uint64 `protobuf:"varint,2,opt,name=max_quorums,json=maxQuorums,proto3" json:"max_quorums,omitempty"`
EpochBlocks uint64 `protobuf:"varint,3,opt,name=epoch_blocks,json=epochBlocks,proto3" json:"epoch_blocks,omitempty"` EpochBlocks uint64 `protobuf:"varint,3,opt,name=epoch_blocks,json=epochBlocks,proto3" json:"epoch_blocks,omitempty"`
EncodedSlices uint64 `protobuf:"varint,4,opt,name=encoded_slices,json=encodedSlices,proto3" json:"encoded_slices,omitempty"` EncodedSlices uint64 `protobuf:"varint,4,opt,name=encoded_slices,json=encodedSlices,proto3" json:"encoded_slices,omitempty"`
} }
@ -73,9 +73,9 @@ func (m *Params) GetTokensPerVote() string {
return "" return ""
} }
func (m *Params) GetMaxVotes() uint64 { func (m *Params) GetMaxQuorums() uint64 {
if m != nil { if m != nil {
return m.MaxVotes return m.MaxQuorums
} }
return 0 return 0
} }
@ -175,34 +175,33 @@ func init() {
func init() { proto.RegisterFile("zgc/dasigners/v1/genesis.proto", fileDescriptor_896efa766aaca3be) } func init() { proto.RegisterFile("zgc/dasigners/v1/genesis.proto", fileDescriptor_896efa766aaca3be) }
var fileDescriptor_896efa766aaca3be = []byte{ var fileDescriptor_896efa766aaca3be = []byte{
// 417 bytes of a gzipped FileDescriptorProto // 416 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0xcf, 0x6e, 0xd3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0xc1, 0x6e, 0x13, 0x31,
0x10, 0xc6, 0x63, 0x12, 0x05, 0xba, 0xfd, 0x43, 0x65, 0x71, 0x70, 0x8a, 0xe4, 0x86, 0x4a, 0xa0, 0x10, 0x86, 0xb3, 0x24, 0x0a, 0xc2, 0x69, 0x4b, 0xb5, 0xe2, 0xb0, 0xe9, 0x61, 0x13, 0x2a, 0x81,
0x5e, 0xf0, 0xb6, 0x45, 0xe2, 0x01, 0x82, 0x10, 0xe2, 0x82, 0x8a, 0x23, 0x71, 0xe0, 0x62, 0xad, 0x7a, 0x61, 0xdd, 0x16, 0x89, 0x07, 0x08, 0x42, 0x88, 0x0b, 0x2a, 0x1b, 0x89, 0x03, 0x17, 0xcb,
0x37, 0xc3, 0xc6, 0x6a, 0xd6, 0x63, 0x3c, 0xeb, 0x28, 0xe9, 0x53, 0x70, 0xe3, 0x95, 0x7a, 0xec, 0xeb, 0x0c, 0xce, 0xaa, 0xf1, 0xce, 0xb2, 0xf6, 0x46, 0x49, 0x9f, 0x82, 0x3b, 0x2f, 0xd4, 0x63,
0x91, 0x13, 0x42, 0xce, 0x8b, 0xa0, 0x8e, 0x17, 0x2a, 0x5a, 0x6e, 0x3b, 0xdf, 0xf7, 0x9b, 0xd1, 0x8f, 0x9c, 0x10, 0xda, 0xbc, 0x08, 0x62, 0x6c, 0xa8, 0x68, 0xb9, 0xd9, 0xdf, 0xff, 0xcf, 0xe8,
0xb7, 0x33, 0x22, 0xbe, 0x34, 0x5a, 0xce, 0x14, 0x15, 0xa6, 0x84, 0x9a, 0xe4, 0xf2, 0x54, 0x1a, 0xf7, 0x6f, 0x96, 0x5e, 0x69, 0xc5, 0x17, 0xd2, 0x96, 0xba, 0x82, 0xc6, 0xf2, 0xf5, 0x19, 0xd7,
0x28, 0x81, 0x0a, 0x4a, 0xaa, 0x1a, 0x1d, 0x86, 0xfb, 0x97, 0x46, 0x27, 0x7f, 0xfd, 0x64, 0x79, 0x50, 0x81, 0x2d, 0x6d, 0x56, 0x37, 0xe8, 0x30, 0x3e, 0xbc, 0xd2, 0x2a, 0xfb, 0xab, 0x67, 0xeb,
0x7a, 0x30, 0xd2, 0x48, 0x16, 0x29, 0x63, 0x5f, 0x76, 0x45, 0x07, 0x1f, 0x3c, 0x31, 0x68, 0xb0, 0xb3, 0xa3, 0xb1, 0x42, 0x6b, 0xd0, 0x0a, 0xd2, 0xb9, 0xbf, 0x78, 0xf3, 0xd1, 0x13, 0x8d, 0x1a,
0xd3, 0x6f, 0x5e, 0x5e, 0x1d, 0x19, 0x44, 0xb3, 0x00, 0xc9, 0x55, 0xde, 0x7c, 0x91, 0xaa, 0x5c, 0x3d, 0xff, 0x7d, 0x0a, 0x74, 0xac, 0x11, 0xf5, 0x0a, 0x38, 0xdd, 0x8a, 0xf6, 0x33, 0x97, 0xd5,
0x7b, 0xeb, 0xf0, 0xae, 0xe5, 0x0a, 0x0b, 0xe4, 0x94, 0xad, 0x3c, 0x30, 0xbe, 0x17, 0xef, 0x36, 0x36, 0x48, 0x93, 0xbb, 0x92, 0x2b, 0x0d, 0x58, 0x27, 0x4d, 0x1d, 0x0c, 0xd3, 0x7b, 0xf1, 0x6e,
0x0b, 0x13, 0x47, 0xdf, 0x03, 0x31, 0x3c, 0x57, 0xb5, 0xb2, 0x14, 0xbe, 0x10, 0x8f, 0x1d, 0x5e, 0xb3, 0x90, 0xe3, 0xf8, 0x5b, 0xc4, 0x86, 0x17, 0xb2, 0x91, 0xc6, 0xc6, 0xcf, 0xd9, 0x63, 0x87,
0x40, 0x49, 0x59, 0x05, 0x75, 0xb6, 0x44, 0x07, 0x51, 0x30, 0x0e, 0x8e, 0xb7, 0xd2, 0xdd, 0x4e, 0x97, 0x50, 0x59, 0x51, 0x43, 0x23, 0xd6, 0xe8, 0x20, 0x89, 0xa6, 0xd1, 0xc9, 0xa3, 0x7c, 0xdf,
0x3e, 0x87, 0xfa, 0x13, 0x3a, 0x08, 0x9f, 0x8a, 0x2d, 0xab, 0x56, 0x0c, 0x50, 0xf4, 0x60, 0x1c, 0xe3, 0x0b, 0x68, 0x3e, 0xa2, 0x83, 0x78, 0xc2, 0x46, 0x46, 0x6e, 0xc4, 0x97, 0x16, 0x9b, 0xd6,
0x1c, 0x0f, 0xd2, 0x47, 0x56, 0xad, 0x6e, 0x3c, 0x0a, 0x9f, 0x89, 0x1d, 0xa8, 0x50, 0xcf, 0xb3, 0xd8, 0xe4, 0xc1, 0x34, 0x3a, 0x19, 0xe4, 0xcc, 0xc8, 0xcd, 0x07, 0x4f, 0xe2, 0xa7, 0x6c, 0x0f,
0x7c, 0x81, 0xfa, 0x82, 0xa2, 0x3e, 0xfb, 0xdb, 0xac, 0x4d, 0x58, 0x0a, 0x9f, 0x8b, 0x3d, 0x28, 0x6a, 0x54, 0x4b, 0x51, 0xac, 0x50, 0x5d, 0xda, 0xa4, 0x4f, 0x8e, 0x11, 0xb1, 0x19, 0xa1, 0xf8,
0x35, 0xce, 0x60, 0x96, 0xd1, 0xa2, 0xd0, 0x40, 0xd1, 0x80, 0xa1, 0x5d, 0xaf, 0x4e, 0x59, 0x3c, 0x19, 0x3b, 0x80, 0x4a, 0xe1, 0x02, 0x16, 0xc2, 0xae, 0x4a, 0x05, 0x36, 0x19, 0x90, 0x69, 0x3f,
0x6a, 0x03, 0xb1, 0xf3, 0xae, 0x5b, 0xe6, 0xd4, 0x29, 0x07, 0xe1, 0x6b, 0x31, 0xac, 0x38, 0x29, 0xd0, 0x39, 0xc1, 0xe3, 0x2e, 0x62, 0x7b, 0x6f, 0x7d, 0xa1, 0x73, 0x27, 0x1d, 0xc4, 0xaf, 0xd8,
0xc7, 0xda, 0x3e, 0x8b, 0x92, 0xbb, 0xcb, 0x4d, 0xba, 0x9f, 0x4c, 0x06, 0x57, 0x3f, 0x0f, 0x7b, 0xb0, 0xa6, 0xb4, 0x14, 0x6d, 0x74, 0x9e, 0x64, 0x77, 0x0b, 0xce, 0xfc, 0x6b, 0x66, 0x83, 0xeb,
0xa9, 0xa7, 0x6f, 0x23, 0x95, 0x8d, 0xcd, 0xa1, 0xf6, 0x91, 0xbb, 0x48, 0x1f, 0x58, 0x0a, 0xcf, 0x1f, 0x93, 0x5e, 0x1e, 0xdc, 0xb7, 0x91, 0xaa, 0xd6, 0x14, 0xd0, 0x84, 0xd0, 0x3e, 0xd2, 0x7b,
0xc4, 0x43, 0x3f, 0x25, 0xea, 0x8f, 0xfb, 0xff, 0x9f, 0x3d, 0xe5, 0x67, 0xfa, 0x07, 0x0c, 0xdf, 0x42, 0xf1, 0x39, 0x7b, 0x18, 0xb6, 0x24, 0xfd, 0x69, 0xff, 0xff, 0xbb, 0xe7, 0x74, 0xcc, 0xff,
0x88, 0xfd, 0xaf, 0x0d, 0xd6, 0x8d, 0xa5, 0x2c, 0x5f, 0x67, 0x3c, 0x2d, 0x1a, 0x70, 0xf3, 0xe8, 0x18, 0xe3, 0xd7, 0xec, 0x30, 0xd4, 0x20, 0x8a, 0xad, 0xa0, 0x6d, 0xc9, 0x80, 0x86, 0xc7, 0xf7,
0x7e, 0xf3, 0xc7, 0x8e, 0x4c, 0xf7, 0x7c, 0xcb, 0x64, 0xfd, 0x96, 0x37, 0xf2, 0xfe, 0xaa, 0x8d, 0x87, 0x43, 0x3d, 0xf9, 0x41, 0x18, 0x99, 0x6d, 0xdf, 0x50, 0x23, 0xef, 0xae, 0xbb, 0x34, 0xba,
0x83, 0xeb, 0x36, 0x0e, 0x7e, 0xb5, 0x71, 0xf0, 0x6d, 0x13, 0xf7, 0xae, 0x37, 0x71, 0xef, 0xc7, 0xe9, 0xd2, 0xe8, 0x67, 0x97, 0x46, 0x5f, 0x77, 0x69, 0xef, 0x66, 0x97, 0xf6, 0xbe, 0xef, 0xd2,
0x26, 0xee, 0x7d, 0x96, 0xa6, 0x70, 0xf3, 0x26, 0x4f, 0x34, 0x5a, 0x79, 0x62, 0x16, 0x2a, 0x27, 0xde, 0x27, 0xae, 0x4b, 0xb7, 0x6c, 0x8b, 0x4c, 0xa1, 0xe1, 0xa7, 0x7a, 0x25, 0x0b, 0xcb, 0x4f,
0x79, 0x62, 0x5e, 0xea, 0xb9, 0x2a, 0x4a, 0xb9, 0xfa, 0xf7, 0xa6, 0x6e, 0x5d, 0x01, 0xe5, 0x43, 0xf5, 0x0b, 0xb5, 0x94, 0x65, 0xc5, 0x37, 0xff, 0xfe, 0xab, 0xdb, 0xd6, 0x60, 0x8b, 0x21, 0x7d,
0x3e, 0xe8, 0xab, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x46, 0x09, 0x1c, 0x6e, 0x93, 0x02, 0x00, 0xea, 0xcb, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x28, 0xe1, 0x73, 0x5d, 0x97, 0x02, 0x00, 0x00,
0x00,
} }
func (m *Params) Marshal() (dAtA []byte, err error) { func (m *Params) Marshal() (dAtA []byte, err error) {
@ -235,8 +234,8 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i-- i--
dAtA[i] = 0x18 dAtA[i] = 0x18
} }
if m.MaxVotes != 0 { if m.MaxQuorums != 0 {
i = encodeVarintGenesis(dAtA, i, uint64(m.MaxVotes)) i = encodeVarintGenesis(dAtA, i, uint64(m.MaxQuorums))
i-- i--
dAtA[i] = 0x10 dAtA[i] = 0x10
} }
@ -337,8 +336,8 @@ func (m *Params) Size() (n int) {
if l > 0 { if l > 0 {
n += 1 + l + sovGenesis(uint64(l)) n += 1 + l + sovGenesis(uint64(l))
} }
if m.MaxVotes != 0 { if m.MaxQuorums != 0 {
n += 1 + sovGenesis(uint64(m.MaxVotes)) n += 1 + sovGenesis(uint64(m.MaxQuorums))
} }
if m.EpochBlocks != 0 { if m.EpochBlocks != 0 {
n += 1 + sovGenesis(uint64(m.EpochBlocks)) n += 1 + sovGenesis(uint64(m.EpochBlocks))
@ -444,9 +443,9 @@ func (m *Params) Unmarshal(dAtA []byte) error {
iNdEx = postIndex iNdEx = postIndex
case 2: case 2:
if wireType != 0 { if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field MaxVotes", wireType) return fmt.Errorf("proto: wrong wireType = %d for field MaxQuorums", wireType)
} }
m.MaxVotes = 0 m.MaxQuorums = 0
for shift := uint(0); ; shift += 7 { for shift := uint(0); ; shift += 7 {
if shift >= 64 { if shift >= 64 {
return ErrIntOverflowGenesis return ErrIntOverflowGenesis
@ -456,7 +455,7 @@ func (m *Params) Unmarshal(dAtA []byte) error {
} }
b := dAtA[iNdEx] b := dAtA[iNdEx]
iNdEx++ iNdEx++
m.MaxVotes |= uint64(b&0x7F) << shift m.MaxQuorums |= uint64(b&0x7F) << shift
if b < 0x80 { if b < 0x80 {
break break
} }