Giter Club home page Giter Club logo

ethereum-harmony's Introduction

Slack Status

⛔ Deprecated ⛔

This project is not supported anymore. If you have any question or would like to contribute find us on Gitter.

Ethereum Harmony

Ethereum network private peer. Based on EthereumJ implementation.

Ethereum Harmony Demo

Smart contract trace sample:

https://www.youtube.com/watch?v=leaAMTgjvxg

Features:

  • Ethereum peer JSON-RPC 2.0 standard ;

  • Keeping private keys in filesystem keystore compatible with go-ethereum;

  • In Browser command line terminal;

  • Blockchain canonical tracing;

  • Monitoring peers connectivity;

  • Easy go Ethereum wallet;

  • Full trace of contract storage locally;

.

Prerequisites Installed:

  • Java 8 (64 bit)

.

Run

  • git clone https://github.com/ether-camp/ethereum-harmony
  • cd ethereum-harmony
  • Run Service: gradlew runMain ( live network by default or any other environment )

Navigate to web view http://localhost:8080 JSON-RPC is available at either http://localhost:8545/rpc or http://localhost:8545

In order to provide ability to disable unneeded features, any of app modules could be disabled: web, contracts, rpc. Check configuration for more info.

Run RPC only: gradlew runMain -PrpcOnly

(*) Use gradlew runMain -Dserver.port=9999 option to change web interface port number.

.

Command line options

Environment Run ...
Main gradlew runMain Start server connecting to Main network
Ropsten gradlew runRopsten Start server connecting to Ropsten network
Classic gradlew runClassic Start server connecting to Ethereum Classic network
Private gradlew runPrivate Start server, no network connection, single miner running
Custom gradlew runCustom Start server connecting to custom network (check custom network)

.

Run in a custom network

  • git clone https://github.com/ether-camp/ethereum-harmony
  • cd ethereum-harmony
  • Run Service with custom config:
gradlew runCustom -Dethereumj.conf.file=/path/to/custom.conf
  • It is also possible to use CLI to pass parameters:
gradlew runCustom -Dpeer.networkId=10101 -DgenesisFile=/path/to/custom/genesis.json -Dpeer.discovery.enabled=false -Dpeer.active.0.url=enode://0f4a5f92835a4604ecd9639ddcfb86d2a2999ad9328bc088452efffe4a7c6cd0eaaef77c779dc56fc1d0f21cd578eeb92cb5@23.101.151.28:30303

Note: parameters that haven't been substituted by either custom config or CLI will be supplied from ethereumj.conf

Custom config file format

Format of the file should be the same as of ethereumj.conf. It also works to specify only necessary config parameters.

An example:

genesisFile = /path/to/custom/genesis.json
database.dir = database-private

peer {
  networkId = 10101
  listen.port = 50505

  discovery.enabled = false
  active = [
    {url = "enode://6ce05930c72abc632c58e2e4324f7c7ea478cec0ed4fa2528982cf34483094e9cbc9216e7aa349691242576d552a2a56aaeae426c5303ded677ce455ba1acd9d@13.84.180.240:30303"}
    {url = "enode://20c9ad97c081d63397d7b685a412227a40e23c8bdc6688c6f37e97cfbc22d2b4d1db1510d8f61e6a8866ad7f0e17c02b14182d37ea7c3c8b9c2683aeb6b733a1@52.169.14.227:30303"}
  ]
}

sync.fast.enabled = false

If you run Harmony without using Gradle, add -Dethereumj.conf.res=harmony.conf to command line, so Harmony properties will be applied to system context too.
If you use some custom resource file as config, just add -Dethereumj.conf.res=harmony.conf,custom.conf to java exec command so both will be applied.

.

.

.

Development

Check Development troubleshooting

Special thanks

Powered by multi-platform installer builder

License

📜 ... License GPL 3.0

ethereum-harmony's People

Contributors

cupuyc avatar feiqihang avatar migwel avatar mkalinin avatar mysticryuujin avatar nashatyrev avatar neurone avatar romanman avatar tbocek avatar zilm13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ethereum-harmony's Issues

Wallet doesn't update amount in Private Miner mode

In harmony by UI if i send a transaction then it is being highlighted but when i am trying to send the transaction usi JSON-RPC from the console the transaction is going through but the transaction is not being highlighted.

Also I tried to implement the Keystore functionality of harmony in my own project by just copying the com.ether.camp.harmony.keystore package in my project then only the transactions from the address specified in the genesis block is going through but the transactions generated using the keystore is being submitted successfully to the network but it is not being mined.

Modify mnemonic phrase generation flow to make it more secure

