Exemplo n.º 1
0
 public void WriteTo(Stream output)
 {
     Protobuf.ProtobufReaderWriter proto = new ProtobufReaderWriter(output);
     proto.WriteKey(1, ProtobufReaderWriter.PROTOBUF_LENDELIM);
     proto.WriteBytes(Payment.ToBytes());
     if (Memo != null)
     {
         proto.WriteKey(2, ProtobufReaderWriter.PROTOBUF_LENDELIM);
         proto.WriteString(Memo);
     }
 }
Exemplo n.º 2
0
        internal void Write(Stream output)
        {
            var writer = new ProtobufReaderWriter(output);

            if (_Amount != null)
            {
                writer.WriteKey(1, ProtobufReaderWriter.PROTOBUF_VARINT);
                writer.WriteULong((ulong)_Amount.Satoshi);
            }
            writer.WriteKey(2, ProtobufReaderWriter.PROTOBUF_LENDELIM);
            writer.WriteBytes(Script == null ? new byte[0] : Script.ToBytes(true));
        }
Exemplo n.º 3
0
        public void WriteTo(Stream stream)
        {
            var writer = new ProtobufReaderWriter(stream);

            if (_Network != null)
            {
                var str = _Network == Network.Main ? "main" :
                          _Network == Network.TestNet ? "test" :
                          _Network == Network.RegTest ? "regtest" : null;
                if (str == null)
                {
                    throw new InvalidOperationException("Impossible to serialize a payment request on network " + _Network);
                }
                writer.WriteKey(1, ProtobufReaderWriter.PROTOBUF_LENDELIM);
                writer.WriteString(str);
            }

            foreach (var txout in Outputs)
            {
                writer.WriteKey(2, ProtobufReaderWriter.PROTOBUF_LENDELIM);
                writer.WriteBytes(txout.ToBytes());
            }

            writer.WriteKey(3, ProtobufReaderWriter.PROTOBUF_VARINT);
            writer.WriteULong(Utils.DateTimeToUnixTime(Time));

            if (Expires != null)
            {
                writer.WriteKey(4, ProtobufReaderWriter.PROTOBUF_VARINT);
                writer.WriteULong(Utils.DateTimeToUnixTime(Expires.Value));
            }

            if (Memo != null)
            {
                writer.WriteKey(5, ProtobufReaderWriter.PROTOBUF_LENDELIM);
                writer.WriteString(Memo);
            }

            if (PaymentUrl != null)
            {
                writer.WriteKey(6, ProtobufReaderWriter.PROTOBUF_LENDELIM);
                writer.WriteString(PaymentUrl.AbsoluteUri);
            }

            if (MerchantData != null)
            {
                writer.WriteKey(7, ProtobufReaderWriter.PROTOBUF_LENDELIM);
                writer.WriteBytes(MerchantData);
            }
        }
Exemplo n.º 4
0
        public static PaymentMessage Load(Stream source, Network network)
        {
            if (source.CanSeek && source.Length > MaxLength)
            {
                throw new ArgumentException("Payment messages larger than " + MaxLength + " bytes should be rejected by the merchant's server", "source");
            }
            network = network ?? Network.Main;
            PaymentMessage       message = new PaymentMessage();
            ProtobufReaderWriter proto   = new ProtobufReaderWriter(source);
            int key;

            while (proto.TryReadKey(out key))
            {
                switch (key)
                {
                case 1:
                    message.MerchantData = proto.ReadBytes();
                    break;

                case 2:
                    var tx = network.Consensus.ConsensusFactory.CreateTransaction();
                    tx.ReadWrite(proto.ReadBytes());
                    message.Transactions.Add(tx);
                    break;

                case 3:
                    message.RefundTo.Add(PaymentOutput.Load(proto.ReadBytes()));
                    break;

                case 4:
                    message.Memo = proto.ReadString();
                    break;

                default:
                    break;
                }
            }
            message.Network = network;
            return(message);
        }
        public static PaymentMessage Load(Stream source)
        {
            if (source.CanSeek && source.Length > MaxLength)
            {
                throw new ArgumentException("Payment messages larger than " + MaxLength + " bytes should be rejected by the merchant's server", "source");
            }

            PaymentMessage       message = new PaymentMessage();
            ProtobufReaderWriter proto   = new ProtobufReaderWriter(source);

            int key;

            while (proto.TryReadKey(out key))
            {
                switch (key)
                {
                case 1:
                    message.MerchantData = proto.ReadBytes();
                    break;

                case 2:
                    message.Transactions.Add(new Transaction(proto.ReadBytes()));
                    break;

                case 3:
                    message.RefundTo.Add(PaymentOutput.Load(proto.ReadBytes()));
                    break;

                case 4:
                    message.Memo = proto.ReadString();
                    break;

                default:
                    break;
                }
            }

            return(message);
        }