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());
}
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());
}
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());
}
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();
}
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());
}
Aggregations