Currently it requests 5 random words from dictionary using backend controller. We should download full dictionary to frontend and choose 5 words on frontend (in client's browser). This approach is more secure, because it is not vulnerable to sniffing attack.
Also, check that user is able to remember the phrase at least just after creation.

Can't install Harmony 2.1.56 and 2.1.57 - could not create nul.json

I'm not sure this Harmony problem, but I can't install 2.1.56 and 2.1.57 version. In both cases installation was stopped with message "c:\Program Files\EthereumHarmony\classes\static\bower_components\datamaps\src\js\data\nul.json Could not create this file. Shall I try again?" (yes/cancel).
Windows 10 64bit

Switch to short sync when miner is started manually

We have the feature to start miner manually and it's useful especially in private networks, but if the sync is on, miner starts and peer is not accepting txs because it's on long sync. So, manual miner start should trigger short sync.
Here's implementation, but it should probably moved to Harmony's actual branch
ethereum/ethereumj@6b0f381

Support for ropsten testnet

Should be possible by just providing an genesis.json, but since the config format is slightly different from geth, it would be great to have a runRopsten gradle command.

Contract's event not working

I have a contract
contract_bytecode.txt
and two independent ethereum clients for experiments. One of them is geth (deployed at 172.17.0.2 in the local net), second is harmony (deployed at 172.17.0.3).

Contract address is 0xfad862e3c688455f25446904d06cda82d4386d88

I'm trying to execute my test script:

#!/bin/bash

host=$1

if [ "$host" == "http://172.17.0.2:8080" ]
then
    sb1=(-36)
    sb2=34
else
    sb1=(-6)
    sb2=4
fi


transaction="$(curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_sendTransaction", "params":[{"from":"0x2644116ef02ee27563a8478052f5ff00ad6d24ad","gas":"0xf4240","to":"0xfad862e3c688455f25446904d06cda82d4386d88","data":"0xa6bc6395b294b4d6570e720da205d9589cdebbd9d185dbeff8a96532df8dbbc96b4aa505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe403020000000000000000000000000000000000000000000000000000000000000000"}],"id":1}' $host)"
echo "transaction answer is $transaction"

filter="$(curl -X POST --data "{\"jsonrpc\":\"2.0\", \"method\":\"eth_newFilter\", \"params\":[{\"topics\":[],\"address\":\"0xfad862e3c688455f25446904d06cda82d4386d88\"}],\"id\":2}" $host)"
echo "filter answer is $filter"


flogs="$(curl -X POST --data "{\"jsonrpc\":\"2.0\", \"method\":\"eth_getFilterLogs\", \"params\":[\"${filter:($sb1):$sb2}\"], \"id\":3}" $host)"
echo "flogs answer is $flogs"

again=0
while [ "$again" -lt "60" ]
do
    fchanges="$(curl -X POST --data "{\"jsonrpc\":\"2.0\", \"method\":\"eth_getFilterChanges\", \"params\":[\"${filter:($sb1):$sb2}\"], \"id\":4}" $host)"
    echo "fchanges answer is $fchanges"
    again=${#fchanges}.
    sleep 2s
done

So, if i run ./testJava.sh "http://172.17.0.2:8080", i getting the right result after some time of the loop execution:

fchanges answer is {"jsonrpc":"2.0","id":4,"result":[]}
...
fchanges answer is {"jsonrpc":"2.0","id":4,"result":[{"address":"0xfad862e3c688455f25446904d06cda82d4386d88","topics":["0x86d78d4604d1118b84159ec7d58eb191e7b46f989379253d3f3516022c0a93b6"],"data":"0x0000000000000000000000002644116ef02ee27563a8478052f5ff00ad6d24ad0000000000000000000000000000000000000000000000000000000000000001b294b4d6570e720da205d9589cdebbd9d185dbeff8a96532df8dbbc96b4aa505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe403020000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0xb2e5","transactionIndex":"0x0","transactionHash":"0x067566de3baf4f8e86c8da7fbc2b56b1c8e9dfb102350868d3d2f86b970d59f8","blockHash":"0xa6d3215abb9b6a50dab22647dce69ff45c670476aefc27bb2dfb5e39f6a05369","logIndex":"0x0","removed":false}]}

But when i run ./testJava.sh "http://172.17.0.3:8080/rpc", i always getting empty result

fchanges answer is {"jsonrpc":"2.0","id":4,"result":[]}

So, i can't catch contract events

Maybe i did something wrong?

Startup Error: "Could not resolve org.ethereum:ethereumj-core:1.7.0-SNAPSHOT"

FAILURE: Build failed with an exception.

* Where:
Build file '/root/ethereum-harmony/build.gradle' line: 322

* What went wrong:
Execution failed for task ':runMain'.
> Could not resolve all dependencies for configuration ':detachedConfiguration5'.
   > Could not resolve org.ethereum:ethereumj-core:1.7.0-SNAPSHOT.
     Required by:
         project :
      > Could not resolve org.ethereum:ethereumj-core:1.7.0-SNAPSHOT.
         > Could not load module metadata from /root/.gradle/caches/modules-2/metadata-2.23/descriptors/org.ethereum/ethereumj-core/1.7.0-SNAPSHOT/e66818eedb288165082d23e9d00af43a/descriptor.bin
   > Could not resolve org.ethereum:ethereumj-core:1.7.0-SNAPSHOT.
     Required by:
         project : > com.ethercamp:contract-data:1.4.0
      > Could not resolve org.ethereum:ethereumj-core:1.7.0-SNAPSHOT.
         > Could not load module metadata from /root/.gradle/caches/modules-2/metadata-2.23/descriptors/org.ethereum/ethereumj-core/1.7.0-SNAPSHOT/e66818eedb288165082d23e9d00af43a/descriptor.bin

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

how to run miner_start in web Terminal?

  1. Cloned the code of ethereum-harmony
    2.Run the system use command gradlew runMain -Dserver.port=9000
    3.See the Terminal in the left menu tree.
    4.In the Terminal,try the command.
Ethereum
node> miner_start 2
JsonRpcServerError: method parameters invalid
node> miner_start(2)
Command not found

could anybody give me some advice?

Eth Protocol Tracing

screen

Screen to show all the peers currently active on ETH traffic
first version will have that data , in the future on however ,
you can see more info on left bottom corner.

RPC URL Breaks Compatibility - Separate RPC Port - MyEtherWallet

All other client implementations have the RPC port on 8545 and it is a direct interface to the JSON RPC API.

Tools such as MyEtherWallet expect the RPC to be separate from the web interface...but Harmony requires "/rpc" to be appended to the URL. That makes in impossible to use with MEW without customization. It makes it harder for developers to support EthereumJ nodes running via Harmony.

Would it not be easier to just expose 8545 directly to the running EthereumJ node? Or perhaps expose it in addition to the /rpc URL?

Build fails on Linux

128 ✗ user@ursae ~/.opt/ethereum-harmony $ gradle runMain --stacktrace

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'harmony.ether.camp'.
> Could not resolve all dependencies for configuration ':classpath'.
   > Could not resolve com.github.jengelman.gradle.plugins:shadow:1.2.4.
     Required by:
         project :
      > Could not resolve com.github.jengelman.gradle.plugins:shadow:1.2.4.
         > Could not get resource 'https://plugins.gradle.org/m2/com/github/jengelman/gradle/plugins/shadow/1.2.4/shadow-1.2.4.pom'.
            > Could not GET 'https://plugins.gradle.org/m2/com/github/jengelman/gradle/plugins/shadow/1.2.4/shadow-1.2.4.pom'.
               > java.security.ProviderException: java.security.InvalidKeyException: EC parameters error
   > Could not resolve co.riiid:gradle-github-plugin:0.4.2.
     Required by:
         project :
      > Could not resolve co.riiid:gradle-github-plugin:0.4.2.
         > Could not get resource 'https://plugins.gradle.org/m2/co/riiid/gradle-github-plugin/0.4.2/gradle-github-plugin-0.4.2.pom'.
            > Could not GET 'https://plugins.gradle.org/m2/co/riiid/gradle-github-plugin/0.4.2/gradle-github-plugin-0.4.2.pom'.
               > java.security.ProviderException: java.security.InvalidKeyException: EC parameters error

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'harmony.ether.camp'.
  at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94)
  at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:72)
  at org.gradle.configuration.project.LifecycleProjectEvaluator.access$000(LifecycleProjectEvaluator.java:33)
  at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:53)
  at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:50)
  at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
  at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
  at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:599)
  at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:125)
  at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
  at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:60)
  at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
  at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuildAction.execute(DefaultGradleLauncher.java:233)
  at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuildAction.execute(DefaultGradleLauncher.java:230)
  at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
  at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:160)
  at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:119)
  at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:102)
  at org.gradle.launcher.exec.GradleBuildController.run(GradleBuildController.java:71)
  at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
  at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
  at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
  at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
  at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
  at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49)
  at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:49)
  at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:31)
  at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
  at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:47)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
  at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
  at org.gradle.util.Swapper.swap(Swapper.java:38)
  at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
  at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
  at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
  at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
  at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
  at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
  at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
  at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
