public static UInt64 UnixTime() { TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)); double unixTime = span.TotalSeconds; return (UInt64)unixTime; }
void SendVersionPacket() { IPEndPoint remote = (IPEndPoint)mSocket.RemoteEndPoint; IPEndPoint local = (IPEndPoint)mSocket.LocalEndPoint; // Send version packet MemoryStream stream = new MemoryStream(); BinaryWriter w = new BinaryWriter(stream); // -- PAYLOAD -- // version w.Write(mProtocolVersion); // Services Int64 services = 0x0000000000000001; w.Write(services); // Timestamp UInt64 timestamp = Utils.UnixTime(); w.Write(timestamp); // addr_recv w.Write(services); w.Write((UInt64)0); w.Write((ushort)0); w.Write((ushort)0xFFFF); byte[] remoteBytes = remote.Address.GetAddressBytes(); w.Write(remoteBytes); w.Write(Utils.Byteswap(mPort)); // addr_from w.Write(services); w.Write((UInt64)0); w.Write((ushort)0); w.Write((ushort)0xFFFF); byte[] localBytes = local.Address.GetAddressBytes(); w.Write(localBytes); w.Write(Utils.Byteswap(mPort)); // nonce w.Write((UInt64)0xC4ACFF3D04805523); // user_agent w.Write((byte)0xF); w.Write("/Satoshi:0.8.6/".ToArray()); // start_height w.Write(mOwner.CurrentHeight); byte[] packetData = stream.ToArray(); SendPacket("version", packetData); w.Close(); }