some minor changes and fixes

This commit is contained in:
romanman 2014-06-07 18:04:06 +01:00
parent 90e7ab6a33
commit 8b545d6620
6 changed files with 68 additions and 12 deletions

View File

@ -1,12 +1,14 @@
package org.ethereum.manager; package org.ethereum.manager;
import org.ethereum.core.AccountState; import org.ethereum.core.AccountState;
import org.ethereum.core.Block;
import org.ethereum.core.Transaction; import org.ethereum.core.Transaction;
import org.ethereum.db.Database; import org.ethereum.db.Database;
import org.ethereum.trie.Trie; import org.ethereum.trie.Trie;
import org.ethereum.vm.Program;
import org.ethereum.vm.VM;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.spongycastle.util.Arrays;
import org.spongycastle.util.encoders.Hex; import org.spongycastle.util.encoders.Hex;
import java.math.BigInteger; import java.math.BigInteger;
@ -24,6 +26,7 @@ import java.util.Map;
public class WorldManager { public class WorldManager {
Logger logger = LoggerFactory.getLogger("main"); Logger logger = LoggerFactory.getLogger("main");
Logger stateLogger = LoggerFactory.getLogger("state");
public static WorldManager instance = new WorldManager(); public static WorldManager instance = new WorldManager();
@ -45,17 +48,17 @@ public class WorldManager {
byte[] senderAddress = tx.getSender(); byte[] senderAddress = tx.getSender();
byte[] stateData = allAccountsState.get(senderAddress); byte[] stateData = allAccountsState.get(senderAddress);
if (stateData == null) { if (stateData == null || stateData.length == 0) {
if (logger.isWarnEnabled()) if (stateLogger.isWarnEnabled())
logger.warn("No such address: {}", Hex.toHexString(senderAddress)); stateLogger.warn("No such address: {}", Hex.toHexString(senderAddress));
return; return;
} }
AccountState senderState = new AccountState(stateData); AccountState senderState = new AccountState(stateData);
if (senderState.getNonce().compareTo(new BigInteger(tx.getNonce())) != 0){ if (senderState.getNonce().compareTo(new BigInteger(tx.getNonce())) != 0){
if (logger.isWarnEnabled()) if (stateLogger.isWarnEnabled())
logger.warn("Invalid nonce account.nonce={} tx.nonce={}", stateLogger.warn("Invalid nonce account.nonce={} tx.nonce={}",
senderState.getNonce(), senderState.getNonce(),
new BigInteger(tx.getNonce())); new BigInteger(tx.getNonce()));
return; return;
@ -67,6 +70,9 @@ public class WorldManager {
// todo 0. run the init method // todo 0. run the init method
VM vm = new VM();
Program program = new Program(null, null);
} else{ } else{
@ -74,12 +80,15 @@ public class WorldManager {
byte[] accountData = this.allAccountsState.get(tx.getReceiveAddress()); byte[] accountData = this.allAccountsState.get(tx.getReceiveAddress());
if (accountData.length == 0){ if (accountData.length == 0){
if (logger.isInfoEnabled())
logger.info("New account created address={}",
Hex.toHexString(tx.getReceiveAddress()));
recieverState = new AccountState(tx.getKey()); recieverState = new AccountState(tx.getKey());
if (stateLogger.isInfoEnabled())
stateLogger.info("New account created address={}",
Hex.toHexString(tx.getReceiveAddress()));
} else { } else {
recieverState = new AccountState(accountData); recieverState = new AccountState(accountData);
if (stateLogger.isInfoEnabled())
stateLogger.info("Account updated address={}",
Hex.toHexString(tx.getReceiveAddress()));
} }
// APPLY THE BALANCE VALUE // APPLY THE BALANCE VALUE
@ -108,8 +117,16 @@ public class WorldManager {
} }
} }
public void applyBlock(){ public void applyBlock(Block block){
List<Transaction> txList = block.getTransactionsList();
applyTransactionList(txList);
}
public void applyBlockList(List<Block> blocks){
for (int i = blocks.size() - 1; i >= 0 ; --i){
applyBlock(blocks.get(i));
}
} }

View File

@ -256,6 +256,8 @@ public class EthereumProtocolHandler extends ChannelInboundHandlerAdapter {
} }
MainData.instance.getBlockchain().addBlocks(blockList); MainData.instance.getBlockchain().addBlocks(blockList);
WorldManager.instance.applyBlockList(blockList);
logger.info(blocksMessage.toString()); logger.info(blocksMessage.toString());
if (peerListener != null) peerListener.console(blocksMessage.toString()); if (peerListener != null) peerListener.console(blocksMessage.toString());
} }

View File

@ -0,0 +1,27 @@
package org.ethereum.vm;
import java.nio.ByteBuffer;
/**
* www.ethereumJ.com
* User: Roman Mandeleil
* Created on: 07/06/2014 17:45
*/
public class ProgramResult {
private int gasUsed = 0;
private ByteBuffer hReturn = null;
public void spendGas(int gas){
gasUsed += gas;
}
public void setHReturn(byte[] hReturn){
this.hReturn = ByteBuffer.allocate(hReturn.length);
this.hReturn.put(hReturn);
}
}

View File

@ -583,4 +583,11 @@ public class VM {
} }
public void play(Program program){
while(!program.isStopped())
this.step(program);
}
} }

View File

@ -8,7 +8,10 @@ log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d{HH:mm:ss} [%c{1}] %m%n log4j.appender.stdout.layout.ConversionPattern= %d{HH:mm:ss} [%c{1}] %m%n
# filter noisy classes # filter noisy classes
log4j.logger.org.ethereum.net = FATAL
log4j.logger.org.ethereum.net.peerdiscovery = WARN log4j.logger.org.ethereum.net.peerdiscovery = WARN
log4j.logger.java.nio = WARN log4j.logger.java.nio = WARN
log4j.logger.io.netty = FATAL log4j.logger.io.netty = FATAL
log4j.logger.org.ethereum.vm = DEBUG log4j.logger.org.ethereum.vm = DEBUG
log4j.logger.org.ethereum.core = FATAL
log4j.logger.wire = FATAL