@@ -1440,7 +1440,8 @@ func TestPrecompileIntegrationTestSuite(t *testing.T, create network.CreateEvmAp
14401440 // check contract was correctly deployed
14411441 cAcc := s .network .App .GetEVMKeeper ().GetAccount (s .network .GetContext (), contractAddr )
14421442 Expect (cAcc ).ToNot (BeNil (), "contract account should exist" )
1443- Expect (cAcc .IsContract ()).To (BeTrue (), "account should be a contract" )
1443+ isContract := s .network .App .GetEVMKeeper ().IsContract (s .network .GetContext (), contractAddr )
1444+ Expect (isContract ).To (BeTrue (), "account should be a contract" )
14441445
14451446 // populate default TxArgs
14461447 txArgs .To = & contractAddr
@@ -1565,6 +1566,36 @@ func TestPrecompileIntegrationTestSuite(t *testing.T, create network.CreateEvmAp
15651566 Expect (err ).NotTo (BeNil (), "expected validator NOT to be found" )
15661567 Expect (err .Error ()).To (ContainSubstring ("not found" ), "expected validator NOT to be found" )
15671568 })
1569+
1570+ It ("tx from validator operator with delegated code - should create a validator" , func () {
1571+ s .delegateAccountToContract (valPriv , valHexAddr , contractTwoAddr )
1572+
1573+ callArgs = testutiltypes.CallArgs {
1574+ ContractABI : stakingCallerTwoContract .ABI ,
1575+ MethodName : "testCreateValidatorWithTransfer" ,
1576+ Args : []interface {}{
1577+ defaultDescription , defaultCommission , defaultMinSelfDelegation , valHexAddr , defaultPubkeyBase64Str , false , false ,
1578+ },
1579+ }
1580+
1581+ txArgs = evmtypes.EvmTxArgs {
1582+ To : & valHexAddr ,
1583+ GasLimit : 500_000 ,
1584+ Amount : new (big.Int ).Set (defaultValue ),
1585+ }
1586+
1587+ _ , _ , err = s .factory .CallContractAndCheckLogs (
1588+ valPriv ,
1589+ txArgs , callArgs ,
1590+ passCheck .WithExpEvents (staking .EventTypeCreateValidator ),
1591+ )
1592+ Expect (err ).To (BeNil (), "error while calling the smart contract" )
1593+ Expect (s .network .NextBlock ()).To (BeNil ())
1594+
1595+ qc := s .network .GetStakingClient ()
1596+ _ , err := qc .Validator (s .network .GetContext (), & stakingtypes.QueryValidatorRequest {ValidatorAddr : sdk .ValAddress (valAddr ).String ()})
1597+ Expect (err ).To (BeNil (), "expected validator NOT to be found" )
1598+ })
15681599 })
15691600
15701601 Context ("to edit a validator" , func () {
@@ -1683,6 +1714,33 @@ func TestPrecompileIntegrationTestSuite(t *testing.T, create network.CreateEvmAp
16831714 Expect (validator .Description .Moniker ).To (Equal ("original moniker" ), "expected validator moniker is updated" )
16841715 Expect (validator .Commission .Rate .BigInt ().String ()).To (Equal ("100000000000000000" ), "expected validator commission rate remain unchanged" )
16851716 })
1717+
1718+ It ("with tx from validator operator using delegated code - should NOT edit a validator" , func () {
1719+ s .delegateAccountToContract (valPriv , valHexAddr , contractAddr )
1720+ callArgs .Args = []interface {}{
1721+ defaultDescription , valHexAddr ,
1722+ defaultCommissionRate , defaultMinSelfDelegation ,
1723+ }
1724+
1725+ txArgs .To = & valHexAddr
1726+
1727+ _ , _ , err = s .factory .CallContractAndCheckLogs (
1728+ valPriv ,
1729+ txArgs ,
1730+ callArgs ,
1731+ execRevertedCheck ,
1732+ )
1733+ Expect (err ).To (BeNil (), "error while calling the smart contract" )
1734+ Expect (s .network .NextBlock ()).To (BeNil ())
1735+
1736+ qc := s .network .GetStakingClient ()
1737+ qRes , err := qc .Validator (s .network .GetContext (), & stakingtypes.QueryValidatorRequest {ValidatorAddr : sdk .ValAddress (valAddr ).String ()})
1738+ Expect (err ).To (BeNil ())
1739+ Expect (qRes ).NotTo (BeNil ())
1740+
1741+ validator := qRes .Validator
1742+ Expect (validator .Description .Moniker ).NotTo (Equal (defaultDescription .Moniker ), "expected validator moniker NOT to be updated" )
1743+ })
16861744 })
16871745
16881746 Context ("delegating" , func () {
0 commit comments