public override object Clone() { var behavior = new ChainBehavior(_BlockChain); behavior.Nodes = Nodes; return(behavior); }
public override object Clone() { var clone = new ChainBehavior(Chain) { CanSync = CanSync, CanRespondToGetHeaders = CanRespondToGetHeaders, AutoSync = AutoSync }; return(clone); }
public override object Clone() { var clone = new ChainBehavior(Chain) { CanSync = CanSync, CanRespondToGetHeaders = CanRespondToGetHeaders, AutoSync = AutoSync, _InvalidBlocks = _InvalidBlocks, _InvalidBlocksLock = _InvalidBlocksLock }; return(clone); }
public override object Clone() { var clone = new ChainBehavior(Chain) { CanSync = CanSync, CanRespondToGetHeaders = CanRespondToGetHeaders, AutoSync = AutoSync, SkipPoWCheck = SkipPoWCheck, _State = _State }; return(clone); }
public void CanMaintainChainWithChainBehavior() { using(var node = Node.ConnectToLocal(Network.TestNet)) { var chain = node.GetChain(uint256.Parse("00000000a2424460c992803ed44cfe0c0333e91af04fde9a6a97b468bf1b5f70")); Assert.True(chain.Height == 500); using(var tester = new NodeServerTester(Network.TestNet)) { var n1 = tester.Node1; n1.Behaviors.Add(new ChainBehavior(chain)); n1.VersionHandshake(); Assert.True(n1.MyVersion.StartHeight == 500); var n2 = tester.Node2; Assert.True(n2.MyVersion.StartHeight == 0); Assert.True(n2.PeerVersion.StartHeight == 500); Assert.True(n1.State == NodeState.HandShaked); Assert.True(n2.State == NodeState.HandShaked); var behavior = new ChainBehavior(new ConcurrentChain(Network.TestNet)); n2.Behaviors.Add(behavior); TestUtils.Eventually(() => behavior.Chain.Height == 500); var chain2 = n2.GetChain(uint256.Parse("00000000a2424460c992803ed44cfe0c0333e91af04fde9a6a97b468bf1b5f70")); Assert.True(chain2.Height == 500); var chain1 = n1.GetChain(uint256.Parse("00000000a2424460c992803ed44cfe0c0333e91af04fde9a6a97b468bf1b5f70")); Assert.True(chain1.Height == 500); chain1 = n1.GetChain(uint256.Parse("000000008cd4b1bdaa1278e3f1708258f862da16858324e939dc650627cd2e27")); Assert.True(chain1.Height == 499); Thread.Sleep(5000); } } }
public override object Clone() { var clone = new ChainBehavior(Chain) { CanSync = CanSync, CanRespondToGetHeaders = CanRespondToGetHeaders, AutoSync = AutoSync }; return clone; }
/// <summary> /// Configure the components of the wallet /// </summary> /// <param name="group">The group to use</param> public void Configure(NodesGroup group) { if(group == null) throw new ArgumentNullException("group"); var parameters = group.NodeConnectionParameters; group.Requirements.MinVersion = ProtocolVersion.PROTOCOL_VERSION; group.Requirements.RequiredServices |= NodeServices.Network; var chain = parameters.TemplateBehaviors.Find<ChainBehavior>(); if(chain == null) { chain = new ChainBehavior(new ConcurrentChain(_Parameters.Network)); parameters.TemplateBehaviors.Add(chain); } if(chain.Chain.Genesis.HashBlock != _Parameters.Network.GetGenesis().GetHash()) throw new InvalidOperationException("ChainBehavior with invalid network chain detected"); var addrman = parameters.TemplateBehaviors.Find<AddressManagerBehavior>(); if(addrman == null) { addrman = new AddressManagerBehavior(new AddressManager()); parameters.TemplateBehaviors.Add(addrman); } var tracker = parameters.TemplateBehaviors.Find<TrackerBehavior>(); if(tracker == null) { tracker = new TrackerBehavior(new Tracker(), chain.Chain); parameters.TemplateBehaviors.Add(tracker); } var wallet = FindWalletBehavior(parameters.TemplateBehaviors); if(wallet == null) { wallet = new WalletBehavior(this); parameters.TemplateBehaviors.Add(wallet); } var broadcast = parameters.TemplateBehaviors.Find<BroadcastHubBehavior>(); if(broadcast == null) { broadcast = new BroadcastHubBehavior(); parameters.TemplateBehaviors.Add(broadcast); } _Group = group; if(_ListenedTracker != null) { _ListenedTracker.NewOperation -= _ListenerTracked_NewOperation; } _ListenedTracker = tracker.Tracker; _ListenedTracker.NewOperation += _ListenerTracked_NewOperation; }
/// <summary> /// Connect the wallet with the given connection parameters /// </summary> /// <param name="parameters"></param> public void Connect(NodeConnectionParameters parameters) { if(State != WalletState.Created) throw new InvalidOperationException("The wallet is already connecting or connected"); var group = NodesGroup.GetNodeGroup(parameters); if(group == null) { group = new NodesGroup(_Parameters.Network, parameters); } parameters = group.NodeConnectionParameters; group.Requirements.MinVersion = ProtocolVersion.PROTOCOL_VERSION; group.Requirements.RequiredServices = NodeServices.Network; var chain = parameters.TemplateBehaviors.Find<ChainBehavior>(); if(chain == null) { chain = new ChainBehavior(new ConcurrentChain(_Parameters.Network)); parameters.TemplateBehaviors.Add(chain); } if(chain.Chain.Genesis.HashBlock != _Parameters.Network.GetGenesis().GetHash()) throw new InvalidOperationException("ChainBehavior with invalid network chain detected"); var addrman = parameters.TemplateBehaviors.Find<AddressManagerBehavior>(); if(addrman == null) { addrman = new AddressManagerBehavior(new AddressManager()); parameters.TemplateBehaviors.Add(addrman); } var tracker = parameters.TemplateBehaviors.Find<TrackerBehavior>(); if(tracker == null) { tracker = new TrackerBehavior(new Tracker(), chain.Chain); parameters.TemplateBehaviors.Add(tracker); } _Chain = chain.Chain; _AddressManager = addrman.AddressManager; _Tracker = tracker.Tracker; _TrackerBehavior = tracker; _Group = group; if(AddKnownScriptToTracker()) _Group.Purge("Bloom filter renew"); _State = WalletState.Disconnected; _Group.Connect(); _Group.ConnectedNodes.Added += ConnectedNodes_Added; _Group.ConnectedNodes.Removed += ConnectedNodes_Added; foreach(var node in _Group.ConnectedNodes) { node.Behaviors.Find<TrackerBehavior>().Scan(_ScanLocation, Created); } }