Beispiel #1
0
        public VersionMessage(ShortNetworkAddress recipientAddress,
                              ShortNetworkAddress senderAddress)
        {
            Header           = new Header("version");
            ProtocolVersion  = 70002;
            Services         = 1;
            Timestamp        = BitcoinHelper.GetCurrentTimeStamp();
            RecipientAddress = recipientAddress;
            SenderAddress    = senderAddress;
            Nonce            = 0;
            UserAgent        = "/MikoleuszBlogBitcoinTinyClient:1.0/";
            UserAgentLength  = new VarInt(Convert.ToUInt64(UserAgent.Length));
            StartHeight      = 460650;
            Relay            = true;

            ComputeHeader();
        }
Beispiel #2
0
        public static void PerformTransaction(
            byte[] senderIpAddress,
            byte[] recipientIpAddress,
            string previousTransactionIdHex,
            string senderBitcoinAddress,
            string senderPrivateKeyHex,
            string recipientBitcoinAddress,
            double transactionAmountInBtc)
        {
            var senderShortNetworkAddress =
                new ShortNetworkAddress(senderIpAddress, 8333);

            var recipientShortNetworkAddress =
                new ShortNetworkAddress(recipientIpAddress, 8333);

            var versionMessage =
                new VersionMessage(recipientShortNetworkAddress, senderShortNetworkAddress);

            var transactionMessage = TxMessage.Create(
                previousTransactionIdHex,
                senderBitcoinAddress,
                senderPrivateKeyHex,
                recipientBitcoinAddress,
                transactionAmountInBtc);

            var tcpClient       = new TcpClient(recipientShortNetworkAddress.IpString, recipientShortNetworkAddress.Port);
            var tcpClientStream = tcpClient.GetStream();

            var versionMessageBytes     = versionMessage.ToBytes();
            var transactionMessageBytes = transactionMessage.ToBytes();

            tcpClientStream.Write(versionMessageBytes, 0, versionMessageBytes.Length);
            tcpClientStream.Write(transactionMessageBytes, 0, transactionMessageBytes.Length);

            var buffer = new byte[0];

            while (true)
            {
                var bytesToReadCount = tcpClient.Available;

                if (bytesToReadCount == 0)
                {
                    Thread.Sleep(100);
                    continue;
                }

                var readedData = new byte[bytesToReadCount];
                tcpClientStream.Read(readedData, 0, bytesToReadCount);

                buffer = buffer.Concat(readedData).ToArray();

                var header = new Header(buffer);

                Console.WriteLine(
                    $"{DateTime.Now.ToLongTimeString()}: " +
                    $"incoming message: {header.Command}. " +
                    $"Length: {header.PayloadLength}");

                buffer = buffer.Skip(24 + (int)header.PayloadLength).ToArray();
            }
        }