Skip to content

Commit d6e42b6

Browse files
authored
feat: v2.0.0 upgrade (#629)
## Description Adds the on-chain upgrade handler for the upcoming version 2.0 of Desmos --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/desmos-labs/desmos/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://docs.cosmos.network/v0.44/building-modules/intro.html) - [ ] included the necessary unit and integration [tests](https://github.com/desmos-labs/desmos/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [ ] reviewed "Files changed" and left comments if necessary - [x] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [x] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [x] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
1 parent 1a22342 commit d6e42b6

File tree

14 files changed

+4262
-36
lines changed

14 files changed

+4262
-36
lines changed

.github/workflows/on-chain-upgrade.yml

+4-15
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ jobs:
2222
runs-on: ubuntu-latest
2323
timeout-minutes: 30
2424
env:
25-
GENESIS_DESMOS_VERSION: "v0.17.2"
26-
GENESIS_URL: "https://raw.githubusercontent.com/desmos-labs/morpheus/master/morpheus-apollo-2/genesis.json"
27-
UPGRADE_NAME: "desmos-v0.17.4-upgrade"
25+
GENESIS_DESMOS_VERSION: "v1.0.4"
26+
GENESIS_URL: "https://raw.githubusercontent.com/RiccardoM/desmos-states/master/morpheus-apollo-22003141.json"
27+
UPGRADE_NAME: "v2.0.0"
2828
steps:
2929
- name: Checkout 🛎️
3030
uses: actions/checkout@v2
@@ -34,27 +34,16 @@ jobs:
3434
with:
3535
go-version: 1.15
3636

37-
- name: Compute diff 📜
38-
uses: technote-space/get-diff-action@v5.0.1
39-
with:
40-
PATTERNS: |
41-
**/**.go
42-
go.mod
43-
go.sum
44-
4537
- name: Install Desmos 🔧
4638
run: make clean install
47-
if: env.GIT_DIFF
4839

4940
- name: Start testnet ⛓
5041
run: |
5142
make upgrade-testnet-start \
5243
GENESIS_VERSION="$GENESIS_DESMOS_VERSION" \
5344
GENESIS_URL="$GENESIS_URL" \
5445
UPGRADE_NAME="$UPGRADE_NAME"
55-
if: env.GIT_DIFF
5646
5747
- name: Submit upgrade ✅
5848
run: |
59-
./contrib/upgrade_testnet/submit_upgrade_proposal.sh 4 $UPGRADE_NAME 50
60-
if: env.GIT_DIFF
49+
./contrib/upgrade_testnet/submit_upgrade_proposal.sh 4 $UPGRADE_NAME 50

app/app.go

+48-2
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ import (
9898
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
9999
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
100100

101+
storetypes "github.com/cosmos/cosmos-sdk/store/types"
102+
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
101103
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
102104
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
103105
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
@@ -324,6 +326,7 @@ func NewDesmosApp(
324326

325327
app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper)
326328
app.upgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp)
329+
app.registerUpgradeHandlers()
327330

328331
// register the staking hooks
329332
// NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks
@@ -369,7 +372,7 @@ func NewDesmosApp(
369372
&app.IBCKeeper.PortKeeper,
370373
scopedProfilesKeeper,
371374
)
372-
profilesModule := profiles.NewAppModule(appCodec, app.ProfileKeeper, app.AccountKeeper, app.BankKeeper)
375+
profilesModule := profiles.NewAppModule(appCodec, legacyAmino, app.ProfileKeeper, app.AccountKeeper, app.BankKeeper)
373376

374377
// Create static IBC router, add transfer route, then set and seal it
375378
ibcRouter := porttypes.NewRouter()
@@ -500,7 +503,7 @@ func NewDesmosApp(
500503
// Custom modules
501504
//fees.NewAppModule(app.FeesKeeper, app.AccountKeeper),
502505
//posts.NewAppModule(app.appCodec, app.postsKeeper, app.AccountKeeper, app.BankKeeper),
503-
profiles.NewAppModule(app.appCodec, app.ProfileKeeper, app.AccountKeeper, app.BankKeeper),
506+
profiles.NewAppModule(app.appCodec, legacyAmino, app.ProfileKeeper, app.AccountKeeper, app.BankKeeper),
504507
//subspaces.NewAppModule(app.appCodec, app.SubspaceKeeper, app.AccountKeeper, app.BankKeeper),
505508
)
506509

@@ -686,6 +689,49 @@ func (app *DesmosApp) RegisterTendermintService(clientCtx client.Context) {
686689
tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
687690
}
688691

692+
func (app *DesmosApp) registerUpgradeHandlers() {
693+
app.upgradeKeeper.SetUpgradeHandler("v2.0.0", func(ctx sdk.Context, plan upgradetypes.Plan, _ module.VersionMap) (module.VersionMap, error) {
694+
// 1st-time running in-store migrations, using 1 as fromVersion to
695+
// avoid running InitGenesis.
696+
fromVM := map[string]uint64{
697+
authtypes.ModuleName: 1,
698+
banktypes.ModuleName: 1,
699+
capabilitytypes.ModuleName: 1,
700+
crisistypes.ModuleName: 1,
701+
distrtypes.ModuleName: 1,
702+
evidencetypes.ModuleName: 1,
703+
govtypes.ModuleName: 1,
704+
minttypes.ModuleName: 1,
705+
paramstypes.ModuleName: 1,
706+
slashingtypes.ModuleName: 1,
707+
stakingtypes.ModuleName: 1,
708+
upgradetypes.ModuleName: 1,
709+
vestingtypes.ModuleName: 1,
710+
ibchost.ModuleName: 1,
711+
genutiltypes.ModuleName: 1,
712+
ibctransfertypes.ModuleName: 1,
713+
714+
profilestypes.ModuleName: 1,
715+
}
716+
717+
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
718+
})
719+
720+
upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk()
721+
if err != nil {
722+
panic(err)
723+
}
724+
725+
if upgradeInfo.Name == "v2.0.0" && !app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
726+
storeUpgrades := storetypes.StoreUpgrades{
727+
Added: []string{authz.ModuleName, feegrant.ModuleName},
728+
}
729+
730+
// configure store loader that checks if version == upgradeHeight and applies store upgrades
731+
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades))
732+
}
733+
}
734+
689735
// RegisterSwaggerAPI registers swagger route with API Server
690736
func RegisterSwaggerAPI(ctx client.Context, rtr *mux.Router) {
691737
statikFS, err := fs.New()

contrib/upgrade_testnet/docker-compose.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version: '3'
33
services:
44
desmosnode0:
55
container_name: desmosnode0
6-
image: "desmoslabs/desmos-cosmovisor:v0.17.2"
6+
image: "desmoslabs/desmos-cosmovisor:v1.0.4"
77
command: "start"
88
ports:
99
- "26656-26657:26656-26657"
@@ -19,7 +19,7 @@ services:
1919

2020
desmosnode1:
2121
container_name: desmosnode1
22-
image: "desmoslabs/desmos-cosmovisor:v0.17.2"
22+
image: "desmoslabs/desmos-cosmovisor:v1.0.4"
2323
command: "start"
2424
ports:
2525
- "26666-26667:26656-26657"
@@ -35,7 +35,7 @@ services:
3535

3636
desmosnode2:
3737
container_name: desmosnode2
38-
image: "desmoslabs/desmos-cosmovisor:v0.17.2"
38+
image: "desmoslabs/desmos-cosmovisor:v1.0.4"
3939
command: "start"
4040
ports:
4141
- "26676-26677:26656-26657"
@@ -51,7 +51,7 @@ services:
5151

5252
desmosnode3:
5353
container_name: desmosnode3
54-
image: "desmoslabs/desmos-cosmovisor:v0.17.2"
54+
image: "desmoslabs/desmos-cosmovisor:v1.0.4"
5555
command: "start"
5656
ports:
5757
- "26686-26687:26656-26657"

contrib/upgrade_testnet/start.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ rm -r -f $BUILDDIR
1515

1616
# Create the 4 nodes folders with the correct denom
1717
echo "===> Creating $NODES nodes localnet"
18-
make setup-localnet COIN_DENOM="udaric" NODES=$NODES > /dev/null > 2 &> 1
18+
make setup-localnet COIN_DENOM="udaric" NODES=$NODES > /dev/null > /dev/null
1919

2020
# Run the Python script to setup the genesis
2121
echo "===> Setting up the genesis file"
@@ -34,7 +34,7 @@ sed -i "s|image: \".*\"|image: \"desmoslabs/desmos-cosmovisor:$GENESIS_VERSION\"
3434

3535
# Build the current code using Alpine to make sure it's later compatible with the devnet
3636
echo "===> Building Desmos"
37-
docker run --rm --user $ID:$GID -v $(pwd):/desmos desmoslabs/desmos-build make build-linux > /dev/null > 2 &> 1
37+
docker run --rm --user $ID:$GID -v $(pwd):/desmos desmoslabs/desmos-build make build-linux > /dev/null
3838

3939
# Copy the Desmos binary into the proper folders
4040
UPGRADE_FOLDER="$BUILDDIR/node0/desmos/cosmovisor/upgrades/$UPGRADE_NAME/bin"

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ require (
3535

3636
replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
3737

38-
replace github.com/cosmos/cosmos-sdk => github.com/desmos-labs/cosmos-sdk v0.43.0-alpha1.0.20210906075223-32780842edff
38+
replace github.com/cosmos/cosmos-sdk => github.com/desmos-labs/cosmos-sdk v0.43.0-alpha1.0.20210927075512-e26bf1014f50
3939

4040
replace google.golang.org/grpc => google.golang.org/grpc v1.33.2
4141

go.sum

+4-6
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x
188188
github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE=
189189
github.com/cosmos/iavl v0.15.0-rc5/go.mod h1:WqoPL9yPTQ85QBMT45OOUzPxG/U/JcJoN7uMjgxke/I=
190190
github.com/cosmos/iavl v0.15.3/go.mod h1:OLjQiAQ4fGD2KDZooyJG9yz+p2ao2IAYSbke8mVvSA4=
191-
github.com/cosmos/iavl v0.16.0 h1:ICIOB8xysirTX27GmVAaoeSpeozzgSu9d49w36xkVJA=
192-
github.com/cosmos/iavl v0.16.0/go.mod h1:2A8O/Jz9YwtjqXMO0CjnnbTYEEaovE8jWcwrakH3PoE=
191+
github.com/cosmos/iavl v0.17.1 h1:b/Cl8h1PRMvsu24+TYNlKchIu7W6tmxIBGe6E9u2Ybw=
192+
github.com/cosmos/iavl v0.17.1/go.mod h1:7aisPZK8yCpQdy3PMvKeO+bhq1NwDjUwjzxwwROUxFk=
193193
github.com/cosmos/ibc-go v1.2.0 h1:0RgxmKzCzIH9SwDp4ckL5VrzlO1KJ5hO0AsOAzOiWE4=
194194
github.com/cosmos/ibc-go v1.2.0/go.mod h1:wGjeNd+T4kpGrt0OC8DTiE/qXLrlmTPNpdoYsBZUjKI=
195195
github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76 h1:DdzS1m6o/pCqeZ8VOAit/gyATedRgjvkVI+UCrLpyuU=
@@ -213,8 +213,8 @@ github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe
213213
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE=
214214
github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20210623064146-c30bc8196d0f h1:gUywWy8Pw1ROmF4o/qLy/FP1bEyEtjPg6a/RgdXmcCA=
215215
github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20210623064146-c30bc8196d0f/go.mod h1:5TMhouV+kDGQZZrBK+rzBP+Jmeyu0V7WvrBHqukiTv8=
216-
github.com/desmos-labs/cosmos-sdk v0.43.0-alpha1.0.20210906075223-32780842edff h1:qU2BNu0sp6lQq3HoMT96cpj3M3Qyo/UGRqlM7T8Kw1E=
217-
github.com/desmos-labs/cosmos-sdk v0.43.0-alpha1.0.20210906075223-32780842edff/go.mod h1:orG0jzFJ2KsDfzLd/X0JSOMzF4Oxc/BQz2GkcYF4gRE=
216+
github.com/desmos-labs/cosmos-sdk v0.43.0-alpha1.0.20210927075512-e26bf1014f50 h1:aHMy8n0itEDKqMIAnjdNJ2L8SMzBgqTx0TXzDVYKCOc=
217+
github.com/desmos-labs/cosmos-sdk v0.43.0-alpha1.0.20210927075512-e26bf1014f50/go.mod h1:2Gy2237TJhvo7vcn+r8hovzipVaLj51Mjtuw9eyzWEU=
218218
github.com/desmos-labs/ledger-desmos-go v0.11.2-0.20210814121638-5d87e392e8a9 h1:b77qmphsyX3+hjJraaqLyzjt9eKqbosy4LaYScPvTAs=
219219
github.com/desmos-labs/ledger-desmos-go v0.11.2-0.20210814121638-5d87e392e8a9/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY=
220220
github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE=
@@ -826,8 +826,6 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM
826826
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
827827
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
828828
github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ=
829-
github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0=
830-
github.com/tendermint/tendermint v0.34.12/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0=
831829
github.com/tendermint/tendermint v0.34.13 h1:fu+tsHudbOr5PvepjH0q47Jae59hQAvn3IqAHv2EbC8=
832830
github.com/tendermint/tendermint v0.34.13/go.mod h1:6RVVRBqwtKhA+H59APKumO+B7Nye4QXSFc6+TYxAxCI=
833831
github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI=
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
syntax = "proto3";
2+
package desmos.profiles.legacy.v100;
3+
4+
option go_package = "github.com/desmos-labs/desmos/x/profiles/legacy/v100";
5+
6+
import "gogoproto/gogo.proto";
7+
import "google/protobuf/timestamp.proto";
8+
9+
// ApplicationLink contains the data of a link to a centralized application
10+
message ApplicationLink {
11+
option (gogoproto.goproto_getters) = false;
12+
option (gogoproto.equal) = true;
13+
14+
// User to which the link is associated
15+
string user = 1 [ (gogoproto.moretags) = "yaml:\"user\"" ];
16+
17+
// Data contains the details of this specific link
18+
Data data = 2
19+
[ (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"data\"" ];
20+
21+
// State of the link
22+
ApplicationLinkState state = 3 [ (gogoproto.moretags) = "yaml:\"state\"" ];
23+
24+
// OracleRequest represents the request that has been made to the oracle
25+
OracleRequest oracle_request = 4 [
26+
(gogoproto.nullable) = false,
27+
(gogoproto.moretags) = "yaml:\"oracle_request\""
28+
];
29+
30+
// Data coming from the result of the verification.
31+
// Only available when the state is STATE_SUCCESS
32+
Result result = 5 [ (gogoproto.moretags) = "yaml:\"result\"" ];
33+
34+
// CreationTime represents the time in which the link was created
35+
google.protobuf.Timestamp creation_time = 6 [
36+
(gogoproto.stdtime) = true,
37+
(gogoproto.nullable) = false,
38+
(gogoproto.moretags) = "yaml:\"creation_time\""
39+
];
40+
}
41+
42+
// Data contains the data associated to a specific user of a
43+
// generic centralized application
44+
message Data {
45+
option (gogoproto.goproto_getters) = false;
46+
option (gogoproto.equal) = true;
47+
48+
// The application name (eg. Twitter, GitHub, etc)
49+
string application = 1 [ (gogoproto.moretags) = "yaml:\"application\"" ];
50+
// Username on the application (eg. Twitter tag, GitHub profile, etc)
51+
string username = 2 [ (gogoproto.moretags) = "yaml:\"username\"" ];
52+
}
53+
54+
// OracleRequest represents a generic oracle request used to
55+
// verify the ownership of a centralized application account
56+
message OracleRequest {
57+
option (gogoproto.goproto_getters) = false;
58+
59+
option (gogoproto.equal) = true;
60+
61+
// ID is the ID of the request
62+
int64 id = 1
63+
[ (gogoproto.customname) = "ID", (gogoproto.moretags) = "yaml:\"id\"" ];
64+
65+
// OracleScriptID is ID of an oracle script
66+
int64 oracle_script_id = 2 [
67+
(gogoproto.customname) = "OracleScriptID",
68+
(gogoproto.moretags) = "yaml:\"oracle_script_id\""
69+
];
70+
71+
// CallData contains the data used to perform the oracle request
72+
CallData call_data = 3 [
73+
(gogoproto.nullable) = false,
74+
(gogoproto.moretags) = "yaml:\"call_data\""
75+
];
76+
77+
// ClientID represents the ID of the client that has called the oracle script
78+
string client_id = 4 [
79+
(gogoproto.customname) = "ClientID",
80+
(gogoproto.moretags) = "yaml:\"client_id\""
81+
];
82+
83+
// CallData contains the data sent to a single oracle request in order to
84+
// verify the ownership of a centralized application by a Desmos profile
85+
message CallData {
86+
option (gogoproto.equal) = true;
87+
88+
// The application for which the ownership should be verified
89+
string application = 1 [ (gogoproto.moretags) = "yaml:\"application\"" ];
90+
91+
// The hex encoded call data that should be used to verify the application
92+
// account ownership
93+
string call_data = 2 [ (gogoproto.moretags) = "yaml:\"call_data\"" ];
94+
}
95+
}
96+
97+
// ApplicationLinkState defines if an application link is in the following
98+
// states: STARTED, ERRORED, SUCCESSFUL, TIMED_OUT
99+
enum ApplicationLinkState {
100+
option (gogoproto.goproto_enum_prefix) = false;
101+
102+
// A link has just been initialized
103+
APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED = 0
104+
[ (gogoproto.enumvalue_customname) = "ApplicationLinkStateInitialized" ];
105+
// A link has just started being verified
106+
APPLICATION_LINK_STATE_VERIFICATION_STARTED = 1
107+
[ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationStarted" ];
108+
// A link has errored during the verification process
109+
APPLICATION_LINK_STATE_VERIFICATION_ERROR = 2
110+
[ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationError" ];
111+
// A link has being verified successfully
112+
APPLICATION_LINK_STATE_VERIFICATION_SUCCESS = 3
113+
[ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationSuccess" ];
114+
// A link has timed out while waiting for the verification
115+
APPLICATION_LINK_STATE_TIMED_OUT = 4
116+
[ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationTimedOut" ];
117+
}
118+
119+
// Result represents a verification result
120+
message Result {
121+
option (gogoproto.goproto_getters) = false;
122+
option (gogoproto.equal) = true;
123+
124+
// sum is the oneof that specifies whether this represents a success or
125+
// failure result
126+
oneof sum {
127+
// Success represents a successful verification
128+
Success success = 1;
129+
130+
// Failed represents a failed verification
131+
Failed failed = 2;
132+
}
133+
134+
// Success is the result of an application link that has been successfully
135+
// verified
136+
message Success {
137+
option (gogoproto.goproto_getters) = false;
138+
option (gogoproto.equal) = true;
139+
140+
// Value that has be signed by the profile
141+
string value = 1 [ (gogoproto.moretags) = "yaml:\"value\"" ];
142+
// Signature that has been produced by signing the value
143+
string signature = 2 [ (gogoproto.moretags) = "yaml:\"signature\"" ];
144+
}
145+
146+
// Failed is the result of an application link that has not been verified
147+
// successfully
148+
message Failed {
149+
option (gogoproto.goproto_getters) = false;
150+
option (gogoproto.equal) = true;
151+
152+
// Error that is associated with the failure
153+
string error = 1 [ (gogoproto.moretags) = "yaml:\"error\"" ];
154+
}
155+
}

0 commit comments

Comments
 (0)