Caused by: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ':classpath'.
  at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.rethrowFailure(DefaultLenientConfiguration.java:178)
  at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$1.collectFiles(DefaultLenientConfiguration.java:127)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.doGetFiles(DefaultConfiguration.java:516)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getFiles(DefaultConfiguration.java:367)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getFiles(Unknown Source)
  at org.gradle.api.internal.initialization.DefaultScriptHandler.getScriptClassPath(DefaultScriptHandler.java:69)
  at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.defineScriptHandlerClassScope(DefaultPluginRequestApplicator.java:193)
  at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:78)
  at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:156)
  at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39)
  at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
  at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
  at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:70)
  ... 55 more
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.github.jengelman.gradle.plugins:shadow:1.2.4.
Required by:
    project :
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.resolveModule(RepositoryChainComponentMetaDataResolver.java:83)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.resolve(RepositoryChainComponentMetaDataResolver.java:59)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.ComponentResolversChain$ComponentMetaDataResolverChain.resolve(ComponentResolversChain.java:85)
  at org.gradle.api.internal.artifacts.ivyservice.clientmodule.ClientModuleResolver.resolve(ClientModuleResolver.java:45)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$ModuleVersionResolveState.resolve(DependencyGraphBuilder.java:642)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$ModuleVersionResolveState.getMetaData(DependencyGraphBuilder.java:653)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$DependencyEdge.calculateTargetConfigurations(DependencyGraphBuilder.java:291)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$DependencyEdge.attachToTargetConfigurations(DependencyGraphBuilder.java:264)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:161)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:98)
  at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:88)
  at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver$1.run(CacheLockingArtifactDependencyResolver.java:43)
  at org.gradle.internal.Factories$1.create(Factories.java:25)
  at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:190)
  at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:172)
  at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:136)
  at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.useCache(DefaultCacheFactory.java:199)
  at org.gradle.api.internal.artifacts.ivyservice.DefaultCacheLockingManager.useCache(DefaultCacheLockingManager.java:60)
  at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver.resolve(CacheLockingArtifactDependencyResolver.java:41)
  at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:123)
  at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:72)
  at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:67)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$3.execute(DefaultConfiguration.java:455)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$3.execute(DefaultConfiguration.java:446)
  at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:446)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:422)
  at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.doGetFiles(DefaultConfiguration.java:515)
  ... 65 more
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.github.jengelman.gradle.plugins:shadow:1.2.4.
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess.resolveComponentMetaData(ErrorHandlingModuleComponentRepository.java:96)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ComponentMetaDataResolveState.process(ComponentMetaDataResolveState.java:66)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ComponentMetaDataResolveState.resolve(ComponentMetaDataResolveState.java:58)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.findBestMatch(RepositoryChainComponentMetaDataResolver.java:116)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.findBestMatch(RepositoryChainComponentMetaDataResolver.java:99)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.resolveModule(RepositoryChainComponentMetaDataResolver.java:72)
  ... 94 more
