Search in sources :

Example 11 with ProgramResult

use of org.ethereum.vm.program.ProgramResult in project rskj by rsksmart.

the class ProgramTest method shouldRevertIfLessThanStipendGasAvailable.

@Test
public void shouldRevertIfLessThanStipendGasAvailable() {
    ProgramResult result = TestContract.bankTest2().executeFunction("test", BigInteger.TEN);
    Assert.assertTrue(result.isRevert());
    Assert.assertNull(result.getException());
}
Also used : ProgramResult(org.ethereum.vm.program.ProgramResult) Test(org.junit.Test)

Example 12 with ProgramResult

use of org.ethereum.vm.program.ProgramResult in project rskj by rsksmart.

the class CallContractTest method callContractReturningOne.

@Test
public void callContractReturningOne() {
    World world = new World();
    byte[] code = new byte[] { 0x60, 0x01, 0x60, 0x00, 0x52, 0x60, 0x20, 0x60, 0x00, (byte) 0xf3 };
    Account account = new AccountBuilder(world).name("acc1").code(code).build();
    ProgramResult result = callContract(world, account.getAddress(), new byte[0]);
    Assert.assertNotNull(result);
    byte[] value = result.getHReturn();
    Assert.assertNotNull(value);
    Assert.assertEquals(32, value.length);
    Assert.assertEquals(BigInteger.ONE, new BigInteger(1, value));
}
Also used : ProgramResult(org.ethereum.vm.program.ProgramResult) BigInteger(java.math.BigInteger) AccountBuilder(co.rsk.test.builders.AccountBuilder) World(co.rsk.test.World) Test(org.junit.Test)

Example 13 with ProgramResult

use of org.ethereum.vm.program.ProgramResult in project rskj by rsksmart.

the class ReversibleTransactionExecutorTest method executeTransactionHello.

@Test
public void executeTransactionHello() {
    TestContract hello = TestContract.hello();
    CallTransaction.Function helloFn = hello.functions.get("hello");
    ContractDetails contract = contractRunner.addContract(hello.runtimeBytecode);
    RskAddress from = RskAddress.nullAddress();
    byte[] gasPrice = Hex.decode("00");
    byte[] value = Hex.decode("00");
    byte[] gasLimit = Hex.decode("f424");
    Block bestBlock = factory.getBlockchain().getBestBlock();
    ProgramResult result = reversibleTransactionExecutor.executeTransaction(bestBlock, bestBlock.getCoinbase(), gasPrice, gasLimit, contract.getAddress(), value, helloFn.encode(), from.getBytes());
    Assert.assertNull(result.getException());
    Assert.assertArrayEquals(new String[] { "chinchilla" }, helloFn.decodeResult(result.getHReturn()));
}
Also used : TestContract(co.rsk.util.TestContract) ProgramResult(org.ethereum.vm.program.ProgramResult) CallTransaction(org.ethereum.core.CallTransaction) Block(org.ethereum.core.Block) ContractDetails(org.ethereum.db.ContractDetails) Test(org.junit.Test)

Example 14 with ProgramResult

use of org.ethereum.vm.program.ProgramResult in project rskj by rsksmart.

the class ReversibleTransactionExecutorTest method executeTransactionGreeter.

@Test
public void executeTransactionGreeter() {
    TestContract greeter = TestContract.greeter();
    CallTransaction.Function greeterFn = greeter.functions.get("greet");
    ContractDetails contract = contractRunner.addContract(greeter.runtimeBytecode);
    RskAddress from = RskAddress.nullAddress();
    byte[] gasPrice = Hex.decode("00");
    byte[] value = Hex.decode("00");
    byte[] gasLimit = Hex.decode("f424");
    Block bestBlock = factory.getBlockchain().getBestBlock();
    ProgramResult result = reversibleTransactionExecutor.executeTransaction(bestBlock, bestBlock.getCoinbase(), gasPrice, gasLimit, contract.getAddress(), value, greeterFn.encode("greet me"), from.getBytes());
    Assert.assertNull(result.getException());
    Assert.assertArrayEquals(new String[] { "greet me" }, greeterFn.decodeResult(result.getHReturn()));
}
Also used : TestContract(co.rsk.util.TestContract) ProgramResult(org.ethereum.vm.program.ProgramResult) CallTransaction(org.ethereum.core.CallTransaction) Block(org.ethereum.core.Block) ContractDetails(org.ethereum.db.ContractDetails) Test(org.junit.Test)

Example 15 with ProgramResult

use of org.ethereum.vm.program.ProgramResult in project rskj by rsksmart.

the class TransactionTest method constantCallConflictTest.

