Exemplo n.º 1
0
        public void Test_output_ser_deser()
        {
            var keychain         = Keychain.From_random_seed();
            var keyIdSet         = keychain.Derive_key_id(1);
            var commit           = keychain.Commit(5, keyIdSet);
            var switchCommit     = keychain.Switch_commit(keyIdSet);
            var switchCommitHash = SwitchCommitHash.From_switch_commit(switchCommit);
            var msg   = ProofMessage.Empty();
            var proof = keychain.Range_proof(5, keyIdSet, commit, msg);

            var outp = new Output {
                Features         = OutputFeatures.DefaultOutput,
                Commit           = commit,
                SwitchCommitHash = switchCommitHash,
                Proof            = proof
            };

            var stream = new MemoryStream();

            Ser.Serialize(stream, outp);

            Console.WriteLine("-------");
            Console.WriteLine(stream.ToArray().AsString());
            Console.WriteLine("-------");

            stream.Position = 0;

            var dout = Ser.Deserialize(stream, new Output());

            Assert.Equal(OutputFeatures.DefaultOutput, dout.Features);
            Assert.Equal(outp.Commit.Value, dout.Commit.Value);
            Assert.Equal(outp.Proof.Proof, dout.Proof.Proof);
        }
Exemplo n.º 2
0
        public void Serialize_deserialize_block()
        {
            var keychain = Keychain.From_random_seed();
            var b        = New_block(new Transaction[] { }, keychain);

            using (var vec = new MemoryStream())
            {
                Ser.Serialize(vec, b);
                vec.Position = 0;
                var b2 = Ser.Deserialize(vec, Block.Default());

                Assert.Equal(b.Inputs.Length, b2.Inputs.Length);
                Assert.Equal(b.Outputs.Length, b2.Outputs.Length);
                Assert.Equal(b.Kernels.Length, b2.Kernels.Length);
                Assert.Equal(b.Header.Hash().Hex, b2.Header.Hash().Hex);
            }
        }
Exemplo n.º 3
0
        public void Simple_tx_ser_deser()
        {
            var tx = Tx2I1O();

            using (var vec = new MemoryStream())
            {
                Ser.Serialize(vec, tx);

                vec.Position = 0;

                var dtx = Ser.Deserialize(vec, Transaction.Empty());


                Assert.Equal <ulong>(2, dtx.Fee);
                Assert.Equal(2, dtx.Inputs.Length);
                Assert.Single(dtx.Outputs);
                Assert.Equal(tx.Hash(), dtx.Hash());
            }
        }
Exemplo n.º 4
0
        /// Reads a partial transaction into the amount, sum of blinding
        /// factors and the transaction itself.
        public static (ulong amount, BlindingFactor blinding, Transaction tx) read_partial_tx(
            Keychain keychain,
            PartialTx partialTx
            )
        {
            var blindBin = HexUtil.from_hex(partialTx.BlindSum);
            var blinding = BlindingFactor.from_slice(keychain.Secp, blindBin);
            var txBin    = HexUtil.from_hex(partialTx.Tx);

            Transaction transaction;

            using (var ms = new MemoryStream(txBin))
            {
                transaction = Ser.Deserialize(ms, Transaction.Empty());
                ;
            }

            return(partialTx.Amount, blinding, transaction);
        }
Exemplo n.º 5
0
        public void Tx_double_ser_deser()
        {
            // checks serializing doesn't mess up the tx and produces consistent results
            var btx = Tx2I1O();

            using (var vec = new MemoryStream())
            {
                Ser.Serialize(vec, btx);
                vec.Position = 0;

                var dtx = Ser.Deserialize(vec, Transaction.Empty());

                using (var vec2 = new MemoryStream())
                {
                    Ser.Serialize(vec2, btx);
                    vec2.Position = 0;

                    var dtx2 = Ser.Deserialize(vec2, Transaction.Empty());

                    Assert.Equal(btx.Hash(), dtx.Hash());
                    Assert.Equal(dtx.Hash(), dtx2.Hash());
                }
            }
        }
Exemplo n.º 6
0
        public void Test_kernel_ser_deser()
        {
            var keychain = Keychain.From_random_seed();
            var keyId    = keychain.Derive_key_id(1);
            var commit   = keychain.Commit(5, keyId);

            // just some bytes for testing ser/deser
            var sig = new byte[] { 1, 0, 0, 0, 0, 0, 0, 1 };

            var kernel = new TxKernel
            {
                Features   = KernelFeatures.DefaultKernel,
                LockHeight = 0,
                Excess     = commit,
                ExcessSig  = sig,
                Fee        = 10
            };

            var stream = new MemoryStream();

            Ser.Serialize(stream, kernel);

            Console.WriteLine("-------");
            Console.WriteLine(stream.ToArray().AsString());
            Console.WriteLine("-------");

            stream.Position = 0;

            var kernel2 = Ser.Deserialize(stream, new TxKernel());

            Assert.Equal(KernelFeatures.DefaultKernel, kernel2.Features);
            Assert.Equal <ulong>(0, kernel2.LockHeight);
            Assert.Equal(commit.Value, kernel2.Excess.Value);
            Assert.Equal(sig, kernel2.ExcessSig);
            Assert.Equal <ulong>(10, kernel2.Fee);

            //// now check a kernel with lock_height serializes/deserializes correctly
            kernel = new TxKernel
            {
                Features   = KernelFeatures.DefaultKernel,
                LockHeight = 100,
                Excess     = commit,
                ExcessSig  = sig,
                Fee        = 10
            };

            stream = new MemoryStream();
            Ser.Serialize(stream, kernel);

            Console.WriteLine("-------");
            Console.WriteLine(stream.ToArray().AsString());
            Console.WriteLine("-------");

            stream.Position = 0;

            kernel2 = Ser.Deserialize(stream, new TxKernel());
            Assert.Equal(KernelFeatures.DefaultKernel, kernel2.Features);
            Assert.Equal <ulong>(100, kernel2.LockHeight);
            Assert.Equal(commit.Value, kernel2.Excess.Value);
            Assert.Equal(sig, kernel2.ExcessSig);
            Assert.Equal <ulong>(10, kernel2.Fee);
        }