Caused by: org.gradle.api.resources.ResourceException: Could not get resource 'https://plugins.gradle.org/m2/com/github/jengelman/gradle/plugins/shadow/1.2.4/shadow-1.2.4.pom'.
  at org.gradle.internal.resource.ResourceExceptions.failure(ResourceExceptions.java:69)
  at org.gradle.internal.resource.ResourceExceptions.getFailed(ResourceExceptions.java:52)
  at org.gradle.api.internal.artifacts.repositories.resolver.DefaultExternalResourceArtifactResolver.downloadStaticResource(DefaultExternalResourceArtifactResolver.java:106)
  at org.gradle.api.internal.artifacts.repositories.resolver.DefaultExternalResourceArtifactResolver.resolveArtifact(DefaultExternalResourceArtifactResolver.java:65)
  at org.gradle.api.internal.artifacts.repositories.resolver.ExternalResourceResolver.parseMetaDataFromArtifact(ExternalResourceResolver.java:198)
  at org.gradle.api.internal.artifacts.repositories.resolver.ExternalResourceResolver.resolveStaticDependency(ExternalResourceResolver.java:175)
  at org.gradle.api.internal.artifacts.repositories.resolver.MavenResolver.doResolveComponentMetaData(MavenResolver.java:110)
  at org.gradle.api.internal.artifacts.repositories.resolver.ExternalResourceResolver$RemoteRepositoryAccess.resolveComponentMetaData(ExternalResourceResolver.java:455)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CacheLockReleasingModuleComponentsRepository$LockReleasingRepositoryAccess$2.run(CacheLockReleasingModuleComponentsRepository.java:78)
  at org.gradle.internal.Factories$1.create(Factories.java:25)
  at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:251)
  at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:323)
  at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:146)
  at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.longRunningOperation(DefaultCacheFactory.java:189)
  at org.gradle.api.internal.artifacts.ivyservice.DefaultCacheLockingManager.longRunningOperation(DefaultCacheLockingManager.java:50)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CacheLockReleasingModuleComponentsRepository$LockReleasingRepositoryAccess.resolveComponentMetaData(CacheLockReleasingModuleComponentsRepository.java:76)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository$ResolveAndCacheRepositoryAccess.resolveComponentMetaData(CachingModuleComponentRepository.java:312)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.BaseModuleComponentRepositoryAccess.resolveComponentMetaData(BaseModuleComponentRepositoryAccess.java:49)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.memcache.InMemoryCachedModuleComponentRepository$CachedAccess.resolveComponentMetaData(InMemoryCachedModuleComponentRepository.java:82)
  at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess.resolveComponentMetaData(ErrorHandlingModuleComponentRepository.java:94)
  ... 99 more
Caused by: org.gradle.internal.resource.transport.http.HttpRequestException: Could not GET 'https://plugins.gradle.org/m2/com/github/jengelman/gradle/plugins/shadow/1.2.4/shadow-1.2.4.pom'.
  at org.gradle.internal.resource.transport.http.HttpClientHelper.performRequest(HttpClientHelper.java:82)
  at org.gradle.internal.resource.transport.http.HttpClientHelper.performRawGet(HttpClientHelper.java:66)
  at org.gradle.internal.resource.transport.http.HttpClientHelper.performGet(HttpClientHelper.java:70)
  at org.gradle.internal.resource.transport.http.HttpResourceAccessor.openResource(HttpResourceAccessor.java:43)
  at org.gradle.internal.resource.transport.http.HttpResourceAccessor.openResource(HttpResourceAccessor.java:29)
  at org.gradle.internal.resource.transfer.DefaultExternalResourceConnector.openResource(DefaultExternalResourceConnector.java:56)
  at org.gradle.internal.resource.transfer.ProgressLoggingExternalResourceAccessor.openResource(ProgressLoggingExternalResourceAccessor.java:36)
  at org.gradle.internal.resource.transport.DefaultExternalResourceRepository.getResource(DefaultExternalResourceRepository.java:63)
  at org.gradle.internal.resource.transfer.DefaultCacheAwareExternalResourceAccessor.getResource(DefaultCacheAwareExternalResourceAccessor.java:76)
  at org.gradle.api.internal.artifacts.repositories.resolver.DefaultExternalResourceArtifactResolver.downloadStaticResource(DefaultExternalResourceArtifactResolver.java:97)
  ... 116 more
