Setup hooks between laconic modules #9
@ -7169,7 +7169,7 @@ type QueryAuctionRequest struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7243,7 +7243,7 @@ type QueryBidRequest struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
||||||
// Bidder address
|
// Bidder address
|
||||||
Bidder string `protobuf:"bytes,2,opt,name=bidder,proto3" json:"bidder,omitempty"`
|
Bidder string `protobuf:"bytes,2,opt,name=bidder,proto3" json:"bidder,omitempty"`
|
||||||
@ -7326,7 +7326,7 @@ type QueryBidsRequest struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3371,7 +3371,7 @@ type MsgCommitBid struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
||||||
// Commit Hash
|
// Commit Hash
|
||||||
CommitHash string `protobuf:"bytes,2,opt,name=commit_hash,json=commitHash,proto3" json:"commit_hash,omitempty"`
|
CommitHash string `protobuf:"bytes,2,opt,name=commit_hash,json=commitHash,proto3" json:"commit_hash,omitempty"`
|
||||||
@ -3463,7 +3463,7 @@ type MsgRevealBid struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
||||||
// Commit Hash
|
// Commit Hash
|
||||||
Reveal string `protobuf:"bytes,2,opt,name=reveal,proto3" json:"reveal,omitempty"`
|
Reveal string `protobuf:"bytes,2,opt,name=reveal,proto3" json:"reveal,omitempty"`
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -76,8 +76,8 @@ type LaconicApp struct {
|
|||||||
ConsensusParamsKeeper consensuskeeper.Keeper
|
ConsensusParamsKeeper consensuskeeper.Keeper
|
||||||
|
|
||||||
// laconic keepers
|
// laconic keepers
|
||||||
AuctionKeeper auctionkeeper.Keeper
|
AuctionKeeper *auctionkeeper.Keeper // (Use * as per ProvideModule implementation)
|
||||||
BondKeeper bondkeeper.Keeper
|
BondKeeper *bondkeeper.Keeper
|
||||||
RegistryKeeper registrykeeper.Keeper
|
RegistryKeeper registrykeeper.Keeper
|
||||||
// RegistryRecordKeeper registrykeeper.RecordKeeper
|
// RegistryRecordKeeper registrykeeper.RecordKeeper
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@ -37,6 +37,7 @@ require (
|
|||||||
github.com/ipld/go-ipld-prime v0.21.0
|
github.com/ipld/go-ipld-prime v0.21.0
|
||||||
github.com/spf13/cobra v1.8.0
|
github.com/spf13/cobra v1.8.0
|
||||||
github.com/spf13/viper v1.17.0
|
github.com/spf13/viper v1.17.0
|
||||||
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f
|
google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f
|
||||||
google.golang.org/grpc v1.60.1
|
google.golang.org/grpc v1.60.1
|
||||||
google.golang.org/protobuf v1.32.0
|
google.golang.org/protobuf v1.32.0
|
||||||
@ -169,7 +170,6 @@ require (
|
|||||||
go.etcd.io/bbolt v1.3.8 // indirect
|
go.etcd.io/bbolt v1.3.8 // indirect
|
||||||
go.uber.org/multierr v1.10.0 // indirect
|
go.uber.org/multierr v1.10.0 // indirect
|
||||||
golang.org/x/crypto v0.16.0 // indirect
|
golang.org/x/crypto v0.16.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
|
|
||||||
golang.org/x/net v0.19.0 // indirect
|
golang.org/x/net v0.19.0 // indirect
|
||||||
golang.org/x/sync v0.4.0 // indirect
|
golang.org/x/sync v0.4.0 // indirect
|
||||||
golang.org/x/sys v0.15.0 // indirect
|
golang.org/x/sys v0.15.0 // indirect
|
||||||
|
@ -77,7 +77,7 @@ message QueryAuctionsResponse {
|
|||||||
|
|
||||||
// AuctionRequest is the format for querying a specific auction
|
// AuctionRequest is the format for querying a specific auction
|
||||||
message QueryAuctionRequest {
|
message QueryAuctionRequest {
|
||||||
// Auction ID
|
// Auction id
|
||||||
string id = 1;
|
string id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ message QueryAuctionResponse {
|
|||||||
|
|
||||||
// BidRequest is the format for querying a specific bid in an auction
|
// BidRequest is the format for querying a specific bid in an auction
|
||||||
message QueryBidRequest {
|
message QueryBidRequest {
|
||||||
// Auction ID
|
// Auction id
|
||||||
string auction_id = 1;
|
string auction_id = 1;
|
||||||
// Bidder address
|
// Bidder address
|
||||||
string bidder = 2;
|
string bidder = 2;
|
||||||
@ -103,7 +103,7 @@ message QueryBidResponse {
|
|||||||
|
|
||||||
// BidsRequest is the format for querying all bids in an auction
|
// BidsRequest is the format for querying all bids in an auction
|
||||||
message QueryBidsRequest {
|
message QueryBidsRequest {
|
||||||
// Auction ID
|
// Auction id
|
||||||
string auction_id = 1;
|
string auction_id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ message MsgCommitBid {
|
|||||||
option (gogoproto.goproto_getters) = false;
|
option (gogoproto.goproto_getters) = false;
|
||||||
option (cosmos.msg.v1.signer) = "signer";
|
option (cosmos.msg.v1.signer) = "signer";
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""];
|
string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""];
|
||||||
|
|
||||||
// Commit Hash
|
// Commit Hash
|
||||||
@ -109,7 +109,7 @@ message MsgRevealBid {
|
|||||||
option (gogoproto.goproto_getters) = false;
|
option (gogoproto.goproto_getters) = false;
|
||||||
option (cosmos.msg.v1.signer) = "signer";
|
option (cosmos.msg.v1.signer) = "signer";
|
||||||
|
|
||||||
// Auction ID
|
// Auction id
|
||||||
string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""];
|
string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""];
|
||||||
|
|
||||||
// Commit Hash
|
// Commit Hash
|
||||||
|
@ -131,22 +131,6 @@ message Signature {
|
|||||||
string pub_key = 2 [(gogoproto.moretags) = "json:\"pub_key\" yaml:\"pub_key\""];
|
string pub_key = 2 [(gogoproto.moretags) = "json:\"pub_key\" yaml:\"pub_key\""];
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlockChangeSet
|
|
||||||
message BlockChangeSet {
|
|
||||||
int64 height = 1;
|
|
||||||
repeated string records = 2;
|
|
||||||
repeated string auctions = 3;
|
|
||||||
repeated AuctionBidInfo auction_bids = 4 [(gogoproto.moretags) = "json:\"auction_bids\" yaml:\"auction_bids\""];
|
|
||||||
repeated string authorities = 5;
|
|
||||||
repeated string names = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
// AuctionBidInfo
|
|
||||||
message AuctionBidInfo {
|
|
||||||
string auction_id = 1 [(gogoproto.moretags) = "json:\"auction_id\" yaml:\"auction_id\""];
|
|
||||||
string bidder_address = 2 [(gogoproto.moretags) = "json:\"bidder_address\" yaml:\"bidder_address\""];
|
|
||||||
}
|
|
||||||
|
|
||||||
// ExpiryQueue: record / authority expiry queue type
|
// ExpiryQueue: record / authority expiry queue type
|
||||||
// id: expiry time
|
// id: expiry time
|
||||||
// value: array of ids (record cids / authority names)
|
// value: array of ids (record cids / authority names)
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
rm -r ~/.laconic2d || true
|
rm -r ~/.laconic2d || true
|
||||||
LACONIC2D_BIN=$(which laconic2d)
|
LACONIC2D_BIN=$(which laconic2d)
|
||||||
# configure laconic2d
|
# configure laconic2d
|
||||||
|
$LACONIC2D_BIN config set config log_level "*:error,p2p:info,state:info,auction:info,bond:info,registry:info" --skip-validate
|
||||||
$LACONIC2D_BIN config set client chain-id demo
|
$LACONIC2D_BIN config set client chain-id demo
|
||||||
$LACONIC2D_BIN config set client keyring-backend test
|
$LACONIC2D_BIN config set client keyring-backend test
|
||||||
$LACONIC2D_BIN keys add alice
|
$LACONIC2D_BIN keys add alice
|
||||||
|
@ -11,7 +11,7 @@ const (
|
|||||||
AttributeKeyRevealFee = "reveal-fee"
|
AttributeKeyRevealFee = "reveal-fee"
|
||||||
AttributeKeyMinimumBid = "minimum-bid"
|
AttributeKeyMinimumBid = "minimum-bid"
|
||||||
AttributeKeySigner = "signer"
|
AttributeKeySigner = "signer"
|
||||||
AttributeKeyAuctionID = "auction-id"
|
AttributeKeyAuctionId = "auction-id"
|
||||||
AttributeKeyCommitHash = "commit-hash"
|
AttributeKeyCommitHash = "commit-hash"
|
||||||
AttributeKeyReveal = "reveal"
|
AttributeKeyReveal = "reveal"
|
||||||
|
|
||||||
|
21
x/auction/expected_keeper.go
Normal file
21
x/auction/expected_keeper.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package auction
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AuctionUsageKeeper keep track of auction usage in other modules.
|
||||||
|
// Used to, for example, prevent deletion of a auction that's in use.
|
||||||
|
type AuctionUsageKeeper interface {
|
||||||
|
ModuleName() string
|
||||||
|
UsesAuction(ctx sdk.Context, auctionId string) bool
|
||||||
|
|
||||||
|
OnAuctionWinnerSelected(ctx sdk.Context, auctionId string)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AuctionHooksWrapper is a wrapper for modules to inject AuctionUsageKeeper using depinject.
|
||||||
|
// Reference: https://github.com/cosmos/cosmos-sdk/tree/v0.50.3/core/appmodule#resolving-circular-dependencies
|
||||||
|
type AuctionHooksWrapper struct{ AuctionUsageKeeper }
|
||||||
|
|
||||||
|
// IsOnePerModuleType implements the depinject.OnePerModuleType interface.
|
||||||
|
func (AuctionHooksWrapper) IsOnePerModuleType() {}
|
@ -11,6 +11,7 @@ import (
|
|||||||
"cosmossdk.io/collections/indexes"
|
"cosmossdk.io/collections/indexes"
|
||||||
storetypes "cosmossdk.io/core/store"
|
storetypes "cosmossdk.io/core/store"
|
||||||
errorsmod "cosmossdk.io/errors"
|
errorsmod "cosmossdk.io/errors"
|
||||||
|
"cosmossdk.io/log"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
@ -62,8 +63,6 @@ func newBidsIndexes(sb *collections.SchemaBuilder) BidsIndexes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add required methods
|
|
||||||
|
|
||||||
type Keeper struct {
|
type Keeper struct {
|
||||||
// Codecs
|
// Codecs
|
||||||
cdc codec.BinaryCodec
|
cdc codec.BinaryCodec
|
||||||
@ -73,7 +72,7 @@ type Keeper struct {
|
|||||||
bankKeeper bank.Keeper
|
bankKeeper bank.Keeper
|
||||||
|
|
||||||
// Track auction usage in other cosmos-sdk modules (more like a usage tracker).
|
// Track auction usage in other cosmos-sdk modules (more like a usage tracker).
|
||||||
// usageKeepers []types.AuctionUsageKeeper
|
usageKeepers []auctiontypes.AuctionUsageKeeper
|
||||||
|
|
||||||
// state management
|
// state management
|
||||||
Schema collections.Schema
|
Schema collections.Schema
|
||||||
@ -88,7 +87,7 @@ func NewKeeper(
|
|||||||
storeService storetypes.KVStoreService,
|
storeService storetypes.KVStoreService,
|
||||||
accountKeeper auth.AccountKeeper,
|
accountKeeper auth.AccountKeeper,
|
||||||
bankKeeper bank.Keeper,
|
bankKeeper bank.Keeper,
|
||||||
) Keeper {
|
) *Keeper {
|
||||||
sb := collections.NewSchemaBuilder(storeService)
|
sb := collections.NewSchemaBuilder(storeService)
|
||||||
k := Keeper{
|
k := Keeper{
|
||||||
cdc: cdc,
|
cdc: cdc,
|
||||||
@ -97,7 +96,7 @@ func NewKeeper(
|
|||||||
Params: collections.NewItem(sb, auctiontypes.ParamsPrefix, "params", codec.CollValue[auctiontypes.Params](cdc)),
|
Params: collections.NewItem(sb, auctiontypes.ParamsPrefix, "params", codec.CollValue[auctiontypes.Params](cdc)),
|
||||||
Auctions: collections.NewIndexedMap(sb, auctiontypes.AuctionsPrefix, "auctions", collections.StringKey, codec.CollValue[auctiontypes.Auction](cdc), newAuctionIndexes(sb)),
|
Auctions: collections.NewIndexedMap(sb, auctiontypes.AuctionsPrefix, "auctions", collections.StringKey, codec.CollValue[auctiontypes.Auction](cdc), newAuctionIndexes(sb)),
|
||||||
Bids: collections.NewIndexedMap(sb, auctiontypes.BidsPrefix, "bids", collections.PairKeyCodec(collections.StringKey, collections.StringKey), codec.CollValue[auctiontypes.Bid](cdc), newBidsIndexes(sb)),
|
Bids: collections.NewIndexedMap(sb, auctiontypes.BidsPrefix, "bids", collections.PairKeyCodec(collections.StringKey, collections.StringKey), codec.CollValue[auctiontypes.Bid](cdc), newBidsIndexes(sb)),
|
||||||
// usageKeepers: usageKeepers,
|
usageKeepers: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
schema, err := sb.Build()
|
schema, err := sb.Build()
|
||||||
@ -107,22 +106,29 @@ func NewKeeper(
|
|||||||
|
|
||||||
k.Schema = schema
|
k.Schema = schema
|
||||||
|
|
||||||
return k
|
return &k
|
||||||
}
|
}
|
||||||
|
|
||||||
// func (k *Keeper) SetUsageKeepers(usageKeepers []types.AuctionUsageKeeper) {
|
// Logger returns a module-specific logger.
|
||||||
// k.usageKeepers = usageKeepers
|
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
|
||||||
// }
|
return logger(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logger(ctx sdk.Context) log.Logger {
|
||||||
|
return ctx.Logger().With("module", auctiontypes.ModuleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *Keeper) SetUsageKeepers(usageKeepers []auctiontypes.AuctionUsageKeeper) {
|
||||||
|
if k.usageKeepers != nil {
|
||||||
|
panic("cannot set auction hooks twice")
|
||||||
|
}
|
||||||
|
|
||||||
|
k.usageKeepers = usageKeepers
|
||||||
|
}
|
||||||
|
|
||||||
// SaveAuction - saves a auction to the store.
|
// SaveAuction - saves a auction to the store.
|
||||||
func (k Keeper) SaveAuction(ctx sdk.Context, auction *auctiontypes.Auction) error {
|
func (k Keeper) SaveAuction(ctx sdk.Context, auction *auctiontypes.Auction) error {
|
||||||
return k.Auctions.Set(ctx, auction.Id, *auction)
|
return k.Auctions.Set(ctx, auction.Id, *auction)
|
||||||
|
|
||||||
// // Notify interested parties.
|
|
||||||
// for _, keeper := range k.usageKeepers {
|
|
||||||
// keeper.OnAuction(ctx, auction.Id)
|
|
||||||
// }
|
|
||||||
// return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteAuction - deletes the auction.
|
// DeleteAuction - deletes the auction.
|
||||||
@ -154,12 +160,6 @@ func (k Keeper) HasAuction(ctx sdk.Context, id string) (bool, error) {
|
|||||||
func (k Keeper) SaveBid(ctx sdk.Context, bid *auctiontypes.Bid) error {
|
func (k Keeper) SaveBid(ctx sdk.Context, bid *auctiontypes.Bid) error {
|
||||||
key := collections.Join(bid.AuctionId, bid.BidderAddress)
|
key := collections.Join(bid.AuctionId, bid.BidderAddress)
|
||||||
return k.Bids.Set(ctx, key, *bid)
|
return k.Bids.Set(ctx, key, *bid)
|
||||||
|
|
||||||
// // Notify interested parties.
|
|
||||||
// for _, keeper := range k.usageKeepers {
|
|
||||||
// keeper.OnAuctionBid(ctx, bid.AuctionId, bid.BidderAddress)
|
|
||||||
// }
|
|
||||||
// return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k Keeper) DeleteBid(ctx sdk.Context, bid auctiontypes.Bid) error {
|
func (k Keeper) DeleteBid(ctx sdk.Context, bid auctiontypes.Bid) error {
|
||||||
@ -191,7 +191,6 @@ func (k Keeper) GetBid(ctx sdk.Context, id string, bidder string) (auctiontypes.
|
|||||||
func (k Keeper) GetBids(ctx sdk.Context, id string) ([]*auctiontypes.Bid, error) {
|
func (k Keeper) GetBids(ctx sdk.Context, id string) ([]*auctiontypes.Bid, error) {
|
||||||
var bids []*auctiontypes.Bid
|
var bids []*auctiontypes.Bid
|
||||||
|
|
||||||
// TODO: Optimize using return by value?
|
|
||||||
err := k.Bids.Walk(ctx, collections.NewPrefixedPairRange[string, string](id), func(key collections.Pair[string, string], value auctiontypes.Bid) (stop bool, err error) {
|
err := k.Bids.Walk(ctx, collections.NewPrefixedPairRange[string, string](id), func(key collections.Pair[string, string], value auctiontypes.Bid) (stop bool, err error) {
|
||||||
bids = append(bids, &value)
|
bids = append(bids, &value)
|
||||||
return false, nil
|
return false, nil
|
||||||
@ -463,13 +462,13 @@ func (k Keeper) RevealBid(ctx sdk.Context, msg auctiontypes.MsgRevealBid) (*auct
|
|||||||
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Reveal JSON unmarshal error.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Reveal JSON unmarshal error.")
|
||||||
}
|
}
|
||||||
|
|
||||||
chainID, err := wnsUtils.GetAttributeAsString(reveal, "chainId")
|
chainId, err := wnsUtils.GetAttributeAsString(reveal, "chainId")
|
||||||
if err != nil || chainID != ctx.ChainID() {
|
if err != nil || chainId != ctx.ChainID() {
|
||||||
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid reveal chainID.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid reveal chainID.")
|
||||||
}
|
}
|
||||||
|
|
||||||
auctionID, err := wnsUtils.GetAttributeAsString(reveal, "auctionId")
|
auctionId, err := wnsUtils.GetAttributeAsString(reveal, "auctionId")
|
||||||
if err != nil || auctionID != msg.AuctionId {
|
if err != nil || auctionId != msg.AuctionId {
|
||||||
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid reveal auction Id.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid reveal auction Id.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,7 +556,7 @@ func (k Keeper) processAuctionPhases(ctx sdk.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Logger().Info(fmt.Sprintf("Moved auction %s to reveal phase.", auction.Id))
|
k.Logger(ctx).Info(fmt.Sprintf("Moved auction %s to reveal phase.", auction.Id))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reveal -> Expired state.
|
// Reveal -> Expired state.
|
||||||
@ -567,7 +566,7 @@ func (k Keeper) processAuctionPhases(ctx sdk.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Logger().Info(fmt.Sprintf("Moved auction %s to expired state.", auction.Id))
|
k.Logger(ctx).Info(fmt.Sprintf("Moved auction %s to expired state.", auction.Id))
|
||||||
}
|
}
|
||||||
|
|
||||||
// If auction has expired, pick a winner from revealed bids.
|
// If auction has expired, pick a winner from revealed bids.
|
||||||
@ -592,7 +591,7 @@ func (k Keeper) deleteCompletedAuctions(ctx sdk.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, auction := range auctions {
|
for _, auction := range auctions {
|
||||||
ctx.Logger().Info(fmt.Sprintf("Deleting completed auction %s after timeout.", auction.Id))
|
k.Logger(ctx).Info(fmt.Sprintf("Deleting completed auction %s after timeout.", auction.Id))
|
||||||
if err := k.DeleteAuction(ctx, *auction); err != nil {
|
if err := k.DeleteAuction(ctx, *auction); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -602,7 +601,7 @@ func (k Keeper) deleteCompletedAuctions(ctx sdk.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction) error {
|
func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction) error {
|
||||||
ctx.Logger().Info(fmt.Sprintf("Picking auction %s winner.", auction.Id))
|
k.Logger(ctx).Info(fmt.Sprintf("Picking auction %s winner.", auction.Id))
|
||||||
|
|
||||||
var highestBid *auctiontypes.Bid
|
var highestBid *auctiontypes.Bid
|
||||||
var secondHighestBid *auctiontypes.Bid
|
var secondHighestBid *auctiontypes.Bid
|
||||||
@ -613,38 +612,38 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, bid := range bids {
|
for _, bid := range bids {
|
||||||
ctx.Logger().Info(fmt.Sprintf("Processing bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Processing bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
||||||
|
|
||||||
// Only consider revealed bids.
|
// Only consider revealed bids.
|
||||||
if bid.Status != auctiontypes.BidStatusRevealed {
|
if bid.Status != auctiontypes.BidStatusRevealed {
|
||||||
ctx.Logger().Info(fmt.Sprintf("Ignoring unrevealed bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Ignoring unrevealed bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init highest bid.
|
// Init highest bid.
|
||||||
if highestBid == nil {
|
if highestBid == nil {
|
||||||
highestBid = bid
|
highestBid = bid
|
||||||
ctx.Logger().Info(fmt.Sprintf("Initializing 1st bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Initializing 1st bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint: all
|
//nolint: all
|
||||||
if highestBid.BidAmount.IsLT(bid.BidAmount) {
|
if highestBid.BidAmount.IsLT(bid.BidAmount) {
|
||||||
ctx.Logger().Info(fmt.Sprintf("New highest bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("New highest bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
||||||
|
|
||||||
secondHighestBid = highestBid
|
secondHighestBid = highestBid
|
||||||
highestBid = bid
|
highestBid = bid
|
||||||
|
|
||||||
ctx.Logger().Info(fmt.Sprintf("Updated 1st bid %s %s", highestBid.BidderAddress, highestBid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Updated 1st bid %s %s", highestBid.BidderAddress, highestBid.BidAmount.String()))
|
||||||
ctx.Logger().Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String()))
|
||||||
|
|
||||||
} else if secondHighestBid == nil || secondHighestBid.BidAmount.IsLT(bid.BidAmount) {
|
} else if secondHighestBid == nil || secondHighestBid.BidAmount.IsLT(bid.BidAmount) {
|
||||||
ctx.Logger().Info(fmt.Sprintf("New 2nd highest bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("New 2nd highest bid %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
||||||
|
|
||||||
secondHighestBid = bid
|
secondHighestBid = bid
|
||||||
ctx.Logger().Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Updated 2nd bid %s %s", secondHighestBid.BidderAddress, secondHighestBid.BidAmount.String()))
|
||||||
} else {
|
} else {
|
||||||
ctx.Logger().Info(fmt.Sprintf("Ignoring bid as it doesn't affect 1st/2nd price %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Ignoring bid as it doesn't affect 1st/2nd price %s %s", bid.BidderAddress, bid.BidAmount.String()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -660,11 +659,11 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction
|
|||||||
if secondHighestBid != nil {
|
if secondHighestBid != nil {
|
||||||
auction.WinningPrice = secondHighestBid.BidAmount
|
auction.WinningPrice = secondHighestBid.BidAmount
|
||||||
}
|
}
|
||||||
ctx.Logger().Info(fmt.Sprintf("Auction %s winner %s.", auction.Id, auction.WinnerAddress))
|
k.Logger(ctx).Info(fmt.Sprintf("Auction %s winner %s.", auction.Id, auction.WinnerAddress))
|
||||||
ctx.Logger().Info(fmt.Sprintf("Auction %s winner bid %s.", auction.Id, auction.WinningBid.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Auction %s winner bid %s.", auction.Id, auction.WinningBid.String()))
|
||||||
ctx.Logger().Info(fmt.Sprintf("Auction %s winner price %s.", auction.Id, auction.WinningPrice.String()))
|
k.Logger(ctx).Info(fmt.Sprintf("Auction %s winner price %s.", auction.Id, auction.WinningPrice.String()))
|
||||||
} else {
|
} else {
|
||||||
ctx.Logger().Info(fmt.Sprintf("Auction %s has no valid revealed bids (no winner).", auction.Id))
|
k.Logger(ctx).Info(fmt.Sprintf("Auction %s has no valid revealed bids (no winner).", auction.Id))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := k.SaveAuction(ctx, auction); err != nil {
|
if err := k.SaveAuction(ctx, auction); err != nil {
|
||||||
@ -674,7 +673,7 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction
|
|||||||
for _, bid := range bids {
|
for _, bid := range bids {
|
||||||
bidderAddress, err := sdk.AccAddressFromBech32(bid.BidderAddress)
|
bidderAddress, err := sdk.AccAddressFromBech32(bid.BidderAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Logger().Error(fmt.Sprintf("Invalid bidderAddress address. %v", err))
|
k.Logger(ctx).Error(fmt.Sprintf("Invalid bidderAddress address. %v", err))
|
||||||
panic("Invalid bidder address.")
|
panic("Invalid bidder address.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,7 +681,7 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction
|
|||||||
// Send reveal fee back to bidders that've revealed the bid.
|
// Send reveal fee back to bidders that've revealed the bid.
|
||||||
sdkErr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, auctiontypes.ModuleName, bidderAddress, sdk.NewCoins(bid.RevealFee))
|
sdkErr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, auctiontypes.ModuleName, bidderAddress, sdk.NewCoins(bid.RevealFee))
|
||||||
if sdkErr != nil {
|
if sdkErr != nil {
|
||||||
ctx.Logger().Error(fmt.Sprintf("Auction error returning reveal fee: %v", sdkErr))
|
k.Logger(ctx).Error(fmt.Sprintf("Auction error returning reveal fee: %v", sdkErr))
|
||||||
panic(sdkErr)
|
panic(sdkErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -690,7 +689,7 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction
|
|||||||
// Send back locked bid amount to all bidders.
|
// Send back locked bid amount to all bidders.
|
||||||
sdkErr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, auctiontypes.ModuleName, bidderAddress, sdk.NewCoins(bid.BidAmount))
|
sdkErr := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, auctiontypes.ModuleName, bidderAddress, sdk.NewCoins(bid.BidAmount))
|
||||||
if sdkErr != nil {
|
if sdkErr != nil {
|
||||||
ctx.Logger().Error(fmt.Sprintf("Auction error returning bid amount: %v", sdkErr))
|
k.Logger(ctx).Error(fmt.Sprintf("Auction error returning bid amount: %v", sdkErr))
|
||||||
panic(sdkErr)
|
panic(sdkErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -699,39 +698,38 @@ func (k Keeper) pickAuctionWinner(ctx sdk.Context, auction *auctiontypes.Auction
|
|||||||
if auction.WinnerAddress != "" {
|
if auction.WinnerAddress != "" {
|
||||||
winnerAddress, err := sdk.AccAddressFromBech32(auction.WinnerAddress)
|
winnerAddress, err := sdk.AccAddressFromBech32(auction.WinnerAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Logger().Error(fmt.Sprintf("Invalid winner address. %v", err))
|
k.Logger(ctx).Error(fmt.Sprintf("Invalid winner address. %v", err))
|
||||||
panic("Invalid winner address.")
|
panic("Invalid winner address.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take 2nd price from winner.
|
// Take 2nd price from winner.
|
||||||
sdkErr := k.bankKeeper.SendCoinsFromAccountToModule(ctx, winnerAddress, auctiontypes.ModuleName, sdk.NewCoins(auction.WinningPrice))
|
sdkErr := k.bankKeeper.SendCoinsFromAccountToModule(ctx, winnerAddress, auctiontypes.ModuleName, sdk.NewCoins(auction.WinningPrice))
|
||||||
if sdkErr != nil {
|
if sdkErr != nil {
|
||||||
ctx.Logger().Error(fmt.Sprintf("Auction error taking funds from winner: %v", sdkErr))
|
k.Logger(ctx).Error(fmt.Sprintf("Auction error taking funds from winner: %v", sdkErr))
|
||||||
panic(sdkErr)
|
panic(sdkErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Burn anything over the min. bid amount.
|
// Burn anything over the min. bid amount.
|
||||||
amountToBurn := auction.WinningPrice.Sub(auction.MinimumBid)
|
amountToBurn := auction.WinningPrice.Sub(auction.MinimumBid)
|
||||||
if amountToBurn.IsNegative() {
|
if amountToBurn.IsNegative() {
|
||||||
ctx.Logger().Error("Auction coins to burn cannot be negative.")
|
k.Logger(ctx).Error("Auction coins to burn cannot be negative.")
|
||||||
panic("Auction coins to burn cannot be negative.")
|
panic("Auction coins to burn cannot be negative.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use auction burn module account instead of actually burning coins to better keep track of supply.
|
// Use auction burn module account instead of actually burning coins to better keep track of supply.
|
||||||
sdkErr = k.bankKeeper.SendCoinsFromModuleToModule(ctx, auctiontypes.ModuleName, auctiontypes.AuctionBurnModuleAccountName, sdk.NewCoins(amountToBurn))
|
sdkErr = k.bankKeeper.SendCoinsFromModuleToModule(ctx, auctiontypes.ModuleName, auctiontypes.AuctionBurnModuleAccountName, sdk.NewCoins(amountToBurn))
|
||||||
if sdkErr != nil {
|
if sdkErr != nil {
|
||||||
ctx.Logger().Error(fmt.Sprintf("Auction error burning coins: %v", sdkErr))
|
k.Logger(ctx).Error(fmt.Sprintf("Auction error burning coins: %v", sdkErr))
|
||||||
panic(sdkErr)
|
panic(sdkErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Notify other modules (hook).
|
// Notify other modules (hook).
|
||||||
// ctx.Logger().Info(fmt.Sprintf("Auction %s notifying %d modules.", auction.Id, len(k.usageKeepers)))
|
k.Logger(ctx).Info(fmt.Sprintf("Auction %s notifying %d modules.", auction.Id, len(k.usageKeepers)))
|
||||||
// for _, keeper := range k.usageKeepers {
|
for _, keeper := range k.usageKeepers {
|
||||||
// ctx.Logger().Info(fmt.Sprintf("Auction %s notifying module %s.", auction.Id, keeper.ModuleName()))
|
k.Logger(ctx).Info(fmt.Sprintf("Auction %s notifying module %s.", auction.Id, keeper.ModuleName()))
|
||||||
// keeper.OnAuctionWinnerSelected(ctx, auction.Id)
|
keeper.OnAuctionWinnerSelected(ctx, auction.Id)
|
||||||
// }
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,11 @@ import (
|
|||||||
var _ auctiontypes.MsgServer = msgServer{}
|
var _ auctiontypes.MsgServer = msgServer{}
|
||||||
|
|
||||||
type msgServer struct {
|
type msgServer struct {
|
||||||
k Keeper
|
k *Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMsgServerImpl returns an implementation of the module MsgServer interface.
|
// NewMsgServerImpl returns an implementation of the module MsgServer interface.
|
||||||
func NewMsgServerImpl(keeper Keeper) auctiontypes.MsgServer {
|
func NewMsgServerImpl(keeper *Keeper) auctiontypes.MsgServer {
|
||||||
return &msgServer{k: keeper}
|
return &msgServer{k: keeper}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ func (ms msgServer) CommitBid(c context.Context, msg *auctiontypes.MsgCommitBid)
|
|||||||
ctx.EventManager().EmitEvents(sdk.Events{
|
ctx.EventManager().EmitEvents(sdk.Events{
|
||||||
sdk.NewEvent(
|
sdk.NewEvent(
|
||||||
auctiontypes.EventTypeCommitBid,
|
auctiontypes.EventTypeCommitBid,
|
||||||
sdk.NewAttribute(auctiontypes.AttributeKeyAuctionID, msg.AuctionId),
|
sdk.NewAttribute(auctiontypes.AttributeKeyAuctionId, msg.AuctionId),
|
||||||
sdk.NewAttribute(auctiontypes.AttributeKeyCommitHash, msg.CommitHash),
|
sdk.NewAttribute(auctiontypes.AttributeKeyCommitHash, msg.CommitHash),
|
||||||
),
|
),
|
||||||
sdk.NewEvent(
|
sdk.NewEvent(
|
||||||
@ -98,7 +98,7 @@ func (ms msgServer) RevealBid(c context.Context, msg *auctiontypes.MsgRevealBid)
|
|||||||
ctx.EventManager().EmitEvents(sdk.Events{
|
ctx.EventManager().EmitEvents(sdk.Events{
|
||||||
sdk.NewEvent(
|
sdk.NewEvent(
|
||||||
auctiontypes.EventTypeRevealBid,
|
auctiontypes.EventTypeRevealBid,
|
||||||
sdk.NewAttribute(auctiontypes.AttributeKeyAuctionID, msg.AuctionId),
|
sdk.NewAttribute(auctiontypes.AttributeKeyAuctionId, msg.AuctionId),
|
||||||
sdk.NewAttribute(auctiontypes.AttributeKeyReveal, msg.Reveal),
|
sdk.NewAttribute(auctiontypes.AttributeKeyReveal, msg.Reveal),
|
||||||
),
|
),
|
||||||
sdk.NewEvent(
|
sdk.NewEvent(
|
||||||
|
@ -13,11 +13,11 @@ import (
|
|||||||
var _ auctiontypes.QueryServer = queryServer{}
|
var _ auctiontypes.QueryServer = queryServer{}
|
||||||
|
|
||||||
type queryServer struct {
|
type queryServer struct {
|
||||||
k Keeper
|
k *Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewQueryServerImpl returns an implementation of the module QueryServer.
|
// NewQueryServerImpl returns an implementation of the module QueryServer.
|
||||||
func NewQueryServerImpl(k Keeper) auctiontypes.QueryServer {
|
func NewQueryServerImpl(k *Keeper) auctiontypes.QueryServer {
|
||||||
return queryServer{k}
|
return queryServer{k}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// EndBlocker is called every block
|
// EndBlocker is called every block
|
||||||
func EndBlocker(ctx context.Context, k keeper.Keeper) error {
|
func EndBlocker(ctx context.Context, k *keeper.Keeper) error {
|
||||||
sdkCtx := sdk.UnwrapSDKContext(ctx)
|
sdkCtx := sdk.UnwrapSDKContext(ctx)
|
||||||
|
|
||||||
return k.EndBlockerProcessAuctions(sdkCtx)
|
return k.EndBlockerProcessAuctions(sdkCtx)
|
||||||
|
@ -4,12 +4,14 @@ import (
|
|||||||
"cosmossdk.io/core/appmodule"
|
"cosmossdk.io/core/appmodule"
|
||||||
"cosmossdk.io/core/store"
|
"cosmossdk.io/core/store"
|
||||||
"cosmossdk.io/depinject"
|
"cosmossdk.io/depinject"
|
||||||
|
"golang.org/x/exp/maps"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
auth "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
auth "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||||
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||||
|
|
||||||
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/auction/module/v1"
|
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/auction/module/v1"
|
||||||
|
"git.vdb.to/cerc-io/laconic2d/x/auction"
|
||||||
"git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
"git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -25,6 +27,7 @@ func init() {
|
|||||||
appmodule.Register(
|
appmodule.Register(
|
||||||
&modulev1.Module{},
|
&modulev1.Module{},
|
||||||
appmodule.Provide(ProvideModule),
|
appmodule.Provide(ProvideModule),
|
||||||
|
appmodule.Invoke(InvokeSetAuctionHooks),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +44,11 @@ type ModuleInputs struct {
|
|||||||
type ModuleOutputs struct {
|
type ModuleOutputs struct {
|
||||||
depinject.Out
|
depinject.Out
|
||||||
|
|
||||||
Keeper keeper.Keeper
|
// Use * as required by InvokeSetAuctionHooks
|
||||||
|
// https://github.com/cosmos/cosmos-sdk/tree/v0.50.3/core/appmodule#invoker-invocation-details
|
||||||
|
// https://github.com/cosmos/cosmos-sdk/tree/v0.50.3/core/appmodule#regular-golang-types
|
||||||
|
Keeper *keeper.Keeper
|
||||||
|
|
||||||
Module appmodule.AppModule
|
Module appmodule.AppModule
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,3 +58,25 @@ func ProvideModule(in ModuleInputs) ModuleOutputs {
|
|||||||
|
|
||||||
return ModuleOutputs{Module: m, Keeper: k}
|
return ModuleOutputs{Module: m, Keeper: k}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InvokeSetAuctionHooks(
|
||||||
|
config *modulev1.Module,
|
||||||
|
keeper *keeper.Keeper,
|
||||||
|
auctionHooks map[string]auction.AuctionHooksWrapper,
|
||||||
|
) error {
|
||||||
|
// all arguments to invokers are optional
|
||||||
|
if keeper == nil || config == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var usageKeepers []auction.AuctionUsageKeeper
|
||||||
|
|
||||||
|
for _, modName := range maps.Keys(auctionHooks) {
|
||||||
|
hook := auctionHooks[modName]
|
||||||
|
usageKeepers = append(usageKeepers, hook)
|
||||||
|
}
|
||||||
|
|
||||||
|
keeper.SetUsageKeepers(usageKeepers)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -20,8 +20,6 @@ import (
|
|||||||
"git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
"git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Port remaining AppModule methods
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ module.AppModuleBasic = AppModule{}
|
_ module.AppModuleBasic = AppModule{}
|
||||||
_ appmodule.AppModule = AppModule{}
|
_ appmodule.AppModule = AppModule{}
|
||||||
@ -36,11 +34,11 @@ const ConsensusVersion = 1
|
|||||||
|
|
||||||
type AppModule struct {
|
type AppModule struct {
|
||||||
cdc codec.Codec
|
cdc codec.Codec
|
||||||
keeper keeper.Keeper
|
keeper *keeper.Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAppModule creates a new AppModule object
|
// NewAppModule creates a new AppModule object
|
||||||
func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule {
|
func NewAppModule(cdc codec.Codec, keeper *keeper.Keeper) AppModule {
|
||||||
return AppModule{
|
return AppModule{
|
||||||
cdc: cdc,
|
cdc: cdc,
|
||||||
keeper: keeper,
|
keeper: keeper,
|
||||||
|
@ -25,9 +25,9 @@ func NewMsgCreateAuction(params Params, signer sdk.AccAddress) MsgCreateAuction
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewMsgCommitBid is the constructor function for MsgCommitBid.
|
// NewMsgCommitBid is the constructor function for MsgCommitBid.
|
||||||
func NewMsgCommitBid(auctionID string, commitHash string, signer sdk.AccAddress) MsgCommitBid {
|
func NewMsgCommitBid(auctionId string, commitHash string, signer sdk.AccAddress) MsgCommitBid {
|
||||||
return MsgCommitBid{
|
return MsgCommitBid{
|
||||||
AuctionId: auctionID,
|
AuctionId: auctionId,
|
||||||
CommitHash: commitHash,
|
CommitHash: commitHash,
|
||||||
Signer: signer.String(),
|
Signer: signer.String(),
|
||||||
}
|
}
|
||||||
|
@ -217,7 +217,7 @@ func (m *QueryAuctionsResponse) GetPagination() *query.PageRequest {
|
|||||||
|
|
||||||
// AuctionRequest is the format for querying a specific auction
|
// AuctionRequest is the format for querying a specific auction
|
||||||
type QueryAuctionRequest struct {
|
type QueryAuctionRequest struct {
|
||||||
// Auction ID
|
// Auction id
|
||||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ func (m *QueryAuctionResponse) GetAuction() *Auction {
|
|||||||
|
|
||||||
// BidRequest is the format for querying a specific bid in an auction
|
// BidRequest is the format for querying a specific bid in an auction
|
||||||
type QueryBidRequest struct {
|
type QueryBidRequest struct {
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
||||||
// Bidder address
|
// Bidder address
|
||||||
Bidder string `protobuf:"bytes,2,opt,name=bidder,proto3" json:"bidder,omitempty"`
|
Bidder string `protobuf:"bytes,2,opt,name=bidder,proto3" json:"bidder,omitempty"`
|
||||||
@ -410,7 +410,7 @@ func (m *QueryBidResponse) GetBid() *Bid {
|
|||||||
|
|
||||||
// BidsRequest is the format for querying all bids in an auction
|
// BidsRequest is the format for querying all bids in an auction
|
||||||
type QueryBidsRequest struct {
|
type QueryBidsRequest struct {
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ var xxx_messageInfo_MsgCreateAuctionResponse proto.InternalMessageInfo
|
|||||||
|
|
||||||
// CommitBid defines the message to commit a bid
|
// CommitBid defines the message to commit a bid
|
||||||
type MsgCommitBid struct {
|
type MsgCommitBid struct {
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty" json:"auction_id" yaml:"auction_id"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty" json:"auction_id" yaml:"auction_id"`
|
||||||
// Commit Hash
|
// Commit Hash
|
||||||
CommitHash string `protobuf:"bytes,2,opt,name=commit_hash,json=commitHash,proto3" json:"commit_hash,omitempty" json:"commit_hash" yaml:"commit_hash"`
|
CommitHash string `protobuf:"bytes,2,opt,name=commit_hash,json=commitHash,proto3" json:"commit_hash,omitempty" json:"commit_hash" yaml:"commit_hash"`
|
||||||
@ -207,7 +207,7 @@ var xxx_messageInfo_MsgCommitBidResponse proto.InternalMessageInfo
|
|||||||
|
|
||||||
// RevealBid defines the message to reveal a bid
|
// RevealBid defines the message to reveal a bid
|
||||||
type MsgRevealBid struct {
|
type MsgRevealBid struct {
|
||||||
// Auction ID
|
// Auction id
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty" json:"auction_id" yaml:"auction_id"`
|
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty" json:"auction_id" yaml:"auction_id"`
|
||||||
// Commit Hash
|
// Commit Hash
|
||||||
Reveal string `protobuf:"bytes,2,opt,name=reveal,proto3" json:"reveal,omitempty" json:"reveal" yaml:"reveal"`
|
Reveal string `protobuf:"bytes,2,opt,name=reveal,proto3" json:"reveal,omitempty" json:"reveal" yaml:"reveal"`
|
||||||
|
@ -29,14 +29,14 @@ const (
|
|||||||
BidStatusRevealed = "reveal"
|
BidStatusRevealed = "reveal"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AuctionId simplifies generation of auction IDs.
|
// AuctionId simplifies generation of auction ids.
|
||||||
type AuctionId struct {
|
type AuctionId struct {
|
||||||
Address sdk.Address
|
Address sdk.Address
|
||||||
AccNum uint64
|
AccNum uint64
|
||||||
Sequence uint64
|
Sequence uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate creates the auction ID.
|
// Generate creates the auction id.
|
||||||
func (auctionId AuctionId) Generate() string {
|
func (auctionId AuctionId) Generate() string {
|
||||||
hasher := sha256.New()
|
hasher := sha256.New()
|
||||||
str := fmt.Sprintf("%s:%d:%d", auctionId.Address.String(), auctionId.AccNum, auctionId.Sequence)
|
str := fmt.Sprintf("%s:%d:%d", auctionId.Address.String(), auctionId.AccNum, auctionId.Sequence)
|
||||||
|
19
x/bond/expected_keeper.go
Normal file
19
x/bond/expected_keeper.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package bond
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BondUsageKeeper keep track of bond usage in other modules.
|
||||||
|
// Used to, for example, prevent deletion of a bond that's in use.
|
||||||
|
type BondUsageKeeper interface {
|
||||||
|
ModuleName() string
|
||||||
|
UsesBond(ctx sdk.Context, bondId string) bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// BondHooksWrapper is a wrapper for modules to inject BondUsageKeeper using depinject.
|
||||||
|
// Reference: https://github.com/cosmos/cosmos-sdk/tree/v0.50.3/core/appmodule#resolving-circular-dependencies
|
||||||
|
type BondHooksWrapper struct{ BondUsageKeeper }
|
||||||
|
|
||||||
|
// IsOnePerModuleType implements the depinject.OnePerModuleType interface.
|
||||||
|
func (BondHooksWrapper) IsOnePerModuleType() {}
|
@ -49,7 +49,7 @@ type Keeper struct {
|
|||||||
bankKeeper bank.Keeper
|
bankKeeper bank.Keeper
|
||||||
|
|
||||||
// Track bond usage in other cosmos-sdk modules (more like a usage tracker).
|
// Track bond usage in other cosmos-sdk modules (more like a usage tracker).
|
||||||
// usageKeepers []types.BondUsageKeeper
|
usageKeepers []bondtypes.BondUsageKeeper
|
||||||
|
|
||||||
// State management
|
// State management
|
||||||
Schema collections.Schema
|
Schema collections.Schema
|
||||||
@ -63,8 +63,7 @@ func NewKeeper(
|
|||||||
storeService store.KVStoreService,
|
storeService store.KVStoreService,
|
||||||
accountKeeper auth.AccountKeeper,
|
accountKeeper auth.AccountKeeper,
|
||||||
bankKeeper bank.Keeper,
|
bankKeeper bank.Keeper,
|
||||||
// usageKeepers []types.BondUsageKeeper,
|
) *Keeper {
|
||||||
) Keeper {
|
|
||||||
sb := collections.NewSchemaBuilder(storeService)
|
sb := collections.NewSchemaBuilder(storeService)
|
||||||
k := Keeper{
|
k := Keeper{
|
||||||
cdc: cdc,
|
cdc: cdc,
|
||||||
@ -72,7 +71,7 @@ func NewKeeper(
|
|||||||
bankKeeper: bankKeeper,
|
bankKeeper: bankKeeper,
|
||||||
Params: collections.NewItem(sb, bondtypes.ParamsPrefix, "params", codec.CollValue[bondtypes.Params](cdc)),
|
Params: collections.NewItem(sb, bondtypes.ParamsPrefix, "params", codec.CollValue[bondtypes.Params](cdc)),
|
||||||
Bonds: collections.NewIndexedMap(sb, bondtypes.BondsPrefix, "bonds", collections.StringKey, codec.CollValue[bondtypes.Bond](cdc), newBondIndexes(sb)),
|
Bonds: collections.NewIndexedMap(sb, bondtypes.BondsPrefix, "bonds", collections.StringKey, codec.CollValue[bondtypes.Bond](cdc), newBondIndexes(sb)),
|
||||||
// usageKeepers: usageKeepers,
|
usageKeepers: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
schema, err := sb.Build()
|
schema, err := sb.Build()
|
||||||
@ -82,7 +81,15 @@ func NewKeeper(
|
|||||||
|
|
||||||
k.Schema = schema
|
k.Schema = schema
|
||||||
|
|
||||||
return k
|
return &k
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *Keeper) SetUsageKeepers(usageKeepers []bondtypes.BondUsageKeeper) {
|
||||||
|
if k.usageKeepers != nil {
|
||||||
|
panic("cannot set bond hooks twice")
|
||||||
|
}
|
||||||
|
|
||||||
|
k.usageKeepers = usageKeepers
|
||||||
}
|
}
|
||||||
|
|
||||||
// BondId simplifies generation of bond Ids.
|
// BondId simplifies generation of bond Ids.
|
||||||
@ -318,13 +325,12 @@ func (k Keeper) CancelBond(ctx sdk.Context, id string, ownerAddress sdk.AccAddre
|
|||||||
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Check if bond is used in other modules.
|
// Check if bond is used in other modules.
|
||||||
// for _, usageKeeper := range k.usageKeepers {
|
for _, usageKeeper := range k.usageKeepers {
|
||||||
// if usageKeeper.UsesBond(ctx, id) {
|
if usageKeeper.UsesBond(ctx, id) {
|
||||||
// return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, fmt.Sprintf("Bond in use by the '%s' module.", usageKeeper.ModuleName()))
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, fmt.Sprintf("Bond in use by the '%s' module.", usageKeeper.ModuleName()))
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// Move funds from the bond into the account.
|
// Move funds from the bond into the account.
|
||||||
err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, bondtypes.ModuleName, ownerAddress, bond.Balance)
|
err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, bondtypes.ModuleName, ownerAddress, bond.Balance)
|
||||||
|
@ -11,11 +11,11 @@ import (
|
|||||||
var _ bond.MsgServer = msgServer{}
|
var _ bond.MsgServer = msgServer{}
|
||||||
|
|
||||||
type msgServer struct {
|
type msgServer struct {
|
||||||
k Keeper
|
k *Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMsgServerImpl returns an implementation of the module MsgServer interface.
|
// NewMsgServerImpl returns an implementation of the module MsgServer interface.
|
||||||
func NewMsgServerImpl(keeper Keeper) bond.MsgServer {
|
func NewMsgServerImpl(keeper *Keeper) bond.MsgServer {
|
||||||
return &msgServer{k: keeper}
|
return &msgServer{k: keeper}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,11 +13,11 @@ import (
|
|||||||
var _ bondtypes.QueryServer = queryServer{}
|
var _ bondtypes.QueryServer = queryServer{}
|
||||||
|
|
||||||
type queryServer struct {
|
type queryServer struct {
|
||||||
k Keeper
|
k *Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewQueryServerImpl returns an implementation of the module QueryServer.
|
// NewQueryServerImpl returns an implementation of the module QueryServer.
|
||||||
func NewQueryServerImpl(k Keeper) bondtypes.QueryServer {
|
func NewQueryServerImpl(k *Keeper) bondtypes.QueryServer {
|
||||||
return queryServer{k}
|
return queryServer{k}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,12 +4,14 @@ import (
|
|||||||
"cosmossdk.io/core/appmodule"
|
"cosmossdk.io/core/appmodule"
|
||||||
"cosmossdk.io/core/store"
|
"cosmossdk.io/core/store"
|
||||||
"cosmossdk.io/depinject"
|
"cosmossdk.io/depinject"
|
||||||
|
"golang.org/x/exp/maps"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
auth "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
auth "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||||
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||||
|
|
||||||
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/bond/module/v1"
|
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/bond/module/v1"
|
||||||
|
"git.vdb.to/cerc-io/laconic2d/x/bond"
|
||||||
"git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
|
"git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -25,6 +27,7 @@ func init() {
|
|||||||
appmodule.Register(
|
appmodule.Register(
|
||||||
&modulev1.Module{},
|
&modulev1.Module{},
|
||||||
appmodule.Provide(ProvideModule),
|
appmodule.Provide(ProvideModule),
|
||||||
|
appmodule.Invoke(InvokeSetBondHooks),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +44,7 @@ type ModuleInputs struct {
|
|||||||
type ModuleOutputs struct {
|
type ModuleOutputs struct {
|
||||||
depinject.Out
|
depinject.Out
|
||||||
|
|
||||||
Keeper keeper.Keeper
|
Keeper *keeper.Keeper
|
||||||
Module appmodule.AppModule
|
Module appmodule.AppModule
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,3 +54,25 @@ func ProvideModule(in ModuleInputs) ModuleOutputs {
|
|||||||
|
|
||||||
return ModuleOutputs{Module: m, Keeper: k}
|
return ModuleOutputs{Module: m, Keeper: k}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InvokeSetBondHooks(
|
||||||
|
config *modulev1.Module,
|
||||||
|
keeper *keeper.Keeper,
|
||||||
|
bondHooks map[string]bond.BondHooksWrapper,
|
||||||
|
) error {
|
||||||
|
// all arguments to invokers are optional
|
||||||
|
if keeper == nil || config == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var usageKeepers []bond.BondUsageKeeper
|
||||||
|
|
||||||
|
for _, modName := range maps.Keys(bondHooks) {
|
||||||
|
hook := bondHooks[modName]
|
||||||
|
usageKeepers = append(usageKeepers, hook)
|
||||||
|
}
|
||||||
|
|
||||||
|
keeper.SetUsageKeepers(usageKeepers)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -18,8 +18,6 @@ import (
|
|||||||
"git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
|
"git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Port remaining AppModule methods
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ module.AppModuleBasic = AppModule{}
|
_ module.AppModuleBasic = AppModule{}
|
||||||
_ appmodule.AppModule = AppModule{}
|
_ appmodule.AppModule = AppModule{}
|
||||||
@ -33,11 +31,11 @@ const ConsensusVersion = 1
|
|||||||
|
|
||||||
type AppModule struct {
|
type AppModule struct {
|
||||||
cdc codec.Codec
|
cdc codec.Codec
|
||||||
keeper keeper.Keeper
|
keeper *keeper.Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAppModule creates a new AppModule object
|
// NewAppModule creates a new AppModule object
|
||||||
func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule {
|
func NewAppModule(cdc codec.Codec, keeper *keeper.Keeper) AppModule {
|
||||||
return AppModule{
|
return AppModule{
|
||||||
cdc: cdc,
|
cdc: cdc,
|
||||||
keeper: keeper,
|
keeper: keeper,
|
||||||
|
@ -43,12 +43,6 @@ func (k *Keeper) InitGenesis(ctx sdk.Context, data *registry.GenesisState) error
|
|||||||
if err := k.insertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime); err != nil {
|
if err := k.insertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Note: Bond genesis runs first, so bonds will already be present.
|
|
||||||
// if authority.Entry.BondId != "" {
|
|
||||||
// k.AddBondToAuthorityIndexEntry(ctx, authority.Entry.BondId, authority.Name)
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"cosmossdk.io/collections/indexes"
|
"cosmossdk.io/collections/indexes"
|
||||||
storetypes "cosmossdk.io/core/store"
|
storetypes "cosmossdk.io/core/store"
|
||||||
errorsmod "cosmossdk.io/errors"
|
errorsmod "cosmossdk.io/errors"
|
||||||
|
"cosmossdk.io/log"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
@ -28,8 +29,6 @@ import (
|
|||||||
"git.vdb.to/cerc-io/laconic2d/x/registry/helpers"
|
"git.vdb.to/cerc-io/laconic2d/x/registry/helpers"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Add required methods
|
|
||||||
|
|
||||||
type RecordsIndexes struct {
|
type RecordsIndexes struct {
|
||||||
BondId *indexes.Multi[string, string, registrytypes.Record]
|
BondId *indexes.Multi[string, string, registrytypes.Record]
|
||||||
}
|
}
|
||||||
@ -50,16 +49,24 @@ func newRecordIndexes(sb *collections.SchemaBuilder) RecordsIndexes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
type AuthoritiesIndexes struct {
|
type AuthoritiesIndexes struct {
|
||||||
|
AuctionId *indexes.Multi[string, string, registrytypes.NameAuthority]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b AuthoritiesIndexes) IndexesList() []collections.Index[string, registrytypes.NameAuthority] {
|
func (a AuthoritiesIndexes) IndexesList() []collections.Index[string, registrytypes.NameAuthority] {
|
||||||
return []collections.Index[string, registrytypes.NameAuthority]{}
|
return []collections.Index[string, registrytypes.NameAuthority]{a.AuctionId}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newAuthorityIndexes(sb *collections.SchemaBuilder) AuthoritiesIndexes {
|
func newAuthorityIndexes(sb *collections.SchemaBuilder) AuthoritiesIndexes {
|
||||||
return AuthoritiesIndexes{}
|
return AuthoritiesIndexes{
|
||||||
|
AuctionId: indexes.NewMulti(
|
||||||
|
sb, registrytypes.AuthoritiesByAuctionIdIndexPrefix, "authorities_by_auction_id",
|
||||||
|
collections.StringKey, collections.StringKey,
|
||||||
|
func(name string, v registrytypes.NameAuthority) (string, error) {
|
||||||
|
return v.AuctionId, nil
|
||||||
|
},
|
||||||
|
),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type NameRecordsIndexes struct {
|
type NameRecordsIndexes struct {
|
||||||
@ -87,9 +94,8 @@ type Keeper struct {
|
|||||||
|
|
||||||
accountKeeper auth.AccountKeeper
|
accountKeeper auth.AccountKeeper
|
||||||
bankKeeper bank.Keeper
|
bankKeeper bank.Keeper
|
||||||
recordKeeper RecordKeeper
|
bondKeeper *bondkeeper.Keeper
|
||||||
bondKeeper bondkeeper.Keeper
|
auctionKeeper *auctionkeeper.Keeper
|
||||||
auctionKeeper auctionkeeper.Keeper
|
|
||||||
|
|
||||||
// state management
|
// state management
|
||||||
Schema collections.Schema
|
Schema collections.Schema
|
||||||
@ -107,16 +113,14 @@ func NewKeeper(
|
|||||||
storeService storetypes.KVStoreService,
|
storeService storetypes.KVStoreService,
|
||||||
accountKeeper auth.AccountKeeper,
|
accountKeeper auth.AccountKeeper,
|
||||||
bankKeeper bank.Keeper,
|
bankKeeper bank.Keeper,
|
||||||
recordKeeper RecordKeeper,
|
bondKeeper *bondkeeper.Keeper,
|
||||||
bondKeeper bondkeeper.Keeper,
|
auctionKeeper *auctionkeeper.Keeper,
|
||||||
auctionKeeper auctionkeeper.Keeper,
|
|
||||||
) Keeper {
|
) Keeper {
|
||||||
sb := collections.NewSchemaBuilder(storeService)
|
sb := collections.NewSchemaBuilder(storeService)
|
||||||
k := Keeper{
|
k := Keeper{
|
||||||
cdc: cdc,
|
cdc: cdc,
|
||||||
accountKeeper: accountKeeper,
|
accountKeeper: accountKeeper,
|
||||||
bankKeeper: bankKeeper,
|
bankKeeper: bankKeeper,
|
||||||
recordKeeper: recordKeeper,
|
|
||||||
bondKeeper: bondKeeper,
|
bondKeeper: bondKeeper,
|
||||||
auctionKeeper: auctionKeeper,
|
auctionKeeper: auctionKeeper,
|
||||||
Params: collections.NewItem(sb, registrytypes.ParamsPrefix, "params", codec.CollValue[registrytypes.Params](cdc)),
|
Params: collections.NewItem(sb, registrytypes.ParamsPrefix, "params", codec.CollValue[registrytypes.Params](cdc)),
|
||||||
@ -155,6 +159,15 @@ func NewKeeper(
|
|||||||
return k
|
return k
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Logger returns a module-specific logger.
|
||||||
|
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
|
||||||
|
return logger(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logger(ctx sdk.Context) log.Logger {
|
||||||
|
return ctx.Logger().With("module", registrytypes.ModuleName)
|
||||||
|
}
|
||||||
|
|
||||||
// HasRecord - checks if a record by the given id exists.
|
// HasRecord - checks if a record by the given id exists.
|
||||||
func (k Keeper) HasRecord(ctx sdk.Context, id string) (bool, error) {
|
func (k Keeper) HasRecord(ctx sdk.Context, id string) (bool, error) {
|
||||||
has, err := k.Records.Has(ctx, id)
|
has, err := k.Records.Has(ctx, id)
|
||||||
@ -230,9 +243,6 @@ func (k Keeper) RecordsFromAttributes(ctx sdk.Context, attributes []*registrytyp
|
|||||||
// PutRecord - saves a record to the store.
|
// PutRecord - saves a record to the store.
|
||||||
func (k Keeper) SaveRecord(ctx sdk.Context, record registrytypes.Record) error {
|
func (k Keeper) SaveRecord(ctx sdk.Context, record registrytypes.Record) error {
|
||||||
return k.Records.Set(ctx, record.Id, record)
|
return k.Records.Set(ctx, record.Id, record)
|
||||||
|
|
||||||
// TODO
|
|
||||||
// k.updateBlockChangeSetForRecord(ctx, record.Id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcessSetRecord creates a record.
|
// ProcessSetRecord creates a record.
|
||||||
@ -274,7 +284,7 @@ func (k Keeper) SetRecord(ctx sdk.Context, msg registrytypes.MsgSetRecord) (*reg
|
|||||||
|
|
||||||
// Sort owners list.
|
// Sort owners list.
|
||||||
sort.Strings(record.Owners)
|
sort.Strings(record.Owners)
|
||||||
sdkErr := k.processRecord(ctx, &record, false)
|
sdkErr := k.processRecord(ctx, &record)
|
||||||
if sdkErr != nil {
|
if sdkErr != nil {
|
||||||
return nil, sdkErr
|
return nil, sdkErr
|
||||||
}
|
}
|
||||||
@ -282,7 +292,7 @@ func (k Keeper) SetRecord(ctx sdk.Context, msg registrytypes.MsgSetRecord) (*reg
|
|||||||
return &record, nil
|
return &record, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k Keeper) processRecord(ctx sdk.Context, record *registrytypes.ReadableRecord, isRenewal bool) error {
|
func (k Keeper) processRecord(ctx sdk.Context, record *registrytypes.ReadableRecord) error {
|
||||||
params, err := k.GetParams(ctx)
|
params, err := k.GetParams(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -420,7 +430,6 @@ func (k Keeper) GetModuleBalances(ctx sdk.Context) []*registrytypes.AccountBalan
|
|||||||
|
|
||||||
// ProcessRecordExpiryQueue tries to renew expiring records (by collecting rent) else marks them as deleted.
|
// ProcessRecordExpiryQueue tries to renew expiring records (by collecting rent) else marks them as deleted.
|
||||||
func (k Keeper) ProcessRecordExpiryQueue(ctx sdk.Context) error {
|
func (k Keeper) ProcessRecordExpiryQueue(ctx sdk.Context) error {
|
||||||
// TODO: process expired records
|
|
||||||
cids, err := k.getAllExpiredRecords(ctx, ctx.BlockHeader().Time)
|
cids, err := k.getAllExpiredRecords(ctx, ctx.BlockHeader().Time)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -132,16 +132,7 @@ func (k Keeper) SaveNameRecord(ctx sdk.Context, crn string, id string) error {
|
|||||||
Height: uint64(ctx.BlockHeight()),
|
Height: uint64(ctx.BlockHeight()),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Check if index gets updated on entry updates
|
return k.NameRecords.Set(ctx, crn, nameRecord)
|
||||||
if err := k.NameRecords.Set(ctx, crn, nameRecord); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Update changeSet for name.
|
|
||||||
// k.updateBlockChangeSetForName(ctx, crn)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetName creates a CRN -> Record ID mapping.
|
// SetName creates a CRN -> Record ID mapping.
|
||||||
@ -169,9 +160,6 @@ func (k Keeper) SetName(ctx sdk.Context, msg registrytypes.MsgSetName) error {
|
|||||||
// SaveNameAuthority creates the NameAuthority record.
|
// SaveNameAuthority creates the NameAuthority record.
|
||||||
func (k Keeper) SaveNameAuthority(ctx sdk.Context, name string, authority *registrytypes.NameAuthority) error {
|
func (k Keeper) SaveNameAuthority(ctx sdk.Context, name string, authority *registrytypes.NameAuthority) error {
|
||||||
return k.Authorities.Set(ctx, name, *authority)
|
return k.Authorities.Set(ctx, name, *authority)
|
||||||
|
|
||||||
// TODO
|
|
||||||
// updateBlockChangeSetForNameAuthority(ctx, codec, store, name)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReserveAuthority reserves a name authority.
|
// ReserveAuthority reserves a name authority.
|
||||||
@ -282,12 +270,9 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
|
|||||||
// If auctions are enabled, clear out owner fields. They will be set after a winner is picked.
|
// If auctions are enabled, clear out owner fields. They will be set after a winner is picked.
|
||||||
authority.OwnerAddress = ""
|
authority.OwnerAddress = ""
|
||||||
authority.OwnerPublicKey = ""
|
authority.OwnerPublicKey = ""
|
||||||
|
|
||||||
// Reset bond ID if required.
|
// Reset bond ID if required.
|
||||||
if authority.BondId != "" || len(authority.BondId) != 0 {
|
authority.BondId = ""
|
||||||
// TODO
|
|
||||||
// k.RemoveBondToAuthorityIndexEntry(ctx, authority.BondId, name)
|
|
||||||
authority.BondId = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
params := auctiontypes.Params{
|
params := auctiontypes.Params{
|
||||||
CommitsDuration: moduleParams.AuthorityAuctionCommitsDuration,
|
CommitsDuration: moduleParams.AuthorityAuctionCommitsDuration,
|
||||||
@ -305,10 +290,6 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
|
|||||||
return sdkErr
|
return sdkErr
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Create auction ID -> authority name index.
|
|
||||||
// k.AddAuctionToAuthorityMapping(ctx, auction.Id, name)
|
|
||||||
|
|
||||||
authority.Status = registrytypes.AuthorityUnderAuction
|
authority.Status = registrytypes.AuthorityUnderAuction
|
||||||
authority.AuctionId = auction.Id
|
authority.AuctionId = auction.Id
|
||||||
authority.ExpiryTime = auction.RevealsEndTime.Add(moduleParams.AuthorityGracePeriod)
|
authority.ExpiryTime = auction.RevealsEndTime.Add(moduleParams.AuthorityGracePeriod)
|
||||||
@ -362,22 +343,12 @@ func (k Keeper) SetAuthorityBond(ctx sdk.Context, msg registrytypes.MsgSetAuthor
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Remove old bond ID mapping, if any.
|
|
||||||
// if authority.BondId != "" {
|
|
||||||
// k.RemoveBondToAuthorityIndexEntry(ctx, authority.BondId, name)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Update bond id and save name authority in store.
|
// Update bond id and save name authority in store.
|
||||||
authority.BondId = bond.Id
|
authority.BondId = bond.Id
|
||||||
if err = k.SaveNameAuthority(ctx, name, &authority); err != nil {
|
if err = k.SaveNameAuthority(ctx, name, &authority); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
|
||||||
// Add new bond ID mapping.
|
|
||||||
// k.AddBondToAuthorityIndexEntry(ctx, authority.BondId, name)
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,8 +517,7 @@ func (k Keeper) ProcessAuthorityExpiryQueue(ctx sdk.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Setup logger
|
k.Logger(ctx).Info(fmt.Sprintf("Marking authority expired as no bond present: %s", name))
|
||||||
// k.Logger(ctx).Info(fmt.Sprintf("Marking authority expired as no bond present: %s", name))
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -620,7 +590,7 @@ func (k Keeper) deleteAuthorityExpiryQueue(ctx sdk.Context, name string, authori
|
|||||||
|
|
||||||
// tryTakeAuthorityRent tries to take rent from the authority bond.
|
// tryTakeAuthorityRent tries to take rent from the authority bond.
|
||||||
func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority registrytypes.NameAuthority) error {
|
func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority registrytypes.NameAuthority) error {
|
||||||
// k.Logger(ctx).Info(fmt.Sprintf("Trying to take rent for authority: %s", name))
|
k.Logger(ctx).Info(fmt.Sprintf("Trying to take rent for authority: %s", name))
|
||||||
|
|
||||||
params, err := k.GetParams(ctx)
|
params, err := k.GetParams(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -636,7 +606,8 @@ func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority reg
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// k.Logger(ctx).Info(fmt.Sprintf("Insufficient funds in owner account to pay authority rent, marking as expired: %s", name))
|
k.Logger(ctx).Info(fmt.Sprintf("Insufficient funds in owner account to pay authority rent, marking as expired: %s", name))
|
||||||
|
|
||||||
return k.deleteAuthorityExpiryQueue(ctx, name, authority)
|
return k.deleteAuthorityExpiryQueue(ctx, name, authority)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -653,7 +624,8 @@ func (k Keeper) tryTakeAuthorityRent(ctx sdk.Context, name string, authority reg
|
|||||||
// Save authority.
|
// Save authority.
|
||||||
authority.Status = registrytypes.AuthorityActive
|
authority.Status = registrytypes.AuthorityActive
|
||||||
|
|
||||||
// k.Logger(ctx).Info(fmt.Sprintf("Authority rent paid successfully: %s", name))
|
k.Logger(ctx).Info(fmt.Sprintf("Authority rent paid successfully: %s", name))
|
||||||
|
|
||||||
return k.SaveNameAuthority(ctx, name, &authority)
|
return k.SaveNameAuthority(ctx, name, &authority)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,24 +1,137 @@
|
|||||||
package keeper
|
package keeper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"cosmossdk.io/collections"
|
||||||
errorsmod "cosmossdk.io/errors"
|
errorsmod "cosmossdk.io/errors"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
|
|
||||||
|
auctiontypes "git.vdb.to/cerc-io/laconic2d/x/auction"
|
||||||
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
||||||
|
bondtypes "git.vdb.to/cerc-io/laconic2d/x/bond"
|
||||||
registrytypes "git.vdb.to/cerc-io/laconic2d/x/registry"
|
registrytypes "git.vdb.to/cerc-io/laconic2d/x/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Add methods
|
// Record keeper implements the bond usage keeper interface.
|
||||||
|
var (
|
||||||
|
_ auctiontypes.AuctionUsageKeeper = RecordKeeper{}
|
||||||
|
_ bondtypes.BondUsageKeeper = RecordKeeper{}
|
||||||
|
)
|
||||||
|
|
||||||
// RecordKeeper exposes the bare minimal read-only API for other modules.
|
// RecordKeeper exposes the bare minimal read-only API for other modules.
|
||||||
type RecordKeeper struct {
|
type RecordKeeper struct {
|
||||||
cdc codec.BinaryCodec // The wire codec for binary encoding/decoding.
|
cdc codec.BinaryCodec // The wire codec for binary encoding/decoding.
|
||||||
auctionKeeper auctionkeeper.Keeper
|
k *Keeper
|
||||||
// storeKey storetypes.StoreKey // Unexposed key to access store from sdk.Context
|
auctionKeeper *auctionkeeper.Keeper
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRecordKeeper creates new instances of the registry RecordKeeper
|
||||||
|
func NewRecordKeeper(cdc codec.BinaryCodec, k *Keeper, auctionKeeper *auctionkeeper.Keeper) RecordKeeper {
|
||||||
|
return RecordKeeper{
|
||||||
|
cdc: cdc,
|
||||||
|
k: k,
|
||||||
|
auctionKeeper: auctionKeeper,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ModuleName returns the module name.
|
||||||
|
func (rk RecordKeeper) ModuleName() string {
|
||||||
|
return registrytypes.ModuleName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rk RecordKeeper) UsesAuction(ctx sdk.Context, auctionId string) bool {
|
||||||
|
iter, err := rk.k.Authorities.Indexes.AuctionId.MatchExact(ctx, auctionId)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return iter.Valid()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rk RecordKeeper) OnAuctionWinnerSelected(ctx sdk.Context, auctionId string) {
|
||||||
|
// Update authority status based on auction status/winner.
|
||||||
|
iter, err := rk.k.Authorities.Indexes.AuctionId.MatchExact(ctx, auctionId)
|
||||||
|
if err != nil && !errors.Is(err, collections.ErrNotFound) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
names, err := iter.PrimaryKeys()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(names) == 0 {
|
||||||
|
// We don't know about this auction, ignore.
|
||||||
|
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, name mapping not found: %s", auctionId))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Take the first one as an auction (non-empty) will map to only one name
|
||||||
|
// MultiIndex being used as there can be multiple entries with empty auction id ("")
|
||||||
|
name := names[0]
|
||||||
|
if has, err := rk.k.HasNameAuthority(ctx, name); !has {
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We don't know about this authority, ignore.
|
||||||
|
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, authority not found: %s", auctionId))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
authority, err := rk.k.GetNameAuthority(ctx, name)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
auctionObj, err := rk.auctionKeeper.GetAuctionById(ctx, auctionId)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if auctionObj.Status == auctiontypes.AuctionStatusCompleted {
|
||||||
|
if auctionObj.WinnerAddress != "" {
|
||||||
|
// Mark authority owner and change status to active.
|
||||||
|
authority.OwnerAddress = auctionObj.WinnerAddress
|
||||||
|
authority.Status = registrytypes.AuthorityActive
|
||||||
|
|
||||||
|
// Reset bond id if required, as owner has changed.
|
||||||
|
authority.BondId = ""
|
||||||
|
|
||||||
|
// Update height for updated/changed authority (owner).
|
||||||
|
// Can be used to check if names are older than the authority itself (stale names).
|
||||||
|
authority.Height = uint64(ctx.BlockHeight())
|
||||||
|
|
||||||
|
logger(ctx).Info(fmt.Sprintf("Winner selected, marking authority as active: %s", name))
|
||||||
|
} else {
|
||||||
|
// Mark as expired.
|
||||||
|
authority.Status = registrytypes.AuthorityExpired
|
||||||
|
logger(ctx).Info(fmt.Sprintf("No winner, marking authority as expired: %s", name))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forget about this auction now, we no longer need it.
|
||||||
|
authority.AuctionId = ""
|
||||||
|
|
||||||
|
if err = rk.k.SaveNameAuthority(ctx, name, &authority); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger(ctx).Info(fmt.Sprintf("Ignoring auction notification, status: %s", auctionObj.Status))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UsesBond returns true if the bond has associated records.
|
||||||
|
func (rk RecordKeeper) UsesBond(ctx sdk.Context, bondId string) bool {
|
||||||
|
iter, err := rk.k.Records.Indexes.BondId.MatchExact(ctx, bondId)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return iter.Valid()
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenewRecord renews a record.
|
// RenewRecord renews a record.
|
||||||
@ -46,7 +159,7 @@ func (k Keeper) RenewRecord(ctx sdk.Context, msg registrytypes.MsgRenewRecord) e
|
|||||||
}
|
}
|
||||||
|
|
||||||
readableRecord := record.ToReadableRecord()
|
readableRecord := record.ToReadableRecord()
|
||||||
return k.processRecord(ctx, &readableRecord, true)
|
return k.processRecord(ctx, &readableRecord)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssociateBond associates a record with a bond.
|
// AssociateBond associates a record with a bond.
|
||||||
|
@ -10,7 +10,9 @@ import (
|
|||||||
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
bank "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||||
|
|
||||||
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/registry/module/v1"
|
modulev1 "git.vdb.to/cerc-io/laconic2d/api/cerc/registry/module/v1"
|
||||||
|
"git.vdb.to/cerc-io/laconic2d/x/auction"
|
||||||
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
auctionkeeper "git.vdb.to/cerc-io/laconic2d/x/auction/keeper"
|
||||||
|
"git.vdb.to/cerc-io/laconic2d/x/bond"
|
||||||
bondkeeper "git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
|
bondkeeper "git.vdb.to/cerc-io/laconic2d/x/bond/keeper"
|
||||||
"git.vdb.to/cerc-io/laconic2d/x/registry/keeper"
|
"git.vdb.to/cerc-io/laconic2d/x/registry/keeper"
|
||||||
)
|
)
|
||||||
@ -39,8 +41,8 @@ type ModuleInputs struct {
|
|||||||
AccountKeeper auth.AccountKeeper
|
AccountKeeper auth.AccountKeeper
|
||||||
BankKeeper bank.Keeper
|
BankKeeper bank.Keeper
|
||||||
|
|
||||||
BondKeeper bondkeeper.Keeper
|
BondKeeper *bondkeeper.Keeper
|
||||||
AuctionKeeper auctionkeeper.Keeper
|
AuctionKeeper *auctionkeeper.Keeper
|
||||||
}
|
}
|
||||||
|
|
||||||
type ModuleOutputs struct {
|
type ModuleOutputs struct {
|
||||||
@ -48,6 +50,9 @@ type ModuleOutputs struct {
|
|||||||
|
|
||||||
Keeper keeper.Keeper
|
Keeper keeper.Keeper
|
||||||
Module appmodule.AppModule
|
Module appmodule.AppModule
|
||||||
|
|
||||||
|
AuctionHooks auction.AuctionHooksWrapper
|
||||||
|
BondHooks bond.BondHooksWrapper
|
||||||
}
|
}
|
||||||
|
|
||||||
func ProvideModule(in ModuleInputs) ModuleOutputs {
|
func ProvideModule(in ModuleInputs) ModuleOutputs {
|
||||||
@ -56,11 +61,16 @@ func ProvideModule(in ModuleInputs) ModuleOutputs {
|
|||||||
in.StoreService,
|
in.StoreService,
|
||||||
in.AccountKeeper,
|
in.AccountKeeper,
|
||||||
in.BankKeeper,
|
in.BankKeeper,
|
||||||
keeper.RecordKeeper{},
|
|
||||||
in.BondKeeper,
|
in.BondKeeper,
|
||||||
in.AuctionKeeper,
|
in.AuctionKeeper,
|
||||||
)
|
)
|
||||||
m := NewAppModule(in.Cdc, k)
|
m := NewAppModule(in.Cdc, k)
|
||||||
|
|
||||||
return ModuleOutputs{Module: m, Keeper: k}
|
recordKeeper := keeper.NewRecordKeeper(in.Cdc, &k, in.AuctionKeeper)
|
||||||
|
|
||||||
|
return ModuleOutputs{
|
||||||
|
Module: m, Keeper: k,
|
||||||
|
AuctionHooks: auction.AuctionHooksWrapper{AuctionUsageKeeper: recordKeeper},
|
||||||
|
BondHooks: bond.BondHooksWrapper{BondUsageKeeper: recordKeeper},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -624,144 +624,6 @@ func (m *Signature) GetPubKey() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlockChangeSet
|
|
||||||
type BlockChangeSet struct {
|
|
||||||
Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
|
|
||||||
Records []string `protobuf:"bytes,2,rep,name=records,proto3" json:"records,omitempty"`
|
|
||||||
Auctions []string `protobuf:"bytes,3,rep,name=auctions,proto3" json:"auctions,omitempty"`
|
|
||||||
AuctionBids []*AuctionBidInfo `protobuf:"bytes,4,rep,name=auction_bids,json=auctionBids,proto3" json:"auction_bids,omitempty" json:"auction_bids" yaml:"auction_bids"`
|
|
||||||
Authorities []string `protobuf:"bytes,5,rep,name=authorities,proto3" json:"authorities,omitempty"`
|
|
||||||
Names []string `protobuf:"bytes,6,rep,name=names,proto3" json:"names,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) Reset() { *m = BlockChangeSet{} }
|
|
||||||
func (m *BlockChangeSet) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*BlockChangeSet) ProtoMessage() {}
|
|
||||||
func (*BlockChangeSet) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_d792f2373089b5b9, []int{8}
|
|
||||||
}
|
|
||||||
func (m *BlockChangeSet) XXX_Unmarshal(b []byte) error {
|
|
||||||
return m.Unmarshal(b)
|
|
||||||
}
|
|
||||||
func (m *BlockChangeSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
if deterministic {
|
|
||||||
return xxx_messageInfo_BlockChangeSet.Marshal(b, m, deterministic)
|
|
||||||
} else {
|
|
||||||
b = b[:cap(b)]
|
|
||||||
n, err := m.MarshalToSizedBuffer(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return b[:n], nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (m *BlockChangeSet) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_BlockChangeSet.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *BlockChangeSet) XXX_Size() int {
|
|
||||||
return m.Size()
|
|
||||||
}
|
|
||||||
func (m *BlockChangeSet) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_BlockChangeSet.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_BlockChangeSet proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) GetHeight() int64 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Height
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) GetRecords() []string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Records
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) GetAuctions() []string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Auctions
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) GetAuctionBids() []*AuctionBidInfo {
|
|
||||||
if m != nil {
|
|
||||||
return m.AuctionBids
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) GetAuthorities() []string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Authorities
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) GetNames() []string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Names
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// AuctionBidInfo
|
|
||||||
type AuctionBidInfo struct {
|
|
||||||
AuctionId string `protobuf:"bytes,1,opt,name=auction_id,json=auctionId,proto3" json:"auction_id,omitempty" json:"auction_id" yaml:"auction_id"`
|
|
||||||
BidderAddress string `protobuf:"bytes,2,opt,name=bidder_address,json=bidderAddress,proto3" json:"bidder_address,omitempty" json:"bidder_address" yaml:"bidder_address"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) Reset() { *m = AuctionBidInfo{} }
|
|
||||||
func (m *AuctionBidInfo) String() string { return proto.CompactTextString(m) }
|
|
||||||
func (*AuctionBidInfo) ProtoMessage() {}
|
|
||||||
func (*AuctionBidInfo) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_d792f2373089b5b9, []int{9}
|
|
||||||
}
|
|
||||||
func (m *AuctionBidInfo) XXX_Unmarshal(b []byte) error {
|
|
||||||
return m.Unmarshal(b)
|
|
||||||
}
|
|
||||||
func (m *AuctionBidInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
if deterministic {
|
|
||||||
return xxx_messageInfo_AuctionBidInfo.Marshal(b, m, deterministic)
|
|
||||||
} else {
|
|
||||||
b = b[:cap(b)]
|
|
||||||
n, err := m.MarshalToSizedBuffer(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return b[:n], nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (m *AuctionBidInfo) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_AuctionBidInfo.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *AuctionBidInfo) XXX_Size() int {
|
|
||||||
return m.Size()
|
|
||||||
}
|
|
||||||
func (m *AuctionBidInfo) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_AuctionBidInfo.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_AuctionBidInfo proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) GetAuctionId() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.AuctionId
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) GetBidderAddress() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.BidderAddress
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// ExpiryQueue: record / authority expiry queue type
|
// ExpiryQueue: record / authority expiry queue type
|
||||||
// id: expiry time
|
// id: expiry time
|
||||||
// value: array of ids (record cids / authority names)
|
// value: array of ids (record cids / authority names)
|
||||||
@ -774,7 +636,7 @@ func (m *ExpiryQueue) Reset() { *m = ExpiryQueue{} }
|
|||||||
func (m *ExpiryQueue) String() string { return proto.CompactTextString(m) }
|
func (m *ExpiryQueue) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ExpiryQueue) ProtoMessage() {}
|
func (*ExpiryQueue) ProtoMessage() {}
|
||||||
func (*ExpiryQueue) Descriptor() ([]byte, []int) {
|
func (*ExpiryQueue) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_d792f2373089b5b9, []int{10}
|
return fileDescriptor_d792f2373089b5b9, []int{8}
|
||||||
}
|
}
|
||||||
func (m *ExpiryQueue) XXX_Unmarshal(b []byte) error {
|
func (m *ExpiryQueue) XXX_Unmarshal(b []byte) error {
|
||||||
return m.Unmarshal(b)
|
return m.Unmarshal(b)
|
||||||
@ -826,101 +688,90 @@ func init() {
|
|||||||
proto.RegisterType((*NameRecord)(nil), "cerc.registry.v1.NameRecord")
|
proto.RegisterType((*NameRecord)(nil), "cerc.registry.v1.NameRecord")
|
||||||
proto.RegisterType((*NameRecordEntry)(nil), "cerc.registry.v1.NameRecordEntry")
|
proto.RegisterType((*NameRecordEntry)(nil), "cerc.registry.v1.NameRecordEntry")
|
||||||
proto.RegisterType((*Signature)(nil), "cerc.registry.v1.Signature")
|
proto.RegisterType((*Signature)(nil), "cerc.registry.v1.Signature")
|
||||||
proto.RegisterType((*BlockChangeSet)(nil), "cerc.registry.v1.BlockChangeSet")
|
|
||||||
proto.RegisterType((*AuctionBidInfo)(nil), "cerc.registry.v1.AuctionBidInfo")
|
|
||||||
proto.RegisterType((*ExpiryQueue)(nil), "cerc.registry.v1.ExpiryQueue")
|
proto.RegisterType((*ExpiryQueue)(nil), "cerc.registry.v1.ExpiryQueue")
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("cerc/registry/v1/registry.proto", fileDescriptor_d792f2373089b5b9) }
|
func init() { proto.RegisterFile("cerc/registry/v1/registry.proto", fileDescriptor_d792f2373089b5b9) }
|
||||||
|
|
||||||
var fileDescriptor_d792f2373089b5b9 = []byte{
|
var fileDescriptor_d792f2373089b5b9 = []byte{
|
||||||
// 1365 bytes of a gzipped FileDescriptorProto
|
// 1221 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xcb, 0x6e, 0xdb, 0x46,
|
||||||
0x14, 0xcf, 0xc6, 0x89, 0x13, 0x3f, 0x37, 0xa1, 0x1a, 0xd2, 0xd6, 0x09, 0xad, 0x37, 0x35, 0x42,
|
0x17, 0x36, 0x6d, 0x59, 0xb6, 0x8e, 0x63, 0xff, 0xc1, 0xfc, 0x4e, 0x22, 0xbb, 0xb1, 0xe8, 0xa8,
|
||||||
0x69, 0x55, 0xd5, 0xab, 0x34, 0x42, 0x55, 0x5b, 0x71, 0xc8, 0x86, 0x34, 0x0a, 0x15, 0xd0, 0x4e,
|
0x28, 0xec, 0x20, 0x30, 0x09, 0xd9, 0x28, 0x82, 0x24, 0xe8, 0xc2, 0x72, 0x1d, 0xc3, 0x0d, 0xda,
|
||||||
0x2a, 0x0e, 0x20, 0x64, 0xed, 0x9f, 0xa9, 0x33, 0xd4, 0xbb, 0x6b, 0xed, 0xce, 0x9a, 0xfa, 0x88,
|
0x3a, 0xe3, 0xac, 0x5a, 0x14, 0x02, 0x2f, 0x13, 0x79, 0x5a, 0x91, 0x14, 0xc8, 0xa1, 0x1a, 0x2d,
|
||||||
0xc4, 0x01, 0x6e, 0x3d, 0xf6, 0xc0, 0x37, 0xe0, 0x00, 0xdf, 0x82, 0x1e, 0x7b, 0xe4, 0x82, 0x41,
|
0x0b, 0x74, 0xd3, 0x9d, 0x97, 0x59, 0xf4, 0x0d, 0xba, 0xe8, 0x63, 0x34, 0xcb, 0x2c, 0xbb, 0x29,
|
||||||
0x8d, 0xc4, 0x07, 0xf0, 0x27, 0x40, 0xf3, 0x67, 0xff, 0xda, 0xae, 0x81, 0xde, 0xf6, 0xfd, 0xfb,
|
0x5b, 0xd8, 0x40, 0x1f, 0x40, 0x4f, 0x50, 0x70, 0x66, 0x78, 0x95, 0x14, 0xb5, 0xc8, 0x8e, 0xe7,
|
||||||
0xcd, 0x6f, 0xde, 0xbc, 0xf7, 0x66, 0x16, 0x74, 0x87, 0x84, 0x8e, 0x11, 0x92, 0x2e, 0x8d, 0x58,
|
0xf6, 0xcd, 0x37, 0xdf, 0x9c, 0xb9, 0x10, 0x54, 0x8b, 0xf8, 0x96, 0xee, 0x93, 0x2e, 0x0d, 0x98,
|
||||||
0x38, 0x34, 0x06, 0xbb, 0xe9, 0x77, 0xbb, 0x1f, 0x06, 0x2c, 0x40, 0xe7, 0xb9, 0x43, 0x3b, 0x55,
|
0x3f, 0xd4, 0x07, 0xad, 0xf4, 0x5b, 0xeb, 0xfb, 0x1e, 0xf3, 0xd0, 0xcd, 0x38, 0x41, 0x4b, 0x9d,
|
||||||
0x0e, 0x76, 0xb7, 0x9a, 0xdd, 0x20, 0xe8, 0xf6, 0x88, 0x21, 0xec, 0x76, 0xfc, 0xc4, 0x70, 0xe3,
|
0x83, 0xd6, 0x66, 0xa3, 0xeb, 0x79, 0xdd, 0x1e, 0xd1, 0x79, 0xdc, 0x0c, 0x5f, 0xea, 0x76, 0xe8,
|
||||||
0xd0, 0x62, 0x34, 0xf0, 0x65, 0xc4, 0x96, 0x5e, 0xb6, 0x33, 0xea, 0x91, 0x88, 0x59, 0x5e, 0x5f,
|
0x1b, 0x8c, 0x7a, 0xae, 0xa8, 0xd8, 0x54, 0xcb, 0x71, 0x46, 0x1d, 0x12, 0x30, 0xc3, 0xe9, 0xcb,
|
||||||
0x39, 0x6c, 0x74, 0x83, 0x6e, 0x20, 0x3e, 0x0d, 0xfe, 0xa5, 0xb4, 0x4d, 0x27, 0x88, 0xbc, 0x20,
|
0x84, 0xf5, 0xae, 0xd7, 0xf5, 0xf8, 0xa7, 0x1e, 0x7f, 0x49, 0x6f, 0xc3, 0xf2, 0x02, 0xc7, 0x0b,
|
||||||
0x32, 0x6c, 0x2b, 0x22, 0xc6, 0x60, 0xd7, 0x26, 0xcc, 0xda, 0x35, 0x9c, 0x80, 0x2a, 0xd8, 0xd6,
|
0x74, 0xd3, 0x08, 0x88, 0x3e, 0x68, 0x99, 0x84, 0x19, 0x2d, 0xdd, 0xf2, 0xa8, 0x84, 0x6d, 0xfe,
|
||||||
0x1f, 0x6b, 0x50, 0x7d, 0x68, 0x85, 0x96, 0x17, 0x21, 0x0a, 0xf5, 0x90, 0x38, 0x41, 0xe8, 0x76,
|
0xb1, 0x0a, 0xd5, 0x33, 0xc3, 0x37, 0x9c, 0x00, 0x51, 0x58, 0xf1, 0x89, 0xe5, 0xf9, 0x76, 0xc7,
|
||||||
0x42, 0xe2, 0xb3, 0x86, 0xb6, 0xad, 0x5d, 0xab, 0xdf, 0xda, 0x6c, 0x4b, 0x80, 0x36, 0x07, 0x68,
|
0x27, 0x2e, 0xab, 0x2b, 0xdb, 0xca, 0xee, 0xca, 0xfe, 0x86, 0x26, 0x00, 0xb4, 0x18, 0x40, 0x93,
|
||||||
0x2b, 0x80, 0xf6, 0x41, 0x40, 0x7d, 0xf3, 0xe6, 0xcb, 0x91, 0xbe, 0x30, 0x1e, 0xe9, 0x1f, 0x7c,
|
0x00, 0xda, 0x91, 0x47, 0xdd, 0xf6, 0xde, 0x9b, 0x48, 0x9d, 0x1b, 0x45, 0xea, 0x47, 0xdf, 0x06,
|
||||||
0x13, 0x05, 0xfe, 0xdd, 0x56, 0x2e, 0xb6, 0xb5, 0x3d, 0xb4, 0xbc, 0x5e, 0x51, 0x85, 0x41, 0x4a,
|
0x9e, 0xfb, 0xb8, 0x99, 0xab, 0x6d, 0x6e, 0x0f, 0x0d, 0xa7, 0x57, 0x74, 0x61, 0x10, 0x16, 0x26,
|
||||||
0x98, 0xf8, 0x0c, 0x3d, 0xd7, 0x60, 0x23, 0x67, 0xec, 0x24, 0x7b, 0x6d, 0x2c, 0xaa, 0x45, 0xe5,
|
0x2e, 0x43, 0x97, 0x0a, 0xac, 0xe7, 0x82, 0x9d, 0x64, 0xae, 0xf5, 0x79, 0x39, 0xa8, 0x98, 0xac,
|
||||||
0x66, 0xdb, 0xc9, 0x66, 0xdb, 0x1f, 0x2b, 0x07, 0xf3, 0x40, 0x2d, 0x7a, 0x7b, 0x62, 0xd1, 0x14,
|
0x96, 0x4c, 0x56, 0xfb, 0x54, 0x26, 0xb4, 0x8f, 0xe4, 0xa0, 0x0f, 0xc7, 0x06, 0x4d, 0x41, 0x26,
|
||||||
0x64, 0xca, 0xea, 0x99, 0xed, 0xc5, 0x9f, 0xba, 0x86, 0x51, 0x46, 0x25, 0x01, 0x46, 0x31, 0xac,
|
0x8c, 0x9e, 0xc5, 0x5e, 0xff, 0xa9, 0x2a, 0x18, 0x65, 0x54, 0x12, 0x60, 0x14, 0xc2, 0x9a, 0x11,
|
||||||
0x5b, 0x31, 0x3b, 0x0d, 0x42, 0xca, 0x86, 0x32, 0x01, 0x95, 0x79, 0x09, 0xd8, 0x53, 0x5c, 0x6e,
|
0xb2, 0x0b, 0xcf, 0xa7, 0x6c, 0x28, 0x04, 0x58, 0x98, 0x25, 0xc0, 0x81, 0xe4, 0xf2, 0x40, 0x70,
|
||||||
0x48, 0x2e, 0xc5, 0xf0, 0x84, 0x45, 0x49, 0x8b, 0xd7, 0x52, 0x85, 0xc8, 0xc4, 0x4f, 0x1a, 0x5c,
|
0x29, 0x96, 0x27, 0x2c, 0x4a, 0x5e, 0xbc, 0x9a, 0x3a, 0xb8, 0x12, 0x3f, 0x2b, 0x70, 0xa7, 0x98,
|
||||||
0x2a, 0xba, 0x64, 0xc9, 0x58, 0x9a, 0x97, 0x8c, 0x63, 0x45, 0xe0, 0xa3, 0x69, 0x04, 0x26, 0xf2,
|
0x92, 0x89, 0x51, 0x99, 0x25, 0xc6, 0xa9, 0x24, 0xf0, 0xc9, 0x24, 0x02, 0x63, 0x7a, 0x4c, 0x0b,
|
||||||
0x31, 0xcb, 0x2c, 0x52, 0x72, 0xa1, 0x40, 0x2b, 0xcd, 0xca, 0x0b, 0x0d, 0x2e, 0x66, 0x71, 0xdd,
|
0x73, 0x49, 0x6e, 0x15, 0x68, 0xa5, 0xaa, 0xbc, 0x56, 0xe0, 0x76, 0x56, 0xd7, 0xf5, 0x0d, 0x8b,
|
||||||
0xd0, 0x72, 0x48, 0xa7, 0x4f, 0x42, 0x1a, 0xb8, 0x8d, 0xe5, 0x79, 0xec, 0x8e, 0x14, 0xbb, 0x7b,
|
0x74, 0xfa, 0xc4, 0xa7, 0x9e, 0x5d, 0x5f, 0x9c, 0xc5, 0xee, 0x44, 0xb2, 0x7b, 0x52, 0x66, 0x97,
|
||||||
0x65, 0x76, 0x79, 0x98, 0x49, 0x72, 0x05, 0xab, 0xe0, 0xb6, 0x91, 0x1a, 0x8f, 0xb8, 0xed, 0xa1,
|
0x87, 0x19, 0x27, 0x57, 0x88, 0x72, 0x6e, 0xeb, 0x69, 0xf0, 0x24, 0x8e, 0x9d, 0xf1, 0x10, 0xfa,
|
||||||
0x30, 0xa1, 0xef, 0x34, 0xd8, 0xcc, 0xa2, 0xac, 0xd8, 0xe1, 0x8b, 0x76, 0x88, 0x6f, 0xd9, 0x3d,
|
0x41, 0x81, 0x8d, 0xac, 0xca, 0x08, 0xad, 0x78, 0xd0, 0x0e, 0x71, 0x0d, 0xb3, 0x47, 0xec, 0x7a,
|
||||||
0xe2, 0x36, 0xaa, 0xdb, 0xda, 0xb5, 0x55, 0xf3, 0x70, 0x3c, 0xd2, 0xf7, 0xcb, 0xcb, 0x97, 0x5c,
|
0x75, 0x5b, 0xd9, 0x5d, 0x6e, 0x1f, 0x8f, 0x22, 0xf5, 0xb0, 0x3c, 0x7c, 0x29, 0x75, 0x9c, 0x41,
|
||||||
0x27, 0x19, 0x94, 0x1d, 0x70, 0x76, 0x42, 0xfb, 0xd2, 0x74, 0x28, 0x2d, 0xe8, 0x37, 0x0d, 0xa6,
|
0x39, 0x01, 0x67, 0x2b, 0x74, 0x28, 0x42, 0xc7, 0x22, 0x82, 0x7e, 0x53, 0x60, 0x42, 0x9d, 0xe5,
|
||||||
0xc4, 0x39, 0x81, 0xe7, 0x51, 0x16, 0x65, 0x07, 0xb9, 0x32, 0x2f, 0x55, 0x1d, 0x95, 0xaa, 0x93,
|
0x39, 0x0e, 0x65, 0x41, 0xb6, 0x90, 0x4b, 0xb3, 0xa4, 0xea, 0x48, 0xa9, 0xce, 0xa7, 0x71, 0x2d,
|
||||||
0x59, 0x5c, 0xcb, 0x90, 0xb3, 0x49, 0x4f, 0x78, 0x8a, 0x14, 0xea, 0xe5, 0x1d, 0x1c, 0x48, 0xb7,
|
0x43, 0x4e, 0x27, 0x3d, 0x96, 0xc9, 0x25, 0x54, 0xcb, 0x33, 0x38, 0x12, 0x69, 0xe9, 0x42, 0x4f,
|
||||||
0xf4, 0xa0, 0xa7, 0xef, 0x24, 0x24, 0x03, 0x62, 0xf5, 0x72, 0x3b, 0x59, 0x7d, 0xeb, 0x9d, 0x94,
|
0x9e, 0x89, 0x4f, 0x06, 0xc4, 0xe8, 0xe5, 0x66, 0xb2, 0xfc, 0xde, 0x33, 0x29, 0x43, 0x4e, 0x9f,
|
||||||
0x21, 0x67, 0xef, 0x64, 0xc2, 0x73, 0xfa, 0x4e, 0xb0, 0x74, 0x4b, 0x77, 0xf2, 0xb3, 0x06, 0x97,
|
0xc9, 0x58, 0xe6, 0xe4, 0x99, 0x60, 0x91, 0x96, 0xce, 0xe4, 0x17, 0x05, 0xee, 0x4e, 0x93, 0xa5,
|
||||||
0x67, 0xa5, 0xa5, 0xf3, 0x84, 0x90, 0x46, 0x6d, 0x5e, 0x5f, 0x7f, 0xae, 0xf6, 0x70, 0xf4, 0xe6,
|
0xf3, 0x92, 0x90, 0x7a, 0x6d, 0xd6, 0xbe, 0xfe, 0x52, 0xce, 0xe1, 0xe4, 0xdd, 0xab, 0x11, 0x83,
|
||||||
0xd3, 0xe0, 0x60, 0xf3, 0xce, 0x41, 0xf8, 0xe0, 0xcd, 0xe9, 0xd9, 0xbf, 0x4f, 0xc8, 0x0c, 0xb6,
|
0xcd, 0x5a, 0x07, 0x9e, 0x83, 0x37, 0x26, 0xab, 0xff, 0x94, 0x90, 0x29, 0x6c, 0xc5, 0xd4, 0x39,
|
||||||
0x72, 0xeb, 0x82, 0x2d, 0xbc, 0x35, 0xdb, 0x0c, 0x6c, 0x5e, 0xae, 0x67, 0xb0, 0x95, 0x19, 0xe6,
|
0x5b, 0x78, 0x6f, 0xb6, 0x19, 0xd8, 0x2c, 0xad, 0xa7, 0xb0, 0x15, 0x0a, 0xc7, 0x6c, 0x7f, 0x55,
|
||||||
0x6c, 0x7f, 0xd1, 0xe0, 0xca, 0x64, 0xb0, 0x47, 0x7d, 0xea, 0xc5, 0x5e, 0xc7, 0xa6, 0x6e, 0xa3,
|
0x60, 0x6b, 0xbc, 0xd8, 0xa1, 0x2e, 0x75, 0x42, 0xa7, 0x63, 0x52, 0xbb, 0xbe, 0x32, 0x8b, 0xee,
|
||||||
0x3e, 0x8f, 0xee, 0x23, 0x45, 0xf7, 0x78, 0x16, 0xdd, 0x1c, 0xda, 0x6c, 0xbe, 0x79, 0x27, 0xbc,
|
0x73, 0x49, 0xf7, 0x74, 0x1a, 0xdd, 0x1c, 0xda, 0x74, 0xbe, 0xf9, 0x24, 0xbc, 0x59, 0x26, 0xfc,
|
||||||
0x55, 0x26, 0xfc, 0xa9, 0xb4, 0x9a, 0xd4, 0x6d, 0xfd, 0xb8, 0x04, 0x55, 0x2c, 0xa6, 0x3d, 0xda,
|
0xb9, 0x88, 0xb6, 0xa9, 0xdd, 0xfc, 0xa9, 0x02, 0x55, 0xcc, 0x4f, 0x7b, 0xb4, 0x03, 0xf3, 0xd4,
|
||||||
0x81, 0x45, 0xea, 0x8a, 0x6b, 0xad, 0x66, 0x5e, 0x1a, 0x8f, 0xf4, 0x77, 0x25, 0x83, 0x6c, 0x19,
|
0xe6, 0xd7, 0x5a, 0xad, 0x7d, 0x67, 0x14, 0xa9, 0xff, 0x17, 0x0c, 0xb2, 0x61, 0x62, 0xac, 0x79,
|
||||||
0x8e, 0xb5, 0x48, 0x5d, 0x74, 0x17, 0x56, 0xec, 0xc0, 0x77, 0x3b, 0xd4, 0x15, 0xf7, 0x51, 0xcd,
|
0x6a, 0xa3, 0xc7, 0xb0, 0x64, 0x7a, 0xae, 0xdd, 0xa1, 0x36, 0xbf, 0x8f, 0x6a, 0xed, 0x7b, 0xa3,
|
||||||
0xbc, 0x3a, 0x1e, 0xe9, 0x57, 0xa4, 0xb7, 0x32, 0x24, 0x21, 0x89, 0x88, 0xab, 0xfc, 0xeb, 0xd8,
|
0x48, 0xdd, 0x12, 0xd9, 0x32, 0x90, 0x94, 0x24, 0x26, 0xae, 0xc6, 0x5f, 0xa7, 0x36, 0xfa, 0x0c,
|
||||||
0x45, 0x9f, 0x40, 0xdd, 0x09, 0x89, 0xc5, 0x48, 0x87, 0xdf, 0xcf, 0xe2, 0x0e, 0xa9, 0x99, 0xd7,
|
0x56, 0x2c, 0x9f, 0x18, 0x8c, 0x74, 0xe2, 0xfb, 0x99, 0xdf, 0x21, 0xb5, 0xf6, 0xfd, 0xec, 0x96,
|
||||||
0xb3, 0x5b, 0x32, 0x67, 0x4c, 0x30, 0xf2, 0x2a, 0x0c, 0x52, 0x7a, 0x4c, 0x3d, 0xc2, 0xb1, 0xc8,
|
0xcc, 0x05, 0x13, 0x8c, 0xbc, 0x0b, 0x83, 0xb0, 0x5e, 0x50, 0x87, 0xc4, 0x58, 0xe4, 0x55, 0x9f,
|
||||||
0xb3, 0x3e, 0x0d, 0x87, 0x12, 0x6b, 0xa9, 0x8c, 0x95, 0x33, 0x26, 0x58, 0x79, 0x15, 0x06, 0x29,
|
0xfa, 0x43, 0x81, 0x55, 0x29, 0x63, 0xe5, 0x82, 0x09, 0x56, 0xde, 0x85, 0x41, 0x58, 0x1c, 0xab,
|
||||||
0x09, 0xac, 0x06, 0xac, 0xb8, 0xa4, 0x47, 0x18, 0x91, 0x83, 0x7b, 0x15, 0x27, 0x22, 0xba, 0x0d,
|
0x0e, 0x4b, 0x36, 0xe9, 0x11, 0x46, 0xc4, 0xc1, 0xbd, 0x8c, 0x13, 0x13, 0x3d, 0x84, 0xaa, 0xf7,
|
||||||
0xd5, 0xe0, 0x5b, 0x9f, 0x84, 0x51, 0xa3, 0xba, 0x5d, 0xb9, 0x56, 0x33, 0xf5, 0xf1, 0x48, 0x7f,
|
0xbd, 0x4b, 0xfc, 0xa0, 0x5e, 0xdd, 0x5e, 0xd8, 0xad, 0xb5, 0xd5, 0x51, 0xa4, 0x7e, 0x20, 0x06,
|
||||||
0x4f, 0x2e, 0x20, 0xf5, 0x09, 0xb6, 0x92, 0xb0, 0x72, 0x47, 0x47, 0x00, 0x16, 0x63, 0x21, 0xb5,
|
0x10, 0xfe, 0x04, 0x5b, 0x5a, 0x58, 0xa6, 0xa3, 0x13, 0x00, 0x83, 0x31, 0x9f, 0x9a, 0x21, 0x23,
|
||||||
0x63, 0x46, 0x22, 0x31, 0xe3, 0xce, 0x99, 0x3b, 0xe3, 0x91, 0xfe, 0xbe, 0x3a, 0xd9, 0xd4, 0x96,
|
0x01, 0x3f, 0xe3, 0x6e, 0xb4, 0x77, 0x46, 0x91, 0xfa, 0xa1, 0x5c, 0xd9, 0x34, 0x96, 0x2e, 0x63,
|
||||||
0x1e, 0x63, 0xa6, 0xc1, 0xb9, 0x50, 0xb4, 0x07, 0xcb, 0xbe, 0xe5, 0x91, 0xa8, 0xb1, 0x2a, 0x08,
|
0xe6, 0xc1, 0xb9, 0x52, 0x74, 0x00, 0x8b, 0xae, 0xe1, 0x90, 0xa0, 0xbe, 0xcc, 0x09, 0x6c, 0x8d,
|
||||||
0x5c, 0x19, 0x8f, 0xf4, 0x4d, 0x89, 0x21, 0xd4, 0x49, 0xb8, 0x14, 0xb0, 0xf4, 0x45, 0xbb, 0xb0,
|
0x22, 0x75, 0x43, 0x60, 0x70, 0x77, 0x52, 0x2e, 0x0c, 0x2c, 0x72, 0x51, 0x0b, 0x2a, 0x6c, 0xd8,
|
||||||
0xc4, 0x86, 0x7d, 0xd9, 0xcd, 0x85, 0x18, 0xae, 0x4d, 0x63, 0xa4, 0x80, 0x85, 0x6b, 0xeb, 0x2b,
|
0x17, 0xbb, 0xb9, 0x50, 0x13, 0x7b, 0xd3, 0x1a, 0x61, 0x60, 0x9e, 0xda, 0xfc, 0x1a, 0xd6, 0x0e,
|
||||||
0x58, 0xdf, 0x4f, 0x2a, 0xe5, 0xd0, 0x67, 0xe1, 0x10, 0x21, 0x58, 0xe2, 0x68, 0xb2, 0x28, 0xb0,
|
0x93, 0x4e, 0x39, 0x76, 0x99, 0x3f, 0x44, 0x08, 0x2a, 0x31, 0x9a, 0x68, 0x0a, 0xcc, 0xbf, 0xd1,
|
||||||
0xf8, 0x46, 0x1f, 0xc2, 0x32, 0xe1, 0x46, 0xf5, 0x16, 0xd1, 0xdb, 0xe5, 0xa7, 0x5a, 0xfb, 0x33,
|
0xc7, 0xb0, 0x48, 0xe2, 0xa0, 0x7c, 0x8b, 0xa8, 0x5a, 0xf9, 0xa9, 0xa6, 0x7d, 0x61, 0x38, 0x24,
|
||||||
0xcb, 0x23, 0x29, 0x10, 0x96, 0xde, 0xad, 0xbf, 0x2b, 0xb0, 0x56, 0x30, 0xa0, 0xaf, 0xe1, 0xbc,
|
0x05, 0xc2, 0x22, 0xbb, 0xf9, 0xf7, 0x02, 0xac, 0x16, 0x02, 0xe8, 0x1b, 0xb8, 0xc9, 0x95, 0xea,
|
||||||
0xc8, 0x54, 0xa7, 0x1f, 0xdb, 0x3d, 0xea, 0x74, 0x9e, 0x92, 0xa1, 0xaa, 0xbe, 0xbd, 0xf1, 0x48,
|
0xf4, 0x43, 0xb3, 0x47, 0xad, 0xce, 0x77, 0x64, 0x28, 0xbb, 0xef, 0x60, 0x14, 0xa9, 0x7a, 0x4e,
|
||||||
0x37, 0x72, 0x29, 0xce, 0x79, 0x14, 0x92, 0x9d, 0xd7, 0xe3, 0x75, 0xa1, 0x7a, 0x28, 0x34, 0x0f,
|
0xe2, 0x5c, 0x46, 0x41, 0xec, 0xbc, 0x1f, 0xaf, 0x71, 0xd7, 0x19, 0xf7, 0x3c, 0x23, 0x43, 0x84,
|
||||||
0xc8, 0x10, 0x61, 0x58, 0x93, 0x4e, 0x96, 0xeb, 0x86, 0x24, 0x8a, 0x54, 0xad, 0xde, 0x1c, 0x8f,
|
0x61, 0x55, 0x24, 0x19, 0xb6, 0xed, 0x93, 0x20, 0x90, 0xbd, 0xba, 0x37, 0x8a, 0xd4, 0xfb, 0x79,
|
||||||
0xf4, 0xeb, 0x79, 0x6c, 0x65, 0x2e, 0x02, 0x27, 0x4a, 0x7c, 0x4e, 0xc8, 0xfb, 0x52, 0x44, 0x17,
|
0x6c, 0x19, 0x2e, 0x02, 0x27, 0x4e, 0x7c, 0x83, 0xdb, 0x87, 0xc2, 0x44, 0xb7, 0xa1, 0x7a, 0x41,
|
||||||
0xa1, 0x7a, 0x4a, 0x68, 0xf7, 0x54, 0x3e, 0x7e, 0x96, 0xb0, 0x92, 0xb8, 0x3e, 0x62, 0x16, 0x8b,
|
0x68, 0xf7, 0x42, 0x3c, 0x7e, 0x2a, 0x58, 0x5a, 0xb1, 0x3f, 0x60, 0x06, 0x0b, 0x03, 0xd1, 0x84,
|
||||||
0x23, 0x59, 0x84, 0x58, 0x49, 0xe8, 0x3e, 0x40, 0xd2, 0x91, 0x54, 0x16, 0x56, 0xad, 0x50, 0x02,
|
0x58, 0x5a, 0xe8, 0x29, 0x40, 0xb2, 0x23, 0xa9, 0x68, 0xac, 0x5a, 0xa1, 0x05, 0xd2, 0x58, 0xb6,
|
||||||
0xa9, 0x2d, 0xeb, 0xe4, 0x54, 0x83, 0x6b, 0x4a, 0x38, 0x2e, 0x74, 0x5c, 0xf5, 0xbf, 0x76, 0x9c,
|
0x93, 0x53, 0x0f, 0xae, 0x49, 0xe3, 0xb4, 0xb0, 0xe3, 0xaa, 0xff, 0x75, 0xc7, 0xb9, 0xc5, 0x5d,
|
||||||
0x5f, 0xec, 0x12, 0x79, 0xd7, 0x6e, 0x4d, 0xdc, 0x50, 0x8f, 0x93, 0xe7, 0xb2, 0xb9, 0x5b, 0x7c,
|
0x22, 0xee, 0xda, 0xcd, 0xb1, 0x1b, 0xea, 0x45, 0xf2, 0x5c, 0x6e, 0xb7, 0x8a, 0xef, 0xd6, 0x19,
|
||||||
0xb7, 0xce, 0xe9, 0xa2, 0xe7, 0xfc, 0xd2, 0xc9, 0x75, 0x52, 0xeb, 0x04, 0x6a, 0xfc, 0x9c, 0x67,
|
0xbb, 0xe8, 0x32, 0xbe, 0x74, 0x72, 0x3b, 0xa9, 0x79, 0x0e, 0xb5, 0x78, 0x9d, 0xa7, 0x37, 0xd0,
|
||||||
0x17, 0xd0, 0xad, 0x62, 0x01, 0x5d, 0x9e, 0x5e, 0x40, 0x72, 0x28, 0x25, 0xd5, 0xf3, 0xbd, 0x06,
|
0x7e, 0xb1, 0x81, 0xee, 0x4e, 0x6e, 0x20, 0x71, 0x28, 0x25, 0xdd, 0xf3, 0xa3, 0x02, 0x90, 0x79,
|
||||||
0x90, 0x69, 0xd1, 0x1d, 0xa8, 0xf6, 0x2c, 0x46, 0xa2, 0xe4, 0x15, 0x7e, 0xf5, 0x4d, 0x18, 0x82,
|
0xd1, 0x23, 0xa8, 0xf6, 0x0c, 0x46, 0x82, 0xe4, 0x15, 0x7e, 0xef, 0x5d, 0x18, 0x9c, 0x09, 0x96,
|
||||||
0x09, 0x56, 0x01, 0xe8, 0x1e, 0xac, 0x9c, 0xd2, 0x88, 0x05, 0x62, 0xfd, 0xca, 0xbf, 0x8b, 0x4d,
|
0x05, 0xe8, 0x09, 0x2c, 0x5d, 0xd0, 0x80, 0x79, 0x7c, 0xfc, 0x85, 0x7f, 0x57, 0x9b, 0x54, 0x34,
|
||||||
0x22, 0x5a, 0x77, 0xe0, 0x9d, 0x92, 0x0d, 0xad, 0x67, 0x53, 0x53, 0x0c, 0xc7, 0xac, 0x44, 0x16,
|
0x1f, 0xc1, 0xff, 0x4a, 0x31, 0xb4, 0x96, 0x9d, 0x9a, 0xfc, 0x70, 0xcc, 0x5a, 0x64, 0x3e, 0xdf,
|
||||||
0xf3, 0x25, 0xd2, 0x62, 0x50, 0x3b, 0xa1, 0x5d, 0xdf, 0x62, 0x71, 0x48, 0xd0, 0x0d, 0xa8, 0x44,
|
0x22, 0x4d, 0x06, 0xb5, 0x73, 0xda, 0x75, 0x0d, 0x16, 0xfa, 0x04, 0x3d, 0x80, 0x85, 0x80, 0x76,
|
||||||
0xb4, 0xab, 0xaa, 0x7d, 0x73, 0x3c, 0xd2, 0x2f, 0xc8, 0x5c, 0x47, 0xb4, 0x9b, 0xe4, 0x98, 0x7f,
|
0x65, 0xb7, 0x6f, 0x8c, 0x22, 0xf5, 0x96, 0xd0, 0x3a, 0xa0, 0xdd, 0x44, 0xe3, 0xf8, 0x13, 0xc7,
|
||||||
0x62, 0xee, 0xc5, 0x0f, 0xbf, 0x1f, 0xdb, 0xa2, 0x3d, 0x26, 0xc6, 0xad, 0x32, 0x24, 0x41, 0x89,
|
0x59, 0xf1, 0xe2, 0xf7, 0x43, 0x93, 0x6f, 0x8f, 0xb1, 0xe3, 0x56, 0x06, 0x92, 0xa2, 0xc4, 0xc4,
|
||||||
0x88, 0xab, 0xfd, 0xd8, 0x7e, 0x40, 0x86, 0xad, 0x1f, 0x16, 0x61, 0xdd, 0xec, 0x05, 0xce, 0xd3,
|
0xd5, 0x7e, 0x68, 0x3e, 0x23, 0xc3, 0xe6, 0x01, 0xac, 0x1c, 0xf3, 0xa5, 0x79, 0x1e, 0x92, 0x90,
|
||||||
0x83, 0x53, 0xcb, 0xef, 0x92, 0x13, 0xc2, 0x72, 0x04, 0xf9, 0xf2, 0x95, 0xb4, 0x86, 0x1b, 0xb0,
|
0x8c, 0x91, 0x5d, 0x87, 0xc5, 0x81, 0xd1, 0x0b, 0x09, 0x97, 0xa2, 0x86, 0x85, 0xd1, 0x3e, 0x7c,
|
||||||
0x22, 0x9f, 0xfd, 0x91, 0x48, 0x4c, 0x0d, 0x27, 0x22, 0xda, 0x82, 0x55, 0x55, 0x8a, 0x51, 0xa3,
|
0x73, 0xd5, 0x50, 0xde, 0x5e, 0x35, 0x94, 0xbf, 0xae, 0x1a, 0xca, 0xe5, 0x75, 0x63, 0xee, 0xed,
|
||||||
0x22, 0x4c, 0xa9, 0x8c, 0xfa, 0x70, 0x2e, 0xa9, 0x59, 0x9b, 0xba, 0xbc, 0xfe, 0x79, 0x4e, 0xb7,
|
0x75, 0x63, 0xee, 0xf7, 0xeb, 0xc6, 0xdc, 0x57, 0x3b, 0x5d, 0xca, 0xb4, 0x81, 0x6d, 0x6a, 0xcc,
|
||||||
0x27, 0x73, 0xaa, 0xae, 0x1e, 0x93, 0xba, 0xc7, 0xfe, 0x93, 0xc0, 0xbc, 0x31, 0x1e, 0xe9, 0x3b,
|
0xd3, 0x63, 0xd5, 0xf6, 0xa8, 0xa7, 0xf7, 0x0c, 0xcb, 0x73, 0xa9, 0xb5, 0x6f, 0xeb, 0xaf, 0xd2,
|
||||||
0xc5, 0x2e, 0xe0, 0xf1, 0xe5, 0x3e, 0x10, 0x3a, 0x5c, 0xb7, 0xd2, 0xe0, 0x08, 0x6d, 0x43, 0x3d,
|
0xbf, 0x38, 0xb3, 0xca, 0xfb, 0xea, 0xe0, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd2, 0xef, 0x57,
|
||||||
0xb9, 0xcf, 0x28, 0x89, 0x1a, 0xcb, 0x82, 0x50, 0x5e, 0x85, 0x36, 0x92, 0x79, 0x29, 0x06, 0xb6,
|
0x0f, 0xe9, 0x0d, 0x00, 0x00,
|
||||||
0x1a, 0x88, 0xad, 0x5f, 0x35, 0x3e, 0xde, 0xf2, 0x24, 0x4a, 0xed, 0xa9, 0xfd, 0xef, 0xf6, 0xfc,
|
|
||||||
0x02, 0xd6, 0x6d, 0xea, 0xba, 0x13, 0xb3, 0xc6, 0xc8, 0x7e, 0x7e, 0x8a, 0xf6, 0xb4, 0x59, 0x8b,
|
|
||||||
0x5a, 0xbc, 0x26, 0x15, 0x6a, 0xdc, 0xb4, 0xf6, 0xa0, 0x7e, 0x28, 0x1a, 0xeb, 0x51, 0x4c, 0x62,
|
|
||||||
0x32, 0x51, 0x6a, 0x1b, 0xb0, 0x3c, 0xb0, 0x7a, 0x31, 0x51, 0xe7, 0x25, 0x05, 0x73, 0xff, 0xe5,
|
|
||||||
0xeb, 0xa6, 0xf6, 0xea, 0x75, 0x53, 0xfb, 0xeb, 0x75, 0x53, 0x7b, 0x7e, 0xd6, 0x5c, 0x78, 0x75,
|
|
||||||
0xd6, 0x5c, 0xf8, 0xfd, 0xac, 0xb9, 0xf0, 0xe5, 0x4e, 0x97, 0xb2, 0xf6, 0xc0, 0xb5, 0xdb, 0x2c,
|
|
||||||
0x30, 0xf8, 0xf9, 0xdc, 0xa4, 0x81, 0xd1, 0xb3, 0x9c, 0xc0, 0xa7, 0xce, 0x2d, 0xd7, 0x78, 0x96,
|
|
||||||
0xfe, 0x83, 0xdb, 0x55, 0x31, 0x15, 0xf6, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x85, 0xe1,
|
|
||||||
0xaf, 0xa7, 0x0f, 0x00, 0x00,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Params) Marshal() (dAtA []byte, err error) {
|
func (m *Params) Marshal() (dAtA []byte, err error) {
|
||||||
@ -1415,121 +1266,6 @@ func (m *Signature) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|||||||
return len(dAtA) - i, nil
|
return len(dAtA) - i, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *BlockChangeSet) Marshal() (dAtA []byte, err error) {
|
|
||||||
size := m.Size()
|
|
||||||
dAtA = make([]byte, size)
|
|
||||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return dAtA[:n], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) MarshalTo(dAtA []byte) (int, error) {
|
|
||||||
size := m.Size()
|
|
||||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *BlockChangeSet) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|
||||||
i := len(dAtA)
|
|
||||||
_ = i
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
if len(m.Names) > 0 {
|
|
||||||
for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- {
|
|
||||||
i -= len(m.Names[iNdEx])
|
|
||||||
copy(dAtA[i:], m.Names[iNdEx])
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Names[iNdEx])))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x32
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Authorities) > 0 {
|
|
||||||
for iNdEx := len(m.Authorities) - 1; iNdEx >= 0; iNdEx-- {
|
|
||||||
i -= len(m.Authorities[iNdEx])
|
|
||||||
copy(dAtA[i:], m.Authorities[iNdEx])
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Authorities[iNdEx])))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x2a
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.AuctionBids) > 0 {
|
|
||||||
for iNdEx := len(m.AuctionBids) - 1; iNdEx >= 0; iNdEx-- {
|
|
||||||
{
|
|
||||||
size, err := m.AuctionBids[iNdEx].MarshalToSizedBuffer(dAtA[:i])
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
i -= size
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(size))
|
|
||||||
}
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x22
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Auctions) > 0 {
|
|
||||||
for iNdEx := len(m.Auctions) - 1; iNdEx >= 0; iNdEx-- {
|
|
||||||
i -= len(m.Auctions[iNdEx])
|
|
||||||
copy(dAtA[i:], m.Auctions[iNdEx])
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Auctions[iNdEx])))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x1a
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Records) > 0 {
|
|
||||||
for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- {
|
|
||||||
i -= len(m.Records[iNdEx])
|
|
||||||
copy(dAtA[i:], m.Records[iNdEx])
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Records[iNdEx])))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x12
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if m.Height != 0 {
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(m.Height))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x8
|
|
||||||
}
|
|
||||||
return len(dAtA) - i, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) Marshal() (dAtA []byte, err error) {
|
|
||||||
size := m.Size()
|
|
||||||
dAtA = make([]byte, size)
|
|
||||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return dAtA[:n], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) MarshalTo(dAtA []byte) (int, error) {
|
|
||||||
size := m.Size()
|
|
||||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|
||||||
i := len(dAtA)
|
|
||||||
_ = i
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
if len(m.BidderAddress) > 0 {
|
|
||||||
i -= len(m.BidderAddress)
|
|
||||||
copy(dAtA[i:], m.BidderAddress)
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.BidderAddress)))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x12
|
|
||||||
}
|
|
||||||
if len(m.AuctionId) > 0 {
|
|
||||||
i -= len(m.AuctionId)
|
|
||||||
copy(dAtA[i:], m.AuctionId)
|
|
||||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.AuctionId)))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0xa
|
|
||||||
}
|
|
||||||
return len(dAtA) - i, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExpiryQueue) Marshal() (dAtA []byte, err error) {
|
func (m *ExpiryQueue) Marshal() (dAtA []byte, err error) {
|
||||||
size := m.Size()
|
size := m.Size()
|
||||||
dAtA = make([]byte, size)
|
dAtA = make([]byte, size)
|
||||||
@ -1780,65 +1516,6 @@ func (m *Signature) Size() (n int) {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *BlockChangeSet) Size() (n int) {
|
|
||||||
if m == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
if m.Height != 0 {
|
|
||||||
n += 1 + sovRegistry(uint64(m.Height))
|
|
||||||
}
|
|
||||||
if len(m.Records) > 0 {
|
|
||||||
for _, s := range m.Records {
|
|
||||||
l = len(s)
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Auctions) > 0 {
|
|
||||||
for _, s := range m.Auctions {
|
|
||||||
l = len(s)
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.AuctionBids) > 0 {
|
|
||||||
for _, e := range m.AuctionBids {
|
|
||||||
l = e.Size()
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Authorities) > 0 {
|
|
||||||
for _, s := range m.Authorities {
|
|
||||||
l = len(s)
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Names) > 0 {
|
|
||||||
for _, s := range m.Names {
|
|
||||||
l = len(s)
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *AuctionBidInfo) Size() (n int) {
|
|
||||||
if m == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
l = len(m.AuctionId)
|
|
||||||
if l > 0 {
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
l = len(m.BidderAddress)
|
|
||||||
if l > 0 {
|
|
||||||
n += 1 + l + sovRegistry(uint64(l))
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ExpiryQueue) Size() (n int) {
|
func (m *ExpiryQueue) Size() (n int) {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
return 0
|
return 0
|
||||||
@ -3425,351 +3102,6 @@ func (m *Signature) Unmarshal(dAtA []byte) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (m *BlockChangeSet) Unmarshal(dAtA []byte) error {
|
|
||||||
l := len(dAtA)
|
|
||||||
iNdEx := 0
|
|
||||||
for iNdEx < l {
|
|
||||||
preIndex := iNdEx
|
|
||||||
var wire uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
wire |= uint64(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fieldNum := int32(wire >> 3)
|
|
||||||
wireType := int(wire & 0x7)
|
|
||||||
if wireType == 4 {
|
|
||||||
return fmt.Errorf("proto: BlockChangeSet: wiretype end group for non-group")
|
|
||||||
}
|
|
||||||
if fieldNum <= 0 {
|
|
||||||
return fmt.Errorf("proto: BlockChangeSet: illegal tag %d (wire type %d)", fieldNum, wire)
|
|
||||||
}
|
|
||||||
switch fieldNum {
|
|
||||||
case 1:
|
|
||||||
if wireType != 0 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType)
|
|
||||||
}
|
|
||||||
m.Height = 0
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
m.Height |= int64(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
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 ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.Records = append(m.Records, string(dAtA[iNdEx:postIndex]))
|
|
||||||
iNdEx = postIndex
|
|
||||||
case 3:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Auctions", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
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 ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.Auctions = append(m.Auctions, string(dAtA[iNdEx:postIndex]))
|
|
||||||
iNdEx = postIndex
|
|
||||||
case 4:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field AuctionBids", wireType)
|
|
||||||
}
|
|
||||||
var msglen int
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
msglen |= int(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if msglen < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + msglen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.AuctionBids = append(m.AuctionBids, &AuctionBidInfo{})
|
|
||||||
if err := m.AuctionBids[len(m.AuctionBids)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
iNdEx = postIndex
|
|
||||||
case 5:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Authorities", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
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 ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.Authorities = append(m.Authorities, string(dAtA[iNdEx:postIndex]))
|
|
||||||
iNdEx = postIndex
|
|
||||||
case 6:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
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 ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.Names = append(m.Names, string(dAtA[iNdEx:postIndex]))
|
|
||||||
iNdEx = postIndex
|
|
||||||
default:
|
|
||||||
iNdEx = preIndex
|
|
||||||
skippy, err := skipRegistry(dAtA[iNdEx:])
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if (iNdEx + skippy) > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
iNdEx += skippy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if iNdEx > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func (m *AuctionBidInfo) Unmarshal(dAtA []byte) error {
|
|
||||||
l := len(dAtA)
|
|
||||||
iNdEx := 0
|
|
||||||
for iNdEx < l {
|
|
||||||
preIndex := iNdEx
|
|
||||||
var wire uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
wire |= uint64(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fieldNum := int32(wire >> 3)
|
|
||||||
wireType := int(wire & 0x7)
|
|
||||||
if wireType == 4 {
|
|
||||||
return fmt.Errorf("proto: AuctionBidInfo: wiretype end group for non-group")
|
|
||||||
}
|
|
||||||
if fieldNum <= 0 {
|
|
||||||
return fmt.Errorf("proto: AuctionBidInfo: illegal tag %d (wire type %d)", fieldNum, wire)
|
|
||||||
}
|
|
||||||
switch fieldNum {
|
|
||||||
case 1:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field AuctionId", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
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 ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.AuctionId = string(dAtA[iNdEx:postIndex])
|
|
||||||
iNdEx = postIndex
|
|
||||||
case 2:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field BidderAddress", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowRegistry
|
|
||||||
}
|
|
||||||
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 ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.BidderAddress = string(dAtA[iNdEx:postIndex])
|
|
||||||
iNdEx = postIndex
|
|
||||||
default:
|
|
||||||
iNdEx = preIndex
|
|
||||||
skippy, err := skipRegistry(dAtA[iNdEx:])
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
|
||||||
return ErrInvalidLengthRegistry
|
|
||||||
}
|
|
||||||
if (iNdEx + skippy) > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
iNdEx += skippy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if iNdEx > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func (m *ExpiryQueue) Unmarshal(dAtA []byte) error {
|
func (m *ExpiryQueue) Unmarshal(dAtA []byte) error {
|
||||||
l := len(dAtA)
|
l := len(dAtA)
|
||||||
iNdEx := 0
|
iNdEx := 0
|
||||||
|
Loading…
Reference in New Issue
Block a user