Merge pull request #26 from 0glabs/fix-decimals

fix: decimals in DASigner module
This commit is contained in:
MiniFrenchBread 2024-06-11 15:25:52 +08:00 committed by GitHub
commit 2ab492da82
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 53 additions and 73 deletions

View File

@ -10,7 +10,7 @@ import "zgc/dasigners/v1/dasigners.proto";
option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types"; option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types";
message Params { message Params {
string tokens_per_vote = 1; uint64 tokens_per_vote = 1;
uint64 max_votes_per_signer = 2; uint64 max_votes_per_signer = 2;
uint64 max_quorums = 3; uint64 max_quorums = 3;
uint64 epoch_blocks = 4; uint64 epoch_blocks = 4;

View File

@ -40,10 +40,7 @@ func (k Keeper) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {
return false return false
}) })
ballots := []Ballot{} ballots := []Ballot{}
tokensPerVote, ok := sdk.NewIntFromString(params.TokensPerVote) tokensPerVote := sdk.NewIntFromUint64(params.TokensPerVote)
if !ok {
panic("failed to load params tokens_per_vote")
}
for _, registration := range registrations { for _, registration := range registrations {
// get validator // get validator
accAddr, err := sdk.AccAddressFromHexUnsafe(registration.account) accAddr, err := sdk.AccAddressFromHexUnsafe(registration.account)
@ -52,7 +49,7 @@ func (k Keeper) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) {
continue continue
} }
bonded := k.GetDelegatorBonded(ctx, accAddr) bonded := k.GetDelegatorBonded(ctx, accAddr)
num := bonded.Quo(sdk.NewInt(1_000_000_000_000_000_000)).Quo(tokensPerVote).Abs().BigInt() num := bonded.Quo(BondedConversionRate).Quo(tokensPerVote).Abs().BigInt()
if num.Cmp(big.NewInt(int64(params.MaxVotesPerSigner))) > 0 { if num.Cmp(big.NewInt(int64(params.MaxVotesPerSigner))) > 0 {
num = big.NewInt(int64(params.MaxVotesPerSigner)) num = big.NewInt(int64(params.MaxVotesPerSigner))
} }

View File

