Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func TestDepositRent(t *testing.T) {
server := msgserver.NewMsgServerImpl(*keeper)
contract := types.ContractInfoV2{
CodeId: 1,
ContractAddr: keepertest.TestContract,
ContractAddr: TestContractA,
Creator: testAccount.String(),
RentBalance: 1000000,
}
Expand All @@ -32,17 +32,17 @@ func TestDepositRent(t *testing.T) {
Contract: &contract,
})
require.NoError(t, err)
_, err = keeper.GetContract(ctx, keepertest.TestContract)
_, err = keeper.GetContract(ctx, TestContractA)
require.NoError(t, err)
balance := keeper.BankKeeper.GetBalance(ctx, testAccount, "usei")
require.Equal(t, int64(9000000), balance.Amount.Int64())
_, err = server.ContractDepositRent(wctx, &types.MsgContractDepositRent{
Sender: testAccount.String(),
ContractAddr: keepertest.TestContract,
ContractAddr: TestContractA,
Amount: 1000000,
})
require.NoError(t, err)
_, err = keeper.GetContract(ctx, keepertest.TestContract)
_, err = keeper.GetContract(ctx, TestContractA)
require.NoError(t, err)
balance = keeper.BankKeeper.GetBalance(ctx, testAccount, "usei")
require.Equal(t, int64(8000000), balance.Amount.Int64())
Expand Down
8 changes: 6 additions & 2 deletions x/dex/keeper/msgserver/msg_server_register_contract.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func (k msgServer) RegisterContract(goCtx context.Context, msg *types.MsgRegiste
ctx := sdk.UnwrapSDKContext(goCtx)
// TODO: add validation such that only the user who stored the code can register contract

if err := k.ValidateBasics(msg); err != nil {
if err := k.ValidateBasics(ctx, msg); err != nil {
ctx.Logger().Error(fmt.Sprintf("request invalid: %s", err))
return &types.MsgRegisterContractResponse{}, err
}
Expand Down Expand Up @@ -55,13 +55,17 @@ func (k msgServer) RegisterContract(goCtx context.Context, msg *types.MsgRegiste
return &types.MsgRegisterContractResponse{}, nil
}

func (k msgServer) ValidateBasics(msg *types.MsgRegisterContract) error {
func (k msgServer) ValidateBasics(ctx sdk.Context, msg *types.MsgRegisterContract) error {
if msg.Contract == nil {
return errors.New("empty contract info")
}
if msg.Contract.ContractAddr == "" {
return errors.New("contract address is empty")
}
_, err := sdk.AccAddressFromBech32(msg.Contract.ContractAddr)
if err != nil {
return errors.New("contract address format is not bech32")
}
return nil
}

Expand Down
87 changes: 48 additions & 39 deletions x/dex/keeper/msgserver/msg_server_register_contract_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,27 @@ import (
"github.com/stretchr/testify/require"
)

const (
TestContractA = "sei14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sh9m79m"
TestContractB = "sei1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqms7u8a"
TestContractC = "sei1xr3rq8yvd7qplsw5yx90ftsr2zdhg4e9z60h5duusgxpv72hud3shh3qfl"
TestContractD = "sei1up07dctjqud4fns75cnpejr4frmjtddzsmwgcktlyxd4zekhwecqghxqcp"
TestContractX = "sei1hw5n2l4v5vz8lk4sj69j7pwdaut0kkn90mw09snlkdd3f7ckld0smdtvee"
TestContractY = "sei12pwnhtv7yat2s30xuf4gdk9qm85v4j3e6p44let47pdffpklcxlqh8ag0z"
)

func TestRegisterContract(t *testing.T) {
keeper, ctx := keepertest.DexKeeper(t)
wctx := sdk.WrapSDKContext(ctx)
server := msgserver.NewMsgServerImpl(*keeper)
err := registerContract(server, wctx, keepertest.TestContract, nil)
err := registerContract(server, wctx, TestContractA, nil)
require.NoError(t, err)
storedContracts := keeper.GetAllContractInfo(ctx)
require.Equal(t, 1, len(storedContracts))
require.Nil(t, storedContracts[0].Dependencies)

// dependency doesn't exist
err = registerContract(server, wctx, keepertest.TestContract, []string{"TEST2"})
err = registerContract(server, wctx, TestContractA, []string{TestContractY})
require.NotNil(t, err)
storedContracts = keeper.GetAllContractInfo(ctx)
require.Equal(t, 1, len(storedContracts))
Expand All @@ -33,25 +42,25 @@ func TestRegisterContractCircularDependency(t *testing.T) {
keeper, ctx := keepertest.DexKeeper(t)
wctx := sdk.WrapSDKContext(ctx)
server := msgserver.NewMsgServerImpl(*keeper)
registerContract(server, wctx, "test1", nil)
registerContract(server, wctx, TestContractA, nil)
storedContracts := keeper.GetAllContractInfo(ctx)
require.Equal(t, 1, len(storedContracts))

registerContract(server, wctx, "test2", []string{"test1"})
registerContract(server, wctx, TestContractB, []string{TestContractA})
storedContracts = keeper.GetAllContractInfo(ctx)
require.Equal(t, 2, len(storedContracts))

// This contract should fail to be registered because it causes a
// circular dependency
err := registerContract(server, wctx, "test1", []string{"test2"})
err := registerContract(server, wctx, TestContractA, []string{TestContractA})
require.NotNil(t, err)
}

func TestRegisterContractDuplicateDependency(t *testing.T) {
keeper, ctx := keepertest.DexKeeper(t)
wctx := sdk.WrapSDKContext(ctx)
server := msgserver.NewMsgServerImpl(*keeper)
err := registerContract(server, wctx, "test1", []string{"test2", "test2"})
err := registerContract(server, wctx, TestContractA, []string{TestContractA, TestContractA})
require.NotNil(t, err)
storedContracts := keeper.GetAllContractInfo(ctx)
require.Equal(t, 0, len(storedContracts))
Expand All @@ -61,24 +70,24 @@ func TestRegisterContractNumIncomingPaths(t *testing.T) {
keeper, ctx := keepertest.DexKeeper(t)
wctx := sdk.WrapSDKContext(ctx)
server := msgserver.NewMsgServerImpl(*keeper)
registerContract(server, wctx, "test1", nil)
storedContract, err := keeper.GetContract(ctx, "test1")
registerContract(server, wctx, TestContractA, nil)
storedContract, err := keeper.GetContract(ctx, TestContractA)
require.Nil(t, err)
require.Equal(t, int64(0), storedContract.NumIncomingDependencies)

registerContract(server, wctx, "test2", []string{"test1"})
storedContract, err = keeper.GetContract(ctx, "test1")
registerContract(server, wctx, TestContractB, []string{TestContractA})
storedContract, err = keeper.GetContract(ctx, TestContractA)
require.Nil(t, err)
require.Equal(t, int64(1), storedContract.NumIncomingDependencies)
storedContract, err = keeper.GetContract(ctx, "test2")
storedContract, err = keeper.GetContract(ctx, TestContractB)
require.Nil(t, err)
require.Equal(t, int64(0), storedContract.NumIncomingDependencies)

registerContract(server, wctx, "test2", nil)
storedContract, err = keeper.GetContract(ctx, "test1")
registerContract(server, wctx, TestContractB, nil)
storedContract, err = keeper.GetContract(ctx, TestContractA)
require.Nil(t, err)
require.Equal(t, int64(0), storedContract.NumIncomingDependencies)
storedContract, err = keeper.GetContract(ctx, "test2")
storedContract, err = keeper.GetContract(ctx, TestContractA)
require.Nil(t, err)
require.Equal(t, int64(0), storedContract.NumIncomingDependencies)
}
Expand All @@ -88,41 +97,41 @@ func TestRegisterContractSetSiblings(t *testing.T) {
keeper, ctx := keepertest.DexKeeper(t)
wctx := sdk.WrapSDKContext(ctx)
server := msgserver.NewMsgServerImpl(*keeper)
registerContract(server, wctx, "X", nil)
registerContract(server, wctx, "Y", nil)
registerContract(server, wctx, "A", []string{"X"})
registerContract(server, wctx, "B", []string{"X"})
registerContract(server, wctx, "C", []string{"Y"})
registerContract(server, wctx, TestContractX, nil)
registerContract(server, wctx, TestContractY, nil)
registerContract(server, wctx, TestContractA, []string{TestContractX})
registerContract(server, wctx, TestContractB, []string{TestContractX})
registerContract(server, wctx, TestContractC, []string{TestContractY})
// add D -> X, D -> Y
registerContract(server, wctx, "D", []string{"X", "Y"})
contract, _ := keeper.GetContract(ctx, "A")
registerContract(server, wctx, TestContractD, []string{TestContractX, TestContractY})
contract, _ := keeper.GetContract(ctx, TestContractA)
require.Equal(t, "", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "B", contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, "B")
require.Equal(t, "A", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "D", contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, "C")
require.Equal(t, TestContractB, contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, TestContractB)
require.Equal(t, TestContractA, contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, TestContractD, contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, TestContractC)
require.Equal(t, "", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "D", contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, "D")
require.Equal(t, "B", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, TestContractD, contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, TestContractD)
require.Equal(t, TestContractB, contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "", contract.Dependencies[0].ImmediateYoungerSibling)
require.Equal(t, "C", contract.Dependencies[1].ImmediateElderSibling)
require.Equal(t, TestContractC, contract.Dependencies[1].ImmediateElderSibling)
require.Equal(t, "", contract.Dependencies[1].ImmediateYoungerSibling)
// update D -> X only
registerContract(server, wctx, "D", []string{"X"})
contract, _ = keeper.GetContract(ctx, "A")
registerContract(server, wctx, TestContractD, []string{TestContractX})
contract, _ = keeper.GetContract(ctx, TestContractA)
require.Equal(t, "", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "B", contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, "B")
require.Equal(t, "A", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "D", contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, "C")
require.Equal(t, TestContractB, contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, TestContractB)
require.Equal(t, TestContractA, contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, TestContractD, contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, TestContractC)
require.Equal(t, "", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "", contract.Dependencies[0].ImmediateYoungerSibling)
contract, _ = keeper.GetContract(ctx, "D")
contract, _ = keeper.GetContract(ctx, TestContractD)
require.Equal(t, 1, len(contract.Dependencies))
require.Equal(t, "B", contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, TestContractB, contract.Dependencies[0].ImmediateElderSibling)
require.Equal(t, "", contract.Dependencies[0].ImmediateYoungerSibling)
}

Expand Down
8 changes: 4 additions & 4 deletions x/dex/keeper/msgserver/msg_server_unregister_contract_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func TestUnregisterContractSetSiblings(t *testing.T) {
server := msgserver.NewMsgServerImpl(*keeper)
contract := types.ContractInfoV2{
CodeId: 1,
ContractAddr: keepertest.TestContract,
ContractAddr: TestContractA,
Creator: testAccount.String(),
RentBalance: 1000000,
}
Expand All @@ -32,16 +32,16 @@ func TestUnregisterContractSetSiblings(t *testing.T) {
Contract: &contract,
})
require.NoError(t, err)
_, err = keeper.GetContract(ctx, keepertest.TestContract)
_, err = keeper.GetContract(ctx, TestContractA)
require.NoError(t, err)
balance := keeper.BankKeeper.GetBalance(ctx, testAccount, "usei")
require.Equal(t, int64(9000000), balance.Amount.Int64())
_, err = server.UnregisterContract(wctx, &types.MsgUnregisterContract{
Creator: testAccount.String(),
ContractAddr: keepertest.TestContract,
ContractAddr: TestContractA,
})
require.NoError(t, err)
_, err = keeper.GetContract(ctx, keepertest.TestContract)
_, err = keeper.GetContract(ctx, TestContractA)
require.Error(t, err)
balance = keeper.BankKeeper.GetBalance(ctx, testAccount, "usei")
require.Equal(t, int64(10000000), balance.Amount.Int64())
Expand Down
Binary file added x/dex/keeper/msgserver/testdata/hackatom.wasm
Binary file not shown.