some minor changes and fixes
This commit is contained in:
parent
90e7ab6a33
commit
8b545d6620
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -583,4 +583,11 @@ public class VM {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void play(Program program){
|
||||||
|
while(!program.isStopped())
|
||||||
|
this.step(program);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue