* 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.
1. Remove eth rpc code and unnecessary changes from
7a0f18f92b. Import the package instead.
2. Move HmyAPIBackend into core package so it has more access to core.
3. Add API interface for services.
4. Start RPC for all roles, for both HTTP (baseport+10) and WS (baseport+20).
3. Keep implemented APIs but move to internal/hmyapi package.
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.
They add call site information (function name, filename, line number) to
a logger.
GetLogger is intended for direct one-shot logging calls, i.e.
“GetLogger().Debug(...)”.
Wrap reusable loggers with WithCaller():
logger := utils.GetLogInstance().New(/* ... */)
/* ... */
utils.WithCaller(logger).Debug(/* ... */)
Or use a local getLogger() idiom:
logger := utils.GetLogInstance().New(/* ... */)
getLogger := func() log.Logger {
return WithCallerSkip(logger, 1)
}
/* ... */
getLogger().Debug(/* ... */)
Since getLogger() uses closure, logger can later be augmented with
“logger = logger.New(/* ... */)” syntax.
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>
We experienced a few cases that node failed to connect to bootnode and
the node program will not be useable. So, we add a retry mechanism to
increase the connection times to bootnode.
Signed-off-by: Leo Chen <leo@harmony.one>