factor verified providers into bidding tx flow

master
michael 2022-09-13 22:58:07 +00:00
parent 84bb357bc8
commit 11829e1017
13 changed files with 161 additions and 53 deletions

View File

@ -30826,6 +30826,8 @@ definitions:
type: string
colinear.colinearcore.MsgNewBidResponse:
type: object
colinear.colinearcore.MsgUnlockAllFundsResponse:
type: object
colinear.colinearcore.MsgUnlockFundsResponse:
type: object
colinear.colinearcore.NextAuction:

4
go.mod
View File

@ -5,6 +5,7 @@ go 1.18
require (
github.com/cosmos/cosmos-sdk v0.45.5
github.com/cosmos/ibc-go/v3 v3.0.1
github.com/dgraph-io/badger/v2 v2.2007.2
github.com/dgraph-io/badger/v3 v3.2103.2
github.com/gogo/protobuf v1.3.3
github.com/golang/protobuf v1.5.2
@ -18,6 +19,7 @@ require (
github.com/tendermint/spn v0.2.1-0.20220708132853-26a17f03c072
github.com/tendermint/tendermint v0.34.19
github.com/tendermint/tm-db v0.6.7
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce
google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc
google.golang.org/grpc v1.48.0
gopkg.in/yaml.v2 v2.4.0
@ -55,7 +57,6 @@ require (
github.com/danieljoos/wincred v1.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
github.com/dgraph-io/badger/v2 v2.2007.2 // indirect
github.com/dgraph-io/ristretto v0.1.0 // indirect
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/docker/docker v20.10.7+incompatible // indirect
@ -159,7 +160,6 @@ require (
github.com/zondax/hid v0.9.0 // indirect
go.etcd.io/bbolt v1.3.6 // indirect
go.opencensus.io v0.23.0 // indirect
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce // indirect
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect

View File

@ -22,6 +22,9 @@ message MsgNewAuction {
string ceiling = 4;
string denom = 5;
uint64 leaseEnd = 6;
// verified providers just specifies who's allowed to bid on the lease auction.
// STORED IN MEMORY. DOES NOT GET WRITTEN TO CHAIN STATE.
repeated string verifiedProviders = 7;
}
message MsgNewAuctionResponse {

View File

@ -12,6 +12,10 @@ const (
MinLeasePeriod = 3_600 // 1 hour
MaxLeasePeriod = 8_035_200 // 3 months
// Maximum number of verified providers; this is to prevent buffer overflow
// attacks since provider list is not committed to chain state and costs 0 gas
MaxVerifiedProviders = 1000
// Minimum required staked CLR to be a provider (i.e. to bid)
// 500 CLR
ProviderMinLockedUClr = 500_000_000

View File

@ -3,6 +3,7 @@ package cli
import (
"strconv"
"colinear/x/colinearcore/auctionconfig"
"colinear/x/colinearcore/types"
"github.com/cosmos/cosmos-sdk/client"
@ -15,9 +16,10 @@ var _ = strconv.Itoa(0)
func CmdNewAuction() *cobra.Command {
cmd := &cobra.Command{
Use: "new-auction [name] [description] [ceiling] [denom] [end date]",
Use: "new-auction [name] [description] [ceiling] [denom] [end date] [verified providers (separated by spaces)...]",
Short: "Broadcast message newAuction",
Args: cobra.ExactArgs(5),
// Args: cobra.ExactArgs(5),
Args: cobra.RangeArgs(5, auctionconfig.MaxVerifiedProviders+5),
RunE: func(cmd *cobra.Command, args []string) (err error) {
argName := args[0]
argDescription := args[1]
@ -25,6 +27,12 @@ func CmdNewAuction() *cobra.Command {
argDenom := args[3]
argLeaseEnd := args[4]
verifiedProviders := []string{}
if len(args) >= 6 {
// set to remaining arguments
verifiedProviders = args[5:]
}
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
@ -43,6 +51,7 @@ func CmdNewAuction() *cobra.Command {
argCeiling,
argDenom,
uint64(le),
verifiedProviders,
)
if err := msg.ValidateBasic(); err != nil {
return err

View File

@ -24,7 +24,7 @@ func (k Keeper) AuctionIsExpired(ctx sdk.Context, auctionId string) (bool, error
}
func (k Keeper) FinalizeExpiredAuctions(ctx sdk.Context) {
memdb.BidDB.ForEachAuction(func(auctionId string) error {
memdb.AuctionDB.ForEachAuctionBidList(func(auctionId string) error {
auction, found := k.GetAuction(ctx, auctionId)
// make sure the auction exists on-chain
if !found {
@ -33,7 +33,7 @@ func (k Keeper) FinalizeExpiredAuctions(ctx sdk.Context) {
if uint64(ctx.BlockHeight()) >= auction.Deadline {
var err error
auction.Best, err = memdb.BidDB.GetLowestBid(auctionId)
auction.Best, err = memdb.AuctionDB.GetLowestBid(auctionId)
if err != nil {
return errors.Errorf("could not get highest bid for auction %s: %s", auctionId, err)
}
@ -42,10 +42,14 @@ func (k Keeper) FinalizeExpiredAuctions(ctx sdk.Context) {
auction.Remaining = auction.Best.Amount
// clear auction
if err := memdb.BidDB.ClearAuction(auctionId); err != nil {
if err := memdb.AuctionDB.ClearAuctionBids(auctionId); err != nil {
return errors.Errorf("failed to clear auction from memcache: %s", err)
}
if err := memdb.AuctionDB.ClearVerifiedProviders(auctionId); err != nil {
return errors.Errorf("failed to clear verified providers for auction %s: %s", auctionId, err)
}
// pay out unpaid remainder to auction creator
ceiling := new(big.Int)
ceiling.SetString(auction.Ceiling, 10)

View File

@ -28,7 +28,7 @@ func (k Keeper) AuctionBids(goCtx context.Context, req *types.QueryAuctionBidsRe
return nil, fmt.Errorf("auction %s is already finalized", req.Index)
}
bids, err := memdb.BidDB.GetBids(auction.Index)
bids, err := memdb.AuctionDB.GetBids(auction.Index)
if err != nil {
return nil, fmt.Errorf("failed to get bids for auction %s: %s", auction.Index, err)
}

View File

@ -49,6 +49,22 @@ found:
)
}
senderAddr, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
return nil, fmt.Errorf("sender address `%s` format invalid (bech32 required)", msg.Creator)
}
if len(msg.VerifiedProviders) > auctionconfig.MaxVerifiedProviders {
return nil, fmt.Errorf("must submit no more than %d verified providers (got %d)", auctionconfig.MaxVerifiedProviders, len(msg.VerifiedProviders))
}
bech32Len := len("colinear") + 39
for i, provider := range msg.VerifiedProviders {
if len(provider) > bech32Len {
return nil, fmt.Errorf("verified provider address %s (#%d) must be no longer than a colinear bech32 address (%d)", provider, i, bech32Len)
}
}
auction := types.Auction{
Index: index,
Name: msg.Name,
@ -67,11 +83,6 @@ found:
// Remaining: "0",
}
senderAddr, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
return nil, fmt.Errorf("sender address `%s` format invalid (bech32 required)", msg.Creator)
}
spendable := k.bank.SpendableCoins(ctx, senderAddr)
// if balance does not exceed or equal proposed auction ceiling...
ceiling := new(big.Int)

View File

@ -45,6 +45,21 @@ func (k msgServer) NewBid(goCtx context.Context, msg *types.MsgNewBid) (*types.M
return nil, fmt.Errorf("auction %s is expired", msg.AuctionIndex)
}
if verProvs, err := memdb.AuctionDB.GetVerifiedProviders(msg.AuctionIndex); err == nil {
if len(verProvs) == 0 {
goto bidderVerified
} else {
for _, provider := range verProvs {
if msg.Creator == provider {
goto bidderVerified
}
}
return nil, fmt.Errorf("bid sender is not verified by the creator of auction %s", auction.Index)
}
}
bidderVerified:
amt := new(big.Int)
amt, ok = amt.SetString(msg.Amount, 10)
if !ok {
@ -60,7 +75,7 @@ func (k msgServer) NewBid(goCtx context.Context, msg *types.MsgNewBid) (*types.M
return nil, fmt.Errorf("bid amount cannot be greater than auction price ceiling (%s)", auction.Ceiling)
}
lowestBid, err := memdb.BidDB.GetLowestBid(msg.AuctionIndex)
lowestBid, err := memdb.AuctionDB.GetLowestBid(msg.AuctionIndex)
// we manually handle KeyNotFound in GetHighestBid, so should return (nil, nil) if not found
if err != nil {
return nil, fmt.Errorf("failed to get lowest bid: %s", reflect.TypeOf(err))
@ -85,7 +100,7 @@ func (k msgServer) NewBid(goCtx context.Context, msg *types.MsgNewBid) (*types.M
Owner: msg.Creator,
}
if err := memdb.BidDB.AddBid(msg.AuctionIndex, bid); err != nil {
if err := memdb.AuctionDB.AddBid(msg.AuctionIndex, bid); err != nil {
return nil, fmt.Errorf("failed to add bid: %s", err)
}

View File

@ -113,7 +113,7 @@ func NewAppModule(
) AppModule {
// initialize in-memory database
memdb.BidDB.Mount()
memdb.AuctionDB.Mount()
return AppModule{
AppModuleBasic: NewAppModuleBasic(cdc),

View File

@ -5,6 +5,7 @@ import (
"colinear/x/colinearcore/keeper"
"colinear/x/colinearcore/types"
"github.com/cosmos/cosmos-sdk/baseapp"
sdk "github.com/cosmos/cosmos-sdk/types"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"

View File

@ -9,7 +9,7 @@ const TypeMsgNewAuction = "new_auction"
var _ sdk.Msg = &MsgNewAuction{}
func NewMsgNewAuction(creator string, name string, description string, ceiling string, denom string, leaseEnd uint64) *MsgNewAuction {
func NewMsgNewAuction(creator string, name string, description string, ceiling string, denom string, leaseEnd uint64, vProviders []string) *MsgNewAuction {
return &MsgNewAuction{
Creator: creator,
Name: name,
@ -17,6 +17,7 @@ func NewMsgNewAuction(creator string, name string, description string, ceiling s
Ceiling: ceiling,
Denom: denom,
LeaseEnd: leaseEnd,
VerifiedProviders: vProviders,
}
}

View File

@ -34,6 +34,9 @@ type MsgNewAuction struct {
Ceiling string `protobuf:"bytes,4,opt,name=ceiling,proto3" json:"ceiling,omitempty"`
Denom string `protobuf:"bytes,5,opt,name=denom,proto3" json:"denom,omitempty"`
LeaseEnd uint64 `protobuf:"varint,6,opt,name=leaseEnd,proto3" json:"leaseEnd,omitempty"`
// verified providers just specifies who's allowed to bid on the lease auction.
// STORED IN MEMORY. DOES NOT GET WRITTEN TO CHAIN STATE.
VerifiedProviders []string `protobuf:"bytes,7,rep,name=verifiedProviders,proto3" json:"verifiedProviders,omitempty"`
}
func (m *MsgNewAuction) Reset() { *m = MsgNewAuction{} }
@ -111,6 +114,13 @@ func (m *MsgNewAuction) GetLeaseEnd() uint64 {
return 0
}
func (m *MsgNewAuction) GetVerifiedProviders() []string {
if m != nil {
return m.VerifiedProviders
}
return nil
}
type MsgNewAuctionResponse struct {
AuctionId string `protobuf:"bytes,1,opt,name=auctionId,proto3" json:"auctionId,omitempty"`
}
@ -523,36 +533,37 @@ func init() {
func init() { proto.RegisterFile("colinearcore/tx.proto", fileDescriptor_0c3854a2a9bba3b4) }
var fileDescriptor_0c3854a2a9bba3b4 = []byte{
// 449 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xcd, 0xea, 0xd3, 0x40,
0x14, 0xc5, 0x9b, 0x7f, 0xdb, 0x68, 0x6e, 0x6b, 0xc1, 0xb1, 0x2d, 0x63, 0xd4, 0x10, 0xa2, 0x42,
0x40, 0x9b, 0x8a, 0x22, 0x6e, 0x6d, 0x40, 0x41, 0x30, 0x2e, 0x8a, 0x6e, 0x04, 0xc1, 0x98, 0x19,
0x42, 0x30, 0x9d, 0x09, 0x99, 0x14, 0xeb, 0x5b, 0xf8, 0x1e, 0xbe, 0x88, 0xcb, 0x2e, 0x5d, 0x4a,
0xfb, 0x00, 0xbe, 0x82, 0x98, 0x8f, 0x69, 0xa2, 0xb6, 0x0d, 0xb8, 0xcb, 0x3d, 0x73, 0xce, 0xef,
0xce, 0xe5, 0x0e, 0x81, 0x49, 0xc0, 0xe3, 0x88, 0x51, 0x3f, 0x0d, 0x78, 0x4a, 0xe7, 0xd9, 0xc6,
0x49, 0x52, 0x9e, 0x71, 0x24, 0x65, 0xa7, 0x7e, 0x6e, 0x7d, 0x55, 0xe0, 0x8a, 0x27, 0xc2, 0x57,
0xf4, 0xd3, 0x62, 0x1d, 0x64, 0x11, 0x67, 0x08, 0xc3, 0xa5, 0x20, 0xa5, 0x7e, 0xc6, 0x53, 0xac,
0x98, 0x8a, 0xad, 0x2d, 0xab, 0x12, 0x21, 0xe8, 0x31, 0x7f, 0x45, 0xf1, 0x45, 0x2e, 0xe7, 0xdf,
0xc8, 0x84, 0x01, 0xa1, 0x22, 0x48, 0xa3, 0xe4, 0x77, 0x18, 0x77, 0xf3, 0xa3, 0xba, 0x94, 0xf3,
0x68, 0x14, 0x47, 0x2c, 0xc4, 0xbd, 0x92, 0x57, 0x94, 0x68, 0x0c, 0x7d, 0x42, 0x19, 0x5f, 0xe1,
0x7e, 0xae, 0x17, 0x05, 0xd2, 0xe1, 0x72, 0x4c, 0x7d, 0x41, 0x9f, 0x31, 0x82, 0x55, 0x53, 0xb1,
0x7b, 0x4b, 0x59, 0x5b, 0x8f, 0x61, 0xd2, 0xb8, 0xec, 0x92, 0x8a, 0x84, 0x33, 0x41, 0xd1, 0x4d,
0xd0, 0xfc, 0x42, 0x7a, 0x41, 0xca, 0x6b, 0x1f, 0x04, 0xcb, 0x07, 0xad, 0x88, 0xb9, 0x11, 0x39,
0x31, 0x9f, 0x05, 0xc3, 0x2a, 0xc3, 0x08, 0xdd, 0x94, 0x73, 0x36, 0x34, 0x34, 0x05, 0xd5, 0x5f,
0xf1, 0x35, 0xcb, 0xca, 0x51, 0xcb, 0xca, 0xba, 0x06, 0x57, 0x65, 0x8b, 0xea, 0x56, 0xd6, 0x53,
0x18, 0x7a, 0x22, 0x7c, 0xc9, 0x83, 0x8f, 0xcf, 0xd7, 0x8c, 0x88, 0x13, 0xad, 0x0f, 0xd8, 0x8b,
0x06, 0x76, 0x0a, 0xe3, 0x3a, 0x41, 0x92, 0x5d, 0x18, 0x79, 0x22, 0x7c, 0xc3, 0xe2, 0xff, 0x60,
0x63, 0x98, 0x36, 0x19, 0x92, 0x3e, 0xcb, 0x87, 0x29, 0x4e, 0x16, 0x71, 0x7c, 0xa6, 0x81, 0x75,
0x03, 0xae, 0xff, 0x65, 0xaf, 0x58, 0x0f, 0x7f, 0x76, 0xa1, 0xeb, 0x89, 0x10, 0xbd, 0x07, 0xa8,
0x3d, 0xb2, 0x3b, 0xce, 0x3f, 0x9f, 0xa3, 0xd3, 0xd8, 0xae, 0x7e, 0xbf, 0x8d, 0x4b, 0xbe, 0x81,
0xd7, 0xa0, 0x96, 0x2b, 0x36, 0x4f, 0xe6, 0xdc, 0x88, 0xe8, 0xf6, 0x39, 0x87, 0xa4, 0xbe, 0x03,
0xed, 0xb0, 0xc0, 0xdb, 0xc7, 0x63, 0xd2, 0xa4, 0xdf, 0x6b, 0x61, 0x92, 0xf8, 0x00, 0x06, 0xf5,
0x2d, 0xde, 0x3d, 0x9e, 0xad, 0xd9, 0xf4, 0x59, 0x2b, 0x9b, 0x6c, 0x12, 0xc3, 0xe8, 0x8f, 0x65,
0xda, 0xe7, 0x00, 0x95, 0x53, 0x7f, 0xd0, 0xd6, 0x59, 0x75, 0x73, 0x9f, 0x7c, 0xdb, 0x19, 0xca,
0x76, 0x67, 0x28, 0x3f, 0x76, 0x86, 0xf2, 0x65, 0x6f, 0x74, 0xb6, 0x7b, 0xa3, 0xf3, 0x7d, 0x6f,
0x74, 0xde, 0xde, 0xaa, 0x08, 0xf3, 0xcd, 0xbc, 0xf9, 0x97, 0xfa, 0x9c, 0x50, 0xf1, 0x41, 0xcd,
0xff, 0x54, 0x8f, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x20, 0xbb, 0xf4, 0x20, 0xc2, 0x04, 0x00,
0x00,
// 476 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xdf, 0x8a, 0xd3, 0x40,
0x14, 0xc6, 0x9b, 0x6d, 0xb7, 0x6b, 0xce, 0xae, 0x0b, 0x3b, 0xee, 0x96, 0x31, 0x6a, 0x08, 0x51,
0x21, 0xe0, 0x6e, 0x2b, 0x8a, 0x78, 0xeb, 0x16, 0x14, 0x04, 0x2b, 0x52, 0xf4, 0x46, 0x10, 0x8c,
0x99, 0x63, 0x18, 0x4c, 0x67, 0xca, 0x4c, 0xba, 0xd6, 0xb7, 0xf0, 0xb1, 0xbc, 0xdc, 0x4b, 0xbd,
0x93, 0xf6, 0x01, 0x7c, 0x05, 0x31, 0x7f, 0xa6, 0x89, 0xeb, 0xb6, 0x01, 0xef, 0x72, 0xbe, 0xf3,
0x9d, 0xdf, 0xc9, 0xcc, 0x39, 0x0c, 0x1c, 0x45, 0x32, 0xe1, 0x02, 0x43, 0x15, 0x49, 0x85, 0x83,
0x74, 0xde, 0x9f, 0x2a, 0x99, 0x4a, 0x62, 0xe4, 0x7e, 0x35, 0xef, 0xff, 0xb0, 0xe0, 0xea, 0x48,
0xc7, 0x2f, 0xf1, 0xf3, 0xe9, 0x2c, 0x4a, 0xb9, 0x14, 0x84, 0xc2, 0x4e, 0xa4, 0x30, 0x4c, 0xa5,
0xa2, 0x96, 0x67, 0x05, 0xf6, 0xb8, 0x0c, 0x09, 0x81, 0x8e, 0x08, 0x27, 0x48, 0xb7, 0x32, 0x39,
0xfb, 0x26, 0x1e, 0xec, 0x32, 0xd4, 0x91, 0xe2, 0xd3, 0x3f, 0xc5, 0xb4, 0x9d, 0xa5, 0xaa, 0x52,
0xc6, 0x43, 0x9e, 0x70, 0x11, 0xd3, 0x4e, 0xc1, 0xcb, 0x43, 0x72, 0x08, 0xdb, 0x0c, 0x85, 0x9c,
0xd0, 0xed, 0x4c, 0xcf, 0x03, 0xe2, 0xc0, 0x95, 0x04, 0x43, 0x8d, 0x4f, 0x05, 0xa3, 0x5d, 0xcf,
0x0a, 0x3a, 0x63, 0x13, 0x93, 0x63, 0x38, 0x38, 0x43, 0xc5, 0x3f, 0x72, 0x64, 0xaf, 0x94, 0x3c,
0xe3, 0x0c, 0x95, 0xa6, 0x3b, 0x5e, 0x3b, 0xb0, 0xc7, 0x17, 0x13, 0xfe, 0x23, 0x38, 0xaa, 0x1d,
0x6d, 0x8c, 0x7a, 0x2a, 0x85, 0x46, 0x72, 0x13, 0xec, 0x30, 0x97, 0x9e, 0xb3, 0xe2, 0x90, 0x2b,
0xc1, 0x0f, 0xc1, 0xce, 0xcb, 0x86, 0x9c, 0xad, 0xb9, 0x0d, 0x1f, 0xf6, 0xca, 0x1a, 0xc1, 0x70,
0x5e, 0xdc, 0x4a, 0x4d, 0x23, 0x3d, 0xe8, 0x86, 0x13, 0x39, 0x13, 0x69, 0x71, 0x31, 0x45, 0xe4,
0x5f, 0x83, 0x03, 0xd3, 0xa2, 0xfc, 0x2b, 0xff, 0x09, 0xec, 0x8d, 0x74, 0xfc, 0x42, 0x46, 0x9f,
0x9e, 0xcd, 0x04, 0xd3, 0x6b, 0x5a, 0xaf, 0xb0, 0x5b, 0x35, 0x6c, 0x0f, 0x0e, 0xab, 0x04, 0x43,
0x1e, 0xc2, 0xfe, 0x48, 0xc7, 0x6f, 0x44, 0xf2, 0x1f, 0x6c, 0x0a, 0xbd, 0x3a, 0xc3, 0xd0, 0x4f,
0xb2, 0xc3, 0xe4, 0x99, 0xd3, 0x24, 0xd9, 0xd0, 0xc0, 0xbf, 0x01, 0xd7, 0x2f, 0xd8, 0x4b, 0xd6,
0x83, 0x5f, 0x6d, 0x68, 0x8f, 0x74, 0x4c, 0xde, 0x03, 0x54, 0x56, 0xf2, 0x4e, 0xff, 0x9f, 0xcb,
0xdb, 0xaf, 0x4d, 0xd7, 0x39, 0x6e, 0xe2, 0x32, 0x3b, 0xf0, 0x1a, 0xba, 0xc5, 0x88, 0xbd, 0xb5,
0x75, 0x43, 0xce, 0x9c, 0x60, 0x93, 0xc3, 0x50, 0xdf, 0x81, 0xbd, 0x1a, 0xe0, 0xed, 0xcb, 0xcb,
0x8c, 0xc9, 0xb9, 0xd7, 0xc0, 0x64, 0xf0, 0x11, 0xec, 0x56, 0xa7, 0x78, 0xf7, 0xf2, 0xda, 0x8a,
0xcd, 0x39, 0x69, 0x64, 0x33, 0x4d, 0x12, 0xd8, 0xff, 0x6b, 0x98, 0xc1, 0x26, 0x40, 0xe9, 0x74,
0xee, 0x37, 0x75, 0x96, 0xdd, 0x86, 0x8f, 0xbf, 0x2d, 0x5c, 0xeb, 0x7c, 0xe1, 0x5a, 0x3f, 0x17,
0xae, 0xf5, 0x75, 0xe9, 0xb6, 0xce, 0x97, 0x6e, 0xeb, 0xfb, 0xd2, 0x6d, 0xbd, 0xbd, 0x55, 0x12,
0x06, 0xf3, 0x41, 0xfd, 0x4d, 0xfb, 0x32, 0x45, 0xfd, 0xa1, 0x9b, 0xbd, 0x6b, 0x0f, 0x7f, 0x07,
0x00, 0x00, 0xff, 0xff, 0xdf, 0x9d, 0x09, 0x8c, 0xf0, 0x04, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -799,6 +810,15 @@ func (m *MsgNewAuction) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.VerifiedProviders) > 0 {
for iNdEx := len(m.VerifiedProviders) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.VerifiedProviders[iNdEx])
copy(dAtA[i:], m.VerifiedProviders[iNdEx])
i = encodeVarintTx(dAtA, i, uint64(len(m.VerifiedProviders[iNdEx])))
i--
dAtA[i] = 0x3a
}
}
if m.LeaseEnd != 0 {
i = encodeVarintTx(dAtA, i, uint64(m.LeaseEnd))
i--
@ -1152,6 +1172,12 @@ func (m *MsgNewAuction) Size() (n int) {
if m.LeaseEnd != 0 {
n += 1 + sovTx(uint64(m.LeaseEnd))
}
if len(m.VerifiedProviders) > 0 {
for _, s := range m.VerifiedProviders {
l = len(s)
n += 1 + l + sovTx(uint64(l))
}
}
return n
}
@ -1486,6 +1512,38 @@ func (m *MsgNewAuction) Unmarshal(dAtA []byte) error {
break
}
}
case 7:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field VerifiedProviders", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTx
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTx
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.VerifiedProviders = append(m.VerifiedProviders, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])