rename denom as type -- second batch

To avoid confusion with coin denom in `x/bank` metadata
This commit is contained in:
Haifeng Xi 2021-06-18 17:34:51 +08:00 committed by GitHub
parent 0dbfbdbda3
commit c8642f4c23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 54 additions and 55 deletions

View File

@ -128,7 +128,7 @@ message MsgSend {
message MsgSendResponse {} message MsgSendResponse {}
message MsgBurn { message MsgBurn {
string denom = 1; string type = 1;
string id = 2; string id = 2;
string owner = 3; string owner = 3;
} }
@ -151,70 +151,68 @@ type msgServer struct{
} }
func (m msgServer) Issue(ctx context.Context, msg *types.MsgIssue) (*types.MsgIssueResponse, error){ func (m msgServer) Issue(ctx context.Context, msg *types.MsgIssue) (*types.MsgIssueResponse, error){
m.keeper.AssertDenomNotExist(msg.Metadata.Denom) m.keeper.AssertTypeNotExist(msg.Metadata.Type)
store := ctx.KVStore(m.keeper.storeKey) store := ctx.KVStore(m.keeper.storeKey)
bz := m.keeper.cdc.MustMarshalBinaryBare(msg.Metadata) bz := m.keeper.cdc.MustMarshalBinaryBare(msg.Metadata)
store.Set(msg.Denom, bz) store.Set(msg.Type, bz)
return &types.MsgIssueResponse{}, nil return &types.MsgIssueResponse{}, nil
} }
func (m msgServer) Mint(ctx context.Context, msg *types.MsgMint) (*types.MsgMintResponse, error){ func (m msgServer) Mint(ctx context.Context, msg *types.MsgMint) (*types.MsgMintResponse, error){
m.keeper.AssertDenomExist(msg.NFT.Denom) m.keeper.AssertTypeExist(msg.NFT.Type)
metadata := m.keeper.GetMetadata(ctx, msg.NFT.Denom) metadata := m.keeper.GetMetadata(ctx, msg.NFT.Type)
// NOTE: we can use denom manager or DID
baseDenom := fmt.Sprintf("nft/%s/%s", msg.NFT.Denom, msg.NFT.Id) baseDenom := fmt.Sprintf("%s-%s", msg.NFT.Type, msg.NFT.Id)
bkMetadata := bankTypes.Metadata{ bkMetadata := bankTypes.Metadata{
Symbol: metadata.Symbol, Symbol: metadata.Symbol,
Base: baseDenom, Base: baseDenom,
Name: metadata.Name, Name: metadata.Name,
URI: msg.NFT.URI, URI: msg.NFT.Uri,
Description: metadata.Description, Description: metadata.Description,
} }
m.keeper.bank.SetDenomMetaData(ctx, bkMetadata) m.keeper.bank.SetDenomMetaData(ctx, bkMetadata)
mintCoins := sdk.NewCoins(sdk.NewCoin(baseDenom,1)) mintedCoins := sdk.NewCoins(sdk.NewCoin(baseDenom, 1))
m.keeper.bank.MintCoins(types.ModuleName, mintCoins) m.keeper.bank.MintCoins(types.ModuleName, mintedCoins)
m.keeper.bank.SendCoinsFromModuleToAccount(types.ModuleName, msg.Owner, mintCoins) m.keeper.bank.SendCoinsFromModuleToAccount(types.ModuleName, msg.Owner, mintedCoins)
bz := m.keeper.cdc.MustMarshalBinaryBare(&msg.NFT) bz := m.keeper.cdc.MustMarshalBinaryBare(&msg.NFT)
denomStore := m.keeper.getDenomStore(ctx, msg.NFT.Denom) typeStore := m.keeper.getTypeStore(ctx, msg.NFT.Type)
denomStore.Set(msg.NFT.Id, bz) typeStore.Set(msg.NFT.Id, bz)
return nil, nil return nil, nil
} }
func (m msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error){ func (m msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error){
sentCoins := sdk.NewCoins() sentCoins := sdk.NewCoins()
for _,nft := range msg.NFTs {
m.keeper.AssertNFTExist(nft.Id)
denomStore := m.keeper.getDenomStore(ctx, nft.Denom) for _, nft := range msg.NFTs {
nft := denomStore.Get(nft.Id) m.keeper.AssertNFTExist(nft)
bz := m.keeper.cdc.MustMarshalBinaryBare(&nft) baseDenom := fmt.Sprintf("%s-%s", nft.Type, nft.Id)
denomStore.Set(nft.Id, bz) sentCoins = sentCoins.Add(sdk.NewCoin(baseDenom, 1))
baseDenom := fmt.Sprintf("nft/%s/%s", nft.Denom, nft.Id)
sentCoins = sentCoins.Add(sdk.NewCoin(baseDenom,1))
} }
m.keeper.bank.SendCoins(ctx, msg.Sender, msg.Reveiver, sentCoins) m.keeper.bank.SendCoins(ctx, msg.Sender, msg.Reveiver, sentCoins)
return &types.MsgSendResponse{},nil
return &types.MsgSendResponse{}, nil
} }
func (m Keeper) Burn(ctx sdk.Context, msg *types.MsgBurn) (types.MsgBurnResponse,error) { func (m Keeper) Burn(ctx sdk.Context, msg *types.MsgBurn) (types.MsgBurnResponse,error) {
m.keeper.AssertNFTExist(msg.Id) m.keeper.AssertNFTExist(msg.Type, msg.Id)
denomStore := m.keeper.getDenomStore(ctx, msg.Denom) typeStore := m.keeper.getTypeStore(ctx, msg.Type)
nft := denomStore.Get(msg.Id) nft := typeStore.Get(msg.Id)
baseDenom := fmt.Sprintf("nft/%s/%s", msg.Denom, msg.Id) baseDenom := fmt.Sprintf("%s-%s", msg.Type, msg.Id)
coins := sdk.NewCoins(sdk.NewCoin(baseDenom, 1)) coins := sdk.NewCoins(sdk.NewCoin(baseDenom, 1))
m.keeper.bank.SendCoinsFromAccountToModule(ctx, msg.Owner, types.ModuleName, coins) m.keeper.bank.SendCoinsFromAccountToModule(ctx, msg.Owner, types.ModuleName, coins)
m.keeper.bank.BurnCoins(ctx, types.ModuleName, coins) m.keeper.bank.BurnCoins(ctx, types.ModuleName, coins)
// TODO: Delete bank.metadata // Delete bank.Metadata (keeper method not available)
// delete nft
denomStore.Delete(msg.Id) typeStore.Delete(msg.Id)
return &types.MsgBurnResponse{}, nil return &types.MsgBurnResponse{}, nil
} }
``` ```
@ -236,29 +234,29 @@ service Query {
option (google.api.http).get = "/cosmos/nft/v1beta1/nfts"; option (google.api.http).get = "/cosmos/nft/v1beta1/nfts";
} }
// NFTsOf queries all NFTs based on the denom. // NFTsOf queries all NFTs based on the type.
rpc NFTsOf(QueryNFTsOfRequest) returns (QueryNFTsOfResponse) { rpc NFTsOf(QueryNFTsOfRequest) returns (QueryNFTsOfResponse) {
option (google.api.http).get = "/cosmos/nft/v1beta1/nfts/denom/{denom}"; option (google.api.http).get = "/cosmos/nft/v1beta1/nfts/{type}";
} }
// Supply queries the number of nft based on the denom, same as totalSupply of erc721 // Supply queries the number of nft based on the type, same as totalSupply of ERC721
rpc Supply(QuerySupplyRequest) returns (QuerySupplyResponse) { rpc Supply(QuerySupplyRequest) returns (QuerySupplyResponse) {
option (google.api.http).get = "/cosmos/nft/v1beta1/supply/{denom}"; option (google.api.http).get = "/cosmos/nft/v1beta1/supply/{type}";
} }
// Balance queries the number of based on the owner, same as balanceOf of erc721 // Balance queries the number of NFTs based on the owner and type, same as balanceOf of ERC721
rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) {
option (google.api.http).get = "/cosmos/nft/v1beta1/balance/{owner}"; option (google.api.http).get = "/cosmos/nft/v1beta1/balance/{owner}/type/{type}";
} }
// Denom queries the definition of a given denom // Type queries the definition of a given type
rpc Denom(QueryDenomRequest) returns (QueryDenomResponse) { rpc Type(QueryTypeRequest) returns (QueryTypeResponse) {
option (google.api.http).get = "/cosmos/nft/v1beta1/denoms/{denom}"; option (google.api.http).get = "/cosmos/nft/v1beta1/types/{type}";
} }
// Denoms queries all the denoms // Types queries all the types
rpc Denoms(QueryDenomsRequest) returns (QueryDenomsResponse) { rpc Types(QueryTypesRequest) returns (QueryTypesResponse) {
option (google.api.http).get = "/cosmos/nft/v1beta1/denoms"; option (google.api.http).get = "/cosmos/nft/v1beta1/types";
} }
} }
@ -286,7 +284,7 @@ message QueryNFTsResponse {
// QueryNFTsOfRequest is the request type for the Query/NFTsOf RPC method // QueryNFTsOfRequest is the request type for the Query/NFTsOf RPC method
message QueryNFTsOfRequest { message QueryNFTsOfRequest {
string denom = 1; string type = 1;
cosmos.base.query.v1beta1.PageResponse pagination = 2; cosmos.base.query.v1beta1.PageResponse pagination = 2;
} }
@ -298,7 +296,7 @@ message QueryNFTsOfResponse {
// QuerySupplyRequest is the request type for the Query/Supply RPC method // QuerySupplyRequest is the request type for the Query/Supply RPC method
message QuerySupplyRequest{ message QuerySupplyRequest{
string denom = 1; string type = 1;
} }
// QuerySupplyResponse is the response type for the Query/Supply RPC method // QuerySupplyResponse is the response type for the Query/Supply RPC method
@ -309,6 +307,7 @@ message QuerySupplyResponse{
// QueryBalanceRequest is the request type for the Query/Balance RPC method // QueryBalanceRequest is the request type for the Query/Balance RPC method
message QueryBalanceRequest{ message QueryBalanceRequest{
string owner = 1; string owner = 1;
string type = 2;
} }
// QueryBalanceResponse is the response type for the Query/Balance RPC method // QueryBalanceResponse is the response type for the Query/Balance RPC method
@ -316,24 +315,24 @@ message QueryBalanceResponse{
uint64 amount = 1; uint64 amount = 1;
} }
// QueryDenomRequest is the request type for the Query/Denom RPC method // QueryTypeRequest is the request type for the Query/Type RPC method
message QueryDenomRequest { message QueryTypeRequest {
string denom = 1; string type = 1;
} }
// QueryDenomResponse is the response type for the Query/Denom RPC method // QueryTypeResponse is the response type for the Query/Type RPC method
message QueryDenomResponse { message QueryTypeResponse {
cosmos.nft.v1beta1.Metadata metadata = 1; cosmos.nft.v1beta1.Metadata metadata = 1;
} }
// QueryDenomsRequest is the request type for the Query/Denoms RPC method // QueryTypesRequest is the request type for the Query/Types RPC method
message QueryDenomsRequest { message QueryTypesRequest {
// pagination defines an optional pagination for the request. // pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1; cosmos.base.query.v1beta1.PageRequest pagination = 1;
} }
// QueryDenomsResponse is the response type for the Query/Denoms RPC method // QueryTypesResponse is the response type for the Query/Types RPC method
message QueryDenomsResponse { message QueryTypesResponse {
repeated cosmos.nft.v1beta1.Metadata metadatas = 1; repeated cosmos.nft.v1beta1.Metadata metadatas = 1;
cosmos.base.query.v1beta1.PageResponse pagination = 2; cosmos.base.query.v1beta1.PageResponse pagination = 2;
} }