Skip to content

Commit 2dd133d

Browse files
chore: fix interchain tests for liquid (#3739)
* Initial commit * Tests pass
1 parent 7236a27 commit 2dd133d

File tree

2 files changed

+28
-189
lines changed

2 files changed

+28
-189
lines changed

tests/interchain/delegator/liquid_test.go

Lines changed: 27 additions & 188 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package delegator_test
22

33
import (
4-
"encoding/json"
54
"fmt"
6-
"path"
75
"testing"
86
"time"
97

@@ -12,7 +10,6 @@ import (
1210
"github.com/strangelove-ventures/interchaintest/v8"
1311
"github.com/strangelove-ventures/interchaintest/v8/ibc"
1412
"github.com/strangelove-ventures/interchaintest/v8/testutil"
15-
"github.com/stretchr/testify/assert"
1613
"github.com/stretchr/testify/suite"
1714
"golang.org/x/mod/semver"
1815
"golang.org/x/sync/errgroup"
@@ -54,27 +51,6 @@ func (s *LSMSuite) TestLSMHappyPath() {
5451

5552
strideWallet := s.Stride.ValidatorWallets[0]
5653

57-
s.Run("Validator Bond", func() {
58-
delegatorShares1, err := s.Chain.QueryJSON(s.GetContext(), "validator.delegator_shares", "staking", "validator", providerWallet.ValoperAddress)
59-
s.Require().NoError(err)
60-
validatorBondShares1, err := s.Chain.QueryJSON(s.GetContext(), "validator.validator_bond_shares", "staking", "validator", providerWallet.ValoperAddress)
61-
s.Require().NoError(err)
62-
63-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmBondingMoniker].FormattedAddress(),
64-
"staking", "delegate", providerWallet.ValoperAddress, fmt.Sprintf("%d%s", delegation, s.Chain.Config().Denom))
65-
s.Require().NoError(err)
66-
delegatorShares2, err := s.Chain.QueryJSON(s.GetContext(), "validator.delegator_shares", "staking", "validator", providerWallet.ValoperAddress)
67-
s.Require().NoError(err)
68-
s.checkAMinusBEqualsX(delegatorShares2.String(), delegatorShares1.String(), sdkmath.NewInt(delegation))
69-
70-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmBondingMoniker].FormattedAddress(),
71-
"staking", "validator-bond", providerWallet.ValoperAddress)
72-
s.Require().NoError(err)
73-
validatorBondShares2, err := s.Chain.QueryJSON(s.GetContext(), "validator.validator_bond_shares", "staking", "validator", providerWallet.ValoperAddress)
74-
s.Require().NoError(err)
75-
s.checkAMinusBEqualsX(validatorBondShares2.String(), validatorBondShares1.String(), sdkmath.NewInt(delegation).Mul(s.ShareFactor))
76-
})
77-
7854
var tokenizedDenom string
7955
s.Run("Tokenize", func() {
8056
delegatorShares1, err := s.Chain.QueryJSON(s.GetContext(), "validator.delegator_shares", "staking", "validator", providerWallet.ValoperAddress)
@@ -86,14 +62,17 @@ func (s *LSMSuite) TestLSMHappyPath() {
8662
s.Require().NoError(err)
8763
s.checkAMinusBEqualsX(delegatorShares2.String(), delegatorShares1.String(), sdkmath.NewInt(delegation))
8864

89-
sharesPreTokenize, err := s.Chain.QueryJSON(s.GetContext(), "validator.liquid_shares", "staking", "validator", providerWallet.ValoperAddress)
65+
sharesPreTokenize, err := s.Chain.QueryJSON(s.GetContext(), "liquid_validator.liquid_shares", "liquid",
66+
"liquid-validator",
67+
providerWallet.ValoperAddress)
9068
s.Require().NoError(err)
9169
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid1Moniker].FormattedAddress(),
92-
"staking", "tokenize-share",
70+
"liquid", "tokenize-share",
9371
providerWallet.ValoperAddress, fmt.Sprintf("%d%s", tokenize, s.Chain.Config().Denom), s.LSMWallets[lsmLiquid1Moniker].FormattedAddress(),
9472
"--gas", "auto")
9573
s.Require().NoError(err)
96-
sharesPostTokenize, err := s.Chain.QueryJSON(s.GetContext(), "validator.liquid_shares", "staking", "validator", providerWallet.ValoperAddress)
74+
sharesPostTokenize, err := s.Chain.QueryJSON(s.GetContext(), "liquid_validator.liquid_shares", "liquid",
75+
"liquid-validator", providerWallet.ValoperAddress)
9776
s.Require().NoError(err)
9877
s.checkAMinusBEqualsX(sharesPostTokenize.String(), sharesPreTokenize.String(), sdkmath.NewInt(tokenize).Mul(s.ShareFactor))
9978

@@ -108,28 +87,32 @@ func (s *LSMSuite) TestLSMHappyPath() {
10887
})
10988

