Ejemplo n.º 1
0
        public override object Clone()
        {
            var behavior = new ChainBehavior(_BlockChain);

            behavior.Nodes = Nodes;
            return(behavior);
        }
Ejemplo n.º 2
0
        public override object Clone()
        {
            var clone = new ChainBehavior(Chain)
            {
                CanSync = CanSync,
                CanRespondToGetHeaders = CanRespondToGetHeaders,
                AutoSync = AutoSync
            };

            return(clone);
        }
Ejemplo n.º 3
0
        public override object Clone()
        {
            var clone = new ChainBehavior(Chain)
            {
                CanSync = CanSync,
                CanRespondToGetHeaders = CanRespondToGetHeaders,
                AutoSync           = AutoSync,
                _InvalidBlocks     = _InvalidBlocks,
                _InvalidBlocksLock = _InvalidBlocksLock
            };

            return(clone);
        }
Ejemplo n.º 4
0
        public override object Clone()
        {
            var clone = new ChainBehavior(Chain)
            {
                CanSync = CanSync,
                CanRespondToGetHeaders = CanRespondToGetHeaders,
                AutoSync     = AutoSync,
                SkipPoWCheck = SkipPoWCheck,
                _State       = _State
            };

            return(clone);
        }
Ejemplo n.º 5
0
		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);
				}
			}
		}
Ejemplo n.º 6
0
		public override object Clone()
		{
			var clone = new ChainBehavior(Chain)
			{
				CanSync = CanSync,
				CanRespondToGetHeaders = CanRespondToGetHeaders,
				AutoSync = AutoSync
			};
			return clone;
		}
Ejemplo n.º 7
0
		/// <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;
		}
Ejemplo n.º 8
0
		/// <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);
			}
		}