From 779eddd9f9a1fec8590bff15d101a9786be7640d Mon Sep 17 00:00:00 2001 From: Adrian Tiberius Date: Wed, 27 May 2015 20:05:59 +0200 Subject: [PATCH] More cleaning. Started implementing BlockStore for android. --- app/build.gradle | 4 - .../ApplicationTest.java | 2 +- app/src/main/AndroidManifest.xml | 9 +- .../AccountsDataAdapter.java | 2 +- .../DataClass.java | 2 +- .../ethereum/android/EthereumApplication.java | 13 ++ .../EthereumApplication.java~} | 5 +- .../EthereumManager.java | 9 +- .../MainActivity.java | 22 +- .../MyService.java | 2 +- .../NavigationDrawerAdapter.java | 2 +- .../NavigationDrawerCallbacks.java | 2 +- .../NavigationDrawerFragment.java | 2 +- .../NavigationItem.java | 2 +- .../android/datasource/LevelDbDataSource.java | 9 +- .../android/db/BlockDatabaseHelper.java | 84 ++++++++ .../ethereum/android/db/BlockStoreImpl.java | 94 +++++++++ .../android/db/TransactionDatabaseHelper.java | 84 ++++++++ .../di/PerActivity.java | 2 +- .../di/components/EthereumComponent.java | 18 ++ .../android/di/modules/EthereumModule.java | 170 ++++++++++++++++ .../di/components/ActivityComponent.java | 15 -- .../di/components/ApplicationComponent.java | 19 -- .../EthereumApplicationComponent.java | 10 - .../di/modules/ActivityModule.java | 30 --- .../di/modules/ApplicationModule.java | 29 --- app/src/main/res/layout/activity_main.xml | 2 +- ethereumj-core/build.gradle | 12 +- .../java/org/ethereum/db/BlockStoreImpl.java | 19 +- .../org/ethereum/db/BlockStoreImpl.javazz | 192 ------------------ .../di/components/EthereumComponent.java | 5 - .../ethereum/di/modules/EthereumModule.java | 19 +- .../org/ethereum/facade/CommonConfig.java | 39 ++-- .../org/ethereum/facade/DefaultConfig.java | 35 ++-- .../org/ethereum/facade/EthereumFactory.java | 15 +- .../org/ethereum/facade/RemoteConfig.java | 29 ++- .../java/org/ethereum/net/p2p/P2pHandler.java | 11 + .../java/org/ethereum/net/shh/ShhHandler.java | 7 + .../src/main/resources/system.properties | 12 +- 39 files changed, 590 insertions(+), 449 deletions(-) rename app/src/androidTest/java/org/ethereum/{ethereum_android => android}/ApplicationTest.java (88%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/AccountsDataAdapter.java (97%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/DataClass.java (82%) create mode 100644 app/src/main/java/org/ethereum/android/EthereumApplication.java rename app/src/main/java/org/ethereum/{ethereum_android/EthereumApplication.java => android/EthereumApplication.java~} (95%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/EthereumManager.java (94%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/MainActivity.java (88%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/MyService.java (90%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/NavigationDrawerAdapter.java (98%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/NavigationDrawerCallbacks.java (72%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/NavigationDrawerFragment.java (99%) rename app/src/main/java/org/ethereum/{ethereum_android => android}/NavigationItem.java (93%) rename ethereumj-core/src/main/java/org/ethereum/datasource/AndroidLevelDbDataSource.java => app/src/main/java/org/ethereum/android/datasource/LevelDbDataSource.java (93%) create mode 100644 app/src/main/java/org/ethereum/android/db/BlockDatabaseHelper.java create mode 100644 app/src/main/java/org/ethereum/android/db/BlockStoreImpl.java create mode 100644 app/src/main/java/org/ethereum/android/db/TransactionDatabaseHelper.java rename app/src/main/java/org/ethereum/{ethereum_android => android}/di/PerActivity.java (67%) create mode 100644 app/src/main/java/org/ethereum/android/di/components/EthereumComponent.java create mode 100644 app/src/main/java/org/ethereum/android/di/modules/EthereumModule.java delete mode 100644 app/src/main/java/org/ethereum/ethereum_android/di/components/ActivityComponent.java delete mode 100644 app/src/main/java/org/ethereum/ethereum_android/di/components/ApplicationComponent.java delete mode 100644 app/src/main/java/org/ethereum/ethereum_android/di/components/EthereumApplicationComponent.java delete mode 100644 app/src/main/java/org/ethereum/ethereum_android/di/modules/ActivityModule.java delete mode 100644 app/src/main/java/org/ethereum/ethereum_android/di/modules/ApplicationModule.java delete mode 100644 ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.javazz diff --git a/app/build.gradle b/app/build.gradle index 471bf3bb..14e1efaa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -67,10 +67,6 @@ dependencies { provided 'org.glassfish:javax.annotation:10.0-b28' compile project(':ethereumj-core') compile fileTree(include: ['*.jar'], dir: '../libraries') - //compile 'com.android.support:appcompat-v7:21.0.3' - //compile files('./libs/robospring-1.0.7.jar') - //compile 'com.litl:android-leveldb:1.0.3@aar' - //compile "org.slf4j:slf4j-android:1.6.1-RC1" compile 'com.android.support:support-v4:22.1.1' compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.android.support:recyclerview-v7:22.1.1' diff --git a/app/src/androidTest/java/org/ethereum/ethereum_android/ApplicationTest.java b/app/src/androidTest/java/org/ethereum/android/ApplicationTest.java similarity index 88% rename from app/src/androidTest/java/org/ethereum/ethereum_android/ApplicationTest.java rename to app/src/androidTest/java/org/ethereum/android/ApplicationTest.java index 671be0b9..fcbb3ddb 100644 --- a/app/src/androidTest/java/org/ethereum/ethereum_android/ApplicationTest.java +++ b/app/src/androidTest/java/org/ethereum/android/ApplicationTest.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import android.app.Application; import android.test.ApplicationTestCase; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c8ac0552..36c9716e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,18 +1,17 @@ + package="org.ethereum.android" > - @@ -22,7 +21,7 @@ diff --git a/app/src/main/java/org/ethereum/ethereum_android/AccountsDataAdapter.java b/app/src/main/java/org/ethereum/android/AccountsDataAdapter.java similarity index 97% rename from app/src/main/java/org/ethereum/ethereum_android/AccountsDataAdapter.java rename to app/src/main/java/org/ethereum/android/AccountsDataAdapter.java index 1449265b..0812f7f7 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/AccountsDataAdapter.java +++ b/app/src/main/java/org/ethereum/android/AccountsDataAdapter.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import org.ethereum.core.AccountState; import org.ethereum.core.Denomination; diff --git a/app/src/main/java/org/ethereum/ethereum_android/DataClass.java b/app/src/main/java/org/ethereum/android/DataClass.java similarity index 82% rename from app/src/main/java/org/ethereum/ethereum_android/DataClass.java rename to app/src/main/java/org/ethereum/android/DataClass.java index 36a9e02c..3a5af4b0 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/DataClass.java +++ b/app/src/main/java/org/ethereum/android/DataClass.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import org.ethereum.core.AccountState; diff --git a/app/src/main/java/org/ethereum/android/EthereumApplication.java b/app/src/main/java/org/ethereum/android/EthereumApplication.java new file mode 100644 index 00000000..52566eff --- /dev/null +++ b/app/src/main/java/org/ethereum/android/EthereumApplication.java @@ -0,0 +1,13 @@ +package org.ethereum.android; + + +import android.support.multidex.MultiDexApplication; + +public class EthereumApplication extends MultiDexApplication { + + @Override public void onCreate() { + super.onCreate(); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/ethereum/ethereum_android/EthereumApplication.java b/app/src/main/java/org/ethereum/android/EthereumApplication.java~ similarity index 95% rename from app/src/main/java/org/ethereum/ethereum_android/EthereumApplication.java rename to app/src/main/java/org/ethereum/android/EthereumApplication.java~ index 579ae80b..c98e9911 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/EthereumApplication.java +++ b/app/src/main/java/org/ethereum/android/EthereumApplication.java~ @@ -11,6 +11,9 @@ import org.ethereum.ethereum_android.di.components.ApplicationComponent; import org.ethereum.ethereum_android.di.components.DaggerApplicationComponent; import org.ethereum.ethereum_android.di.modules.ApplicationModule; +/** + * Created by userica on 20.05.2015. + */ public class EthereumApplication extends MultiDexApplication { private ApplicationComponent applicationComponent = null; @@ -32,4 +35,4 @@ public class EthereumApplication extends MultiDexApplication { return applicationComponent; } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/ethereum/ethereum_android/EthereumManager.java b/app/src/main/java/org/ethereum/android/EthereumManager.java similarity index 94% rename from app/src/main/java/org/ethereum/ethereum_android/EthereumManager.java rename to app/src/main/java/org/ethereum/android/EthereumManager.java index 9905630a..505a51c6 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/EthereumManager.java +++ b/app/src/main/java/org/ethereum/android/EthereumManager.java @@ -1,8 +1,5 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; -import android.content.Context; - -import org.ethereum.EthereumFactory; import org.ethereum.config.SystemProperties; import org.ethereum.core.AccountState; import org.ethereum.facade.Ethereum; @@ -30,6 +27,10 @@ public class EthereumManager { this.addListener(); } + public void start() { + + } + public void connect() { ethereum.connect(SystemProperties.CONFIG.activePeerIP(), diff --git a/app/src/main/java/org/ethereum/ethereum_android/MainActivity.java b/app/src/main/java/org/ethereum/android/MainActivity.java similarity index 88% rename from app/src/main/java/org/ethereum/ethereum_android/MainActivity.java rename to app/src/main/java/org/ethereum/android/MainActivity.java index 44df2ac2..1baad5aa 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/MainActivity.java +++ b/app/src/main/java/org/ethereum/android/MainActivity.java @@ -1,7 +1,6 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import android.os.AsyncTask; -import android.os.StrictMode; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; @@ -16,20 +15,13 @@ import android.widget.TextView; import android.view.View.OnClickListener; import android.widget.Toast; -//import org.springframework.context.ApplicationContext; -import org.ethereum.di.components.DaggerEthereumComponent; -import org.ethereum.di.components.EthereumComponent; -import org.ethereum.di.modules.EthereumModule; -import org.ethereum.ethereum_android.di.components.ApplicationComponent; -import org.ethereum.ethereum_android.di.modules.ActivityModule; +import org.ethereum.android.di.components.DaggerEthereumComponent; +import org.ethereum.android.di.modules.EthereumModule; import org.ethereum.facade.Ethereum; -import javax.inject.Inject; - public class MainActivity extends ActionBarActivity implements OnClickListener, NavigationDrawerCallbacks { -// public static ApplicationContext context = null; private static final String TAG = "MyActivity"; private static Integer quit = 0; private TextView text1; @@ -97,14 +89,6 @@ public class MainActivity extends ActionBarActivity implements OnClickListener, t.start(); } - protected ApplicationComponent getApplicationComponent() { - return ((EthereumApplication)getApplication()).getApplicationComponent(); - } - - protected ActivityModule getActivityModule() { - return new ActivityModule(this); - } - public void onClick(View v) { switch (v.getId()) { /* diff --git a/app/src/main/java/org/ethereum/ethereum_android/MyService.java b/app/src/main/java/org/ethereum/android/MyService.java similarity index 90% rename from app/src/main/java/org/ethereum/ethereum_android/MyService.java rename to app/src/main/java/org/ethereum/android/MyService.java index 0eb192b1..58ef2ebb 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/MyService.java +++ b/app/src/main/java/org/ethereum/android/MyService.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import android.app.Service; import android.content.Intent; diff --git a/app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerAdapter.java b/app/src/main/java/org/ethereum/android/NavigationDrawerAdapter.java similarity index 98% rename from app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerAdapter.java rename to app/src/main/java/org/ethereum/android/NavigationDrawerAdapter.java index aa884291..86e1aecf 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerAdapter.java +++ b/app/src/main/java/org/ethereum/android/NavigationDrawerAdapter.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import android.support.v7.widget.RecyclerView; diff --git a/app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerCallbacks.java b/app/src/main/java/org/ethereum/android/NavigationDrawerCallbacks.java similarity index 72% rename from app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerCallbacks.java rename to app/src/main/java/org/ethereum/android/NavigationDrawerCallbacks.java index 6f7b0825..9a1ac98e 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerCallbacks.java +++ b/app/src/main/java/org/ethereum/android/NavigationDrawerCallbacks.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; public interface NavigationDrawerCallbacks { void onNavigationDrawerItemSelected(int position); diff --git a/app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerFragment.java b/app/src/main/java/org/ethereum/android/NavigationDrawerFragment.java similarity index 99% rename from app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerFragment.java rename to app/src/main/java/org/ethereum/android/NavigationDrawerFragment.java index d83507c8..f8ef8913 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/NavigationDrawerFragment.java +++ b/app/src/main/java/org/ethereum/android/NavigationDrawerFragment.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import android.app.Activity; import android.app.Fragment; diff --git a/app/src/main/java/org/ethereum/ethereum_android/NavigationItem.java b/app/src/main/java/org/ethereum/android/NavigationItem.java similarity index 93% rename from app/src/main/java/org/ethereum/ethereum_android/NavigationItem.java rename to app/src/main/java/org/ethereum/android/NavigationItem.java index fe800417..2dab9f26 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/NavigationItem.java +++ b/app/src/main/java/org/ethereum/android/NavigationItem.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android; +package org.ethereum.android; import android.graphics.drawable.Drawable; diff --git a/ethereumj-core/src/main/java/org/ethereum/datasource/AndroidLevelDbDataSource.java b/app/src/main/java/org/ethereum/android/datasource/LevelDbDataSource.java similarity index 93% rename from ethereumj-core/src/main/java/org/ethereum/datasource/AndroidLevelDbDataSource.java rename to app/src/main/java/org/ethereum/android/datasource/LevelDbDataSource.java index 9d146eea..5d75a22c 100644 --- a/ethereumj-core/src/main/java/org/ethereum/datasource/AndroidLevelDbDataSource.java +++ b/app/src/main/java/org/ethereum/android/datasource/LevelDbDataSource.java @@ -1,7 +1,8 @@ -package org.ethereum.datasource; +package org.ethereum.android.datasource; import org.ethereum.config.SystemProperties; +import org.ethereum.datasource.KeyValueDataSource; import org.iq80.leveldb.CompressionType; import org.iq80.leveldb.DB; import org.iq80.leveldb.DBIterator; @@ -25,7 +26,7 @@ import android.content.Context; * @author Roman Mandeleil * @since 18.01.2015 */ -public class AndroidLevelDbDataSource implements KeyValueDataSource { +public class LevelDbDataSource implements KeyValueDataSource { private static final Logger logger = LoggerFactory.getLogger("db"); @@ -33,10 +34,10 @@ public class AndroidLevelDbDataSource implements KeyValueDataSource { private DB db; private Context context; - public AndroidLevelDbDataSource() { + public LevelDbDataSource() { } - public AndroidLevelDbDataSource(String name) { + public LevelDbDataSource(String name) { this.name = name; } diff --git a/app/src/main/java/org/ethereum/android/db/BlockDatabaseHelper.java b/app/src/main/java/org/ethereum/android/db/BlockDatabaseHelper.java new file mode 100644 index 00000000..45aa8c3b --- /dev/null +++ b/app/src/main/java/org/ethereum/android/db/BlockDatabaseHelper.java @@ -0,0 +1,84 @@ +package org.ethereum.android.db; + + +import java.sql.SQLException; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.support.ConnectionSource; +import com.j256.ormlite.table.TableUtils; + +import org.ethereum.db.BlockVO; + +/** + * Database helper class used to manage the creation and upgrading of your database. This class also usually provides + * the DAOs used by the other classes. + */ +public class BlockDatabaseHelper extends OrmLiteSqliteOpenHelper { + + private static final String DATABASE_NAME = "blocks.db"; + private static final int DATABASE_VERSION = 1; + + // the DAO object we use to access the SimpleData table + private Dao blockDao = null; + + public BlockDatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + /** + * This is called when the database is first created. Usually you should call createTable statements here to create + * the tables that will store your data. + */ + @Override + public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { + try { + Log.i(BlockDatabaseHelper.class.getName(), "onCreate"); + TableUtils.createTable(connectionSource, BlockVO.class); + } catch (SQLException e) { + Log.e(BlockDatabaseHelper.class.getName(), "Can't create database", e); + throw new RuntimeException(e); + } + } + + /** + * This is called when your application is upgraded and it has a higher version number. This allows you to adjust + * the various data to match the new version number. + */ + @Override + public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { + try { + Log.i(BlockDatabaseHelper.class.getName(), "onUpgrade"); + TableUtils.dropTable(connectionSource, BlockVO.class, true); + // after we drop the old databases, we create the new ones + onCreate(db, connectionSource); + } catch (SQLException e) { + Log.e(BlockDatabaseHelper.class.getName(), "Can't drop databases", e); + throw new RuntimeException(e); + } + } + + /** + * Returns the Database Access Object (DAO) for our SimpleData class. It will create it or just give the cached + * value. + */ + public Dao getBlockDao() throws SQLException { + if (blockDao == null) { + blockDao = getDao(BlockVO.class); + } + return blockDao; + } + + /** + * Close the database connections and clear any cached DAOs. + */ + @Override + public void close() { + super.close(); + blockDao = null; + } +} diff --git a/app/src/main/java/org/ethereum/android/db/BlockStoreImpl.java b/app/src/main/java/org/ethereum/android/db/BlockStoreImpl.java new file mode 100644 index 00000000..ed9d9818 --- /dev/null +++ b/app/src/main/java/org/ethereum/android/db/BlockStoreImpl.java @@ -0,0 +1,94 @@ +package org.ethereum.android.db; + +import org.ethereum.core.Block; +import org.ethereum.core.TransactionReceipt; +import org.ethereum.db.BlockStore; +import org.ethereum.db.BlockVO; +import org.ethereum.util.ByteUtil; + +import java.math.BigInteger; +import java.util.List; + +public class BlockStoreImpl implements BlockStore { + + private BlockDatabaseHelper blockDao; + private TransactionDatabaseHelper transactionDao; + + public BlockStoreImpl(BlockDatabaseHelper blockDao, TransactionDatabaseHelper transactionDao) { + + this.blockDao = blockDao; + this.transactionDao = transactionDao; + } + + public byte[] getBlockHashByNumber(long blockNumber) { + + Block block = getBlockByNumber(blockNumber); + if (block != null) return block.getHash(); + return ByteUtil.EMPTY_BYTE_ARRAY; + } + + + public Block getBlockByNumber(long blockNumber) { + + /* + List result = sessionFactory.getCurrentSession(). + createQuery("from BlockVO where number = :number"). + setParameter("number", blockNumber).list(); + + if (result.size() == 0) return null; + BlockVO vo = (BlockVO) result.get(0); + + return new Block(vo.rlp); + */ + return null; + } + + public Block getBlockByHash(byte[] hash) { + + return null; + } + + @SuppressWarnings("unchecked") + public List getListOfHashesStartFrom(byte[] hash, int qty) { + + return null; + } + + public void deleteBlocksSince(long number) { + + } + + public void saveBlock(Block block, List receipts) { + + } + + public BigInteger getTotalDifficultySince(long number) { + + return null; + } + + public BigInteger getTotalDifficulty() { + + return null; + } + + public Block getBestBlock() { + + return null; + } + + @SuppressWarnings("unchecked") + public List getAllBlocks() { + + return null; + } + + public void reset() { + + } + + public TransactionReceipt getTransactionReceiptByHash(byte[] hash) { + + return null; + } +} diff --git a/app/src/main/java/org/ethereum/android/db/TransactionDatabaseHelper.java b/app/src/main/java/org/ethereum/android/db/TransactionDatabaseHelper.java new file mode 100644 index 00000000..ae68de70 --- /dev/null +++ b/app/src/main/java/org/ethereum/android/db/TransactionDatabaseHelper.java @@ -0,0 +1,84 @@ +package org.ethereum.android.db; + + +import java.sql.SQLException; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.support.ConnectionSource; +import com.j256.ormlite.table.TableUtils; + +import org.ethereum.db.TransactionReceiptVO; + +/** + * Database helper class used to manage the creation and upgrading of your database. This class also usually provides + * the DAOs used by the other classes. + */ +public class TransactionDatabaseHelper extends OrmLiteSqliteOpenHelper { + + private static final String DATABASE_NAME = "transactions.db"; + private static final int DATABASE_VERSION = 1; + + // the DAO object we use to access the SimpleData table + private Dao dao = null; + + public TransactionDatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + /** + * This is called when the database is first created. Usually you should call createTable statements here to create + * the tables that will store your data. + */ + @Override + public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { + try { + Log.i(BlockDatabaseHelper.class.getName(), "onCreate"); + TableUtils.createTable(connectionSource, TransactionReceiptVO.class); + } catch (SQLException e) { + Log.e(BlockDatabaseHelper.class.getName(), "Can't create database", e); + throw new RuntimeException(e); + } + } + + /** + * This is called when your application is upgraded and it has a higher version number. This allows you to adjust + * the various data to match the new version number. + */ + @Override + public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { + try { + Log.i(BlockDatabaseHelper.class.getName(), "onUpgrade"); + TableUtils.dropTable(connectionSource, TransactionReceiptVO.class, true); + // after we drop the old databases, we create the new ones + onCreate(db, connectionSource); + } catch (SQLException e) { + Log.e(BlockDatabaseHelper.class.getName(), "Can't drop databases", e); + throw new RuntimeException(e); + } + } + + /** + * Returns the Database Access Object (DAO) for our SimpleData class. It will create it or just give the cached + * value. + */ + public Dao getBlockDao() throws SQLException { + if (dao == null) { + dao = getDao(TransactionReceiptVO.class); + } + return dao; + } + + /** + * Close the database connections and clear any cached DAOs. + */ + @Override + public void close() { + super.close(); + dao = null; + } +} diff --git a/app/src/main/java/org/ethereum/ethereum_android/di/PerActivity.java b/app/src/main/java/org/ethereum/android/di/PerActivity.java similarity index 67% rename from app/src/main/java/org/ethereum/ethereum_android/di/PerActivity.java rename to app/src/main/java/org/ethereum/android/di/PerActivity.java index 3411639a..baab7f77 100644 --- a/app/src/main/java/org/ethereum/ethereum_android/di/PerActivity.java +++ b/app/src/main/java/org/ethereum/android/di/PerActivity.java @@ -1,4 +1,4 @@ -package org.ethereum.ethereum_android.di; +package org.ethereum.android.di; import java.lang.annotation.Retention; diff --git a/app/src/main/java/org/ethereum/android/di/components/EthereumComponent.java b/app/src/main/java/org/ethereum/android/di/components/EthereumComponent.java new file mode 100644 index 00000000..c6e0a280 --- /dev/null +++ b/app/src/main/java/org/ethereum/android/di/components/EthereumComponent.java @@ -0,0 +1,18 @@ +package org.ethereum.android.di.components; + +import android.content.Context; + +import org.ethereum.android.di.modules.EthereumModule; +import org.ethereum.facade.Ethereum; + +import javax.inject.Singleton; + +import dagger.Component; + +@Singleton +@Component(modules = EthereumModule.class) +public interface EthereumComponent { + + Context context(); + Ethereum ethereum(); +} diff --git a/app/src/main/java/org/ethereum/android/di/modules/EthereumModule.java b/app/src/main/java/org/ethereum/android/di/modules/EthereumModule.java new file mode 100644 index 00000000..793f0abd --- /dev/null +++ b/app/src/main/java/org/ethereum/android/di/modules/EthereumModule.java @@ -0,0 +1,170 @@ +package org.ethereum.android.di.modules; + +import android.content.Context; + +import org.ethereum.android.datasource.LevelDbDataSource; +import org.ethereum.config.SystemProperties; +import org.ethereum.core.BlockchainImpl; +import org.ethereum.core.Wallet; +import org.ethereum.db.BlockStore; +import org.ethereum.db.InMemoryBlockStore; +import org.ethereum.db.RepositoryImpl; +import org.ethereum.facade.Blockchain; +import org.ethereum.facade.Ethereum; +import org.ethereum.facade.EthereumImpl; +import org.ethereum.facade.Repository; +import org.ethereum.listener.CompositeEthereumListener; +import org.ethereum.listener.EthereumListener; +import org.ethereum.manager.AdminInfo; +import org.ethereum.manager.BlockLoader; +import org.ethereum.manager.WorldManager; +import org.ethereum.net.MessageQueue; +import org.ethereum.net.client.PeerClient; +import org.ethereum.net.eth.EthHandler; +import org.ethereum.net.p2p.P2pHandler; +import org.ethereum.net.peerdiscovery.DiscoveryChannel; +import org.ethereum.net.peerdiscovery.PeerDiscovery; +import org.ethereum.net.peerdiscovery.WorkerThread; +import org.ethereum.net.server.ChannelManager; +import org.ethereum.net.server.EthereumChannelInitializer; +import org.ethereum.net.shh.ShhHandler; +import org.ethereum.net.wire.MessageCodec; +import org.ethereum.vm.ProgramInvokeFactory; +import org.ethereum.vm.ProgramInvokeFactoryImpl; + +import javax.inject.Provider; +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +@Module +public class EthereumModule { + + private Context context; + + public EthereumModule(Context context) { + this.context = context; + } + + @Provides + @Singleton + Ethereum provideEthereum(WorldManager worldManager, AdminInfo adminInfo, ChannelManager channelManager, + BlockLoader blockLoader, Provider peerClientProvider, EthereumListener listener) { + return new EthereumImpl(worldManager, adminInfo, channelManager, blockLoader, peerClientProvider, listener); + } + + @Provides + @Singleton + WorldManager provideWorldManager(Blockchain blockchain, Repository repository, Wallet wallet, PeerDiscovery peerDiscovery + ,BlockStore blockStore, ChannelManager channelManager, AdminInfo adminInfo, EthereumListener listener) { + return new WorldManager(blockchain, repository, wallet, peerDiscovery, blockStore, channelManager, adminInfo, listener); + } + + @Provides + @Singleton + Blockchain provideBlockchain(BlockStore blockStore, Repository repository, + Wallet wallet, AdminInfo adminInfo, + EthereumListener listener, ChannelManager channelManager) { + return new BlockchainImpl(blockStore, repository, wallet, adminInfo, listener, channelManager); + } + + @Provides + @Singleton + BlockStore provideBlockStore() { + return new InMemoryBlockStore(); + } + + @Provides + @Singleton + Repository provideRepository() { + LevelDbDataSource detailsDS = new LevelDbDataSource(); + detailsDS.setContext(context); + LevelDbDataSource stateDS = new LevelDbDataSource(); + stateDS.setContext(context); + return new RepositoryImpl(detailsDS, stateDS); + } + + @Provides + @Singleton + AdminInfo provideAdminInfo() { + return new AdminInfo(); + } + + @Provides + @Singleton + EthereumListener provideEthereumListener() { + return new CompositeEthereumListener(); + } + + @Provides + @Singleton + PeerDiscovery providePeerDiscovery() { + return new PeerDiscovery(); + } + + @Provides + @Singleton + ChannelManager provideChannelManager(EthereumListener listener) { + return new ChannelManager(listener); + } + + @Provides + @Singleton + BlockLoader provideBlockLoader(Blockchain blockchain) { + return new BlockLoader(blockchain); + } + + @Provides + @Singleton + ProgramInvokeFactory provideProgramInvokeFactory() { + return new ProgramInvokeFactoryImpl(); + } + + @Provides + EthHandler provideEthHandler(Blockchain blockchain, EthereumListener listener, Wallet wallet) { + return new EthHandler(blockchain, listener, wallet); + } + + @Provides + ShhHandler provideShhHandler(EthereumListener listener) { + return new ShhHandler(listener); + } + + @Provides + P2pHandler provideP2pHandler(PeerDiscovery peerDiscovery, EthereumListener listener) { + return new P2pHandler(peerDiscovery, listener); + } + + @Provides + MessageCodec provideMessageCodec(EthereumListener listener) { + return new MessageCodec(listener); + } + + @Provides + PeerClient providePeerClient(EthereumListener listener, ChannelManager channelManager, + Provider ethereumChannelInitializerProvider) { + return new PeerClient(listener, channelManager, ethereumChannelInitializerProvider); + } + + @Provides + MessageQueue provideMessageQueue(EthereumListener listener) { + return new MessageQueue(listener); + } + + @Provides + WorkerThread provideWorkerThread(Provider discoveryChannelProvider) { + return new WorkerThread(discoveryChannelProvider); + } + + @Provides + String provideRemoteId() { + return SystemProperties.CONFIG.activePeerNodeid(); + } + + @Provides + @Singleton + Context provideContext() { + return context; + } +} diff --git a/app/src/main/java/org/ethereum/ethereum_android/di/components/ActivityComponent.java b/app/src/main/java/org/ethereum/ethereum_android/di/components/ActivityComponent.java deleted file mode 100644 index 110fa375..00000000 --- a/app/src/main/java/org/ethereum/ethereum_android/di/components/ActivityComponent.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ethereum.ethereum_android.di.components; - -import android.app.Activity; - -import dagger.Component; - -import org.ethereum.ethereum_android.di.PerActivity; -import org.ethereum.ethereum_android.di.modules.ActivityModule; - -@PerActivity -@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class) -public interface ActivityComponent { - - Activity activity(); -} \ No newline at end of file diff --git a/app/src/main/java/org/ethereum/ethereum_android/di/components/ApplicationComponent.java b/app/src/main/java/org/ethereum/ethereum_android/di/components/ApplicationComponent.java deleted file mode 100644 index b695bf1d..00000000 --- a/app/src/main/java/org/ethereum/ethereum_android/di/components/ApplicationComponent.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ethereum.ethereum_android.di.components; - -import android.content.Context; - -import org.ethereum.ethereum_android.MainActivity; -import org.ethereum.ethereum_android.di.modules.ApplicationModule; -import org.ethereum.facade.Ethereum; - -import dagger.Component; -import javax.inject.Singleton; - -@Singleton // Constraints this component to one-per-application or unscoped bindings. -@Component(modules = ApplicationModule.class) -public interface ApplicationComponent { - void inject(MainActivity mainActivity); - - //Exposed to sub-graphs. - Context context(); -} \ No newline at end of file diff --git a/app/src/main/java/org/ethereum/ethereum_android/di/components/EthereumApplicationComponent.java b/app/src/main/java/org/ethereum/ethereum_android/di/components/EthereumApplicationComponent.java deleted file mode 100644 index e85b9605..00000000 --- a/app/src/main/java/org/ethereum/ethereum_android/di/components/EthereumApplicationComponent.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.ethereum.ethereum_android.di.components; - -import android.content.Context; - -import org.ethereum.di.components.EthereumComponent; - -public interface EthereumApplicationComponent extends EthereumComponent { - - Context context(); -} \ No newline at end of file diff --git a/app/src/main/java/org/ethereum/ethereum_android/di/modules/ActivityModule.java b/app/src/main/java/org/ethereum/ethereum_android/di/modules/ActivityModule.java deleted file mode 100644 index fe9cb9d3..00000000 --- a/app/src/main/java/org/ethereum/ethereum_android/di/modules/ActivityModule.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.ethereum.ethereum_android.di.modules; - -import android.app.Activity; - -import org.ethereum.ethereum_android.di.PerActivity; -import org.ethereum.facade.Ethereum; -import org.ethereum.facade.EthereumImpl; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -@Module -public class ActivityModule { - - private final Activity activity; - - public ActivityModule(Activity activity) { - this.activity = activity; - } - - @Provides - @PerActivity - Activity activity() { - return this.activity; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/org/ethereum/ethereum_android/di/modules/ApplicationModule.java b/app/src/main/java/org/ethereum/ethereum_android/di/modules/ApplicationModule.java deleted file mode 100644 index 279c5bda..00000000 --- a/app/src/main/java/org/ethereum/ethereum_android/di/modules/ApplicationModule.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.ethereum.ethereum_android.di.modules; - -import android.content.Context; - -import org.ethereum.ethereum_android.EthereumApplication; -import org.ethereum.facade.Ethereum; -import org.ethereum.facade.EthereumImpl; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -@Module -public class ApplicationModule { - - private final EthereumApplication application; - - public ApplicationModule(EthereumApplication application) { - this.application = application; - } - - @Provides @Singleton - Context provideApplicationContext() { - return this.application; - } - - -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c39fd254..9aea1e25 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -16,7 +16,7 @@ diff --git a/ethereumj-core/build.gradle b/ethereumj-core/build.gradle index 2d4e122d..6170fb04 100644 --- a/ethereumj-core/build.gradle +++ b/ethereumj-core/build.gradle @@ -51,7 +51,14 @@ android { sourceSets { main { java { + exclude '**/BlockStoreImpl.java' + exclude '**/CommonConfig.java' + exclude '**/DefaultConfig.java' + exclude '**/RemoteConfig.java' + exclude '**/EthereumFactory.java' + exclude '**/Start.java' srcDirs += generatedSrcDir + } } } @@ -74,7 +81,7 @@ ext { leveldbVersion = '0.7' scastleVersion = '1.51.0.0' log4jVersion = '1.2.17' - hibernateVersion = '4.3.7.Final' + hibernateVersion = '4.3.10.Final' junitVersion = '4.11' } @@ -88,7 +95,7 @@ dependencies { exclude group: 'commons-logging', module: 'commons-logging' } - compile('io.netty:netty-all:4.1.0.Beta5') { + compile('io.netty:netty-all:4.0.28.Final') { exclude group: 'commons-logging', module: 'commons-logging' } compile "com.madgag.spongycastle:core:${scastleVersion}" @@ -120,6 +127,7 @@ dependencies { compile 'org.hsqldb:hsqldb:1.8.0.10' // best performance - do not upgrade! compile 'javax.persistence:persistence-api:1.0.2' + compile 'com.j256.ormlite:ormlite-android:4.48' compile('redis.clients:jedis:2.6.0') { exclude group: 'org.apache.commons', module: 'commons-pool2' diff --git a/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.java b/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.java index 7e19d5a9..5d2c2185 100644 --- a/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.java +++ b/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.java @@ -4,7 +4,7 @@ import org.ethereum.core.Block; import org.ethereum.core.TransactionReceipt; import org.ethereum.util.ByteUtil; -//import org.hibernate.SessionFactory; +import org.hibernate.SessionFactory; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.context.ApplicationContext; @@ -21,7 +21,7 @@ import java.util.List; * @author Roman Mandeleil * @since 12.11.2014 */ -/* + public class BlockStoreImpl implements BlockStore { private SessionFactory sessionFactory; @@ -31,7 +31,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional(readOnly = true) public byte[] getBlockHashByNumber(long blockNumber) { Block block = getBlockByNumber(blockNumber); @@ -40,7 +39,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional(readOnly = true) public Block getBlockByNumber(long blockNumber) { List result = sessionFactory.getCurrentSession(). @@ -54,7 +52,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional(readOnly = true) public Block getBlockByHash(byte[] hash) { List result = sessionFactory.getCurrentSession(). @@ -68,7 +65,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional(readOnly = true) @SuppressWarnings("unchecked") public List getListOfHashesStartFrom(byte[] hash, int qty) { @@ -91,7 +87,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional public void deleteBlocksSince(long number) { sessionFactory.getCurrentSession(). @@ -102,7 +97,6 @@ public class BlockStoreImpl implements BlockStore { @Override - @Transactional public void saveBlock(Block block, List receipts) { BlockVO blockVO = new BlockVO(block.getNumber(), block.getHash(), @@ -121,7 +115,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional(readOnly = true) public BigInteger getTotalDifficultySince(long number) { return (BigInteger) sessionFactory.getCurrentSession(). @@ -132,7 +125,6 @@ public class BlockStoreImpl implements BlockStore { @Override - @Transactional(readOnly = true) public BigInteger getTotalDifficulty() { return (BigInteger) sessionFactory.getCurrentSession(). @@ -141,7 +133,6 @@ public class BlockStoreImpl implements BlockStore { @Override - @Transactional(readOnly = true) public Block getBestBlock() { Long bestNumber = (Long) @@ -156,7 +147,6 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional(readOnly = true) @SuppressWarnings("unchecked") public List getAllBlocks() { @@ -172,14 +162,12 @@ public class BlockStoreImpl implements BlockStore { } @Override - @Transactional public void reset() { sessionFactory.getCurrentSession(). createQuery("delete from BlockVO").executeUpdate(); } @Override - @Transactional(readOnly = true) public TransactionReceipt getTransactionReceiptByHash(byte[] hash) { List result = sessionFactory.getCurrentSession(). @@ -192,5 +180,4 @@ public class BlockStoreImpl implements BlockStore { return new TransactionReceipt(vo.rlp); } -} -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.javazz b/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.javazz deleted file mode 100644 index cdca6f36..00000000 --- a/ethereumj-core/src/main/java/org/ethereum/db/BlockStoreImpl.javazz +++ /dev/null @@ -1,192 +0,0 @@ -package org.ethereum.db; - -import org.ethereum.core.Block; -import org.ethereum.core.TransactionReceipt; -import org.ethereum.util.ByteUtil; - -import org.hibernate.SessionFactory; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import java.math.BigInteger; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Roman Mandeleil - * @since 12.11.2014 - */ -public class BlockStoreImpl implements BlockStore { - - private SessionFactory sessionFactory; - - public BlockStoreImpl(SessionFactory sessionFactory) { - this.sessionFactory = sessionFactory; - } - - @Override - public byte[] getBlockHashByNumber(long blockNumber) { - - Block block = getBlockByNumber(blockNumber); - if (block != null) return block.getHash(); - return ByteUtil.EMPTY_BYTE_ARRAY; - } - - @Override - @Transactional(readOnly = true) - public Block getBlockByNumber(long blockNumber) { - - List result = sessionFactory.getCurrentSession(). - createQuery("from BlockVO where number = :number"). - setParameter("number", blockNumber).list(); - - if (result.size() == 0) return null; - BlockVO vo = (BlockVO) result.get(0); - - return new Block(vo.rlp); - } - - @Override - @Transactional(readOnly = true) - public Block getBlockByHash(byte[] hash) { - - List result = sessionFactory.getCurrentSession(). - createQuery("from BlockVO where hash = :hash"). - setParameter("hash", hash).list(); - - if (result.size() == 0) return null; - BlockVO vo = (BlockVO) result.get(0); - - return new Block(vo.rlp); - } - - @Override - @Transactional(readOnly = true) - @SuppressWarnings("unchecked") - public List getListOfHashesStartFrom(byte[] hash, int qty) { - - List hashes = new ArrayList<>(); - - // find block number of that block hash - Block block = getBlockByHash(hash); - if (block == null) return hashes; - - List result = sessionFactory.getCurrentSession(). - createQuery("select hash from BlockVO where number <= :number and number >= :limit order by number desc"). - setParameter("number", block.getNumber()). - setParameter("limit", block.getNumber() - qty). - setMaxResults(qty).list(); - - for (byte[] h : result) - hashes.add(h); - - return hashes; - } - - @Override - @Transactional - public void deleteBlocksSince(long number) { - - sessionFactory.getCurrentSession(). - createQuery("delete from BlockVO where number > :number"). - setParameter("number", number). - executeUpdate(); - } - - - @Override - @Transactional - public void saveBlock(Block block, List receipts) { - - BlockVO blockVO = new BlockVO(block.getNumber(), block.getHash(), - block.getEncoded(), block.getCumulativeDifficulty()); - - for (TransactionReceipt receipt : receipts) { - - byte[] hash = receipt.getTransaction().getHash(); - byte[] rlp = receipt.getEncoded(); - - TransactionReceiptVO transactionReceiptVO = new TransactionReceiptVO(hash, rlp); - sessionFactory.getCurrentSession().persist(transactionReceiptVO); - } - - sessionFactory.getCurrentSession().persist(blockVO); - } - - @Override - @Transactional(readOnly = true) - public BigInteger getTotalDifficultySince(long number) { - - return (BigInteger) sessionFactory.getCurrentSession(). - createQuery("select sum(cumulativeDifficulty) from BlockVO where number > :number"). - setParameter("number", number). - uniqueResult(); - } - - - @Override - @Transactional(readOnly = true) - public BigInteger getTotalDifficulty() { - - return (BigInteger) sessionFactory.getCurrentSession(). - createQuery("select sum(cumulativeDifficulty) from BlockVO").uniqueResult(); - } - - - @Override - @Transactional(readOnly = true) - public Block getBestBlock() { - - Long bestNumber = (Long) - sessionFactory.getCurrentSession().createQuery("select max(number) from BlockVO").uniqueResult(); - List result = sessionFactory.getCurrentSession(). - createQuery("from BlockVO where number = :number").setParameter("number", bestNumber).list(); - - if (result.isEmpty()) return null; - BlockVO vo = (BlockVO) result.get(0); - - return new Block(vo.rlp); - } - - @Override - @Transactional(readOnly = true) - @SuppressWarnings("unchecked") - public List getAllBlocks() { - - List result = sessionFactory.getCurrentSession(). - createQuery("from BlockVO").list(); - - ArrayList blocks = new ArrayList<>(); - for (BlockVO blockVO : result) { - blocks.add(new Block(blockVO.getRlp())); - } - - return blocks; - } - - @Override - @Transactional - public void reset() { - sessionFactory.getCurrentSession(). - createQuery("delete from BlockVO").executeUpdate(); - } - - @Override - public TransactionReceipt getTransactionReceiptByHash(byte[] hash) { - - List result = sessionFactory.getCurrentSession(). - createQuery("from TransactionReceiptVO where hash = :hash"). - setParameter("hash", hash).list(); - - if (result.size() == 0) return null; - TransactionReceiptVO vo = (TransactionReceiptVO) result.get(0); - - return new TransactionReceipt(vo.rlp); - - } -} diff --git a/ethereumj-core/src/main/java/org/ethereum/di/components/EthereumComponent.java b/ethereumj-core/src/main/java/org/ethereum/di/components/EthereumComponent.java index 592ab92e..e20a423b 100644 --- a/ethereumj-core/src/main/java/org/ethereum/di/components/EthereumComponent.java +++ b/ethereumj-core/src/main/java/org/ethereum/di/components/EthereumComponent.java @@ -1,7 +1,5 @@ package org.ethereum.di.components; -import android.content.Context; - import org.ethereum.di.modules.EthereumModule; import org.ethereum.facade.Ethereum; import org.ethereum.listener.EthereumListener; @@ -14,9 +12,6 @@ import dagger.Component; @Component(modules = EthereumModule.class) public interface EthereumComponent { - //void inject(EthereumManager ethereumManager); - - Context context(); Ethereum ethereum(); EthereumListener listener(); } \ No newline at end of file diff --git a/ethereumj-core/src/main/java/org/ethereum/di/modules/EthereumModule.java b/ethereumj-core/src/main/java/org/ethereum/di/modules/EthereumModule.java index 591bbb62..b32dd57d 100644 --- a/ethereumj-core/src/main/java/org/ethereum/di/modules/EthereumModule.java +++ b/ethereumj-core/src/main/java/org/ethereum/di/modules/EthereumModule.java @@ -5,7 +5,6 @@ import android.content.Context; import org.ethereum.config.SystemProperties; import org.ethereum.core.BlockchainImpl; import org.ethereum.core.Wallet; -import org.ethereum.datasource.AndroidLevelDbDataSource; import org.ethereum.datasource.KeyValueDataSource; import org.ethereum.datasource.LevelDbDataSource; import org.ethereum.db.BlockStore; @@ -44,10 +43,8 @@ import dagger.Provides; @Module public class EthereumModule { - private Context context; + public EthereumModule() { - public EthereumModule(Context context) { - this.context = context; } @Provides @@ -81,10 +78,8 @@ public class EthereumModule { @Provides @Singleton Repository provideRepository() { - AndroidLevelDbDataSource detailsDS = new AndroidLevelDbDataSource(); - detailsDS.setContext(context); - AndroidLevelDbDataSource stateDS = new AndroidLevelDbDataSource(); - stateDS.setContext(context); + LevelDbDataSource detailsDS = new LevelDbDataSource(); + LevelDbDataSource stateDS = new LevelDbDataSource(); return new RepositoryImpl(detailsDS, stateDS); } @@ -160,14 +155,6 @@ public class EthereumModule { return new WorkerThread(discoveryChannelProvider); } - @Provides - @Singleton - Context provideContext() { - return context; - } - - - @Provides String provideRemoteId() { return SystemProperties.CONFIG.activePeerNodeid(); diff --git a/ethereumj-core/src/main/java/org/ethereum/facade/CommonConfig.java b/ethereumj-core/src/main/java/org/ethereum/facade/CommonConfig.java index 1cfe4727..ca1ff808 100644 --- a/ethereumj-core/src/main/java/org/ethereum/facade/CommonConfig.java +++ b/ethereumj-core/src/main/java/org/ethereum/facade/CommonConfig.java @@ -6,18 +6,18 @@ import org.ethereum.datasource.KeyValueDataSource; import org.ethereum.datasource.LevelDbDataSource; import org.ethereum.datasource.redis.RedisConnection; import org.ethereum.db.RepositoryImpl; -//import org.hibernate.SessionFactory; +import org.hibernate.SessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.ComponentScan; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.context.annotation.Scope; -//import org.springframework.jdbc.datasource.DataSourceTransactionManager; -//import org.springframework.jdbc.datasource.DriverManagerDataSource; -//import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder; -//import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.hibernate4.HibernateTransactionManager; +import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder; +import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.Collections; import java.util.HashSet; @@ -26,16 +26,16 @@ import java.util.Set; import static org.ethereum.config.SystemProperties.CONFIG; -//@Configuration -//@EnableTransactionManagement -//@ComponentScan(basePackages = "org.ethereum") +@Configuration +@EnableTransactionManagement +@ComponentScan(basePackages = "org.ethereum") public class CommonConfig { private static final Logger logger = LoggerFactory.getLogger("general"); - //@Autowired - //private RedisConnection redisConnection; -/* + @Autowired + private RedisConnection redisConnection; + @Bean Repository repository() { return new RepositoryImpl(keyValueDataSource(), keyValueDataSource()); @@ -82,7 +82,7 @@ public class CommonConfig { return builder.buildSessionFactory(); } -*/ + private Properties getHibernateProperties() { Properties prop = new Properties(); @@ -97,13 +97,11 @@ public class CommonConfig { return prop; } -/* @Bean public HibernateTransactionManager txManager() { return new HibernateTransactionManager(sessionFactory()); } -*/ - /* + @Bean(name = "dataSource") public DriverManagerDataSource dataSource() { @@ -125,6 +123,5 @@ public class CommonConfig { return ds; } - */ } diff --git a/ethereumj-core/src/main/java/org/ethereum/facade/DefaultConfig.java b/ethereumj-core/src/main/java/org/ethereum/facade/DefaultConfig.java index d5949db5..c82b76dd 100644 --- a/ethereumj-core/src/main/java/org/ethereum/facade/DefaultConfig.java +++ b/ethereumj-core/src/main/java/org/ethereum/facade/DefaultConfig.java @@ -1,32 +1,29 @@ package org.ethereum.facade; import org.ethereum.db.BlockStore; -import org.ethereum.db.InMemoryBlockStore; -//import org.hibernate.SessionFactory; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.context.annotation.Import; -//import org.springframework.transaction.annotation.Propagation; -//import org.springframework.transaction.annotation.Transactional; -import javax.inject.Inject; +import org.ethereum.db.BlockStoreImpl; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; /** * * @author: Roman Mandeleil * Created on: 27/01/2015 01:05 */ -//@Configuration -//@Import(CommonConfig.class) +@Configuration +@Import(CommonConfig.class) public class DefaultConfig { - - @Inject CommonConfig commonConfig; - //@Bean - //@Transactional(propagation = Propagation.SUPPORTS) - /* + @Autowired CommonConfig commonConfig; + + @Bean + @Transactional(propagation = Propagation.SUPPORTS) public BlockStore blockStore(SessionFactory sessionFactory){ - return new InMemoryBlockStore(); + return new BlockStoreImpl(sessionFactory); } - */ -} \ No newline at end of file +} diff --git a/ethereumj-core/src/main/java/org/ethereum/facade/EthereumFactory.java b/ethereumj-core/src/main/java/org/ethereum/facade/EthereumFactory.java index 42be65c4..a649c02a 100644 --- a/ethereumj-core/src/main/java/org/ethereum/facade/EthereumFactory.java +++ b/ethereumj-core/src/main/java/org/ethereum/facade/EthereumFactory.java @@ -6,18 +6,20 @@ import org.ethereum.net.shh.ShhHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Singleton; - +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.stereotype.Component; /** * @author Roman Mandeleil * @since 13.11.2014 */ -@Singleton +@Component public class EthereumFactory { private static final Logger logger = LoggerFactory.getLogger("general"); - + public static ApplicationContext context = null; + public static Ethereum createEthereum() { return createEthereum(DefaultConfig.class); } @@ -27,7 +29,8 @@ public class EthereumFactory { logger.info("capability eth version: [{}]", EthHandler.VERSION); logger.info("capability shh version: [{}]", ShhHandler.VERSION); - return null; + context = new AnnotationConfigApplicationContext(clazz); + return context.getBean(Ethereum.class); } -} \ No newline at end of file +} diff --git a/ethereumj-core/src/main/java/org/ethereum/facade/RemoteConfig.java b/ethereumj-core/src/main/java/org/ethereum/facade/RemoteConfig.java index 26332f8a..31ff3611 100644 --- a/ethereumj-core/src/main/java/org/ethereum/facade/RemoteConfig.java +++ b/ethereumj-core/src/main/java/org/ethereum/facade/RemoteConfig.java @@ -2,34 +2,31 @@ package org.ethereum.facade; import org.ethereum.db.BlockStore; import org.ethereum.db.InMemoryBlockStore; -//import org.hibernate.SessionFactory; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.context.annotation.Import; -//import org.springframework.transaction.annotation.Propagation; -//import org.springframework.transaction.annotation.Transactional; -import javax.inject.Inject; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; /** * * @author: Roman Mandeleil * Created on: 27/01/2015 01:05 */ -//@Configuration -//@Import(CommonConfig.class) +@Configuration +@Import(CommonConfig.class) public class RemoteConfig { - @Inject CommonConfig commonConfig; + @Autowired CommonConfig commonConfig; // todo: init total difficulty // todo: init last 1000 blocks - //@Bean - //@Transactional(propagation = Propagation.SUPPORTS) - /* + @Bean + @Transactional(propagation = Propagation.SUPPORTS) public BlockStore blockStore(SessionFactory sessionFactory){ return new InMemoryBlockStore(); } - */ -} \ No newline at end of file +} diff --git a/ethereumj-core/src/main/java/org/ethereum/net/p2p/P2pHandler.java b/ethereumj-core/src/main/java/org/ethereum/net/p2p/P2pHandler.java index 6fc35bd3..81b406ce 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/p2p/P2pHandler.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/p2p/P2pHandler.java @@ -1,8 +1,10 @@ package org.ethereum.net.p2p; +import io.netty.buffer.ByteBuf; import org.ethereum.core.Block; import org.ethereum.core.Transaction; import org.ethereum.listener.EthereumListener; +import org.ethereum.manager.WorldManager; import org.ethereum.net.MessageQueue; import org.ethereum.net.client.Capability; import org.ethereum.net.eth.EthHandler; @@ -13,6 +15,7 @@ import org.ethereum.net.message.ReasonCode; import org.ethereum.net.message.StaticMessages; import org.ethereum.net.peerdiscovery.PeerDiscovery; import org.ethereum.net.peerdiscovery.PeerInfo; +import org.ethereum.net.rlpx.FrameCodec; import org.ethereum.net.server.Channel; import org.ethereum.net.shh.ShhHandler; import org.ethereum.net.shh.ShhMessageCodes; @@ -23,6 +26,12 @@ import io.netty.channel.SimpleChannelInboundHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.spongycastle.util.encoders.Hex; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Scope; +//import org.springframework.stereotype.Component; + +import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -51,6 +60,8 @@ import static org.ethereum.net.message.StaticMessages.*; *
  • PONG : Confirm that they themselves are still alive
  • * */ +//@Component +//@Scope("prototype") public class P2pHandler extends SimpleChannelInboundHandler { public final static byte VERSION = 4; diff --git a/ethereumj-core/src/main/java/org/ethereum/net/shh/ShhHandler.java b/ethereumj-core/src/main/java/org/ethereum/net/shh/ShhHandler.java index 3c81b0ef..b6e7a097 100644 --- a/ethereumj-core/src/main/java/org/ethereum/net/shh/ShhHandler.java +++ b/ethereumj-core/src/main/java/org/ethereum/net/shh/ShhHandler.java @@ -1,6 +1,7 @@ package org.ethereum.net.shh; import org.ethereum.listener.EthereumListener; +import org.ethereum.manager.WorldManager; import org.ethereum.net.MessageQueue; import io.netty.channel.ChannelHandlerContext; @@ -11,11 +12,17 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Scope; +//import org.springframework.stereotype.Component; + /** * Process the messages between peers with 'shh' capability on the network. * * Peers with 'shh' capability can send/receive: */ +//@Component +//@Scope("prototype") public class ShhHandler extends SimpleChannelInboundHandler { public final static byte VERSION = 1; diff --git a/ethereumj-core/src/main/resources/system.properties b/ethereumj-core/src/main/resources/system.properties index cdc4f4a4..5c67769d 100644 --- a/ethereumj-core/src/main/resources/system.properties +++ b/ethereumj-core/src/main/resources/system.properties @@ -12,9 +12,9 @@ peer.discovery.ip.list = poc-7.ethdev.com:30303,\ #peer.active.nodeid = d348964fbb47d0cb9d206b926d416b2be8c1c0c68679f07d7611ef04ee797857d0ec8e7490cc3cc64094de9e7659be42baaf1fd24ca822c1bffc58ca9cf479dd # my poc-9-test peer-1 -peer.active.ip = 162.243.46.9 -peer.active.port = 30303 -peer.active.nodeid = e437a4836b77ad9d9ffe73ee782ef2614e6d8370fcf62191a6e488276e23717147073a7ce0b444d485fff5a0c34c4577251a7a990cf80d8542e21b95aa8c5e6c +#peer.active.ip = 162.243.46.9 +#peer.active.port = 30303 +#peer.active.nodeid = e437a4836b77ad9d9ffe73ee782ef2614e6d8370fcf62191a6e488276e23717147073a7ce0b444d485fff5a0c34c4577251a7a990cf80d8542e21b95aa8c5e6c # heiko peer #peer.active.ip = 188.106.121.253 @@ -31,9 +31,9 @@ peer.active.nodeid = e437a4836b77ad9d9ffe73ee782ef2614e6d8370fcf62191a6e488276e2 #peer.active.port = 30303 #peer.active.nodeid = bf01b54b6bc7faa203286dfb8359ce11d7b1fe822968fb4991f508d6f5a36ab7d9ae8af9b0d61c0467fb08567e0fb71cfb9925a370b69f9ede97927db473d1f5 -#peer.active.ip = 192.168.122.90 -#peer.active.port = 30303 -#peer.active.nodeid = 68cb34d6e806cd3f4e240f6eb2c5e1e8e4d2ebec2b7cf508a15c9847fc769a717da1f69f918548958fcfbe7e8cc77f1cd97f000ef39d0c28c618985e519806b4 +peer.active.ip = 192.168.122.90 +peer.active.port = 30303 +peer.active.nodeid = 4a531abc51448e584faae944d7e244e3f1ac6a629579a937b8c16ed98efb2a7aff29f6ab8c73c60041d3b078533bca842ec61d9a85f12ea9e6c3c7657e85f062 # peer.active.ip = 52.4.40.229 # peer.active.port = 30303