-
Notifications
You must be signed in to change notification settings - Fork 70
feat(nft): nft module #296
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
6e4788b
628135e
e834bf6
a658097
ed1caf0
d8a9e7f
9b543d8
466b947
c5ed2f8
dd85dc4
42402ba
4f2e29f
abae283
59b13f5
45df9c0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -2,12 +2,20 @@ name: ictest E2E | |||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| on: | ||||||||||||||||||||||||
| pull_request: | ||||||||||||||||||||||||
| branches: | ||||||||||||||||||||||||
| - main | ||||||||||||||||||||||||
| - master | ||||||||||||||||||||||||
| branches-ignore: | ||||||||||||||||||||||||
| - "mvp/**" | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| push: | ||||||||||||||||||||||||
| tags: | ||||||||||||||||||||||||
| - "**" | ||||||||||||||||||||||||
| branches: | ||||||||||||||||||||||||
| - "main" | ||||||||||||||||||||||||
| - "master" | ||||||||||||||||||||||||
| - main | ||||||||||||||||||||||||
| - master | ||||||||||||||||||||||||
| branches-ignore: | ||||||||||||||||||||||||
| - "mvp/**" | ||||||||||||||||||||||||
|
Comment on lines
+15
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix invalid push filters (branches + branches-ignore conflict). Use negative patterns in branches instead of branches-ignore. push:
tags:
- "**"
branches:
- - main
- - master
- branches-ignore:
- - "mvp/**"
+ - main
+ - master
+ - '!mvp/**'📝 Committable suggestion
Suggested change
🧰 Tools🪛 actionlint (1.7.7)17-17: both "branches" and "branches-ignore" filters cannot be used for the same event "push". note: use '!' to negate patterns (events) 🤖 Prompt for AI Agents |
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| permissions: | ||||||||||||||||||||||||
| contents: read | ||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,40 @@ | ||||||||||||||||||||||||||||||||||||||
| syntax = "proto3"; | ||||||||||||||||||||||||||||||||||||||
| package bitsong.drop.v1beta1; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| option go_package = "github.com/bitsongofficial/go-bitsong/x/drop/types"; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| import "gogoproto/gogo.proto"; | ||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Buf compile error: cannot resolve gogoproto. The import path is correct, but buf deps list uses the wrong module name. See buf.yaml fix to use buf.build/cosmos/gogoproto. 🧰 Tools🪛 Buf (1.55.1)6-6: import "gogoproto/gogo.proto": file does not exist (COMPILE) 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||
| import "google/protobuf/timestamp.proto"; | ||||||||||||||||||||||||||||||||||||||
| import "amino/amino.proto"; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| message Template { | ||||||||||||||||||||||||||||||||||||||
| option (gogoproto.goproto_getters) = false; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| string name = 1; | ||||||||||||||||||||||||||||||||||||||
| string uri = 2; | ||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| message Rule { | ||||||||||||||||||||||||||||||||||||||
| option (gogoproto.goproto_getters) = false; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| uint64 id = 1; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| google.protobuf.Timestamp start_time = 2 | ||||||||||||||||||||||||||||||||||||||
| [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| google.protobuf.Timestamp end_time = 3 | ||||||||||||||||||||||||||||||||||||||
| [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; | ||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+20
to
+27
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Unify Rule.id type with storage and validations. Currently proto uses uint64 but storage keys use string and you have MaxRuleIDLength. If string IDs are intended, switch proto to string; otherwise update storage to use uint64. Option A (string IDs in proto): - uint64 id = 1;
+ string id = 1;Option B (numeric IDs end-to-end): change Rules map to collections.Map[collections.Pair[string, uint64], types.Rule] and drop MaxRuleIDLength. 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| message Drop { | ||||||||||||||||||||||||||||||||||||||
| option (gogoproto.goproto_getters) = false; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| string collection = 1; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| uint64 max_available = 2; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| Template template = 3; | ||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||
| // Template hidden_template | ||||||||||||||||||||||||||||||||||||||
| // bool is_hidden | ||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,53 @@ | ||||||||||||||||||||||||||||||||||||||||
| syntax = "proto3"; | ||||||||||||||||||||||||||||||||||||||||
| package bitsong.nft.v1beta1; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| import "gogoproto/gogo.proto"; | ||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. buf: missing dependency for gogoproto; build will fail. Add gogoproto to buf deps or vendor third_party/proto/gogoproto/gogo.proto. Add to buf.yaml: version: v2
deps:
- buf.build/cosmos/gogo-protoIf you also rely on google/cosmos imports elsewhere, include:
🧰 Tools🪛 Buf (1.55.1)4-4: import "gogoproto/gogo.proto": file does not exist (COMPILE) 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| option go_package = "github.com/bitsongofficial/go-bitsong/x/nft/types"; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| message Collection { | ||||||||||||||||||||||||||||||||||||||||
| option (gogoproto.goproto_getters) = false; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string denom = 1; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string symbol = 2; | ||||||||||||||||||||||||||||||||||||||||
| string name = 3; | ||||||||||||||||||||||||||||||||||||||||
| string uri = 5; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+11
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Reserve skipped field number 4 in Collection. You’re using 1,2,3,5. Reserve 4 to prevent accidental reuse and wire incompatibility later. message Collection {
option (gogoproto.goproto_getters) = false;
+ reserved 4;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||
| string creator = 6; | ||||||||||||||||||||||||||||||||||||||||
| string minter = 7; // who can mint new nfts, if not set no one can mint | ||||||||||||||||||||||||||||||||||||||||
| string authority = 8; // who can update name and uri, if not set no one can update, this is valid for the all nfts in this collection | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| uint64 num_tokens = 9; | ||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| message Nft { | ||||||||||||||||||||||||||||||||||||||||
| option (gogoproto.goproto_getters) = false; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string collection = 1; | ||||||||||||||||||||||||||||||||||||||||
| string token_id = 2; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string name = 3; | ||||||||||||||||||||||||||||||||||||||||
| string uri = 5; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string owner = 6; | ||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+27
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Reserve skipped field number 4 in Nft. Same rationale as Collection: protect future evolution. message Nft {
option (gogoproto.goproto_getters) = false;
+ reserved 4;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||
| // string authority = 7; // who can update name, description and uri, if not set no one can update | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| // TODO: add max_editions | ||||||||||||||||||||||||||||||||||||||||
| // uint64 max_editions = 8; // max number of printed editions, 0 means no limit | ||||||||||||||||||||||||||||||||||||||||
| uint64 editions = 7; // number of printed editions | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| // seller_fee_bps | ||||||||||||||||||||||||||||||||||||||||
| // payment_address | ||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| message Edition { | ||||||||||||||||||||||||||||||||||||||||
| option (gogoproto.goproto_getters) = false; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string collection = 1; | ||||||||||||||||||||||||||||||||||||||||
| string token_id = 2; | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| uint64 seq = 3; // seq is the edition number | ||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||
| string owner = 4; | ||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,128 @@ | ||
| syntax = "proto3"; | ||
| package bitsong.nft.v1beta1; | ||
|
|
||
| import "gogoproto/gogo.proto"; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. buf: missing dependency for gogoproto; build will fail. Same as nft.proto: add gogoproto (and likely googleapis/cosmos) to buf deps or vendor the files. Add to buf.yaml: version: v2
deps:
- buf.build/cosmos/gogo-proto
- buf.build/googleapis/googleapis
- buf.build/cosmos/cosmos-proto
- buf.build/cosmos/cosmos-sdk🧰 Tools🪛 Buf (1.55.1)4-4: import "gogoproto/gogo.proto": file does not exist (COMPILE) 🤖 Prompt for AI Agents |
||
| import "google/api/annotations.proto"; | ||
| import "cosmos/query/v1/query.proto"; | ||
| import "cosmos/base/query/v1beta1/pagination.proto"; | ||
| import "bitsong/nft/v1beta1/nft.proto"; | ||
|
Comment on lines
+4
to
+8
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. buf build will fail: missing gogoproto (and likely cosmos/google) deps Add deps to buf.yaml (or vendor). Example buf.yaml: version: v2
deps:
- buf.build/cosmos/gogo-proto
- buf.build/googleapis/googleapis
- buf.build/cosmos/cosmos-proto
- buf.build/cosmos/cosmos-sdkThen:
🧰 Tools🪛 Buf (1.55.1)4-4: import "gogoproto/gogo.proto": file does not exist (COMPILE) 🤖 Prompt for AI Agents |
||
|
|
||
| option go_package = "github.com/bitsongofficial/go-bitsong/x/nft/types"; | ||
|
|
||
| service Query { | ||
| rpc Collection(QueryCollectionRequest) returns (QueryCollectionResponse) { | ||
| option (cosmos.query.v1.module_query_safe) = true; | ||
| option (google.api.http).get = "/bitsong/nft/v1beta1/collections/{collection}"; | ||
| } | ||
|
|
||
| // TODO: rpc AllCollections(QueryAllCollectionsRequest) returns (QueryAllCollectionsResponse)..... | ||
|
|
||
| rpc OwnerOf(QueryOwnerOfRequest) returns (QueryOwnerOfResponse) { | ||
| option (cosmos.query.v1.module_query_safe) = true; | ||
| option (google.api.http).get = "/bitsong/nft/v1beta1/collections/{collection}/{token_id}/owner"; | ||
| } | ||
|
|
||
| rpc NftInfo(QueryNftInfoRequest) returns (QueryNftInfoResponse) { | ||
| option (cosmos.query.v1.module_query_safe) = true; | ||
| option (google.api.http).get = "/bitsong/nft/v1beta1/collections/{collection}/{token_id}"; | ||
| } | ||
|
|
||
| rpc Nfts(QueryNftsRequest) returns (QueryNftsResponse) { | ||
| option (cosmos.query.v1.module_query_safe) = true; | ||
| option (google.api.http).get = "/bitsong/nft/v1beta1/collections/{collection}/nfts"; | ||
| } | ||
|
|
||
| rpc AllNftsByOwner(QueryAllNftsByOwnerRequest) returns (QueryAllNftsByOwnerResponse) { | ||
| option (cosmos.query.v1.module_query_safe) = true; | ||
| option (google.api.http).get = "/bitsong/nft/v1beta1/nfts_by_owner/{owner}"; | ||
| } | ||
|
|
||
| // Edition returns a specific edition of an nft | ||
| // OwnerOfEdition returns the owner of a specific edition | ||
| // NftEditions returns all editions of a specific nft | ||
| // AllNftEditionsByOwner returns all nft editions owned by the owner | ||
| } | ||
|
|
||
| message QueryCollectionRequest { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| string collection = 1; | ||
| } | ||
|
|
||
| message QueryCollectionResponse { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| bitsong.nft.v1beta1.Collection collection = 1; | ||
| } | ||
|
|
||
| message QueryOwnerOfRequest { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| string collection = 1; | ||
| string token_id = 2; | ||
| } | ||
|
|
||
| message QueryOwnerOfResponse { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| string owner = 1; | ||
| } | ||
|
|
||
| message QueryNftInfoRequest { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| string collection = 1; | ||
| string token_id = 2; | ||
| } | ||
|
|
||
| message QueryNftInfoResponse { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| bitsong.nft.v1beta1.Nft nft = 1; | ||
| } | ||
|
|
||
| message QueryNftsRequest { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| string collection = 1; | ||
|
|
||
| cosmos.base.query.v1beta1.PageRequest pagination = 2; | ||
| } | ||
|
|
||
| message QueryNftsResponse { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| repeated bitsong.nft.v1beta1.Nft nfts = 1 [ | ||
| (gogoproto.nullable) = false | ||
| ]; | ||
|
|
||
| cosmos.base.query.v1beta1.PageResponse pagination = 2; | ||
| } | ||
|
|
||
| message QueryAllNftsByOwnerRequest { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| string owner = 1; | ||
|
|
||
| cosmos.base.query.v1beta1.PageRequest pagination = 2; | ||
| } | ||
|
|
||
| message QueryAllNftsByOwnerResponse { | ||
| option (gogoproto.equal) = false; | ||
| option (gogoproto.goproto_getters) = false; | ||
|
|
||
| repeated bitsong.nft.v1beta1.Nft nfts = 1 [ | ||
| (gogoproto.nullable) = false | ||
| ]; | ||
|
|
||
| cosmos.base.query.v1beta1.PageResponse pagination = 2; | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,95 @@ | ||||||
| syntax = "proto3";; | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix proto syntax typo Double semicolon breaks compilation. -syntax = "proto3";;
+syntax = "proto3";📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| package bitsong.nft.v1beta1; | ||||||
|
|
||||||
| import "gogoproto/gogo.proto"; | ||||||
| import "cosmos/msg/v1/msg.proto"; | ||||||
| import "amino/amino.proto"; | ||||||
| import "cosmos_proto/cosmos.proto"; | ||||||
|
Comment on lines
+4
to
+7
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Buf import resolution: add module deps (preferred) or vendor third_party protos Buf error indicates missing deps. Add these to buf.yaml to resolve imports. Example buf.yaml snippet: Alternatively, vendor files under third_party/proto and adjust buf.yaml roots. 🧰 Tools🪛 Buf (1.55.1)4-4: import "gogoproto/gogo.proto": file does not exist (COMPILE) 🤖 Prompt for AI Agents |
||||||
|
|
||||||
| option go_package = "github.com/bitsongofficial/go-bitsong/x/nft/types"; | ||||||
|
|
||||||
| service Msg { | ||||||
| option (cosmos.msg.v1.service) = true; | ||||||
|
|
||||||
| rpc CreateCollection(MsgCreateCollection) returns (MsgCreateCollectionResponse); | ||||||
| rpc MintNFT(MsgMintNFT) returns (MsgMintNFTResponse); | ||||||
| rpc SendNFT(MsgSendNFT) returns (MsgSendNFTResponse); | ||||||
| rpc PrintEdition(MsgPrintEdition) returns (MsgPrintEditionResponse); | ||||||
| } | ||||||
|
|
||||||
| message MsgCreateCollection { | ||||||
| option (cosmos.msg.v1.signer) = "creator"; | ||||||
| option (amino.name) = "cosmos-sdk/nft/MsgCreateCollection"; | ||||||
|
|
||||||
|
Comment on lines
+22
to
+23
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Use module-specific amino names to avoid collisions Prefix amino names with “bitsong/nft/…” rather than “cosmos-sdk/nft/…”. - option (amino.name) = "cosmos-sdk/nft/MsgCreateCollection";
+ option (amino.name) = "bitsong/nft/MsgCreateCollection";
@@
- option (amino.name) = "cosmos-sdk/nft/MsgMintNFT";
+ option (amino.name) = "bitsong/nft/MsgMintNFT";
@@
- option (amino.name) = "cosmos-sdk/nft/MsgSendNFT";
+ option (amino.name) = "bitsong/nft/MsgSendNFT";
@@
- option (amino.name) = "cosmos-sdk/nft/MsgPrintEdition";
+ option (amino.name) = "bitsong/nft/MsgPrintEdition";Also applies to: 42-43, 63-64, 79-80 🤖 Prompt for AI Agents |
||||||
| option (gogoproto.equal) = false; | ||||||
| option (gogoproto.goproto_getters) = false; | ||||||
|
|
||||||
| string symbol = 1; | ||||||
| string name = 2; | ||||||
| string uri = 3; | ||||||
|
|
||||||
| string creator = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| string minter = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| string authority = 6 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| } | ||||||
|
|
||||||
| message MsgCreateCollectionResponse { | ||||||
| string denom = 1; | ||||||
| } | ||||||
|
|
||||||
| message MsgMintNFT { | ||||||
| option (cosmos.msg.v1.signer) = "minter"; | ||||||
| option (amino.name) = "cosmos-sdk/nft/MsgMintNFT"; | ||||||
|
|
||||||
| option (gogoproto.equal) = false; | ||||||
| option (gogoproto.goproto_getters) = false; | ||||||
|
|
||||||
| string collection = 1; | ||||||
| string token_id = 2; | ||||||
| string name = 3; | ||||||
| string uri = 4; | ||||||
|
|
||||||
| string minter = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| string recipient = 7 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| } | ||||||
|
|
||||||
| message MsgMintNFTResponse { | ||||||
| string collection = 1; | ||||||
| string token_id = 2; | ||||||
| } | ||||||
|
|
||||||
| message MsgSendNFT { | ||||||
| option (cosmos.msg.v1.signer) = "sender"; | ||||||
| option (amino.name) = "cosmos-sdk/nft/MsgSendNFT"; | ||||||
|
|
||||||
| option (gogoproto.equal) = false; | ||||||
| option (gogoproto.goproto_getters) = false; | ||||||
|
|
||||||
| string collection = 1; | ||||||
| string token_id = 2; | ||||||
|
|
||||||
| string sender = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| string recipient = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| } | ||||||
|
|
||||||
| message MsgSendNFTResponse {} | ||||||
|
|
||||||
| message MsgPrintEdition { | ||||||
| option (cosmos.msg.v1.signer) = "minter"; | ||||||
| option (amino.name) = "cosmos-sdk/nft/MsgPrintEdition"; | ||||||
|
|
||||||
| option (gogoproto.equal) = false; | ||||||
| option (gogoproto.goproto_getters) = false; | ||||||
|
|
||||||
| string collection = 1; | ||||||
| string token_id = 2; | ||||||
|
|
||||||
| string minter = 5 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| string recipient = 7 [(cosmos_proto.scalar) = "cosmos.AddressString"]; | ||||||
| } | ||||||
|
|
||||||
| message MsgPrintEditionResponse { | ||||||
| string collection = 1; | ||||||
| string token_id = 2; | ||||||
| uint64 seq = 3; | ||||||
| } | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix invalid pull_request filters (branches + branches-ignore are mutually exclusive).
actionlint flags this; GitHub Actions ignores one set unpredictably. Also note: pull_request filters apply to base branch, not head. To exclude PRs from mvp/** heads, drop branches-ignore here and gate jobs with an if condition.
Apply this diff to the trigger:
Then add a job-level guard to skip PRs whose head starts with mvp/ (outside this hunk):
🧰 Tools
🪛 actionlint (1.7.7)
8-8: both "branches" and "branches-ignore" filters cannot be used for the same event "pull_request". note: use '!' to negate patterns
(events)
🤖 Prompt for AI Agents