11089
s.Run("Transfer Ownership", func() {
111-
recordIDResult, err := s.Chain.QueryJSON(s.GetContext(), "record.id", "staking", "tokenize-share-record-by-denom", tokenizedDenom)
90+
recordIDResult, err := s.Chain.QueryJSON(s.GetContext(), "record.id", "liquid",
91+
"tokenize-share-record-by-denom", tokenizedDenom)
11292
s.Require().NoError(err)
11393
recordID := recordIDResult.String()
11494

115-
ownerResult, err := s.Chain.QueryJSON(s.GetContext(), "record.owner", "staking", "tokenize-share-record-by-denom", tokenizedDenom)
95+
ownerResult, err := s.Chain.QueryJSON(s.GetContext(), "record.owner", "liquid",
96+
"tokenize-share-record-by-denom", tokenizedDenom)
11697
s.Require().NoError(err)
11798
owner := ownerResult.String()
11899

119100
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), owner,
120-
"staking", "transfer-tokenize-share-record", recordID, s.LSMWallets[lsmOwnerMoniker].FormattedAddress())
101+
"liquid", "transfer-tokenize-share-record", recordID, s.LSMWallets[lsmOwnerMoniker].FormattedAddress())
121102
s.Require().NoError(err)
122103

123-
ownerResult, err = s.Chain.QueryJSON(s.GetContext(), "record.owner", "staking", "tokenize-share-record-by-denom", tokenizedDenom)
104+
ownerResult, err = s.Chain.QueryJSON(s.GetContext(), "record.owner", "liquid",
105+
"tokenize-share-record-by-denom", tokenizedDenom)
124106
s.Require().NoError(err)
125107
owner = ownerResult.String()
126108
s.Require().Equal(s.LSMWallets[lsmOwnerMoniker].FormattedAddress(), owner)
127109

128110
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), owner,
129-
"staking", "transfer-tokenize-share-record", recordID, s.LSMWallets[lsmLiquid1Moniker].FormattedAddress())
111+
"liquid", "transfer-tokenize-share-record", recordID, s.LSMWallets[lsmLiquid1Moniker].FormattedAddress())
130112
s.Require().NoError(err)
131113

132-
ownerResult, err = s.Chain.QueryJSON(s.GetContext(), "record.owner", "staking", "tokenize-share-record-by-denom", tokenizedDenom)
114+
ownerResult, err = s.Chain.QueryJSON(s.GetContext(), "record.owner", "liquid",
115+
"tokenize-share-record-by-denom", tokenizedDenom)
133116
s.Require().NoError(err)
134117
owner = ownerResult.String()
135118
s.Require().Equal(s.LSMWallets[lsmLiquid1Moniker].FormattedAddress(), owner)
@@ -175,12 +158,12 @@ func (s *LSMSuite) TestLSMHappyPath() {
175158
var happyLiquid1DelegationBalance string
176159
s.Run("Redeem Tokens", func() {
177160
_, err := s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid1Moniker].FormattedAddress(),
178-
"staking", "redeem-tokens", fmt.Sprintf("%d%s", liquid1Redeem, tokenizedDenom),
161+
"liquid", "redeem-tokens", fmt.Sprintf("%d%s", liquid1Redeem, tokenizedDenom),
179162
"--gas", "auto")
180163
s.Require().NoError(err)
181164

182165
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid2Moniker].FormattedAddress(),
183-
"staking", "redeem-tokens", fmt.Sprintf("%d%s", bankSend, tokenizedDenom),
166+
"liquid", "redeem-tokens", fmt.Sprintf("%d%s", bankSend, tokenizedDenom),
184167
"--gas", "auto")
185168
s.Require().NoError(err)
186169

@@ -194,7 +177,7 @@ func (s *LSMSuite) TestLSMHappyPath() {
194177
s.Require().NoError(testutil.WaitForBlocks(s.GetContext(), 5, s.Chain))
195178

196179
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid3Moniker].FormattedAddress(),
197-
"staking", "redeem-tokens", fmt.Sprintf("%d%s", ibcTransfer, tokenizedDenom),
180+
"liquid", "redeem-tokens", fmt.Sprintf("%d%s", ibcTransfer, tokenizedDenom),
198181
"--gas", "auto")
199182
s.Require().NoError(err)
200183

