Search in sources :

Example 1 with Trie

use of co.rsk.trie.Trie in project rskj by rsksmart.

the class StateTest method test2.

@Ignore
// calc state after applying first tx on genesis
@Test
public void test2() {
    // explanation:
    // 0) create genesis
    // 1) apply cost of tx to cd2a3d9f938e13cd947ec05abc7fe734df8dd826
    // 2) create AccountState for 77045e71a7a2c50903d88e564cd72fab11e82051
    // 3) minner gets the gas + coinbase ==> 6260000000000000 + 1500000000000000000
    // 4) calc the root
    Trie trie = generateGenesisState();
    Keccak256 expected = new Keccak256("c12b4d771fbcc0d56ec106f8d465d24b9d4c36d60275bbafa7d69694d6708660");
    // Get and update sender in world state
    byte[] cowAddress = Hex.decode("cd2a3d9f938e13cd947ec05abc7fe734df8dd826");
    byte[] rlpEncodedState = trie.get(cowAddress);
    AccountState account_1 = new AccountState(rlpEncodedState);
    final BigInteger value = new BigInteger("-6260000000001000");
    account_1.addToBalance(new Coin(value));
    account_1.incrementNonce();
    trie = trie.put(cowAddress, account_1.getEncoded());
    // Add contract to world state
    byte[] codeData = Hex.decode("61778e600054");
    AccountState account_2 = new AccountState(BigInteger.ZERO, Coin.valueOf(1000));
    account_2.setCodeHash(HashUtil.keccak256(codeData));
    // generated based on sender + nonce
    byte[] contractAddress = Hex.decode("77045e71a7a2c50903d88e564cd72fab11e82051");
    trie = trie.put(contractAddress, account_2.getEncoded());
    // this is saved in the db
    // trie.update(HashUtil.sha3(codeData), codeData);
    // Update miner in world state
    byte[] minerAddress = Hex.decode("4c5f4d519dff3c16f0d54b6866e256fbbbc1a600");
    final BigInteger bigInteger = new BigInteger("1506260000000000000");
    AccountState account_3 = new AccountState(BigInteger.ZERO, new Coin(bigInteger));
    trie = trie.put(minerAddress, account_3.getEncoded());
    assertEquals(expected, trie.getHash());
    /* *** GROSS DATA ***

        BlockData [
          hash=22cf863ab836a6f5c29389d2e77f4792a3b3b52908c98ed14b1cbe91491a3e36
          parentHash=77ef4fdaf389dca53236bcf7f72698e154eab2828f86fbc4fc6cd9225d285c89
          unclesHash=1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
          coinbase=4c5f4d519dff3c16f0d54b6866e256fbbbc1a600
          stateHash=69c21ff84a5af0b53b11c61110a16d6ad43dad37b3eb29ae8e88c936eb06456a
          txTrieHash=a77691cf47bec9021d3f027fc8ef2d51b758b600a79967154354b8e37108896f
          difficulty=3ff000
          number=1
          minGasPrice=10000000000000
          gasLimit=999023
          gasUsed=626
          timestamp=1401979976 (2014.06.05 15:52:56)
          extraData=null
          nonce=0000000000000000000000000000000000000000000000005d439960040e4505

        TransactionReceipt[
           TransactionData [ hash=1ee6fa3149a5e9c09b54009eb6e108aaa7ecd79483d57eedcf2dff93a1505588  nonce=null,
               gasPrice=09184e72a000, gas=03e8, receiveAddress=0000000000000000000000000000000000000000, value=03e8,
               data=60016000546006601160003960066000f261778e600054, signatureV=27,
               signatureR=2b379f22050e3554c3fa5423d9040bb28dcc7f905300db4e67c03bcf9b27003c,
               signatureS=59f47793e050974e6b5fca2848b19925637b883a012693b54d712f1c4f74def5
          ]
          , postTxState=7fa5bd00f6e03b5a5718560f1e25179b227167585a3c3da06a48f554365fb527
          , cumulativeGas=0272]
        ]

        +++  4c5f4d519dff3c16f0d54b6866e256fbbbc1a600:
        +++  77045e71a7a2c50903d88e564cd72fab11e82051: $[61,77,8e,60,0,54] ([])
         *   cd2a3d9f938e13cd947ec05abc7fe734df8dd826: #1 1606938044258990275541962092341162602522202987522792835300376 (-6260000000001000)
          */
    assertEquals(expected, trie.getHash());
}
Also used : Coin(co.rsk.core.Coin) BigInteger(java.math.BigInteger) Keccak256(co.rsk.crypto.Keccak256) Trie(co.rsk.trie.Trie) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 2 with Trie

use of co.rsk.trie.Trie in project rskj by rsksmart.

the class StateTest method testGenesisAccounts.

