Skip to content
This repository has been archived by the owner on Oct 24, 2024. It is now read-only.

Commit

Permalink
refactor sld registration keeper
Browse files Browse the repository at this point in the history
  • Loading branch information
taryune committed Nov 2, 2023
1 parent e280265 commit 8505d12
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 131 deletions.
13 changes: 13 additions & 0 deletions x/registry/keeper/domain_ownership.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,16 @@ func (k Keeper) GetAllDomainOwnership(ctx sdk.Context) (list []types.DomainOwner

return
}

// Append to owned domain
func (k Keeper) AppendToOwnedDomain(ctx sdk.Context, owner string, name string, parent string) {
domainOwnership, found := k.GetDomainOwnership(ctx, owner)
if found {
domainOwnership.Domains = append(domainOwnership.Domains, &types.OwnedDomain{Name: name, Parent: parent})
k.SetDomainOwnership(ctx, domainOwnership)
} else {
k.SetDomainOwnership(ctx, types.DomainOwnership{Owner: owner, Domains: []*types.OwnedDomain{{Name: name, Parent: parent}}})
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,13 @@ func (suite *KeeperTestSuite) TestRegisterSecondLevelDomain() {

// Evaluate if module account balance is increased
// Get registration fee
config := suite.app.RegistryKeeper.GetParentsSubdomainConfig(suite.ctx, domain)
config := suite.app.RegistryKeeper.GetSecondLevelDomainParentsSubdomainConfig(suite.ctx, domain)
fee, err := config.GetRegistrationFee(tc.name, tc.registrationPeriodInYear)
suite.Require().Nil(err)

afterModuleBalance := suite.app.BankKeeper.GetBalance(suite.ctx, moduleAddress, types.MycelDenom)
suite.Require().Equal(beforeModuleBalance.Add(*fee), afterModuleBalance)
suite.Require().Equal(beforeParent.TotalWithdrawalAmount.Add(*fee), afterParent.TotalWithdrawalAmount)
suite.Require().Equal(beforeModuleBalance.Add(fee), afterModuleBalance)
suite.Require().Equal(beforeParent.TotalWithdrawalAmount.Add(fee), afterParent.TotalWithdrawalAmount)

// Evalute events
events, found := testutil.FindEventsByType(suite.ctx.EventManager().Events(), types.EventTypeRegisterSecondLevelDomain)
Expand Down
4 changes: 2 additions & 2 deletions x/registry/keeper/query_domain_registration_fee.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ func (k Keeper) DomainRegistrationFee(goCtx context.Context, req *types.QueryDom
// TODO: Process the query
_ = ctx
domain := types.SecondLevelDomain{Name: req.Name, Parent: req.Parent}
config := k.GetParentsSubdomainConfig(ctx, domain)
config := k.GetSecondLevelDomainParentsSubdomainConfig(ctx, domain)
fee, err := config.GetRegistrationFee(domain.Name, 1)
if err != nil {
return nil, err
}

return &types.QueryDomainRegistrationFeeResponse{Fee: *fee}, nil
return &types.QueryDomainRegistrationFeeResponse{Fee: fee}, nil
}
2 changes: 1 addition & 1 deletion x/registry/keeper/query_is_registrable_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func (k Keeper) IsRegistrableDomain(goCtx context.Context, req *types.QueryIsReg
// TODO: Process the query
_ = ctx
domain := types.SecondLevelDomain{Name: req.Name, Parent: req.Parent}
err := k.ValidateSecondLevelDomain(ctx, domain)
err := k.ValidateSecondLevelDomainIsRegistrable(ctx, domain)
if err != nil {
return &types.QueryIsRegistrableDomainResponse{IsRegstrable: false, ErrorMessage: err.Error()}, nil
}
Expand Down
86 changes: 51 additions & 35 deletions x/registry/keeper/second_level_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,13 @@ func (k Keeper) GetAllSecondLevelDomain(ctx sdk.Context) (list []types.SecondLev
return
}

// Get valid second level domain
// Get is second-level-domain already taken
func (k Keeper) GetIsSecondLevelDomainAlreadyTaken(ctx sdk.Context, domain types.SecondLevelDomain) (isDomainAlreadyTaken bool) {
_, isDomainAlreadyTaken = k.GetSecondLevelDomain(ctx, domain.Name, domain.Parent)
return isDomainAlreadyTaken
}

// Get valid second-level-domain
func (k Keeper) GetValidSecondLevelDomain(ctx sdk.Context, name string, parent string) (secondLevelDomain types.SecondLevelDomain, err error) {
// Regex validation
err = types.ValidateSecondLevelDomainName(name)
Expand All @@ -81,33 +87,40 @@ func (k Keeper) GetValidSecondLevelDomain(ctx sdk.Context, name string, parent s
if err != nil {
return secondLevelDomain, err
}

// Get parent domain
_, err = k.GetValidTopLevelDomain(ctx, parent)
if err != nil {
return types.SecondLevelDomain{}, err
}

// Get second level domain
secondLevelDomain, isFound := k.GetSecondLevelDomain(ctx, name, parent)
if !isFound {
return secondLevelDomain, errorsmod.Wrapf(types.ErrDomainNotFound, "%s.%s", name, parent)
return types.SecondLevelDomain{}, errorsmod.Wrapf(types.ErrDomainNotFound, "%s.%s", name, parent)
}

// Check if domain is not expired
expirationDate := time.Unix(0, secondLevelDomain.ExpirationDate)
if ctx.BlockTime().After(expirationDate) && secondLevelDomain.ExpirationDate != 0 {
return secondLevelDomain, errorsmod.Wrapf(types.ErrDomainExpired, "%s", name)
return types.SecondLevelDomain{}, errorsmod.Wrapf(types.ErrDomainExpired, "%s", name)
}

return secondLevelDomain, nil
}

// Get parent domain
func (k Keeper) GetParentDomain(ctx sdk.Context, domain types.SecondLevelDomain) (parentDomain types.TopLevelDomain, found bool) {
func (k Keeper) GetSecondLevelDomainParent(ctx sdk.Context, domain types.SecondLevelDomain) (parentDomain types.TopLevelDomain, found bool) {
// Get parent domain
parent := domain.ParseParent()
parentDomain, found = k.GetTopLevelDomain(ctx, parent)
return parentDomain, found
}

// Get parent domain's subdomain config
func (k Keeper) GetParentsSubdomainConfig(ctx sdk.Context, domain types.SecondLevelDomain) types.SubdomainConfig {
func (k Keeper) GetSecondLevelDomainParentsSubdomainConfig(ctx sdk.Context, domain types.SecondLevelDomain) types.SubdomainConfig {
// Get parent domain
parentDomain, found := k.GetParentDomain(ctx, domain)
parentDomain, found := k.GetSecondLevelDomainParent(ctx, domain)
if !found || parentDomain.SubdomainConfig == nil {
panic("parent domain or config not found")
}
Expand All @@ -127,77 +140,80 @@ func (k Keeper) IncrementParentsSubdomainCount(ctx sdk.Context, domain types.Sec
}

// Pay SLD registration fee
func (k Keeper) PaySLDRegstrationFee(ctx sdk.Context, payer sdk.AccAddress, domain types.SecondLevelDomain, registrationPeriodInYear uint64) (fee *sdk.Coin, err error) {
config := k.GetParentsSubdomainConfig(ctx, domain)
func (k Keeper) PaySecondLevelDomainRegstrationFee(ctx sdk.Context, payer sdk.AccAddress, domain types.SecondLevelDomain, registrationPeriodInYear uint64) (fee sdk.Coin, err error) {
config := k.GetSecondLevelDomainParentsSubdomainConfig(ctx, domain)

fee, err = config.GetRegistrationFee(domain.Name, registrationPeriodInYear)
if err != nil {
return fee, err
}

// Send coins from payer to module account
k.bankKeeper.SendCoinsFromAccountToModule(ctx, payer, types.ModuleName, sdk.NewCoins(*fee))
k.bankKeeper.SendCoinsFromAccountToModule(ctx, payer, types.ModuleName, sdk.NewCoins(fee))

// Update store
parent, found := k.GetTopLevelDomain(ctx, domain.Parent)
if !found {
panic("parent not found")
}
parent.TotalWithdrawalAmount = parent.TotalWithdrawalAmount.Add(*fee)
parent.TotalWithdrawalAmount = parent.TotalWithdrawalAmount.Add(fee)
k.SetTopLevelDomain(ctx, parent)

return fee, err
}

// Append to owned domain
func (k Keeper) AppendToOwnedDomain(ctx sdk.Context, owner string, name string, parent string) {
domainOwnership, found := k.GetDomainOwnership(ctx, owner)
if found {
domainOwnership.Domains = append(domainOwnership.Domains, &types.OwnedDomain{Name: name, Parent: parent})
k.SetDomainOwnership(ctx, domainOwnership)
} else {
k.SetDomainOwnership(ctx, types.DomainOwnership{Owner: owner, Domains: []*types.OwnedDomain{{Name: name, Parent: parent}}})
}
}

// Register second level domain
func (k Keeper) RegisterSecondLevelDomain(ctx sdk.Context, domain types.SecondLevelDomain, owner sdk.AccAddress, registrationPeriodIYear uint64) (err error) {
// Validate domain
err = k.ValidateSecondLevelDomain(ctx, domain)
// Validate second-level-domain is registrable
func (k Keeper) ValidateSecondLevelDomainIsRegistrable(ctx sdk.Context, secondLevelDomain types.SecondLevelDomain) error {
// Validate second-level-domain
err := secondLevelDomain.Validate()
if err != nil {
return err
}
// Check if second-level-domain is already taken
isTaken := k.GetIsSecondLevelDomainAlreadyTaken(ctx, secondLevelDomain)
if isTaken {
return errorsmod.Wrapf(types.ErrDomainIsAlreadyTaken, "%s.%s", secondLevelDomain.Name, secondLevelDomain.Parent)
}

// Get parent domain of second level domain
parentDomain, found := k.GetParentDomain(ctx, domain)

// Get parent domain of second-level-domain
parentDomain, found := k.GetSecondLevelDomainParent(ctx, secondLevelDomain)
if !found {
panic("parent not found")
return errorsmod.Wrapf(types.ErrParentDomainDoesNotExist, "%s", secondLevelDomain.Parent)
}

// Check if parent domain has subdomain registration config
if parentDomain.SubdomainConfig.MaxSubdomainRegistrations <= parentDomain.SubdomainCount {
err = errorsmod.Wrapf(types.ErrMaxSubdomainCountReached, "%d", parentDomain.SubdomainCount)
return errorsmod.Wrapf(types.ErrMaxSubdomainCountReached, "%d", parentDomain.SubdomainCount)
}

return nil
}

// Register second level domain
func (k Keeper) RegisterSecondLevelDomain(ctx sdk.Context, secondLevelDomain types.SecondLevelDomain, owner sdk.AccAddress, registrationPeriodIYear uint64) (err error) {
// Validate second-level-domain is registrable
err = k.ValidateSecondLevelDomainIsRegistrable(ctx, secondLevelDomain)
if err != nil {
return err
}

// Increment parents subdomain SubdomainCount
k.IncrementParentsSubdomainCount(ctx, domain)
k.IncrementParentsSubdomainCount(ctx, secondLevelDomain)

// Pay SLD registration fee
fee, err := k.PaySLDRegstrationFee(ctx, owner, domain, registrationPeriodIYear)
fee, err := k.PaySecondLevelDomainRegstrationFee(ctx, owner, secondLevelDomain, registrationPeriodIYear)
if err != nil {
return err
}

// Append to owned domain
k.AppendToOwnedDomain(ctx, owner.String(), domain.Name, domain.Parent)
k.AppendToOwnedDomain(ctx, owner.String(), secondLevelDomain.Name, secondLevelDomain.Parent)

// Set domain
k.SetSecondLevelDomain(ctx, domain)
k.SetSecondLevelDomain(ctx, secondLevelDomain)

// Emit event
EmitRegisterSecondLevelDomainEvent(ctx, domain, *fee)
EmitRegisterSecondLevelDomainEvent(ctx, secondLevelDomain, fee)

return err
}
6 changes: 3 additions & 3 deletions x/registry/keeper/second_level_domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,15 @@ func (suite *KeeperTestSuite) TestGetValidSecondLevelDomain() {
{
secondLevelDomain: types.SecondLevelDomain{
Name: "test",
Parent: "test",
Parent: "cel",
ExpirationDate: suite.ctx.BlockTime().AddDate(0, 0, 20).UnixNano(),
},
expErr: nil,
},
{
secondLevelDomain: types.SecondLevelDomain{
Name: "test",
Parent: "test",
Parent: "cel",
ExpirationDate: 0,
},
expErr: nil,
Expand All @@ -107,7 +107,7 @@ func (suite *KeeperTestSuite) TestGetValidSecondLevelDomain() {
Parent: "test",
ExpirationDate: suite.ctx.BlockTime().AddDate(0, 0, -20).UnixNano(),
},
expErr: errorsmod.Wrapf(types.ErrDomainExpired, "test"),
expErr: errorsmod.Wrapf(types.ErrDomainNotFound, "test"),
},
}
for i, tc := range testCases {
Expand Down
29 changes: 19 additions & 10 deletions x/registry/keeper/top_level_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func (k Keeper) GetIsTopLevelDomainAlreadyTaken(ctx sdk.Context, domain types.To
return isDomainAlreadyTaken
}

// Get valid top level domain
// Get valid-top-level domain
func (k Keeper) GetValidTopLevelDomain(ctx sdk.Context, name string) (topLevelDomain types.TopLevelDomain, err error) {
// Regex validation
err = types.ValidateTopLevelDomainName(name)
Expand All @@ -96,7 +96,7 @@ func (k Keeper) GetValidTopLevelDomain(ctx sdk.Context, name string) (topLevelDo
return topLevelDomain, nil
}

// Pay TLD registration fee
// Pay top-level-domain registration fee
func (k Keeper) PayTopLevelDomainFee(ctx sdk.Context, payer sdk.AccAddress, domain types.TopLevelDomain, registrationPeriodInYear uint64) (registrationFee types.TopLevelDomainFee, err error) {
// Get registration fee
registrationFee, err = k.GetTopLevelDomainFee(ctx, domain, registrationPeriodInYear)
Expand Down Expand Up @@ -131,6 +131,21 @@ func (k Keeper) PayTopLevelDomainFee(ctx sdk.Context, payer sdk.AccAddress, doma
return registrationFee, nil
}

func (k Keeper) ValidateTopLevelDomainIsRegistrable(ctx sdk.Context, topLevelDomain types.TopLevelDomain) (error) {
// Validate top-level-domain
err := topLevelDomain.Validate()
if err != nil {
return err
}
// Check if top-level-domain is already taken
isTaken := k.GetIsTopLevelDomainAlreadyTaken(ctx, topLevelDomain)
if isTaken {
return errorsmod.Wrapf(types.ErrDomainIsAlreadyTaken, "%s", topLevelDomain.Name)
}

return nil
}

// Register top-level-domain
func (k Keeper) RegisterTopLevelDomain(ctx sdk.Context, creator string, domainName string, registrationPeriodInYear uint64) (topLevelDomain types.TopLevelDomain, fee types.TopLevelDomainFee, err error) {
// Create top-level-domain
Expand All @@ -149,17 +164,11 @@ func (k Keeper) RegisterTopLevelDomain(ctx sdk.Context, creator string, domainNa
TotalWithdrawalAmount: sdk.NewCoins(),
}

// Validate top-level-domain
err = topLevelDomain.Validate()
// Validate top-level-domain is registrable
err = k.ValidateTopLevelDomainIsRegistrable(ctx, topLevelDomain)
if err != nil {
return types.TopLevelDomain{}, types.TopLevelDomainFee{}, err
}
// Check if top-level-domain is already taken
isTaken := k.GetIsTopLevelDomainAlreadyTaken(ctx, topLevelDomain)
if isTaken {
err = errorsmod.Wrapf(types.ErrDomainIsAlreadyTaken, "%s", topLevelDomain.Name)
return types.TopLevelDomain{}, types.TopLevelDomainFee{}, err
}

// Pay TLD registration fee
creatorAddress, err := sdk.AccAddressFromBech32(creator)
Expand Down
73 changes: 0 additions & 73 deletions x/registry/keeper/validate_registration.go

This file was deleted.

Loading

0 comments on commit 8505d12

Please sign in to comment.