@@ -230,154 +213,6 @@ func (s *LSMSuite) TestLSMHappyPath() {
230213
s.checkAMinusBEqualsX(happyLiquid2DelegationBalance, "0", sdkmath.NewInt(bankSend))
231214
s.checkAMinusBEqualsX(happyLiquid3DelegationBalance, "0", sdkmath.NewInt(ibcTransfer))
232215
})
233-
s.Run("Cleanup", func() {
234-
validatorBondSharesBeforeResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.validator_bond_shares", "staking", "validator", providerWallet.ValoperAddress)
235-
s.Require().NoError(err)
236-
validatorBondSharesBefore := validatorBondSharesBeforeResult.String()
237-
238-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmBondingMoniker].FormattedAddress(),
239-
"staking", "unbond", providerWallet.ValoperAddress, fmt.Sprintf("%d%s", delegation, s.Chain.Config().Denom))
240-
s.Require().NoError(err)
241-
242-
validatorBondSharesResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.validator_bond_shares", "staking", "validator", providerWallet.ValoperAddress)
243-
s.Require().NoError(err)
244-
validatorBondShares := validatorBondSharesResult.String()
245-
s.checkAMinusBEqualsX(validatorBondSharesBefore, validatorBondShares, sdkmath.NewInt(delegation).Mul(s.ShareFactor))
246-
247-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid1Moniker].FormattedAddress(),
248-
"staking", "unbond", providerWallet.ValoperAddress, fmt.Sprintf("%s%s", happyLiquid1DelegationBalance, s.Chain.Config().Denom))
249-
s.Require().NoError(err)
250-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid2Moniker].FormattedAddress(),
251-
"staking", "unbond", providerWallet.ValoperAddress, fmt.Sprintf("%d%s", bankSend, s.Chain.Config().Denom))
252-
s.Require().NoError(err)
253-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), s.LSMWallets[lsmLiquid3Moniker].FormattedAddress(),
254-
"staking", "unbond", providerWallet.ValoperAddress, fmt.Sprintf("%d%s", ibcTransfer, s.Chain.Config().Denom))
255-
s.Require().NoError(err)
256-
})
257-
}
258-
259-
func (s *LSMSuite) TestICADelegate() {
260-
const (
261-
delegate = 20000000
262-
bondDelegation = 20000000
263-
)
264-
bondingWallet, err := s.Chain.BuildWallet(s.GetContext(), fmt.Sprintf("lsm_happy_bonding_%d", time.Now().Unix()), "")
265-
s.Require().NoError(err)
266-
267-
err = s.Chain.SendFunds(s.GetContext(), interchaintest.FaucetAccountKeyName, ibc.WalletAmount{
268-
Amount: sdkmath.NewInt(50_000_000),
269-
Denom: s.Chain.Config().Denom,
270-
Address: bondingWallet.FormattedAddress(),
271-
})
272-
s.Require().NoError(err)
273-
274-
providerWallet := s.Chain.ValidatorWallets[0]
275-
276-
strideWallet := s.Stride.ValidatorWallets[0]
277-
278-
s.Run("Delegate and Bond", func() {
279-
shares1Result, err := s.Chain.QueryJSON(s.GetContext(), "validator.delegator_shares", "staking", "validator", providerWallet.ValoperAddress)
280-
s.Require().NoError(err)
281-
shares1 := shares1Result.String()
282-
283-
tokens1Result, err := s.Chain.QueryJSON(s.GetContext(), "validator.tokens", "staking", "validator", providerWallet.ValoperAddress)
284-
s.Require().NoError(err)
285-
tokens1 := tokens1Result.String()
286-
287-
bondShares1Result, err := s.Chain.QueryJSON(s.GetContext(), "validator.validator_bond_shares", "staking", "validator", providerWallet.ValoperAddress)
288-
s.Require().NoError(err)
289-
bondShares1 := bondShares1Result.String()
290-
291-
shares1Int, err := chainsuite.StrToSDKInt(shares1)
292-
s.Require().NoError(err)
293-
tokens1Int, err := chainsuite.StrToSDKInt(tokens1)
294-
s.Require().NoError(err)
295-
bondShares1Int, err := chainsuite.StrToSDKInt(bondShares1)
296-
s.Require().NoError(err)
297-
298-
exchangeRate1 := shares1Int.Quo(tokens1Int)
299-
expectedSharesIncrease := exchangeRate1.MulRaw(bondDelegation).Mul(s.ShareFactor)
300-
expectedShares := expectedSharesIncrease.Add(bondShares1Int)
301-
302-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), bondingWallet.FormattedAddress(),
303-
"staking", "delegate", providerWallet.ValoperAddress, fmt.Sprintf("%d%s", bondDelegation, s.Chain.Config().Denom))
304-
s.Require().NoError(err)
305-
306-
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), bondingWallet.FormattedAddress(),
307-
"staking", "validator-bond", providerWallet.ValoperAddress)
308-
s.Require().NoError(err)
309-
310-
bondShares2Result, err := s.Chain.QueryJSON(s.GetContext(), "validator.validator_bond_shares", "staking", "validator", providerWallet.ValoperAddress)
311-
s.Require().NoError(err)
312-
bondShares2 := bondShares2Result.String()
313-
314-
bondShares2Int, err := chainsuite.StrToSDKInt(bondShares2)
315-
s.Require().NoError(err)
316-
s.Require().Truef(bondShares2Int.Sub(expectedShares).Abs().LTE(sdkmath.NewInt(1)), "bondShares2: %s, expectedShares: %s", bondShares2, expectedShares)
317-
})
318-
319-
s.Run("Delegate via ICA", func() {
320-
preDelegationTokensResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.tokens", "staking", "validator", providerWallet.ValoperAddress)
321-
s.Require().NoError(err)
322-
preDelegationTokens := preDelegationTokensResult.String()
323-
324-
preDelegationSharesResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.delegator_shares", "staking", "validator", providerWallet.ValoperAddress)
325-
s.Require().NoError(err)
326-
preDelegationShares := preDelegationSharesResult.String()
327-
328-
preDelegationLiquidSharesResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.liquid_shares", "staking", "validator", providerWallet.ValoperAddress)
329-
s.Require().NoError(err)
330-
preDelegationLiquidShares := preDelegationLiquidSharesResult.String()
331-
332-
preDelegationTokensInt, err := chainsuite.StrToSDKInt(preDelegationTokens)
333-
s.Require().NoError(err)
334-
preDelegationSharesInt, err := chainsuite.StrToSDKInt(preDelegationShares)
335-
s.Require().NoError(err)
336-
exchangeRate := preDelegationSharesInt.Quo(preDelegationTokensInt)
337-
expectedLiquidIncrease := exchangeRate.MulRaw(delegate).Mul(s.ShareFactor)
338-
339-
delegateHappy := map[string]interface{}{
340-
"@type": "/cosmos.staking.v1beta1.MsgDelegate",
341-
"delegator_address": s.ICAAddr,
342-
"validator_address": providerWallet.ValoperAddress,
343-
"amount": map[string]interface{}{
344-
"denom": s.Chain.Config().Denom,
345-
"amount": fmt.Sprint(delegate),
346-
},
347-
}
348-
delegateHappyJSON, err := json.Marshal(delegateHappy)
349-
s.Require().NoError(err)
350-
jsonPath := "delegate-happy.json"
351-
fullJsonPath := path.Join(s.Stride.Validators[0].HomeDir(), jsonPath)
352-
stdout, _, err := s.Stride.GetNode().ExecBin(s.GetContext(), "tx", "interchain-accounts", "host", "generate-packet-data", string(delegateHappyJSON), "--encoding", "proto3")
353-
s.Require().NoError(err)
354-
s.Require().NoError(s.Stride.Validators[0].WriteFile(s.GetContext(), []byte(stdout), jsonPath))
355-
ibcChannelStride, err := s.Relayer.GetTransferChannel(s.GetContext(), s.Stride, s.Chain)
356-
s.Require().NoError(err)
357-
358-
_, err = s.Stride.GetNode().ExecTx(s.GetContext(), strideWallet.Address,
359-
"interchain-accounts", "controller", "send-tx", ibcChannelStride.ConnectionHops[0], fullJsonPath)
360-
s.Require().NoError(err)
361-
362-
var tokensDelta sdkmath.Int
363-
s.Require().EventuallyWithT(func(c *assert.CollectT) {
364-
postDelegationTokensResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.tokens", "staking", "validator", providerWallet.ValoperAddress)
365-
s.Require().NoError(err)
366-
postDelegationTokens, err := chainsuite.StrToSDKInt(postDelegationTokensResult.String())
367-
s.Require().NoError(err)
368-
tokensDelta = postDelegationTokens.Sub(preDelegationTokensInt)
369-
assert.Truef(c, tokensDelta.Sub(sdkmath.NewInt(delegate)).Abs().LTE(sdkmath.NewInt(1)), "tokensDelta: %s, delegate: %d", tokensDelta, delegate)
370-
}, 20*time.Second, time.Second)
371-
372-
postDelegationLiquidSharesResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.liquid_shares", "staking", "validator", providerWallet.ValoperAddress)
373-
s.Require().NoError(err)
374-
postDelegationLiquidShares, err := chainsuite.StrToSDKInt(postDelegationLiquidSharesResult.String())
375-
s.Require().NoError(err)
376-
preDelegationLiquidSharesInt, err := chainsuite.StrToSDKInt(preDelegationLiquidShares)
377-
s.Require().NoError(err)
378-
liquidSharesDelta := postDelegationLiquidShares.Sub(preDelegationLiquidSharesInt)
379-
s.Require().Truef(liquidSharesDelta.Sub(expectedLiquidIncrease).Abs().LTE(sdkmath.NewInt(1)), "liquidSharesDelta: %s, expectedLiquidIncrease: %s", liquidSharesDelta, expectedLiquidIncrease)
380-
})
381216
}
382217