// TODO #POC9
@Ignore
@Test
public void testGenesisAccounts() {
    Trie trie = generateGenesisState();
    assertEquals(GENESIS_STATE_ROOT, trie.getHash());
}
Also used : Trie(co.rsk.trie.Trie) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 3 with Trie

use of co.rsk.trie.Trie in project rskj by rsksmart.

the class ContractDetailsImplTest method getStorageRoot.

@Test
public void getStorageRoot() {
    ContractDetailsImpl details = new ContractDetailsImpl(config);
    details.put(DataWord.ONE, new DataWord(42));
    details.put(DataWord.ZERO, new DataWord(1));
    Trie trie = details.getTrie();
    Assert.assertNotNull(trie.getHash().getBytes());
    Assert.assertArrayEquals(trie.getHash().getBytes(), details.getStorageHash());
}
Also used : DataWord(org.ethereum.vm.DataWord) TestUtils.randomDataWord(org.ethereum.TestUtils.randomDataWord) Trie(co.rsk.trie.Trie) Test(org.junit.Test)

Example 4 with Trie

use of co.rsk.trie.Trie in project rskj by rsksmart.

the class ContractDetailsImplTest method usingSameExternalStorage.

@Test
public void usingSameExternalStorage() {
    TrieStore store = new TrieStoreImpl(new HashMapDB());
    Trie trie = new TrieImpl(store, false);
    byte[] accountAddress = randomAddress();
    ContractDetailsImpl details = new ContractDetailsImpl(config, accountAddress, trie, null);
    int nkeys = IN_MEMORY_STORAGE_LIMIT;
    for (int k = 1; k <= nkeys + 1; k++) details.put(new DataWord(k), new DataWord(k * 2));
    Assert.assertTrue(details.hasExternalStorage());
    details.syncStorage();
    ContractDetailsImpl details1 = new ContractDetailsImpl(config, details.getEncoded());
    ContractDetailsImpl details2 = new ContractDetailsImpl(config, details.getEncoded());
    Assert.assertTrue(details1.hasExternalStorage());
    Assert.assertTrue(details2.hasExternalStorage());
    for (int k = 1; k <= nkeys + 1; k++) Assert.assertNotNull(details1.get(new DataWord(k)));
    for (int k = 1; k <= nkeys + 1; k++) Assert.assertNotNull(details2.get(new DataWord(k)));
    details1.syncStorage();
    details2.syncStorage();
}
Also used : TrieStoreImpl(co.rsk.trie.TrieStoreImpl) TrieImpl(co.rsk.trie.TrieImpl) DataWord(org.ethereum.vm.DataWord) TestUtils.randomDataWord(org.ethereum.TestUtils.randomDataWord) HashMapDB(org.ethereum.datasource.HashMapDB) TrieStore(co.rsk.trie.TrieStore) Trie(co.rsk.trie.Trie) Test(org.junit.Test)

Example 5 with Trie

use of co.rsk.trie.Trie in project rskj by rsksmart.

the class ContractDetailsImplTest method putNullValueAsDeleteValue.

@Test
public void putNullValueAsDeleteValue() {
    ContractDetailsImpl details = new ContractDetailsImpl(config);
    details.putBytes(DataWord.ONE, new byte[] { 0x01, 0x02, 0x03 });
    details.putBytes(DataWord.ONE, null);
    Trie trie = details.getTrie();
    byte[] value = trie.get(DataWord.ONE.getData());
    Assert.assertNull(value);
    Assert.assertEquals(0, details.getStorageSize());
}
Also used : Trie(co.rsk.trie.Trie) Test(org.junit.Test)

Aggregations

Trie (co.rsk.trie.Trie)29 Test (org.junit.Test)24 TrieImpl (co.rsk.trie.TrieImpl)22 DataWord (org.ethereum.vm.DataWord)8 TestUtils.randomDataWord (org.ethereum.TestUtils.randomDataWord)7 TrieStore (co.rsk.trie.TrieStore)4 TrieStoreImpl (co.rsk.trie.TrieStoreImpl)4 HashMapDB (org.ethereum.datasource.HashMapDB)4 Coin (co.rsk.core.Coin)2 Keccak256 (co.rsk.crypto.Keccak256)2 BigInteger (java.math.BigInteger)2 Ignore (org.junit.Ignore)2 RskSystemProperties (co.rsk.config.RskSystemProperties)1 RskAddress (co.rsk.core.RskAddress)1 RemascTransaction (co.rsk.remasc.RemascTransaction)1 Set (java.util.Set)1 ImmutableTransaction (org.ethereum.core.ImmutableTransaction)1 Transaction (org.ethereum.core.Transaction)1 JSONObject (org.json.simple.JSONObject)1 JSONParser (org.json.simple.parser.JSONParser)1