Caused by: javax.net.ssl.SSLException: java.security.ProviderException: java.security.InvalidKeyException: EC parameters error
  at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
  at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
  at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134)
  at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
  at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
  at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
  at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
  at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
  at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
  at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
  at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
  at org.gradle.internal.resource.transport.http.HttpClientHelper.performHttpRequest(HttpClientHelper.java:113)
  at org.gradle.internal.resource.transport.http.HttpClientHelper.executeGetOrHead(HttpClientHelper.java:89)
  at org.gradle.internal.resource.transport.http.HttpClientHelper.performRequest(HttpClientHelper.java:80)
  ... 125 more
Caused by: java.security.ProviderException: java.security.InvalidKeyException: EC parameters error
  ... 139 more
Caused by: java.security.InvalidKeyException: EC parameters error
  ... 139 more
Caused by: java.security.NoSuchProviderException: no such provider: SunEC
  ... 139 more


BUILD FAILED

Total time: 1.766 secs
1 ✗ user@ursae ~/.opt/ethereum-harmony $ pacaur -Ss jdk | grep installed
extra/jdk8-openjdk 8.u121-1 [installed]
extra/jre7-openjdk 7.u131_2.6.9-1 [installed]
extra/jre7-openjdk-headless 7.u131_2.6.9-1 [installed]
extra/jre8-openjdk 8.u121-1 [installed]
extra/jre8-openjdk-headless 8.u121-1 [installed]
0 ✓ user@ursae ~/.opt/ethereum-harmony $ uname -a
Linux ursae 4.10.2-1-ARCH #1 SMP PREEMPT Mon Mar 13 17:13:41 CET 2017 x86_64 GNU/Linux
0 ✓ user@ursae ~/.opt/ethereum-harmony $ 

Windows installer should follow Windows install best practices.

The Windows installer put an ethereumj folder in %USERPROFILE%. Nothing should go into this folder except files that the user directly puts there via a save dialog or similar.

The appropriate place for files on modern versions of Windows:
%APPDATA%/<vendor>/<product>: Small user-specific configuration. This folder is synchronized over networks so nothing large should go in here. If the files are bigger than 1MB, you should ask yourself if this is really the right place.
%LOCALAPPDATA%/<vendor>/<product>: Large user-specific files. If you want to install an application for a single user on a single machine, this is a reasonable choice. There is also %LOCALAPPDATA%/Programs if you intend on doing a full user-only local install. If you just want to store user specific large data (caches, blockchain, etc.) then %LOCALAPPDATA%/<vendor>/<product> is the right location.
%PROGRAMDATA%/<vendor>/<product>: Large multi-user data. Unlike %PROGRAMFILES%, this folder is writable by all users on the system. Not a good place to store any security related data, but it can be useful for multi-user configuration data that mutates at runtime.
%PROGRAMFILES%/<vendor>/<product>: Only administrators have write access here and this makes it a good location to install applications to. Users will not be able to modify it, so anything not available at install time should go elsewhere.

If in doubt, the easiest solution that puts everything in one place is %LOCALAPPDATA%/<vendor>/<product>. This will be per-user but not synchronized across a network. You can put large or small files here and you don't need to worry about administrator permissions.

Note: On further investigation, it appears that the installer installs some things to Program Files (correct), so I'm not sure why it is putting this ethereumj folder in %USERPROFILE%. Is it necessary?

Building via Gradle Fails with ConfigException for ${database.name}

I'm using the code from the latest pull from master (as of March 21, 2017).

The previous version I used (which was one prior to v2.1) did not suffer from this issue.

I'm running a private net, and have never specified any value for ${database.name} in either the runtime args or the private.conf file. It would seem to me that now, for whatever reason, there is no default value for this property.

I'm sure I could work around it by changing the property to be a hardcoded value, but I still feel this should be addressed.

I'm running via ./gradlew bootRun -Dethereumj.conf.file=/path/to/private.conf -DgenesisFile=/path/to/genesis-private.conf -Dserver.port=8081

They're the exact same conf files that I've previously used successfully, and I do see that ${database.name} is left in the current master for src/main/resources/private.conf.

I didn't see any additional instructions on the README.md that indicate I should change or update anything related to this. Still, I'm hoping I've just done something wrong.

Thanks in advance.

Stack trace is as follows:

12:16:56.886 ERROR [general]  Can't read config.
com.typesafe.config.ConfigException$UnresolvedSubstitution: /Users/duncan/code/ethereum-harmony-seed/src/main/resources/private.conf: 38: Could not resolve substitution to a value: ${database.name}
        at com.typesafe.config.impl.ConfigReference.resolveSubstitutions(ConfigReference.java:87)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.ConfigConcatenation.resolveSubstitutions(ConfigConcatenation.java:178)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.ConfigDelayedMerge.resolveSubstitutions(ConfigDelayedMerge.java:96)
        at com.typesafe.config.impl.ConfigDelayedMerge.resolveSubstitutions(ConfigDelayedMerge.java:59)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.SimpleConfigObject$1.modifyChildMayThrow(SimpleConfigObject.java:341)
        at com.typesafe.config.impl.SimpleConfigObject.modifyMayThrow(SimpleConfigObject.java:280)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:321)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:25)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.SimpleConfigObject$1.modifyChildMayThrow(SimpleConfigObject.java:341)
        at com.typesafe.config.impl.SimpleConfigObject.modifyMayThrow(SimpleConfigObject.java:280)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:321)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:25)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:149)
        at com.typesafe.config.impl.SimpleConfig.resolveWith(SimpleConfig.java:70)
        at com.typesafe.config.impl.SimpleConfig.resolve(SimpleConfig.java:60)
        at com.typesafe.config.impl.SimpleConfig.resolve(SimpleConfig.java:55)
        at com.typesafe.config.impl.SimpleConfig.resolve(SimpleConfig.java:33)
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:187)
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:148)
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:136)
        at org.ethereum.config.SystemProperties.getSpringDefault(SystemProperties.java:81)
        at org.ethereum.config.SystemProperties.getDefault(SystemProperties.java:76)
        at com.ethercamp.harmony.Application.main(Application.java:58)
