sdkerrors.Wrap
This commit is contained in:
parent
b8d6300e4d
commit
2c883282bc
@ -3,6 +3,7 @@ package keeper
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
"github.com/cerc-io/laconicd/x/registry/types"
|
"github.com/cerc-io/laconicd/x/registry/types"
|
||||||
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"
|
||||||
@ -48,7 +49,7 @@ func (q Querier) GetRecord(c context.Context, req *types.QueryRecordByIDRequest)
|
|||||||
ctx := sdk.UnwrapSDKContext(c)
|
ctx := sdk.UnwrapSDKContext(c)
|
||||||
id := req.GetId()
|
id := req.GetId()
|
||||||
if !q.Keeper.HasRecord(ctx, id) {
|
if !q.Keeper.HasRecord(ctx, id) {
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Record not found.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, "Record not found.")
|
||||||
}
|
}
|
||||||
record := q.Keeper.GetRecord(ctx, id)
|
record := q.Keeper.GetRecord(ctx, id)
|
||||||
return &types.QueryRecordByIDResponse{Record: record}, nil
|
return &types.QueryRecordByIDResponse{Record: record}, nil
|
||||||
@ -86,11 +87,11 @@ func (q Querier) LookupCrn(c context.Context, req *types.QueryLookupCrn) (*types
|
|||||||
ctx := sdk.UnwrapSDKContext(c)
|
ctx := sdk.UnwrapSDKContext(c)
|
||||||
crn := req.GetCrn()
|
crn := req.GetCrn()
|
||||||
if !q.Keeper.HasNameRecord(ctx, crn) {
|
if !q.Keeper.HasNameRecord(ctx, crn) {
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "CRN not found.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, "CRN not found.")
|
||||||
}
|
}
|
||||||
nameRecord := q.Keeper.GetNameRecord(ctx, crn)
|
nameRecord := q.Keeper.GetNameRecord(ctx, crn)
|
||||||
if nameRecord == nil {
|
if nameRecord == nil {
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "name record not found.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, "name record not found.")
|
||||||
}
|
}
|
||||||
return &types.QueryLookupCrnResponse{Name: nameRecord}, nil
|
return &types.QueryLookupCrnResponse{Name: nameRecord}, nil
|
||||||
}
|
}
|
||||||
@ -100,7 +101,7 @@ func (q Querier) ResolveCrn(c context.Context, req *types.QueryResolveCrn) (*typ
|
|||||||
crn := req.GetCrn()
|
crn := req.GetCrn()
|
||||||
record := q.Keeper.ResolveCRN(ctx, crn)
|
record := q.Keeper.ResolveCRN(ctx, crn)
|
||||||
if record == nil {
|
if record == nil {
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "record not found.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, "record not found.")
|
||||||
}
|
}
|
||||||
return &types.QueryResolveCrnResponse{Record: record}, nil
|
return &types.QueryResolveCrnResponse{Record: record}, nil
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
auctionkeeper "github.com/cerc-io/laconicd/x/auction/keeper"
|
auctionkeeper "github.com/cerc-io/laconicd/x/auction/keeper"
|
||||||
bondkeeper "github.com/cerc-io/laconicd/x/bond/keeper"
|
bondkeeper "github.com/cerc-io/laconicd/x/bond/keeper"
|
||||||
"github.com/cerc-io/laconicd/x/registry/helpers"
|
"github.com/cerc-io/laconicd/x/registry/helpers"
|
||||||
@ -240,7 +241,7 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*type
|
|||||||
resourceSignBytes, _ := record.GetSignBytes()
|
resourceSignBytes, _ := record.GetSignBytes()
|
||||||
cid, err := record.GetCID()
|
cid, err := record.GetCID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid record JSON")
|
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid record JSON")
|
||||||
}
|
}
|
||||||
|
|
||||||
record.ID = cid
|
record.ID = cid
|
||||||
@ -255,13 +256,13 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*type
|
|||||||
pubKey, err := legacy.PubKeyFromBytes(helpers.BytesFromBase64(sig.PubKey))
|
pubKey, err := legacy.PubKeyFromBytes(helpers.BytesFromBase64(sig.PubKey))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error decoding pubKey from bytes: ", err)
|
fmt.Println("Error decoding pubKey from bytes: ", err)
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Invalid public key.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Invalid public key.")
|
||||||
}
|
}
|
||||||
|
|
||||||
sigOK := pubKey.VerifySignature(resourceSignBytes, helpers.BytesFromBase64(sig.Sig))
|
sigOK := pubKey.VerifySignature(resourceSignBytes, helpers.BytesFromBase64(sig.Sig))
|
||||||
if !sigOK {
|
if !sigOK {
|
||||||
fmt.Println("Signature mismatch: ", sig.PubKey)
|
fmt.Println("Signature mismatch: ", sig.PubKey)
|
||||||
return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Invalid signature.")
|
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Invalid signature.")
|
||||||
}
|
}
|
||||||
record.Owners = append(record.Owners, pubKey.Address().String())
|
record.Owners = append(record.Owners, pubKey.Address().String())
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
auctiontypes "github.com/cerc-io/laconicd/x/auction/types"
|
auctiontypes "github.com/cerc-io/laconicd/x/auction/types"
|
||||||
"github.com/cerc-io/laconicd/x/registry/helpers"
|
"github.com/cerc-io/laconicd/x/registry/helpers"
|
||||||
"github.com/cerc-io/laconicd/x/registry/types"
|
"github.com/cerc-io/laconicd/x/registry/types"
|
||||||
@ -112,12 +113,12 @@ func (k Keeper) updateBlockChangeSetForName(ctx sdk.Context, crn string) {
|
|||||||
func (k Keeper) getAuthority(ctx sdk.Context, crn string) (string, *url.URL, *types.NameAuthority, error) {
|
func (k Keeper) getAuthority(ctx sdk.Context, crn string) (string, *url.URL, *types.NameAuthority, error) {
|
||||||
parsedCRN, err := url.Parse(crn)
|
parsedCRN, err := url.Parse(crn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid CRN.")
|
return "", nil, nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid CRN.")
|
||||||
}
|
}
|
||||||
|
|
||||||
name := parsedCRN.Host
|
name := parsedCRN.Host
|
||||||
if !k.HasNameAuthority(ctx, name) {
|
if !k.HasNameAuthority(ctx, name) {
|
||||||
return name, nil, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Name authority not found.")
|
return name, nil, nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Name authority not found.")
|
||||||
}
|
}
|
||||||
authority := k.GetNameAuthority(ctx, name)
|
authority := k.GetNameAuthority(ctx, name)
|
||||||
return name, parsedCRN, &authority, nil
|
return name, parsedCRN, &authority, nil
|
||||||
@ -131,19 +132,19 @@ func (k Keeper) checkCRNAccess(ctx sdk.Context, signer sdk.AccAddress, crn strin
|
|||||||
|
|
||||||
formattedCRN := fmt.Sprintf("crn://%s%s", name, parsedCRN.RequestURI())
|
formattedCRN := fmt.Sprintf("crn://%s%s", name, parsedCRN.RequestURI())
|
||||||
if formattedCRN != crn {
|
if formattedCRN != crn {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid CRN.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid CRN.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if authority.OwnerAddress != signer.String() {
|
if authority.OwnerAddress != signer.String() {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Access denied.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Access denied.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if authority.Status != types.AuthorityActive {
|
if authority.Status != types.AuthorityActive {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Authority is not active.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Authority is not active.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if authority.BondId == "" || len(authority.BondId) == 0 {
|
if authority.BondId == "" || len(authority.BondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Authority bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Authority bond not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if authority.OwnerPublicKey == "" {
|
if authority.OwnerPublicKey == "" {
|
||||||
@ -323,13 +324,13 @@ func (k Keeper) ProcessReserveSubAuthority(ctx sdk.Context, name string, msg typ
|
|||||||
|
|
||||||
// Check if parent authority exists.
|
// Check if parent authority exists.
|
||||||
if !k.HasNameAuthority(ctx, parent) {
|
if !k.HasNameAuthority(ctx, parent) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Parent authority not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Parent authority not found.")
|
||||||
}
|
}
|
||||||
parentAuthority := k.GetNameAuthority(ctx, parent)
|
parentAuthority := k.GetNameAuthority(ctx, parent)
|
||||||
|
|
||||||
// Sub-authority creator needs to be the owner of the parent authority.
|
// Sub-authority creator needs to be the owner of the parent authority.
|
||||||
if parentAuthority.OwnerAddress != msg.Signer {
|
if parentAuthority.OwnerAddress != msg.Signer {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Access denied.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Access denied.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub-authority owner defaults to parent authority owner.
|
// Sub-authority owner defaults to parent authority owner.
|
||||||
@ -362,17 +363,17 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
|
|||||||
if k.HasNameAuthority(ctx, name) {
|
if k.HasNameAuthority(ctx, name) {
|
||||||
authority := k.GetNameAuthority(ctx, name)
|
authority := k.GetNameAuthority(ctx, name)
|
||||||
if authority.Status != types.AuthorityExpired {
|
if authority.Status != types.AuthorityExpired {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Name already reserved.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Name already reserved.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ownerAddress, err := sdk.AccAddressFromBech32(owner)
|
ownerAddress, err := sdk.AccAddressFromBech32(owner)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid owner address.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid owner address.")
|
||||||
}
|
}
|
||||||
ownerAccount := k.accountKeeper.GetAccount(ctx, ownerAddress)
|
ownerAccount := k.accountKeeper.GetAccount(ctx, ownerAddress)
|
||||||
if ownerAccount == nil {
|
if ownerAccount == nil {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnknownAddress, "Account not found.")
|
return errorsmod.Wrap(sdkerrors.ErrUnknownAddress, "Account not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
authority := types.NameAuthority{
|
authority := types.NameAuthority{
|
||||||
@ -430,11 +431,11 @@ func (k Keeper) ProcessReserveAuthority(ctx sdk.Context, msg types.MsgReserveAut
|
|||||||
crn := fmt.Sprintf("crn://%s", msg.GetName())
|
crn := fmt.Sprintf("crn://%s", msg.GetName())
|
||||||
parsedCrn, err := url.Parse(crn)
|
parsedCrn, err := url.Parse(crn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
|
||||||
}
|
}
|
||||||
name := parsedCrn.Host
|
name := parsedCrn.Host
|
||||||
if fmt.Sprintf("crn://%s", name) != crn {
|
if fmt.Sprintf("crn://%s", name) != crn {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
|
||||||
}
|
}
|
||||||
if strings.Contains(name, ".") {
|
if strings.Contains(name, ".") {
|
||||||
return k.ProcessReserveSubAuthority(ctx, name, msg)
|
return k.ProcessReserveSubAuthority(ctx, name, msg)
|
||||||
@ -450,20 +451,20 @@ func (k Keeper) ProcessSetAuthorityBond(ctx sdk.Context, msg types.MsgSetAuthori
|
|||||||
name := msg.GetName()
|
name := msg.GetName()
|
||||||
signer := msg.GetSigner()
|
signer := msg.GetSigner()
|
||||||
if !k.HasNameAuthority(ctx, name) {
|
if !k.HasNameAuthority(ctx, name) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Name authority not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Name authority not found.")
|
||||||
}
|
}
|
||||||
authority := k.GetNameAuthority(ctx, name)
|
authority := k.GetNameAuthority(ctx, name)
|
||||||
if authority.OwnerAddress != signer {
|
if authority.OwnerAddress != signer {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Access denied")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Access denied")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !k.bondKeeper.HasBond(ctx, msg.BondId) {
|
if !k.bondKeeper.HasBond(ctx, msg.BondId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Bond not found.")
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
bond := k.bondKeeper.GetBond(ctx, msg.BondId)
|
bond := k.bondKeeper.GetBond(ctx, msg.BondId)
|
||||||
if bond.Owner != signer {
|
if bond.Owner != signer {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// No-op if bond hasn't changed.
|
// No-op if bond hasn't changed.
|
||||||
@ -496,7 +497,7 @@ func (k Keeper) ProcessDeleteName(ctx sdk.Context, msg types.MsgDeleteNameAuthor
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !k.HasNameRecord(ctx, msg.Crn) {
|
if !k.HasNameRecord(ctx, msg.Crn) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Name not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Name not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set CID to empty string.
|
// Set CID to empty string.
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
auctionkeeper "github.com/cerc-io/laconicd/x/auction/keeper"
|
auctionkeeper "github.com/cerc-io/laconicd/x/auction/keeper"
|
||||||
auctiontypes "github.com/cerc-io/laconicd/x/auction/types"
|
auctiontypes "github.com/cerc-io/laconicd/x/auction/types"
|
||||||
bondtypes "github.com/cerc-io/laconicd/x/bond/types"
|
bondtypes "github.com/cerc-io/laconicd/x/bond/types"
|
||||||
@ -158,7 +159,7 @@ func (k RecordKeeper) QueryRecordsByBond(ctx sdk.Context, bondID string) []types
|
|||||||
// ProcessRenewRecord renews a record.
|
// ProcessRenewRecord renews a record.
|
||||||
func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg types.MsgRenewRecord) error {
|
func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg types.MsgRenewRecord) error {
|
||||||
if !k.HasRecord(ctx, msg.RecordId) {
|
if !k.HasRecord(ctx, msg.RecordId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if renewal is required (i.e. expired record marked as deleted).
|
// Check if renewal is required (i.e. expired record marked as deleted).
|
||||||
@ -169,7 +170,7 @@ func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg types.MsgRenewRecord) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !record.Deleted || expiryTime.After(ctx.BlockTime()) {
|
if !record.Deleted || expiryTime.After(ctx.BlockTime()) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Renewal not required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Renewal not required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
recordType := record.ToRecordType()
|
recordType := record.ToRecordType()
|
||||||
@ -184,23 +185,23 @@ func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg types.MsgRenewRecord) er
|
|||||||
// ProcessAssociateBond associates a record with a bond.
|
// ProcessAssociateBond associates a record with a bond.
|
||||||
func (k Keeper) ProcessAssociateBond(ctx sdk.Context, msg types.MsgAssociateBond) error {
|
func (k Keeper) ProcessAssociateBond(ctx sdk.Context, msg types.MsgAssociateBond) error {
|
||||||
if !k.HasRecord(ctx, msg.RecordId) {
|
if !k.HasRecord(ctx, msg.RecordId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !k.bondKeeper.HasBond(ctx, msg.BondId) {
|
if !k.bondKeeper.HasBond(ctx, msg.BondId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Bond not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if already associated with a bond.
|
// Check if already associated with a bond.
|
||||||
record := k.GetRecord(ctx, msg.RecordId)
|
record := k.GetRecord(ctx, msg.RecordId)
|
||||||
if record.BondId != "" || len(record.BondId) != 0 {
|
if record.BondId != "" || len(record.BondId) != 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond already exists.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond already exists.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only the bond owner can associate a record with the bond.
|
// Only the bond owner can associate a record with the bond.
|
||||||
bond := k.bondKeeper.GetBond(ctx, msg.BondId)
|
bond := k.bondKeeper.GetBond(ctx, msg.BondId)
|
||||||
if msg.Signer != bond.Owner {
|
if msg.Signer != bond.Owner {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
record.BondId = msg.BondId
|
record.BondId = msg.BondId
|
||||||
@ -218,20 +219,20 @@ func (k Keeper) ProcessAssociateBond(ctx sdk.Context, msg types.MsgAssociateBond
|
|||||||
// ProcessDissociateBond dissociates a record from its bond.
|
// ProcessDissociateBond dissociates a record from its bond.
|
||||||
func (k Keeper) ProcessDissociateBond(ctx sdk.Context, msg types.MsgDissociateBond) error {
|
func (k Keeper) ProcessDissociateBond(ctx sdk.Context, msg types.MsgDissociateBond) error {
|
||||||
if !k.HasRecord(ctx, msg.RecordId) {
|
if !k.HasRecord(ctx, msg.RecordId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Record not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if associated with a bond.
|
// Check if associated with a bond.
|
||||||
record := k.GetRecord(ctx, msg.RecordId)
|
record := k.GetRecord(ctx, msg.RecordId)
|
||||||
bondID := record.BondId
|
bondID := record.BondId
|
||||||
if bondID == "" || len(bondID) == 0 {
|
if bondID == "" || len(bondID) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only the bond owner can dissociate a record from the bond.
|
// Only the bond owner can dissociate a record from the bond.
|
||||||
bond := k.bondKeeper.GetBond(ctx, bondID)
|
bond := k.bondKeeper.GetBond(ctx, bondID)
|
||||||
if msg.Signer != bond.Owner {
|
if msg.Signer != bond.Owner {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear bond ID.
|
// Clear bond ID.
|
||||||
@ -245,13 +246,13 @@ func (k Keeper) ProcessDissociateBond(ctx sdk.Context, msg types.MsgDissociateBo
|
|||||||
// ProcessDissociateRecords dissociates all records associated with a given bond.
|
// ProcessDissociateRecords dissociates all records associated with a given bond.
|
||||||
func (k Keeper) ProcessDissociateRecords(ctx sdk.Context, msg types.MsgDissociateRecords) error {
|
func (k Keeper) ProcessDissociateRecords(ctx sdk.Context, msg types.MsgDissociateRecords) error {
|
||||||
if !k.bondKeeper.HasBond(ctx, msg.BondId) {
|
if !k.bondKeeper.HasBond(ctx, msg.BondId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Bond not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only the bond owner can dissociate all records from the bond.
|
// Only the bond owner can dissociate all records from the bond.
|
||||||
bond := k.bondKeeper.GetBond(ctx, msg.BondId)
|
bond := k.bondKeeper.GetBond(ctx, msg.BondId)
|
||||||
if msg.Signer != bond.Owner {
|
if msg.Signer != bond.Owner {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dissociate all records from the bond.
|
// Dissociate all records from the bond.
|
||||||
@ -269,22 +270,22 @@ func (k Keeper) ProcessDissociateRecords(ctx sdk.Context, msg types.MsgDissociat
|
|||||||
// ProcessReAssociateRecords switches records from and old to new bond.
|
// ProcessReAssociateRecords switches records from and old to new bond.
|
||||||
func (k Keeper) ProcessReAssociateRecords(ctx sdk.Context, msg types.MsgReAssociateRecords) error {
|
func (k Keeper) ProcessReAssociateRecords(ctx sdk.Context, msg types.MsgReAssociateRecords) error {
|
||||||
if !k.bondKeeper.HasBond(ctx, msg.OldBondId) {
|
if !k.bondKeeper.HasBond(ctx, msg.OldBondId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Old bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Old bond not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if !k.bondKeeper.HasBond(ctx, msg.NewBondId) {
|
if !k.bondKeeper.HasBond(ctx, msg.NewBondId) {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "New bond not found.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "New bond not found.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only the bond owner can re-associate all records.
|
// Only the bond owner can re-associate all records.
|
||||||
oldBond := k.bondKeeper.GetBond(ctx, msg.OldBondId)
|
oldBond := k.bondKeeper.GetBond(ctx, msg.OldBondId)
|
||||||
if msg.Signer != oldBond.Owner {
|
if msg.Signer != oldBond.Owner {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Old bond owner mismatch.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Old bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
newBond := k.bondKeeper.GetBond(ctx, msg.NewBondId)
|
newBond := k.bondKeeper.GetBond(ctx, msg.NewBondId)
|
||||||
if msg.Signer != newBond.Owner {
|
if msg.Signer != newBond.Owner {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "New bond owner mismatch.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "New bond owner mismatch.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-associate all records.
|
// Re-associate all records.
|
||||||
|
@ -3,6 +3,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
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"
|
||||||
)
|
)
|
||||||
@ -32,15 +33,15 @@ func (msg MsgSetName) Type() string { return "set-name" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgSetName) ValidateBasic() error {
|
func (msg MsgSetName) ValidateBasic() error {
|
||||||
if msg.Crn == "" {
|
if msg.Crn == "" {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "CRN is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "CRN is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg.Cid == "" {
|
if msg.Cid == "" {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "CID is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "CID is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -76,11 +77,11 @@ func (msg MsgReserveAuthority) Type() string { return "reserve-authority" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgReserveAuthority) ValidateBasic() error {
|
func (msg MsgReserveAuthority) ValidateBasic() error {
|
||||||
if len(msg.Name) == 0 {
|
if len(msg.Name) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "name is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "name is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -116,15 +117,15 @@ func (msg MsgSetAuthorityBond) Type() string { return "authority-bond" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgSetAuthorityBond) ValidateBasic() error {
|
func (msg MsgSetAuthorityBond) ValidateBasic() error {
|
||||||
if len(msg.Name) == 0 {
|
if len(msg.Name) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "name is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "name is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.BondId) == 0 {
|
if len(msg.BondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "bond id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "bond id is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -159,16 +160,16 @@ func (msg MsgDeleteNameAuthority) Type() string { return "delete-name" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgDeleteNameAuthority) ValidateBasic() error {
|
func (msg MsgDeleteNameAuthority) ValidateBasic() error {
|
||||||
if len(msg.Crn) == 0 {
|
if len(msg.Crn) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "crn is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "crn is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := url.Parse(msg.Crn)
|
_, err := url.Parse(msg.Crn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid crn.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid crn.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
errorsmod "cosmossdk.io/errors"
|
||||||
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
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"
|
||||||
@ -34,17 +35,17 @@ func (msg MsgSetRecord) Type() string { return "set-record" }
|
|||||||
|
|
||||||
func (msg MsgSetRecord) ValidateBasic() error {
|
func (msg MsgSetRecord) ValidateBasic() error {
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Signer)
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, msg.Signer)
|
||||||
}
|
}
|
||||||
owners := msg.Payload.Record.Owners
|
owners := msg.Payload.Record.Owners
|
||||||
for _, owner := range owners {
|
for _, owner := range owners {
|
||||||
if owner == "" {
|
if owner == "" {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Record owner not set.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Record owner not set.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.BondId) == 0 {
|
if len(msg.BondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Bond ID is required.")
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Bond ID is required.")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -83,11 +84,11 @@ func (msg MsgRenewRecord) Type() string { return "renew-record" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgRenewRecord) ValidateBasic() error {
|
func (msg MsgRenewRecord) ValidateBasic() error {
|
||||||
if len(msg.RecordId) == 0 {
|
if len(msg.RecordId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "record id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "record id is required.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -123,13 +124,13 @@ func (msg MsgAssociateBond) Type() string { return "associate-bond" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgAssociateBond) ValidateBasic() error {
|
func (msg MsgAssociateBond) ValidateBasic() error {
|
||||||
if len(msg.RecordId) == 0 {
|
if len(msg.RecordId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "record id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "record id is required.")
|
||||||
}
|
}
|
||||||
if len(msg.BondId) == 0 {
|
if len(msg.BondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "bond id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "bond id is required.")
|
||||||
}
|
}
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -164,10 +165,10 @@ func (msg MsgDissociateBond) Type() string { return "dissociate-bond" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgDissociateBond) ValidateBasic() error {
|
func (msg MsgDissociateBond) ValidateBasic() error {
|
||||||
if len(msg.RecordId) == 0 {
|
if len(msg.RecordId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "record id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "record id is required.")
|
||||||
}
|
}
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -202,10 +203,10 @@ func (msg MsgDissociateRecords) Type() string { return "dissociate-records" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgDissociateRecords) ValidateBasic() error {
|
func (msg MsgDissociateRecords) ValidateBasic() error {
|
||||||
if len(msg.BondId) == 0 {
|
if len(msg.BondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "bond id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "bond id is required.")
|
||||||
}
|
}
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -241,13 +242,13 @@ func (msg MsgReAssociateRecords) Type() string { return "reassociate-records" }
|
|||||||
// ValidateBasic Implements Msg.
|
// ValidateBasic Implements Msg.
|
||||||
func (msg MsgReAssociateRecords) ValidateBasic() error {
|
func (msg MsgReAssociateRecords) ValidateBasic() error {
|
||||||
if len(msg.OldBondId) == 0 {
|
if len(msg.OldBondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "old-bond-id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "old-bond-id is required.")
|
||||||
}
|
}
|
||||||
if len(msg.NewBondId) == 0 {
|
if len(msg.NewBondId) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "new-bond-id is required.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "new-bond-id is required.")
|
||||||
}
|
}
|
||||||
if len(msg.Signer) == 0 {
|
if len(msg.Signer) == 0 {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user