mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 21:09:11 +00:00
* feat: add authentication middleware * feat: add REST API endpoints for database interactions * refactor: move DiscoveryDocument Pkl schema to oidc module * fix: replace sonrd with test_node.sh * feat: use NFT keeper to mint DID namespace NFT * refactor: move NFT class configuration to types * feat: add GlobalIntegrity genesis state * fix: ensure GlobalIntegrity is initialized in genesis * refactor: update all references to transactions module * refactor: improve genesis state struct * chore(did): update discovery endpoint to reflect base url * feat: remove unused context cache and client code * refactor: remove middleware dependency from keeper * feat: Add new query handlers for DID module * feat: Implement unimplemented params queries * feat: add support for first-party caveats * refactor: move motr command to cmd directory * feat: add support for GitHub releases * fix(motr): build app.wasm for motr package * feat: add card component * feat: add IndexedDB support for persistent storage * feat: Add Row and Column components * feat: add and components * refactor: improve button component * refactor: remove unnecessary button parameter in renderButton * feat: add vault service endpoint * feat: add input component
142 lines
3.3 KiB
Go
142 lines
3.3 KiB
Go
package keeper
|
|
|
|
import (
|
|
"cosmossdk.io/collections"
|
|
storetypes "cosmossdk.io/core/store"
|
|
"cosmossdk.io/log"
|
|
"cosmossdk.io/orm/model/ormdb"
|
|
nftkeeper "cosmossdk.io/x/nft/keeper"
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
|
|
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
|
stakkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
|
|
"github.com/ipfs/kubo/client/rpc"
|
|
|
|
apiv1 "github.com/onsonr/sonr/api/did/v1"
|
|
"github.com/onsonr/sonr/x/did/types"
|
|
)
|
|
|
|
// Keeper defines the middleware keeper.
|
|
type Keeper struct {
|
|
cdc codec.BinaryCodec
|
|
|
|
logger log.Logger
|
|
|
|
// state management
|
|
OrmDB apiv1.StateStore
|
|
Params collections.Item[types.Params]
|
|
Schema collections.Schema
|
|
|
|
AccountKeeper authkeeper.AccountKeeper
|
|
NftKeeper nftkeeper.Keeper
|
|
StakingKeeper *stakkeeper.Keeper
|
|
|
|
authority string
|
|
ipfsClient *rpc.HttpApi
|
|
}
|
|
|
|
// NewKeeper creates a new poa Keeper instance
|
|
func NewKeeper(
|
|
cdc codec.BinaryCodec,
|
|
storeService storetypes.KVStoreService,
|
|
accKeeper authkeeper.AccountKeeper,
|
|
nftKeeper nftkeeper.Keeper,
|
|
stkKeeper *stakkeeper.Keeper,
|
|
logger log.Logger,
|
|
authority string,
|
|
) Keeper {
|
|
logger = logger.With(log.ModuleKey, "x/"+types.ModuleName)
|
|
sb := collections.NewSchemaBuilder(storeService)
|
|
if authority == "" {
|
|
authority = authtypes.NewModuleAddress(govtypes.ModuleName).String()
|
|
}
|
|
db, err := ormdb.NewModuleDB(
|
|
&types.ORMModuleSchema,
|
|
ormdb.ModuleDBOptions{KVStoreService: storeService},
|
|
)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
store, err := apiv1.NewStateStore(db)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Initialize IPFS client
|
|
ipfsClient, _ := rpc.NewLocalApi()
|
|
k := Keeper{
|
|
ipfsClient: ipfsClient,
|
|
cdc: cdc,
|
|
logger: logger,
|
|
Params: collections.NewItem(
|
|
sb,
|
|
types.ParamsKey,
|
|
"params",
|
|
codec.CollValue[types.Params](cdc),
|
|
),
|
|
authority: authority,
|
|
OrmDB: store,
|
|
AccountKeeper: accKeeper,
|
|
NftKeeper: nftKeeper,
|
|
StakingKeeper: stkKeeper,
|
|
}
|
|
schema, err := sb.Build()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
k.Schema = schema
|
|
return k
|
|
}
|
|
|
|
// IsClaimedServiceOrigin checks if a service origin is unclaimed
|
|
func (k Keeper) IsUnclaimedServiceOrigin(ctx sdk.Context, origin string) bool {
|
|
rec, _ := k.OrmDB.ServiceRecordTable().GetByOrigin(ctx, origin)
|
|
return rec == nil
|
|
}
|
|
|
|
// IsValidServiceOrigin checks if a service origin is valid
|
|
func (k Keeper) IsValidServiceOrigin(ctx sdk.Context, origin string) bool {
|
|
rec, err := k.OrmDB.ServiceRecordTable().GetByOrigin(ctx, origin)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if rec == nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// VerifyMinimumStake checks if a validator has a minimum stake
|
|
func (k Keeper) VerifyMinimumStake(ctx sdk.Context, addr string) bool {
|
|
address, err := sdk.AccAddressFromBech32(addr)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
addval, err := sdk.ValAddressFromBech32(addr)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
del, err := k.StakingKeeper.GetDelegation(ctx, address, addval)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
if del.Shares.IsZero() {
|
|
return false
|
|
}
|
|
return del.Shares.IsPositive()
|
|
}
|
|
|
|
// VerifyServicePermissions checks if a service has permission
|
|
func (k Keeper) VerifyServicePermissions(
|
|
ctx sdk.Context,
|
|
addr string,
|
|
service string,
|
|
permissions string,
|
|
) bool {
|
|
return false
|
|
}
|