Exception in thread "main" java.lang.RuntimeException: com.typesafe.config.ConfigException$UnresolvedSubstitution: /Users/duncan/code/ethereum-harmony-seed/src/main/resources/private.conf: 38: Could not resolve substitution to a value: ${database.name}
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:204)
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:148)
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:136)
        at org.ethereum.config.SystemProperties.getSpringDefault(SystemProperties.java:81)
        at org.ethereum.config.SystemProperties.getDefault(SystemProperties.java:76)
        at com.ethercamp.harmony.Application.main(Application.java:58)
Caused by: com.typesafe.config.ConfigException$UnresolvedSubstitution: /Users/duncan/code/ethereum-harmony-seed/src/main/resources/private.conf: 38: Could not resolve substitution to a value: ${database.name}
        at com.typesafe.config.impl.ConfigReference.resolveSubstitutions(ConfigReference.java:87)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.ConfigConcatenation.resolveSubstitutions(ConfigConcatenation.java:178)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.ConfigDelayedMerge.resolveSubstitutions(ConfigDelayedMerge.java:96)
        at com.typesafe.config.impl.ConfigDelayedMerge.resolveSubstitutions(ConfigDelayedMerge.java:59)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.SimpleConfigObject$1.modifyChildMayThrow(SimpleConfigObject.java:341)
        at com.typesafe.config.impl.SimpleConfigObject.modifyMayThrow(SimpleConfigObject.java:280)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:321)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:25)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.SimpleConfigObject$1.modifyChildMayThrow(SimpleConfigObject.java:341)
        at com.typesafe.config.impl.SimpleConfigObject.modifyMayThrow(SimpleConfigObject.java:280)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:321)
        at com.typesafe.config.impl.SimpleConfigObject.resolveSubstitutions(SimpleConfigObject.java:25)
        at com.typesafe.config.impl.ResolveSource.resolveCheckingReplacement(ResolveSource.java:110)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:114)
        at com.typesafe.config.impl.ResolveContext.resolve(ResolveContext.java:149)
        at com.typesafe.config.impl.SimpleConfig.resolveWith(SimpleConfig.java:70)
        at com.typesafe.config.impl.SimpleConfig.resolve(SimpleConfig.java:60)
        at com.typesafe.config.impl.SimpleConfig.resolve(SimpleConfig.java:55)
        at com.typesafe.config.impl.SimpleConfig.resolve(SimpleConfig.java:33)
        at org.ethereum.config.SystemProperties.<init>(SystemProperties.java:187)
        ... 5 more
:bootRun FAILED

Peer Names prefixed with 0x

I'm not sure if this is a Harmony bug or an EthereumJ bug? However, peer names are prefixed with "0x" for some reason.

"name": "0xParity/v1.7.7-stable-eb7c648-20171015/x86_64-linux-gnu/rustc1.20.0",

FileSystemKeystore does wrong assumption about wallet file name

Once the node is started, I got a bunch of errors like this:

2017-10-22 15:33:53,763 ERROR [MessageBroker-7] harmony - Error in making wallet address 5167e245-ea52-2b07-b853-29764b21c0f8
org.spongycastle.util.encoders.DecoderException: exception decoding Hex string: invalid characters encountered in Hex string
	at org.spongycastle.util.encoders.Hex.decode(Hex.java:132)
	at com.ethercamp.harmony.service.WalletService.lambda$getWalletInfo$104(WalletService.java:258)
	at java.util.stream.ReferencePipeline$7$1.accept(Unknown Source)
	at java.util.concurrent.ConcurrentHashMap$EntrySpliterator.forEachRemaining(Unknown Source)
	at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
	at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.util.stream.ReferencePipeline.collect(Unknown Source)
	at com.ethercamp.harmony.service.WalletService.getWalletInfo(WalletService.java:274)
	at com.ethercamp.harmony.service.WalletService.doSendWalletInfo(WalletService.java:237)
	at sun.reflect.GeneratedMethodAccessor141.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: invalid characters encountered in Hex string
	at org.spongycastle.util.encoders.HexEncoder.decode(HexEncoder.java:180)
	at org.spongycastle.util.encoders.Hex.decode(Hex.java:128)
	... 22 common frames omitted

I think the main cause of these errors is the method listStoredKeys() in the class com.ethercamp.harmony.keystore.FileSystemKeystore

    /**
     * @return array of addresses in format "0x123abc..."
     */
    @Override
    public String[] listStoredKeys() {
        return getFiles().stream()
                .filter(f -> !f.isDirectory())
                .map(f -> f.getName().split("--"))
                .filter(n -> n != null && n.length == 3)
                .map(a -> "0x" + a[2])
                .toArray(size -> new String[size]);
    }

