Commit 9efbd476 authored by Dan Gershony's avatar Dan Gershony Committed by GitHub

Merge pull request #114 from bokobza/master

Chain + loglevel
parents 43dbc772 e7b987a5
...@@ -35,11 +35,7 @@ namespace Breeze.Daemon ...@@ -35,11 +35,7 @@ namespace Breeze.Daemon
Logs.Configure(Logs.GetLoggerFactory(args)); Logs.Configure(Logs.GetLoggerFactory(args));
// get the api uri // get the api uri
var apiUri = args.SingleOrDefault(arg => arg.StartsWith("apiuri")); var apiUri = args.GetValueOf("apiuri");
if (!string.IsNullOrEmpty(apiUri))
{
apiUri = apiUri.Replace("apiuri=", string.Empty);
}
if (args.Contains("stratis")) if (args.Contains("stratis"))
{ {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
}, },
"Breeze.Daemon TestNet": { "Breeze.Daemon TestNet": {
"commandName": "Project", "commandName": "Project",
"commandLineArgs": "-testnet -tumbler-uri=http://localhost:5050 light -debug" "commandLineArgs": "-testnet -tumbler-uri=http://localhost:5050 light -debug=all -loglevel=debug"
}, },
"StratisTest": { "StratisTest": {
"commandName": "Project", "commandName": "Project",
......
...@@ -36,16 +36,33 @@ namespace Breeze.Wallet ...@@ -36,16 +36,33 @@ namespace Breeze.Wallet
/// <inheritdoc /> /// <inheritdoc />
public Task Initialize() public Task Initialize()
{ {
this.walletTip = this.chain.GetBlock(this.walletManager.WalletTipHash);
if (this.walletTip == null)
throw new WalletException("the wallet tip was not found in the main chain");
// if there is no wallet created yet, the wallet tip is the chain tip. // if there is no wallet created yet, the wallet tip is the chain tip.
if (!this.walletManager.Wallets.Any()) if (!this.walletManager.Wallets.Any())
{ {
this.walletTip = this.chain.Tip; this.walletTip = this.chain.Tip;
} }
else
{
this.walletTip = this.chain.GetBlock(this.walletManager.WalletTipHash);
if (this.walletTip == null)
{
// the wallet tip was not found in the main chain.
// this can happen if the node crashes unexpectedly.
// to recover we need to find the first common fork
// with the best chain, as the wallet does not have a
// list of chain headers we use a BlockLocator and persist
// that in the wallet. the block locator will help finding
// a common fork and bringing the wallet back to a good
// state (behind the best chain)
var locators = this.walletManager.Wallets.First().BlockLocator;
BlockLocator blockLocator = new BlockLocator { Blocks = locators.ToList() };
var fork = this.chain.FindFork(blockLocator);
this.walletManager.RemoveBlocks(fork);
this.walletManager.WalletTipHash = fork.HashBlock;
this.walletTip = fork;
}
}
// subscribe to receiving blocks and transactions // subscribe to receiving blocks and transactions
BlockSubscriber sub = new BlockSubscriber(this.signals.Blocks, new BlockObserver(this)); BlockSubscriber sub = new BlockSubscriber(this.signals.Blocks, new BlockObserver(this));
...@@ -129,7 +146,7 @@ namespace Breeze.Wallet ...@@ -129,7 +146,7 @@ namespace Breeze.Wallet
if (incomingBlock.Height > this.walletTip.Height) if (incomingBlock.Height > this.walletTip.Height)
{ {
// the wallet is falling behind we need to catch up // the wallet is falling behind we need to catch up
this.logger.LogDebug($"block received with height: {inBestChain.Height} and hash: {block.Header.GetHash()} is too far in advance. put the pull back."); this.logger.LogWarning($"block received with height: {inBestChain.Height} and hash: {block.Header.GetHash()} is too far in advance. put the puller back.");
this.blockNotification.SyncFrom(this.walletTip.HashBlock); this.blockNotification.SyncFrom(this.walletTip.HashBlock);
return; return;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment