Skip to content

Commit

Permalink
chore: fix conflict
Browse files Browse the repository at this point in the history
  • Loading branch information
jaeseung-bae committed Mar 19, 2024
2 parents 3a4b5bf + 6efd17d commit bdf2ba0
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/

### Bug Fixes
* (x/auth) [#1281](https://github.com/Finschia/finschia-sdk/pull/1281) `ModuleAccount.Validate` now reports a nil `.BaseAccount` instead of panicking. (backport #1274)
* (x/foundation) [\#1283](https://github.com/Finschia/finschia-sdk/pull/1283) add init logic of foundation module accounts to InitGenesis in order to eliminate potential panic (backport #1277)
* (x/collection) [\#1282](https://github.com/Finschia/finschia-sdk/pull/1282) eliminates potential risk for Insufficient Sanity Check of tokenID in Genesis (backport #1276)

### Removed
Expand Down
2 changes: 1 addition & 1 deletion baseapp/block_gas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func TestBaseApp_BlockGas(t *testing.T) {
txBuilder.SetFeeAmount(feeAmount)
txBuilder.SetGasLimit(txtypes.MaxGasWanted) // tx validation checks that gasLimit can't be bigger than this

privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{6}, []uint64{0}
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{8}, []uint64{0}
_, txBytes, err := createTestTx(encCfg.TxConfig, txBuilder, privs, accNums, accSeqs, ctx.ChainID())
require.NoError(t, err)

Expand Down
9 changes: 9 additions & 0 deletions x/foundation/keeper/internal/genesis.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package internal

import (
"fmt"

sdk "github.com/Finschia/finschia-sdk/types"
"github.com/Finschia/finschia-sdk/x/foundation"
)
Expand Down Expand Up @@ -48,6 +50,13 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *foundation.GenesisState) erro

k.SetPool(ctx, data.Pool)

// init module accounts just in case
if acc := k.authKeeper.GetModuleAccount(ctx, foundation.ModuleName); acc == nil {
panic(fmt.Sprintf("failed to create module account=%s", foundation.ModuleName))
}
if acc := k.authKeeper.GetModuleAccount(ctx, foundation.TreasuryName); acc == nil {
panic(fmt.Sprintf("failed to create module account=%s", foundation.TreasuryName))
}
return nil
}

Expand Down
58 changes: 58 additions & 0 deletions x/foundation/keeper/internal/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@ import (
"testing"
"time"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"

"github.com/Finschia/finschia-sdk/crypto/keys/secp256k1"
"github.com/Finschia/finschia-sdk/simapp"
"github.com/Finschia/finschia-sdk/testutil/testdata"
sdk "github.com/Finschia/finschia-sdk/types"
authtypes "github.com/Finschia/finschia-sdk/x/auth/types"

"github.com/Finschia/finschia-sdk/x/foundation"
"github.com/Finschia/finschia-sdk/x/foundation/keeper/internal"
)

func workingPolicy() foundation.DecisionPolicy {
Expand Down Expand Up @@ -286,3 +289,58 @@ func TestImportExportGenesis(t *testing.T) {
require.Equal(t, tc.export, actual, name)
}
}

func TestShouldPanicWhenFailToGenerateFoundationModuleAccountInInitGenesis(t *testing.T) {
checkTx := false
app := simapp.Setup(checkTx)
testdata.RegisterInterfaces(app.InterfaceRegistry())
testdata.RegisterMsgServer(app.MsgServiceRouter(), testdata.MsgServerImpl{})
gs := &foundation.GenesisState{
Params: foundation.DefaultParams(),
Foundation: foundation.DefaultFoundation(),
}
ctx := app.BaseApp.NewContext(checkTx, tmproto.Header{})

testCases := map[string]struct {
mockAccKeeper *stubAccKeeper
}{
"failed to generate module account=" + foundation.ModuleName: {
mockAccKeeper: &stubAccKeeper{nameToFail: foundation.ModuleName},
},
"failed to generate module account=" + foundation.TreasuryName: {
mockAccKeeper: &stubAccKeeper{nameToFail: foundation.TreasuryName},
},
}

for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
assert.Panics(t, func() {
k := internal.NewKeeper(
app.AppCodec(),
app.GetKey(foundation.ModuleName),
app.MsgServiceRouter(),
tc.mockAccKeeper,
app.BankKeeper,
authtypes.FeeCollectorName,
foundation.DefaultConfig(),
foundation.DefaultAuthority().String(),
app.GetSubspace(foundation.ModuleName),
)

_ = k.InitGenesis(ctx, gs)
assert.FailNow(t, "not supposed to reach here, should panic before")
})
})
}
}

type stubAccKeeper struct {
nameToFail string
}

func (s *stubAccKeeper) GetModuleAccount(_ sdk.Context, name string) authtypes.ModuleAccountI {
if s.nameToFail == name {
return nil
}
return authtypes.NewEmptyModuleAccount("dontcare")
}

0 comments on commit bdf2ba0

Please sign in to comment.