@Test
public void constantCallConflictTest() throws Exception {
    /*
          0x095e7baea6a6c7c4c2dfeb977efac326af552d87 contract is the following Solidity code:

         contract Test {
            uint a = 256;

            function set(uint s) {
                a = s;
            }

            function get() returns (uint) {
                return a;
            }
        }
        */
    String json = "{ " + "    'test1' : { " + "        'env' : { " + "            'currentCoinbase' : '2adc25665018aa1fe0e6bc666dac8fc2697ff9ba', " + "            'currentDifficulty' : '0x0100', " + "            'currentGasLimit' : '0x0f4240', " + "            'currentNumber' : '0x00', " + "            'currentTimestamp' : '0x01', " + "            'previousHash' : '5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6' " + "        }, " + "        'logs' : [ " + "        ], " + "        'out' : '0x', " + "        'post' : { " + "            '095e7baea6a6c7c4c2dfeb977efac326af552d87' : { " + "                'balance' : '0x0de0b6b3a76586a0', " + "                'code' : '0x606060405260e060020a600035046360fe47b1811460245780636d4ce63c14602e575b005b6004356000556022565b6000546060908152602090f3', " + "                'nonce' : '0x00', " + "                'storage' : { " + "                    '0x00' : '0x0400' " + "                } " + "            }, " + "            '" + PrecompiledContracts.REMASC_ADDR_STR + "' : { " + "                'balance' : '0x67EB', " + "                'code' : '0x', " + "                'nonce' : '0x00', " + "                'storage' : { " + "                } " + "            }, " + "            'a94f5374fce5edbc8e2a8697c15331677e6ebf0b' : { " + "                'balance' : '0x0DE0B6B3A7621175', " + "                'code' : '0x', " + "                'nonce' : '0x01', " + "                'storage' : { " + "                } " + "            } " + "        }, " + "        'postStateRoot' : '17454a767e5f04461256f3812ffca930443c04a47d05ce3f38940c4a14b8c479', " + "        'pre' : { " + "            '095e7baea6a6c7c4c2dfeb977efac326af552d87' : { " + "                'balance' : '0x0de0b6b3a7640000', " + "                'code' : '0x606060405260e060020a600035046360fe47b1811460245780636d4ce63c14602e575b005b6004356000556022565b6000546060908152602090f3', " + "                'nonce' : '0x00', " + "                'storage' : { " + "                    '0x00' : '0x02' " + "                } " + "            }, " + "            'a94f5374fce5edbc8e2a8697c15331677e6ebf0b' : { " + "                'balance' : '0x0de0b6b3a7640000', " + "                'code' : '0x', " + "                'nonce' : '0x00', " + "                'storage' : { " + "                } " + "            } " + "        }, " + "        'transaction' : { " + "            'data' : '0x60fe47b10000000000000000000000000000000000000000000000000000000000000400', " + "            'gasLimit' : '0x061a80', " + "            'gasPrice' : '0x01', " + "            'nonce' : '0x00', " + "            'secretKey' : '45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8', " + "            'to' : '095e7baea6a6c7c4c2dfeb977efac326af552d87', " + "            'value' : '0x0186a0' " + "        } " + "    } " + "}";
    StateTestSuite stateTestSuite = new StateTestSuite(json.replaceAll("'", "\""));
    List<String> res = new StateTestRunner(stateTestSuite.getTestCases().get("test1")) {

        @Override
        protected ProgramResult executeTransaction(Transaction tx) {
            // first emulating the constant call (Ethereum.callConstantFunction)
            // to ensure it doesn't affect the final state
            {
                Repository track = repository.startTracking();
                Transaction txConst = CallTransaction.createCallTransaction(config, 0, 0, 100000000000000L, new RskAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), 0, CallTransaction.Function.fromSignature("get"));
                txConst.sign(new byte[32]);
                Block bestBlock = block;
                TransactionExecutor executor = new TransactionExecutor(config, txConst, 0, bestBlock.getCoinbase(), track, new BlockStoreDummy(), null, invokeFactory, bestBlock).setLocalCall(true);
                executor.init();
                executor.execute();
                executor.go();
                executor.finalization();
                track.rollback();
                System.out.println("Return value: " + new CallTransaction.IntType("uint").decode(executor.getResult().getHReturn()));
            }
            // now executing the JSON test transaction
            return super.executeTransaction(tx);
        }
    }.runImpl();
    if (!res.isEmpty())
        throw new RuntimeException("Test failed: " + res);
}
Also used : ProgramResult(org.ethereum.vm.program.ProgramResult) BlockStoreDummy(org.ethereum.db.BlockStoreDummy) StateTestRunner(org.ethereum.jsontestsuite.runners.StateTestRunner) StateTestSuite(org.ethereum.jsontestsuite.StateTestSuite) Test(org.junit.Test)

Aggregations

ProgramResult (org.ethereum.vm.program.ProgramResult)23 Test (org.junit.Test)19 Block (org.ethereum.core.Block)6 TestContract (co.rsk.util.TestContract)5 CallTransaction (org.ethereum.core.CallTransaction)4 ContractDetails (org.ethereum.db.ContractDetails)4 ExecutionBlockRetriever (co.rsk.rpc.ExecutionBlockRetriever)2 BigInteger (java.math.BigInteger)2 BlockStoreDummy (org.ethereum.db.BlockStoreDummy)2 StateTestSuite (org.ethereum.jsontestsuite.StateTestSuite)2 StateTestRunner (org.ethereum.jsontestsuite.runners.StateTestRunner)2 ReversibleTransactionExecutor (co.rsk.core.ReversibleTransactionExecutor)1 RskAddress (co.rsk.core.RskAddress)1 BlockChainImpl (co.rsk.core.bc.BlockChainImpl)1 MinerClient (co.rsk.mine.MinerClient)1 Web3RskImpl (co.rsk.rpc.Web3RskImpl)1 EthModule (co.rsk.rpc.modules.eth.EthModule)1 EthModuleSolidityDisabled (co.rsk.rpc.modules.eth.EthModuleSolidityDisabled)1 EthModuleWalletEnabled (co.rsk.rpc.modules.eth.EthModuleWalletEnabled)1 PersonalModuleWalletEnabled (co.rsk.rpc.modules.personal.PersonalModuleWalletEnabled)1