Skip to content

Commit 78dbb1e

Browse files
authored
Merge pull request #5003 from Agoric/4580-lien-tests
feat: liens properly wrap clawback vesting accounts
2 parents 6fcb546 + 15ed185 commit 78dbb1e

File tree

8 files changed

+298
-78
lines changed

8 files changed

+298
-78
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ replace google.golang.org/grpc => google.golang.org/grpc v1.33.2
136136
replace github.com/tendermint/tendermint => github.com/agoric-labs/tendermint v0.34.14-alpha.agoric.1
137137

138138
// We need a fork of cosmos-sdk until all of the differences are merged.
139-
replace github.com/cosmos/cosmos-sdk => github.com/agoric-labs/cosmos-sdk v0.45.1-alpha.agoric.2
139+
replace github.com/cosmos/cosmos-sdk => github.com/agoric-labs/cosmos-sdk v0.45.1-alpha.agoric.3
140140

141141
replace github.com/cosmos/gaia/v6 => github.com/Agoric/ag0/v6 v6.0.3-alpha.agoric.1
142142

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ github.com/adlio/schema v1.1.13 h1:LeNMVg5Z1FX+Qgz8tJUijBLRdcpbFUElz+d1489On98=
8787
github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE=
8888
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
8989
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
90-
github.com/agoric-labs/cosmos-sdk v0.45.1-alpha.agoric.2 h1:bffPfwAdnD/Ex0yD57Fl83tn8YnfmKdcwmwE3gCJ3A0=
91-
github.com/agoric-labs/cosmos-sdk v0.45.1-alpha.agoric.2/go.mod h1:0KBHbknz2rtbozxV5jkO2Xrj8hfXXlR6sFU6SpK7674=
90+
github.com/agoric-labs/cosmos-sdk v0.45.1-alpha.agoric.3 h1:jHBQ1UpTCRTgl3omEiXwK3DYbU7KQKl/+IDbBu2Eugo=
91+
github.com/agoric-labs/cosmos-sdk v0.45.1-alpha.agoric.3/go.mod h1:0KBHbknz2rtbozxV5jkO2Xrj8hfXXlR6sFU6SpK7674=
9292
github.com/agoric-labs/tendermint v0.34.14-alpha.agoric.1 h1:2X0lhWEPWf2k2z0ZVdTl9IhDvKX0d2kNqcsIZzaKHX8=
9393
github.com/agoric-labs/tendermint v0.34.14-alpha.agoric.1/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0=
9494
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=

golang/cosmos/x/lien/genesis.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,16 @@ func DefaultGenesisState() types.GenesisState {
1414
// Since liens can apply to otherwise empty accounts and the source of truth
1515
// is stored at the Swingset level, we can only validate the addresses.
1616
func ValidateGenesis(genesisState types.GenesisState) error {
17-
for _, lien := range genesisState.Liens {
18-
_, err := sdk.AccAddressFromBech32(lien.Address)
17+
for _, accountLien := range genesisState.Liens {
18+
_, err := sdk.AccAddressFromBech32(accountLien.Address)
19+
if err != nil {
20+
return err
21+
}
22+
err = accountLien.Lien.Coins.Validate()
23+
if err != nil {
24+
return err
25+
}
26+
err = accountLien.Lien.Delegated.Validate()
1927
if err != nil {
2028
return err
2129
}

golang/cosmos/x/lien/genesis_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@ package lien
22

33
import (
44
"testing"
5+
6+
"github.com/Agoric/agoric-sdk/golang/cosmos/x/lien/types"
7+
8+
"github.com/cosmos/cosmos-sdk/testutil/testdata"
9+
sdk "github.com/cosmos/cosmos-sdk/types"
10+
)
11+
12+
func mkcoin(denom string) func(int64) sdk.Coin {
13+
return func(amt int64) sdk.Coin { return sdk.NewInt64Coin(denom, amt) }
14+
}
15+
16+
var (
17+
ubld = mkcoin("ubld")
18+
urun = mkcoin("urun")
19+
inval = func(amt int64) sdk.Coin { return sdk.Coin{Denom: "x", Amount: sdk.NewInt(amt)} }
20+
coins = sdk.NewCoins
521
)
622

723
func TestDefaultGenesis(t *testing.T) {
@@ -10,3 +26,76 @@ func TestDefaultGenesis(t *testing.T) {
1026
t.Errorf("DefaultGenesisState did not validate %v: %e", defaultGenesisState, err)
1127
}
1228
}
29+
30+
func TestValidateGenesis(t *testing.T) {
31+
_, _, addr1 := testdata.KeyTestPubAddr()
32+
_, _, addr2 := testdata.KeyTestPubAddr()
33+
for _, tt := range []struct {
34+
name string
35+
state types.GenesisState
36+
fail bool
37+
}{
38+
{
39+
name: "empty",
40+
state: types.GenesisState{},
41+
},
42+
{
43+
name: "typical",
44+
state: types.GenesisState{
45+
Liens: []types.AccountLien{
46+
{Address: addr1.String(), Lien: &types.Lien{
47+
Coins: coins(ubld(123)),
48+
Delegated: coins(ubld(456)),
49+
}},
50+
{Address: addr2.String(), Lien: &types.Lien{
51+
Coins: coins(ubld(246), urun(135)),
52+
Delegated: coins(),
53+
}},
54+
},
55+
},
56+
},
57+
{
58+
name: "bad addr",
59+
state: types.GenesisState{
60+
Liens: []types.AccountLien{
61+
{Address: "x", Lien: &types.Lien{}},
62+
},
63+
},
64+
fail: true,
65+
},
66+
{
67+
name: "bad coins",
68+
state: types.GenesisState{
69+
Liens: []types.AccountLien{
70+
{
71+
Address: addr1.String(),
72+
Lien: &types.Lien{Coins: []sdk.Coin{inval(6)}},
73+
},
74+
},
75+
},
76+
fail: true,
77+
},
78+
{
79+
name: "bad delegated",
80+
state: types.GenesisState{
81+
Liens: []types.AccountLien{
82+
{
83+
Address: addr2.String(),
84+
Lien: &types.Lien{Delegated: []sdk.Coin{inval(6)}},
85+
},
86+
},
87+
},
88+
fail: true,
89+
},
90+
} {
91+
t.Run(tt.name, func(t *testing.T) {
92+
err := ValidateGenesis(tt.state)
93+
switch {
94+
case err != nil && !tt.fail:
95+
t.Errorf("invalid genesis state %v: %v", tt.state, err)
96+
case err == nil && tt.fail:
97+
t.Errorf("expected invalid genesis %v", tt.state)
98+
}
99+
})
100+
}
101+
}

0 commit comments

Comments
 (0)