The method does the wrong assumption that if a wallet has -- inside the file name, the right side should be the address of the wallet. This is not true, indeed it usually is the UUID. This should be also expected because the go-ethereum best practices are linked in the head of the same FileSystemKeystore.java file:

/**
 * Key store manager working in user file system. Can store and load keys.
 * Comply to go-ethereum key store format.
 * https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition
**/

I think the class should be able to read wallet with any file name and it should read the address inside the JSON file, at the "address" attribute.

Issue compiling with IntelliJ (Lombok plugin)

I had an issue compiling with IntelliJ. The first time, it didn't work "log variable undefined". Gradle command line build, worked.

Then I found that the Lombok plugin should be installed, and the annotation processing should be enabled.

Could you add the solution to README?

Unable to add keystore file

Not sure if this would be an enhancement or a bug -- I tried putting an entry in the /keystore folder for an existing wallet, and adding to the list in the wallet.json but it still does not give me the "keystore password" option on the send eth action screen, and still wants to know my decrypted private key, or sha3.

Let user know when contract, deployed via Harmony, failed to create because error in contructor

Default contract deployed from Ethereum Studio may have error in constructor. It will not be created successfully.
We can let user know via few ways:

  1. Keeping database of contracts deployed via Harmony and there vmtrace (or only errors in vmtrace).
  2. Ethereum Studio should monitor transaction via ethereumJ JSON-RPC method ethj_getTransactionReceipt, which is also return more informative errors.

@asinyagin Please put your input

Incorrect IP if connecting Remote

I setup a VM for Harmony, it's bridged, and when I connect to the web interface it first showed the private IP of the node, it then switched to the public IP of my desktop (not the public IP of the VM, yes they're different).

Basically, my desktop has VPN connection so it has Public IP A. The VM running Harmony has a bridged connection, no VPN and it has Public IP B.

When I connect to the web interface of Harmony it returns Public IP A.

image

Could not determine java version from '9.0.4'

I'm using Ubuntu 16.04.3 x64

Not sure if Harmony error or EthereumJ error?

sudo add-apt-repository ppa:webupd8team/java
sudo apt install oracle-java9-installer
sudo apt install oracle-java9-set-default

I've also set JAVA_HOME="/usr/lib/jvm/java-9-oracle"

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '9.0.4'.

Build and publish self-contained executable Jar

Harmony is intended to be a user friendly peer, so in my mind we need to allow user just download and run the Jar without building it from scratch (accounting the build is more complex than say EthJ core or Geth)

Change open port icon to lock.

In the UI if you click the "Test Ports" button and your ports are not open to the internet you get a red x icon. This should instead be a green lock to indicate to the user that they are currently secure against the internet being able to access their node via RPC.

There may be value in having the same lock icon but a different color (e.g., red) for the ETH port (rather than the RPC port) since that one should be opened up to the internet. Perhaps red unlocked and green locked for RPC and green unlocked and red locked for ETH?

The goal here would be to let users know when they are in a healthy state (green) for each of the ports. At the moment, the red X is an indicator of a problem but you really shouldn't be opening your RPC port to the internet without thought.

Possibility of rare error in long sync on live network

https://dl.dropboxusercontent.com/u/3365000/java_pid75769.hprof.zip 1.3 GB will unpack to 3.5GB
Happened on Mac (dump) and Win (in ~4 hours after sync from zero).

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
Dumping heap to java_pid75769.hprof ...
Heap dump file created [3450764804 bytes in 14.671 secs]

In dump we noticed 20k BlockWrapper objects in SyncManager. Memory limit was 4G.

Anton wasn't able to reproduce in core or harmony.

Wrong peer type reported

From logs:

Peer V63: [ cec7e2b1, IDLE, ping 52 ms, difficulty 49699752809, best block 50857 ]: Ethereum(J)/v1.5.0/Linux/Dev/Java/Dev Nodes/sec: NaN, miss: NaN Life: 778s, Idle: 778150ms

From GUI:

Type: Geth
OS: Linux
Version: go1.7.4
Country: N/A

Details: Geth/v1.5.5-stable-ff07d548/linux/go1.7.4

Supported protocols: Eth: 63, Eth: 62

Block number: #50,857

OutOfMemory when runPrivate

I get an OutOfMemory when I run ./gradlew runPrivate while generating the dag file

I've removed a JavaArgs "-Xmx1G" and I don't have the error anymore

My env is OSX and my JVM version is 1.8.0_111

private network,execute genesis-private.json,miner_start success,but my coinbase address reward always 0

