Beispiel #1
0
        private async Task Peer_OnVersion(BitcoinPeer s, bitcoin_lib.P2P.Version v)
        {
            var va = new VerAck();
            await s.WriteMessage(va);

            Console.WriteLine($"Client connected {v.UserAgent}");
        }
Beispiel #2
0
        private async Task Peer_OnPing(BitcoinPeer s, Ping p)
        {
            var pong = new Pong();

            pong.Nonce = p.Nonce;

            await s.WriteMessage(pong);
        }
Beispiel #3
0
        /// <summary>
        /// Adds a new peer to the node, all exceptions are thrown back from connection errors.
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="cp"></param>
        /// <returns></returns>
        /// <exception cref="SocketException"></exception>
        public async Task AddPeer(IPEndPoint ip, ChainParams cp = null)
        {
            var id = Guid.NewGuid();

            var np = new T();

            np.OnStop += Node_OnStop;
            var nc = new BitcoinPeer(cp ?? ChainParams);
            await nc.ConnectAsync(ip);

            np.Init(this, nc, id);
            await np.SendVersion();

            if (Peers.TryAdd(id, np))
            {
                OnLog?.Invoke($"New peer added: {np.RemoteEndpoint}!");
            }
        }
Beispiel #4
0
        public BitcoinNodePeer(BitcoinPeer p)
        {
            Peer                = p;
            Peer.OnAddr        += Peer_OnAddr;
            Peer.OnAlert       += Peer_OnAlert;
            Peer.OnFeeFilter   += Peer_OnFeeFilter;
            Peer.OnFilterAdd   += Peer_OnFilterAdd;
            Peer.OnFilterClear += Peer_OnFilterClear;
            Peer.OnFilterLoad  += Peer_OnFilterLoad;
            Peer.OnGetAddr     += Peer_OnGetAddr;
            Peer.OnGetBlocks   += Peer_OnGetBlocks;
            Peer.OnGetData     += Peer_OnGetData;
            Peer.OnGetHeaders  += Peer_OnGetHeaders;
            Peer.OnHeaders     += Peer_OnHeaders;
            Peer.OnInv         += Peer_OnInv;
            Peer.OnMemPool     += Peer_OnMemPool;
            Peer.OnNotFound    += Peer_OnNotFound;
            Peer.OnPing        += Peer_OnPing;
            Peer.OnPong        += Peer_OnPong;
            Peer.OnReject      += Peer_OnReject;
            Peer.OnSendHeaders += Peer_OnSendHeaders;
            Peer.OnVerAck      += Peer_OnVerAck;
            Peer.OnVersion     += Peer_OnVersion;

            Peer.Start();

            //Send version
            Ver = new bitcoin_lib.P2P.Version($"/hashstream:0.0.1-alpha/");
            var nd = new byte[9];

            new Random().NextBytes(nd);
            Ver.Nonce         = BitConverter.ToUInt64(nd, 0);
            Ver.RecvIp        = ((IPEndPoint)Peer.RemoteEndpoint).Address;
            Ver.RecvPort      = (UInt16)((IPEndPoint)Peer.RemoteEndpoint).Port;
            Ver.RecvServices  = 0;
            Ver.StartHeight   = 0;
            Ver.Timestamp     = (UInt64)DateTimeOffset.Now.ToUnixTimeSeconds();
            Ver.TransIp       = IPAddress.None;
            Ver.TransPort     = 0;
            Ver.TransServices = (UInt64)Services.NODE_NETWORK;

            Peer.WriteMessage(Ver);
        }
Beispiel #5
0
 private async Task Peer_OnPong(BitcoinPeer s, Pong p)
 {
 }
Beispiel #6
0
 private Task Peer_OnReject(BitcoinPeer s, Reject r)
 {
     throw new NotImplementedException();
 }
Beispiel #7
0
 private Task Peer_OnSendHeaders(BitcoinPeer s, SendHeaders sh)
 {
     throw new NotImplementedException();
 }
Beispiel #8
0
 private Task Peer_OnVerAck(BitcoinPeer s, VerAck va)
 {
     throw new NotImplementedException();
 }
Beispiel #9
0
 private Task Peer_OnInv(BitcoinPeer s, Inv i)
 {
     throw new NotImplementedException();
 }
Beispiel #10
0
 private Task Peer_OnAlert(BitcoinPeer s, Alert a)
 {
     throw new NotImplementedException();
 }
Beispiel #11
0
 private Task Peer_OnFeeFilter(BitcoinPeer s, FeeFilter f)
 {
     throw new NotImplementedException();
 }
Beispiel #12
0
 private Task Peer_OnFilterAdd(BitcoinPeer s, FilterAdd f)
 {
     throw new NotImplementedException();
 }
Beispiel #13
0
 private Task Peer_OnGetBlocks(BitcoinPeer s, GetBlocks gb)
 {
     throw new NotImplementedException();
 }
Beispiel #14
0
 private Task Peer_OnGetData(BitcoinPeer s, GetData gd)
 {
     throw new NotImplementedException();
 }
Beispiel #15
0
 private Task Peer_OnGetHeaders(BitcoinPeer s, GetHeaders gh)
 {
     throw new NotImplementedException();
 }
Beispiel #16
0
 private Task Peer_OnNotFound(BitcoinPeer s, NotFound nf)
 {
     throw new NotImplementedException();
 }
Beispiel #17
0
 private Task Peer_OnAddr(BitcoinPeer s, Addr a)
 {
     throw new NotImplementedException();
 }
Beispiel #18
0
 private Task Peer_OnMemPool(BitcoinPeer s, MemPool mp)
 {
     throw new NotImplementedException();
 }