@ -2,7 +2,6 @@ package keeper
import ( import (
"encoding/hex" "encoding/hex"
"fmt"
"math/big" "math/big"
"cosmossdk.io/math" "cosmossdk.io/math"
@ -13,9 +12,12 @@ import (
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/log"
"github.com/0glabs/0g-chain/chaincfg"
"github.com/0glabs/0g-chain/x/dasigners/v1/types" "github.com/0glabs/0g-chain/x/dasigners/v1/types"
) )
var BondedConversionRate = math.NewIntFromBigInt(big.NewInt(0).Exp(big.NewInt(10), big.NewInt(chaincfg.GasDenomUnit), nil))
type Keeper struct { type Keeper struct {
storeKey storetypes.StoreKey storeKey storetypes.StoreKey
cdc codec.BinaryCodec cdc codec.BinaryCodec
@ -228,13 +230,9 @@ func (k Keeper) CheckDelegations(ctx sdk.Context, account string) error {
return err return err
} }
bonded := k.GetDelegatorBonded(ctx, accAddr) bonded := k.GetDelegatorBonded(ctx, accAddr)
fmt.Printf("delegation: %v\n", bonded)
params := k.GetParams(ctx) params := k.GetParams(ctx)
tokensPerVote, ok := sdk.NewIntFromString(params.TokensPerVote) tokensPerVote := sdk.NewIntFromUint64(params.TokensPerVote)
if !ok { if bonded.Quo(BondedConversionRate).Quo(tokensPerVote).Abs().BigInt().Cmp(big.NewInt(0)) <= 0 {
panic("failed to load params tokens_per_vote")
}
if bonded.Quo(sdk.NewInt(1_000_000_000_000_000_000)).Quo(tokensPerVote).Abs().BigInt().Cmp(big.NewInt(0)) <= 0 {
return types.ErrInsufficientBonded return types.ErrInsufficientBonded
} }
return nil return nil

View File

@ -15,11 +15,12 @@ func NewGenesisState(params Params, epoch uint64, signers []*Signer, quorumsByEp
// DefaultGenesisState returns the default genesis state for the module. // DefaultGenesisState returns the default genesis state for the module.
func DefaultGenesisState() *GenesisState { func DefaultGenesisState() *GenesisState {
return NewGenesisState(Params{ return NewGenesisState(Params{
TokensPerVote: "100", TokensPerVote: 10,
MaxVotesPerSigner: 100, MaxVotesPerSigner: 1024,
MaxQuorums: 100, MaxQuorums: 10,
EpochBlocks: 1000, // EpochBlocks: 5760,
EncodedSlices: 3072, EpochBlocks: 20,
EncodedSlices: 3072,
}, 0, make([]*Signer, 0), []*Quorums{{ }, 0, make([]*Signer, 0), []*Quorums{{
Quorums: make([]*Quorum, 0), Quorums: make([]*Quorum, 0),
}}) }})

View File

@ -27,7 +27,7 @@ var _ = math.Inf
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package 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 uint64 `protobuf:"varint,1,opt,name=tokens_per_vote,json=tokensPerVote,proto3" json:"tokens_per_vote,omitempty"`
MaxVotesPerSigner uint64 `protobuf:"varint,2,opt,name=max_votes_per_signer,json=maxVotesPerSigner,proto3" json:"max_votes_per_signer,omitempty"` MaxVotesPerSigner uint64 `protobuf:"varint,2,opt,name=max_votes_per_signer,json=maxVotesPerSigner,proto3" json:"max_votes_per_signer,omitempty"`
MaxQuorums uint64 `protobuf:"varint,3,opt,name=max_quorums,json=maxQuorums,proto3" json:"max_quorums,omitempty"` MaxQuorums uint64 `protobuf:"varint,3,opt,name=max_quorums,json=maxQuorums,proto3" json:"max_quorums,omitempty"`
EpochBlocks uint64 `protobuf:"varint,4,opt,name=epoch_blocks,json=epochBlocks,proto3" json:"epoch_blocks,omitempty"` EpochBlocks uint64 `protobuf:"varint,4,opt,name=epoch_blocks,json=epochBlocks,proto3" json:"epoch_blocks,omitempty"`
@ -67,11 +67,11 @@ func (m *Params) XXX_DiscardUnknown() {
var xxx_messageInfo_Params proto.InternalMessageInfo var xxx_messageInfo_Params proto.InternalMessageInfo
func (m *Params) GetTokensPerVote() string { func (m *Params) GetTokensPerVote() uint64 {
if m != nil { if m != nil {
return m.TokensPerVote return m.TokensPerVote
} }
return "" return 0
} }
func (m *Params) GetMaxVotesPerSigner() uint64 { func (m *Params) GetMaxVotesPerSigner() uint64 {
@ -183,35 +183,35 @@ 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{
// 436 bytes of a gzipped FileDescriptorProto // 433 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x6e, 0x13, 0x31, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x6e, 0x13, 0x31,
0x10, 0x40, 0xb3, 0x24, 0x04, 0xe1, 0xb4, 0xa5, 0x58, 0x3d, 0x38, 0x3d, 0x6c, 0x42, 0x25, 0x50, 0x10, 0x86, 0xb3, 0x24, 0x04, 0xc9, 0x29, 0xa5, 0x58, 0x3d, 0x6c, 0x7a, 0xd8, 0x84, 0x4a, 0x20,
0x2f, 0xac, 0xdb, 0x22, 0xf1, 0x01, 0x41, 0x08, 0x71, 0x41, 0x65, 0x23, 0x71, 0xe0, 0xb2, 0xf2, 0x2e, 0xac, 0xdb, 0x22, 0xf1, 0x00, 0x41, 0x08, 0x71, 0x41, 0x25, 0x91, 0x38, 0x70, 0x59, 0x79,
0x3a, 0xc6, 0x59, 0x35, 0xde, 0x59, 0xd6, 0xde, 0x28, 0xe9, 0x57, 0xf0, 0x59, 0x3d, 0x70, 0xe8, 0x9d, 0xc1, 0x59, 0x35, 0xde, 0x59, 0xd6, 0xde, 0x28, 0xe9, 0x53, 0xf0, 0x58, 0x3d, 0x70, 0xe8,
0x91, 0x13, 0x42, 0xc9, 0x8f, 0xa0, 0x1d, 0x9b, 0x56, 0xb4, 0xbd, 0xd9, 0x6f, 0xde, 0x8c, 0x66, 0x91, 0x13, 0x42, 0xc9, 0x8b, 0xa0, 0x1d, 0x9b, 0x56, 0xb4, 0xdc, 0xec, 0xff, 0xff, 0x66, 0xf4,
0xc6, 0x26, 0xf1, 0xa5, 0x96, 0x7c, 0x26, 0x6c, 0xa1, 0x4b, 0x55, 0x5b, 0xbe, 0x3c, 0xe5, 0x5a, 0xcf, 0xd8, 0x2c, 0xb9, 0xd4, 0x4a, 0xcc, 0xa5, 0x2d, 0x74, 0x09, 0xb5, 0x15, 0xab, 0x53, 0xa1,
0x95, 0xca, 0x16, 0x36, 0xa9, 0x6a, 0x70, 0x40, 0xf7, 0x2f, 0xb5, 0x4c, 0x6e, 0xe2, 0xc9, 0xf2, 0xa1, 0x04, 0x5b, 0xd8, 0xb4, 0xaa, 0xd1, 0x21, 0x3f, 0xb8, 0xd4, 0x2a, 0xbd, 0xf1, 0xd3, 0xd5,
0xf4, 0x70, 0x28, 0xc1, 0x1a, 0xb0, 0x19, 0xc6, 0xb9, 0xbf, 0x78, 0xf9, 0xf0, 0x40, 0x83, 0x06, 0xe9, 0xd1, 0x50, 0xa1, 0x35, 0x68, 0x33, 0xf2, 0x85, 0xbf, 0x78, 0xf8, 0xe8, 0x50, 0xa3, 0x46,
0xcf, 0xdb, 0x53, 0xa0, 0x43, 0x0d, 0xa0, 0x17, 0x8a, 0xe3, 0x2d, 0x6f, 0xbe, 0x71, 0x51, 0xae, 0xaf, 0xb7, 0xa7, 0xa0, 0x0e, 0x35, 0xa2, 0x5e, 0x82, 0xa0, 0x5b, 0xde, 0x7c, 0x15, 0xb2, 0xdc,
0x43, 0x68, 0x74, 0x37, 0xe4, 0x0a, 0xa3, 0xac, 0x13, 0xa6, 0x0a, 0xc2, 0xf8, 0x5e, 0x7b, 0xb7, 0x04, 0x6b, 0x74, 0xd7, 0x72, 0x85, 0x01, 0xeb, 0xa4, 0xa9, 0x02, 0x30, 0xbe, 0x17, 0xef, 0x36,
0xbd, 0xa0, 0x71, 0xf4, 0x33, 0x22, 0xfd, 0x73, 0x51, 0x0b, 0x63, 0xe9, 0x2b, 0xf2, 0xcc, 0xc1, 0x0b, 0x11, 0xc7, 0x3f, 0x22, 0xd6, 0x3f, 0x97, 0xb5, 0x34, 0x96, 0xbf, 0x60, 0x4f, 0x1c, 0x5e,
0x85, 0x2a, 0x6d, 0x56, 0xa9, 0x3a, 0x5b, 0x82, 0x53, 0x2c, 0x1a, 0x47, 0xc7, 0x4f, 0xd3, 0x5d, 0x40, 0x69, 0xb3, 0x0a, 0xea, 0x6c, 0x85, 0x0e, 0xe2, 0x68, 0x1c, 0xbd, 0xec, 0x4d, 0x1f, 0x7b,
0x8f, 0xcf, 0x55, 0xfd, 0x05, 0x9c, 0xa2, 0x9c, 0x1c, 0x18, 0xb1, 0x42, 0xc1, 0xab, 0xbe, 0x22, 0xf9, 0x1c, 0xea, 0xcf, 0xe8, 0x80, 0x0b, 0x76, 0x68, 0xe4, 0x9a, 0x00, 0x8f, 0xfa, 0x8e, 0xf1,
0x7b, 0x34, 0x8e, 0x8e, 0x7b, 0xe9, 0x73, 0x23, 0x56, 0xad, 0xd6, 0xea, 0x53, 0x0c, 0xd0, 0x11, 0x03, 0x82, 0x9f, 0x1a, 0xb9, 0x6e, 0xb1, 0x16, 0x9f, 0x91, 0xc1, 0x47, 0x6c, 0xd0, 0x16, 0x7c,
0x19, 0xb4, 0x09, 0xdf, 0x1b, 0xa8, 0x1b, 0x63, 0x59, 0x17, 0x3d, 0x62, 0xc4, 0xea, 0xb3, 0x27, 0x6b, 0xb0, 0x6e, 0x8c, 0x8d, 0xbb, 0xc4, 0x31, 0x23, 0xd7, 0x9f, 0xbc, 0xc2, 0x9f, 0xb1, 0x3d,
0xf4, 0x05, 0xd9, 0x51, 0x15, 0xc8, 0x79, 0x96, 0x2f, 0x40, 0x5e, 0x58, 0xd6, 0x43, 0x63, 0x80, 0xa8, 0x50, 0x2d, 0xb2, 0x7c, 0x89, 0xea, 0xc2, 0xc6, 0x3d, 0x22, 0x06, 0xa4, 0x4d, 0x48, 0xe2,
0x6c, 0x82, 0x88, 0xbe, 0x24, 0x7b, 0xaa, 0x94, 0x30, 0x53, 0xb3, 0xcc, 0x2e, 0x0a, 0xa9, 0x2c, 0xcf, 0xd9, 0x3e, 0x94, 0x0a, 0xe7, 0x30, 0xcf, 0xec, 0xb2, 0x50, 0x60, 0xe3, 0x87, 0x3e, 0x5b,
0x7b, 0x8c, 0xd2, 0x6e, 0xa0, 0x53, 0x84, 0x47, 0x9b, 0x88, 0xec, 0x7c, 0xf0, 0x2f, 0x30, 0x75, 0x50, 0x67, 0x24, 0x1e, 0x6f, 0x23, 0xb6, 0xf7, 0xde, 0xbf, 0xc0, 0xcc, 0x49, 0x07, 0xfc, 0x0d,
0xc2, 0x29, 0xfa, 0x96, 0xf4, 0x2b, 0x1c, 0x0f, 0x67, 0x19, 0x9c, 0xb1, 0xe4, 0xee, 0x8b, 0x24, 0xeb, 0x57, 0x34, 0x1e, 0xcd, 0x32, 0x38, 0x8b, 0xd3, 0xbb, 0x2f, 0x92, 0xfa, 0xf1, 0x27, 0xbd,
0x7e, 0xfc, 0x49, 0xef, 0xea, 0xf7, 0xa8, 0x93, 0x06, 0xfb, 0xb6, 0xa5, 0xb2, 0x31, 0xf9, 0xcd, 0xab, 0x5f, 0xa3, 0xce, 0x34, 0xd0, 0xb7, 0x91, 0xca, 0xc6, 0xe4, 0x37, 0xc3, 0xf9, 0x48, 0x1f,
0x70, 0xbe, 0xa5, 0x4f, 0x88, 0xe8, 0x19, 0x79, 0x12, 0xaa, 0xb0, 0xee, 0xb8, 0xfb, 0x70, 0x6d, 0x49, 0xe2, 0x67, 0xec, 0x51, 0xe8, 0x12, 0x77, 0xc7, 0xdd, 0xff, 0xf7, 0xf6, 0x1b, 0x98, 0xfe,
0xbf, 0x81, 0xf4, 0x9f, 0x48, 0xdf, 0x91, 0xfd, 0xb0, 0x86, 0x2c, 0x5f, 0x67, 0x58, 0x8d, 0xf5, 0x05, 0xf9, 0x5b, 0x76, 0x10, 0xd6, 0x90, 0xe5, 0x9b, 0x8c, 0xba, 0xc5, 0x3d, 0x2a, 0x1e, 0xde,
0x30, 0x79, 0x78, 0x3f, 0x39, 0xac, 0x27, 0xdd, 0x0b, 0x29, 0x93, 0xf5, 0x7b, 0xdc, 0xc8, 0xc7, 0x2f, 0x0e, 0xeb, 0x99, 0xee, 0x87, 0x92, 0xc9, 0xe6, 0x1d, 0x6d, 0xe4, 0xc3, 0xd5, 0x36, 0x89,
0xab, 0x4d, 0x1c, 0x5d, 0x6f, 0xe2, 0xe8, 0xcf, 0x26, 0x8e, 0x7e, 0x6c, 0xe3, 0xce, 0xf5, 0x36, 0xae, 0xb7, 0x49, 0xf4, 0x7b, 0x9b, 0x44, 0xdf, 0x77, 0x49, 0xe7, 0x7a, 0x97, 0x74, 0x7e, 0xee,
0xee, 0xfc, 0xda, 0xc6, 0x9d, 0xaf, 0x5c, 0x17, 0x6e, 0xde, 0xe4, 0x89, 0x04, 0xc3, 0x4f, 0xf4, 0x92, 0xce, 0x17, 0xa1, 0x0b, 0xb7, 0x68, 0xf2, 0x54, 0xa1, 0x11, 0x27, 0x7a, 0x29, 0x73, 0x2b,
0x42, 0xe4, 0x96, 0x9f, 0xe8, 0xd7, 0x72, 0x2e, 0x8a, 0x92, 0xaf, 0xfe, 0xff, 0x08, 0x6e, 0x5d, 0x4e, 0xf4, 0x2b, 0xb5, 0x90, 0x45, 0x29, 0xd6, 0xff, 0x7e, 0x04, 0xb7, 0xa9, 0xc0, 0xe6, 0x7d,
0x29, 0x9b, 0xf7, 0xf1, 0x17, 0xbc, 0xf9, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x79, 0x90, 0xf6, 0x00, 0xfa, 0x05, 0xaf, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe5, 0x90, 0xe2, 0xc8, 0x02, 0x00,
0xc8, 0x02, 0x00, 0x00, 0x00,
} }
func (m *Params) Marshal() (dAtA []byte, err error) { func (m *Params) Marshal() (dAtA []byte, err error) {
@ -254,12 +254,10 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i-- i--
dAtA[i] = 0x10 dAtA[i] = 0x10
} }
if len(m.TokensPerVote) > 0 { if m.TokensPerVote != 0 {
i -= len(m.TokensPerVote) i = encodeVarintGenesis(dAtA, i, uint64(m.TokensPerVote))
copy(dAtA[i:], m.TokensPerVote)
i = encodeVarintGenesis(dAtA, i, uint64(len(m.TokensPerVote)))
i-- i--
dAtA[i] = 0xa dAtA[i] = 0x8
} }
return len(dAtA) - i, nil return len(dAtA) - i, nil
} }
@ -347,9 +345,8 @@ func (m *Params) Size() (n int) {
} }
var l int var l int
_ = l _ = l
l = len(m.TokensPerVote) if m.TokensPerVote != 0 {
if l > 0 { n += 1 + sovGenesis(uint64(m.TokensPerVote))
n += 1 + l + sovGenesis(uint64(l))
} }
if m.MaxVotesPerSigner != 0 { if m.MaxVotesPerSigner != 0 {
n += 1 + sovGenesis(uint64(m.MaxVotesPerSigner)) n += 1 + sovGenesis(uint64(m.MaxVotesPerSigner))
@ -428,10 +425,10 @@ func (m *Params) Unmarshal(dAtA []byte) error {
} }
switch fieldNum { switch fieldNum {
case 1: case 1:
if wireType != 2 { if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TokensPerVote", wireType) return fmt.Errorf("proto: wrong wireType = %d for field TokensPerVote", wireType)
} }
var stringLen uint64 m.TokensPerVote = 0
for shift := uint(0); ; shift += 7 { for shift := uint(0); ; shift += 7 {
if shift >= 64 { if shift >= 64 {
return ErrIntOverflowGenesis return ErrIntOverflowGenesis
@ -441,24 +438,11 @@ func (m *Params) Unmarshal(dAtA []byte) error {
} }
b := dAtA[iNdEx] b := dAtA[iNdEx]
iNdEx++ iNdEx++
stringLen |= uint64(b&0x7F) << shift m.TokensPerVote |= uint64(b&0x7F) << shift
if b < 0x80 { if b < 0x80 {
break break
} }
} }
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthGenesis
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthGenesis
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.TokensPerVote = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2: case 2:
if wireType != 0 { if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field MaxVotesPerSigner", wireType) return fmt.Errorf("proto: wrong wireType = %d for field MaxVotesPerSigner", wireType)