this is my genesis-private.json
{
"alloc": {
},
"nonce": "0x0000000000000066",
"difficulty": "0x100000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x7e228a32ceb9153b546ab3c97e9a76afcf7b54ca",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0102abcd",
"gasLimit": "0x1000000000",
"config": {
"chainId": 2018,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}

miner_start success: info==========
Wow, block mined !!!: f90205f90200a0e2dadca9971054a74086e82b5786e56e12d00c8a3368156ab4a97a36217c7640a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347941ddda91d49bff7861f4074054e9f31aea99190b2a025a05fa22915a92ff7fcf6e20ef3bd6037deac056b0ebdcfba0464802e1a9fdba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082020082752b871388000000000080845a982020840102abcda04f77a034970b3a30821d1e5f3e4334b92f7dc8fd5ce18e9241ff306418905c9388f2c270c5197ee187c0c0
BlockData [
hash=cd55553f2ed0552cbe91c335060457e9eb7079df52818a9b42ce93de51f11a8a
hash=cd55553f2ed0552cbe91c335060457e9eb7079df52818a9b42ce93de51f11a8a
parentHash=e2dadca9971054a74086e82b5786e56e12d00c8a3368156ab4a97a36217c7640
unclesHash=1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
coinbase=7e228a32ceb9153b546ab3c97e9a76afcf7b54ca
stateRoot=25a05fa22915a92ff7fcf6e20ef3bd6037deac056b0ebdcfba0464802e1a9fdb
txTrieHash=56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421
receiptsTrieHash=56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421
difficulty=100000
number=29995
gasLimit=1000000000
gasUsed=0
timestamp=1519919136 (2018.03.01 23:45:36)
extraData=0102abcd
mixHash=4f77a034970b3a30821d1e5f3e4334b92f7dc8fd5ce18e9241ff306418905c93
nonce=f2c270c5197ee187
Uncles []
Txs []
]

but my address 7e228a32ceb9153b546ab3c97e9a76afcf7b54ca balance always 0

please help me ! thanks very much!

Does the newest ethereumj-core-1.7.0-SNAPSHOT.jar include error?

1.Today ,when i run gradlew runMain -Dserver.port=7000,there is build error info:

E:\business\ethereum-harmony\src\main\java\com\ethercamp\harmony\jsonrpc\EthJson
RpcImpl.java:834: 错误: contracts可以在CompilationResult中访问private
        org.ethereum.solidity.compiler.CompilationResult.ContractMetadata contra
ctMetadata = result.contracts.values().iterator().next();

But this error is not exist yesterday,and i find the gradle download a new ethereumj-core-1.7.0-SNAPSHOT.jar.
So i think there is a bug in newest ethereumj-core-1.7.0-SNAPSHOT.jar

private network mining Cause a mistake!!! Please help!!! thanks very much

Caused by: java.lang.RuntimeException: Invalid Trie state, can't resolve hash 659a32f2610f4b8f76ed9f906d80b8a854573bd57a2dbe2b775ca4997257d7c3
at org.ethereum.trie.TrieImpl$Node.resolve(TrieImpl.java:111)
at org.ethereum.trie.TrieImpl$Node.parse(TrieImpl.java:204)
at org.ethereum.trie.TrieImpl$Node.getType(TrieImpl.java:340)
at org.ethereum.trie.TrieImpl.insert(TrieImpl.java:537)
at org.ethereum.trie.TrieImpl.put(TrieImpl.java:531)
at org.ethereum.trie.SecureTrie.put(SecureTrie.java:47)
at org.ethereum.trie.SecureTrie.put(SecureTrie.java:26)
at org.ethereum.datasource.SourceCodec.put(SourceCodec.java:48)
at org.ethereum.datasource.WriteCache.flush(WriteCache.java:241)
at org.ethereum.datasource.AbstractChainedSource.flush(AbstractChainedSource.java:66)
at org.ethereum.datasource.SourceChainBox.flushImpl(SourceChainBox.java:77)
at org.ethereum.datasource.AbstractChainedSource.flush(AbstractChainedSource.java:64)
at org.ethereum.db.RepositoryRoot.getRoot(RepositoryRoot.java:120)
at org.ethereum.core.BlockchainImpl.applyBlock(BlockchainImpl.java:912)
at org.ethereum.core.BlockchainImpl.createNewBlock(BlockchainImpl.java:505)
at org.ethereum.core.BlockchainImpl.createNewBlock(BlockchainImpl.java:471)
at org.ethereum.mine.BlockMiner.getNewBlockForMining(BlockMiner.java:249)
at org.ethereum.mine.BlockMiner.restartMining(BlockMiner.java:255)
at org.ethereum.mine.BlockMiner.startMining(BlockMiner.java:141)
at org.ethereum.mine.BlockMiner.(BlockMiner.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
... 67 common frames omitted

Feedback from Dmitry

Looking at Harmony:

  1. Dashboard
    a) It would be great to see links on: Highest known block, Top miners addresses. Maybe after fast sync is over, block at top could be a link too. Blocks in tree too.
    b) Tree is not loaded on fast sync? Lost it. If not, maybe show something there, so user will know that there should be something on this place later.
  2. Ethereum peers. Maybe checkbox "Show non-active peers" should add non-active peers to list, not display only non-active?
  3. JSON RPC API usage.
    a) Some sorting would be helpful. At least, latest usage / default.
    b) Is it difficult to add link on method name, so I click on it and I'm in terminal with method name typed, same for history of invocations, but both without "Enter" (I mean when it's added to terminal, it's not executed automatically)
  4. Terminal
    a) It would be great if methods in list were links, so you could auto-complete with mouse
    b) It would be great to see method help and invocation history when method name is typed completely.
    c) Actually it looks like you can merge "Terminal" and "JSON RPC API usage" in future
  5. Wallet
    a) Tab is not working on forms
    b) I'm getting another address with same mnemonic phrase as in CashEth
    c) Where do I setup keystore password?
    d) ( ) Keystore password ( ) Private key or sha3 seed words ( ) Mnemonic phrase
    This thing looks too complex. Sha3 seed words will be 1 time sha3, mnemonic phrase 2031, yeah?
    e) Also buttons are a bit confusing, maybe add some icon for watch-only add button? or name it "Watch address"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.