github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/genesis_test.go (about) 1 package wasm 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 "github.com/fibonacci-chain/fbc/libs/tendermint/types" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestInitGenesis(t *testing.T) { 13 types.UnittestOnlySetMilestoneEarthHeight(1) 14 data := setupTest(t) 15 16 deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000)) 17 topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000)) 18 creator := data.faucet.NewFundedAccount(data.ctx, deposit.Add(deposit...)...) 19 fred := data.faucet.NewFundedAccount(data.ctx, topUp...) 20 21 _ = data.module.Route() 22 h := data.module.NewHandler() 23 q := data.module.NewQuerierHandler() 24 25 msg := MsgStoreCode{ 26 Sender: creator.String(), 27 WASMByteCode: testContract, 28 } 29 err := msg.ValidateBasic() 30 require.NoError(t, err) 31 32 res, err := h(data.ctx, &msg) 33 require.NoError(t, err) 34 assertStoreCodeResponse(t, res.Data, 1) 35 36 _, _, bob := keyPubAddr() 37 initMsg := initMsg{ 38 Verifier: fred, 39 Beneficiary: bob, 40 } 41 initMsgBz, err := json.Marshal(initMsg) 42 require.NoError(t, err) 43 44 initCmd := MsgInstantiateContract{ 45 Sender: creator.String(), 46 CodeID: firstCodeID, 47 Msg: initMsgBz, 48 Funds: sdk.CoinsToCoinAdapters(deposit), 49 } 50 res, err = h(data.ctx, &initCmd) 51 require.NoError(t, err) 52 contractBech32Addr := parseInitResponse(t, res.Data) 53 54 execCmd := MsgExecuteContract{ 55 Sender: fred.String(), 56 Contract: contractBech32Addr, 57 Msg: []byte(`{"release":{}}`), 58 Funds: sdk.CoinsToCoinAdapters(topUp), 59 } 60 res, err = h(data.ctx, &execCmd) 61 require.NoError(t, err) 62 // from https://github.com/CosmWasm/cosmwasm/blob/master/contracts/hackatom/src/contract.rs#L167 63 assertExecuteResponse(t, res.Data, []byte{0xf0, 0x0b, 0xaa}) 64 65 // ensure all contract state is as after init 66 assertCodeList(t, q, data.ctx, 1) 67 assertCodeBytes(t, q, data.ctx, 1, testContract) 68 69 assertContractList(t, q, data.ctx, 1, []string{contractBech32Addr}) 70 assertContractInfo(t, q, data.ctx, contractBech32Addr, 1, creator) 71 assertContractState(t, q, data.ctx, contractBech32Addr, state{ 72 Verifier: fred.String(), 73 Beneficiary: bob.String(), 74 Funder: creator.String(), 75 }) 76 77 // export into genstate 78 genState := ExportGenesis(data.ctx, &data.keeper) 79 80 // create new app to import genstate into 81 newData := setupTest(t) 82 q2 := newData.module.NewQuerierHandler() 83 84 // initialize new app with genstate 85 InitGenesis(newData.ctx, &newData.keeper, *genState, newData.module.NewHandler()) 86 87 // run same checks again on newdata, to make sure it was reinitialized correctly 88 assertCodeList(t, q2, newData.ctx, 1) 89 assertCodeBytes(t, q2, newData.ctx, 1, testContract) 90 91 assertContractList(t, q2, newData.ctx, 1, []string{contractBech32Addr}) 92 assertContractInfo(t, q2, newData.ctx, contractBech32Addr, 1, creator) 93 assertContractState(t, q2, newData.ctx, contractBech32Addr, state{ 94 Verifier: fred.String(), 95 Beneficiary: bob.String(), 96 Funder: creator.String(), 97 }) 98 }