Use updated reflect contract
This commit is contained in:
@@ -27,7 +27,7 @@ func TestGroupWithContract(t *testing.T) {
|
||||
|
||||
coord := ibctesting.NewCoordinator(t, 1)
|
||||
chain := coord.GetChain(ibctesting.GetChainID(1))
|
||||
contractAddr := e2e.InstantiateReflectContract(t, chain)
|
||||
contractAddr := e2e.InstantiateStargateReflectContract(t, chain)
|
||||
chain.Fund(contractAddr, sdkmath.NewIntFromUint64(1_000_000_000))
|
||||
|
||||
members := []group.MemberRequest{
|
||||
@@ -74,3 +74,58 @@ func TestGroupWithContract(t *testing.T) {
|
||||
expBalanceAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.OneInt())
|
||||
assert.Equal(t, expBalanceAmount.String(), recipientBalance.String())
|
||||
}
|
||||
|
||||
func TestGroupWithNewReflectContract(t *testing.T) {
|
||||
// Given a group with a contract as only member
|
||||
// When contract submits a proposal with try_execute
|
||||
// Then the payload msg is executed
|
||||
|
||||
coord := ibctesting.NewCoordinator(t, 1)
|
||||
chain := coord.GetChain(ibctesting.GetChainID(1))
|
||||
contractAddr := e2e.InstantiateReflectContract(t, chain)
|
||||
chain.Fund(contractAddr, sdkmath.NewIntFromUint64(1_000_000_000))
|
||||
|
||||
members := []group.MemberRequest{
|
||||
{
|
||||
Address: contractAddr.String(),
|
||||
Weight: "1",
|
||||
Metadata: "my contract",
|
||||
},
|
||||
}
|
||||
msg, err := group.NewMsgCreateGroupWithPolicy(
|
||||
chain.SenderAccount.GetAddress().String(),
|
||||
members,
|
||||
"my group",
|
||||
"my metadata",
|
||||
false,
|
||||
group.NewPercentageDecisionPolicy("1", time.Second, 0),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
rsp, err := chain.SendMsgs(msg)
|
||||
require.NoError(t, err)
|
||||
|
||||
var createRsp group.MsgCreateGroupWithPolicyResponse
|
||||
chain.UnwrapExecTXResult(rsp, &createRsp)
|
||||
groupID, policyAddr := createRsp.GroupId, sdk.MustAccAddressFromBech32(createRsp.GroupPolicyAddress)
|
||||
require.NotEmpty(t, groupID)
|
||||
chain.Fund(policyAddr, sdkmath.NewIntFromUint64(1_000_000_000))
|
||||
// and a proposal submitted
|
||||
recipientAddr := sdk.AccAddress(rand.Bytes(address.Len))
|
||||
|
||||
payload := []sdk.Msg{banktypes.NewMsgSend(policyAddr, recipientAddr, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.OneInt())))}
|
||||
propMsg, err := group.NewMsgSubmitProposal(policyAddr.String(), []string{contractAddr.String()}, payload, "my proposal", group.Exec_EXEC_TRY, "my title", "my description")
|
||||
require.NoError(t, err)
|
||||
|
||||
rsp = e2e.MustExecViaAnyReflectContract(t, chain, contractAddr, propMsg)
|
||||
var execRsp types.MsgExecuteContractResponse
|
||||
chain.UnwrapExecTXResult(rsp, &execRsp)
|
||||
|
||||
var groupRsp group.MsgSubmitProposalResponse
|
||||
require.NoError(t, chain.Codec.Unmarshal(execRsp.Data, &groupRsp))
|
||||
// require.NotEmpty(t, groupRsp.ProposalId)
|
||||
|
||||
// and coins received
|
||||
recipientBalance := chain.Balance(recipientAddr, sdk.DefaultBondDenom)
|
||||
expBalanceAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.OneInt())
|
||||
assert.Equal(t, expBalanceAmount.String(), recipientBalance.String())
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package e2e
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
wasmvmtypes "github.com/CosmWasm/wasmvm/v2/types"
|
||||
@@ -16,9 +18,18 @@ import (
|
||||
"github.com/CosmWasm/wasmd/x/wasm/types"
|
||||
)
|
||||
|
||||
// InstantiateReflectContract store and instantiate a reflect contract instance
|
||||
// InstantiateStargateReflectContract stores and instantiates a pre 2.0 reflect contract instance.
|
||||
// This instance still expects the old CosmosMsg.Stargate variant instead of the new CosmosMsg.Any.
|
||||
func InstantiateStargateReflectContract(t *testing.T, chain *ibctesting.TestChain) sdk.AccAddress {
|
||||
codeID := chain.StoreCodeFile("../../x/wasm/keeper/testdata/reflect.wasm").CodeID
|
||||
contractAddr := chain.InstantiateContract(codeID, []byte(`{}`))
|
||||
require.NotEmpty(t, contractAddr)
|
||||
return contractAddr
|
||||
}
|
||||
|
||||
// InstantiateReflectContract stores and instantiates a 2.0 reflect contract instance.
|
||||
func InstantiateReflectContract(t *testing.T, chain *ibctesting.TestChain) sdk.AccAddress {
|
||||
codeID := chain.StoreCodeFile("../../x/wasm/keeper/testdata/reflect_1_1.wasm").CodeID
|
||||
codeID := chain.StoreCodeFile("../../x/wasm/keeper/testdata/reflect_2_0.wasm").CodeID
|
||||
contractAddr := chain.InstantiateContract(codeID, []byte(`{}`))
|
||||
require.NotEmpty(t, contractAddr)
|
||||
return contractAddr
|
||||
@@ -37,6 +48,32 @@ type sdkMessageType interface {
|
||||
}
|
||||
|
||||
func MustExecViaStargateReflectContract[T sdkMessageType](t *testing.T, chain *ibctesting.TestChain, contractAddr sdk.AccAddress, msgs ...T) *abci.ExecTxResult {
|
||||
require.NotEmpty(t, msgs)
|
||||
// convert messages to stargate variant
|
||||
vmMsgs := make([]string, len(msgs))
|
||||
for i, m := range msgs {
|
||||
bz, err := chain.Codec.Marshal(m)
|
||||
require.NoError(t, err)
|
||||
// json is built manually because the wasmvm CosmosMsg does not have the `Stargate` variant anymore
|
||||
vmMsgs[i] = fmt.Sprintf("{\"stargate\":{\"type_url\":\"%s\",\"value\":\"%s\"}}", sdk.MsgTypeURL(m), base64.StdEncoding.EncodeToString(bz))
|
||||
}
|
||||
// build the complete reflect message
|
||||
reflectSendBz := []byte(fmt.Sprintf("{\"reflect_msg\":{\"msgs\":%s}}", vmMsgs))
|
||||
|
||||
// {"reflect_msg":{"msgs":[{"stargate":{"type_url":"mytype","value":"EjQ="}}]}}
|
||||
|
||||
t.Log(string(reflectSendBz))
|
||||
execMsg := &types.MsgExecuteContract{
|
||||
Sender: chain.SenderAccount.GetAddress().String(),
|
||||
Contract: contractAddr.String(),
|
||||
Msg: reflectSendBz,
|
||||
}
|
||||
rsp, err := chain.SendMsgs(execMsg)
|
||||
require.NoError(t, err)
|
||||
return rsp
|
||||
}
|
||||
|
||||
func MustExecViaAnyReflectContract[T sdkMessageType](t *testing.T, chain *ibctesting.TestChain, contractAddr sdk.AccAddress, msgs ...T) *abci.ExecTxResult {
|
||||
vmMsgs := make([]wasmvmtypes.CosmosMsg, len(msgs))
|
||||
for i, m := range msgs {
|
||||
bz, err := chain.Codec.Marshal(m)
|
||||
|
||||
Reference in New Issue
Block a user