383218
func (s *LSMSuite) TestTokenizeVested() {
@@ -413,21 +248,25 @@ func (s *LSMSuite) TestTokenizeVested() {
413248

414249
// try to tokenize full amount. Should fail.
415250
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), vestingAccount.FormattedAddress(),
416-
"staking", "tokenize-share", validatorWallet.ValoperAddress, fmt.Sprintf("%d%s", vestingAmount, s.Chain.Config().Denom), vestingAccount.FormattedAddress(),
251+
"liquid", "tokenize-share", validatorWallet.ValoperAddress, fmt.Sprintf("%d%s", vestingAmount,
252+
s.Chain.Config().Denom), vestingAccount.FormattedAddress(),
417253
"--gas", "auto")
418254
s.Require().Error(err)
419255

420-
sharesPreTokenizeResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.liquid_shares", "staking", "validator", validatorWallet.ValoperAddress)
256+
sharesPreTokenizeResult, err := s.Chain.QueryJSON(s.GetContext(), "liquid_validator.liquid_shares", "liquid",
257+
"liquid-validator", validatorWallet.ValoperAddress)
421258
s.Require().NoError(err)
422259
sharesPreTokenize := sharesPreTokenizeResult.String()
423260

424261
// try to tokenize vested amount (i.e. half) should succeed if upgraded
425262
tokenizeAmount := vestingAmount / 2
426263
_, err = s.Chain.GetNode().ExecTx(s.GetContext(), vestingAccount.FormattedAddress(),
427-
"staking", "tokenize-share", validatorWallet.ValoperAddress, fmt.Sprintf("%d%s", tokenizeAmount, s.Chain.Config().Denom), vestingAccount.FormattedAddress(),
264+
"liquid", "tokenize-share", validatorWallet.ValoperAddress, fmt.Sprintf("%d%s", tokenizeAmount,
265+
s.Chain.Config().Denom), vestingAccount.FormattedAddress(),
428266
"--gas", "auto")
429267
s.Require().NoError(err)
430-
sharesPostTokenizeResult, err := s.Chain.QueryJSON(s.GetContext(), "validator.liquid_shares", "staking", "validator", validatorWallet.ValoperAddress)
268+
sharesPostTokenizeResult, err := s.Chain.QueryJSON(s.GetContext(), "liquid_validator.liquid_shares", "liquid",
269+
"liquid-validator", validatorWallet.ValoperAddress)
431270
s.Require().NoError(err)
432271
sharesPostTokenize := sharesPostTokenizeResult.String()
433272
s.checkAMinusBEqualsX(sharesPostTokenize, sharesPreTokenize, sdkmath.NewInt(tokenizeAmount).Mul(s.ShareFactor))

x/liquid/keeper/params.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (k Keeper) GetParams(ctx context.Context) (params types.Params, err error)
2828
}
2929

3030
if bz == nil {
31-
return params, nil
31+
return types.DefaultParams(), nil
3232
}
3333

3434
err = k.cdc.Unmarshal(bz, &params)

0 commit comments

Comments
 (0)