* Log the right shard number for wallet/getFreeToken
* Don't try to use empty commit bitmap from genesis block
* Fail hard if block reward or finalization fails
* Log the public key if message sig verification fails
* Extract and save chain state from received blocks in order to
eliminate deep tail recursion
* Properly deep copy chain config (previously ChainID was being shared
among chains)
* Eliminate chain use-before-init window in node.New()
* Save genesis epoch shard state in new blockchain database
* Do not check epoch of the received shard state message (temp
workaround – we should introduce the check elsewhere)
* Propose an empty block if no transactions have been received for 10
seconds
* Manage shard chains as first class citizen
* Bring core.BlockChain's read/write semantics cleaner
* Reimplement the block reward in terms of on-chain committee info, not
hardcoded genesis committee.
utilize go:generate to convert the default wallet.ini file
into go constant `defaultWalletIni` defined in
`cmd/client/wallet/generated_ini.go` which will be used when
`.hmy/wallet.ini` doesn't exist under the current filesystem.
ethereum compatible keystore
support passphrase for wallet new/list/import functions
support export keystore using encrypted json format
Signed-off-by: Leo Chen <leo@harmony.one>
each node will communicate in 3 pubsub topics:
* group, exchange the consensus group messages
* client, exchange the client messages, like transactions
* global, exchange global messages, like cross-shard tx, or communicate
with beacon chain (not enabled for now)
Signed-off-by: Leo Chen <leo@harmony.one>
use an external environment variable to specify the rpc servers
of the wallet. this will greatly simplify the testing.
example of the environment variable:
export RpcNodes="127.0.0.1:8989,192.168.129.1:5555"
Signed-off-by: Leo Chen <leo@harmony.one>
The main problem is the wallet is using p2p for async communication and
it exits too fast before p2p finished the tasks.
So, we added a few seconds waiting in the program and it works fine.
Signed-off-by: Leo Chen <leo@harmony.one>
This is to stay compliant
https://github.com/golang-standards/project-layout/tree/master/cmd, to
quote which:
“Don't put a lot of code in the application directory. If you think the
code can be imported and used in other projects, then it should live in
the /pkg directory. If the code is not reusable or if you don't want
others to reuse it, put that code in the /internal directory.”