feat: Add MsgRegisterService to handle service registration

The commit message for these changes would be:

feat: Add MsgRegisterService to handle service registration

This commit adds a new message type `MsgRegisterService` to the DID module's transaction proto file. This message allows users to register a new service with a given permission scope and origin URI. The domain must have a valid TXT record containing the public key.

The changes include:

- Adding the `MsgRegisterService` message type with fields for authority, origin URI, and scopes
- Adding the `MsgRegisterServiceResponse` message type to handle the response
- Updating the Msg service to include a new `RegisterService` RPC method
- Implementing the `RegisterService` method in the keeper

This feature allows users to register new services on the DID chain, which is an important part of the overall DID functionality.
This commit is contained in:
Prad Nukala
2024-08-10 15:24:22 -04:00
committed by Prad Nukala (aider)
parent f91107d88e
commit 24db9de0ad
9 changed files with 5555 additions and 2457 deletions
+11 -4
View File
@@ -5,6 +5,7 @@ option go_package = "github.com/onsonr/hway/x/did/types";
import "cosmos/orm/v1/orm.proto";
import "did/v1/genesis.proto";
import "did/v1/enums.proto";
// Aliases represents the `alsoKnownAs` property associated with a DID Controller
message Aliases {
@@ -146,9 +147,15 @@ message Service {
// The type of the service
string service_type = 2;
// The service endpoint
string service_endpoint = 3;
// The controller DID of the service
string controller_did = 4;
string controller_did = 3;
// The domain name of the service
string origin_uri = 4;
// The service endpoint
map<string, string> service_endpoints = 5;
// Scopes is the Authorization Grants of the service
repeated PermissionScope scopes = 6;
}
+55 -30
View File
@@ -3,6 +3,7 @@ syntax = "proto3";
package did.v1;
import "cosmos/msg/v1/msg.proto";
import "did/v1/enums.proto";
import "did/v1/genesis.proto";
import "gogoproto/gogo.proto";
import "cosmos_proto/cosmos.proto";
@@ -16,11 +17,14 @@ service Msg {
// Since: cosmos-sdk 0.47
rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
// RegisterController initializes a controller with the given authentication set, address, cid, publicKey, and user-defined alias.
rpc RegisterController(MsgInitializeController) returns (MsgInitializeControllerResponse);
// Authenticate asserts the given controller is the owner of the given address.
rpc Authenticate(MsgAuthenticate) returns (MsgAuthenticateResponse);
// AuthenticateController asserts the given controller is the owner of the given address.
rpc AuthenticateController(MsgAuthenticateController) returns (MsgAuthenticateControllerResponse);
// RegisterController initializes a controller with the given authentication set, address, cid, publicKey, and user-defined alias.
rpc RegisterController(MsgRegisterController) returns (MsgRegisterControllerResponse);
// RegisterService initializes a Service with a given permission scope and URI. The domain must have a valid TXT record containing the public key.
rpc RegisterService(MsgRegisterService) returns (MsgRegisterServiceResponse);
}
// MsgUpdateParams is the Msg/UpdateParams request type.
@@ -44,31 +48,8 @@ message MsgUpdateParams {
// Since: cosmos-sdk 0.47
message MsgUpdateParamsResponse {}
// MsgInitializeController is the message type for the InitializeController RPC.
message MsgInitializeController {
option (cosmos.msg.v1.signer) = "authority";
// authority is the address of the governance account.
string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
// Assertions is the list of assertions to initialize the controller with.
repeated bytes assertions = 2;
// Keyshares is the list of keyshares to initialize the controller with.
repeated bytes keyshares = 3;
// Verifications is the list of verifications to initialize the controller with.
repeated bytes verifications = 4;
}
// MsgInitializeControllerResponse is the response type for the InitializeController RPC.
message MsgInitializeControllerResponse {
// Controller is the address of the initialized controller.
string controller = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
// MsgAuthenticate is the message type for the Authenticate RPC.
message MsgAuthenticateController {
message MsgAuthenticate {
option (cosmos.msg.v1.signer) = "authority";
// authority is the address of the governance account.
@@ -84,6 +65,50 @@ message MsgAuthenticateController {
string origin = 4;
}
// MsgAuthenticateControllerResponse is the response type for the Authenticate RPC.
message MsgAuthenticateControllerResponse {}
// MsgAuthenticateResponse is the response type for the Authenticate RPC.
message MsgAuthenticateResponse {}
// MsgRegisterController is the message type for the InitializeController RPC.
message MsgRegisterController {
option (cosmos.msg.v1.signer) = "authority";
// authority is the address of the governance account.
string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
// Assertions is the list of assertions to initialize the controller with.
repeated bytes assertions = 2;
// Keyshares is the list of keyshares to initialize the controller with.
repeated bytes keyshares = 3;
// Verifications is the list of verifications to initialize the controller with.
repeated bytes verifications = 4;
}
// MsgRegisterControllerResponse is the response type for the InitializeController RPC.
message MsgRegisterControllerResponse {
// Controller is the address of the initialized controller.
string controller = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
// Accounts are a Address Map and Supported coin Denoms for the controller
map<string, string> accounts = 2;
}
// MsgRegisterService is the message type for the RegisterService RPC.
message MsgRegisterService {
option (cosmos.msg.v1.signer) = "authority";
// authority is the address of the governance account.
string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
// origin is the origin of the request in wildcard form.
string origin_uri = 2;
// PermissionScope is the scope of the service.
repeated PermissionScope scopes = 3;
}
// MsgRegisterServiceResponse is the response type for the RegisterService RPC.
message MsgRegisterServiceResponse {
bool success = 1;
}