Ejemplo n.º 1
0
        public void BlockSerialization()
        {
            var keysA = KeyPair.Generate();

            var txs    = new List <Transaction>();
            var symbol = DomainSettings.FuelTokenSymbol;

            int count   = 5;
            var amounts = new BigInteger[count];

            for (int i = 0; i < count; i++)
            {
                var keysB = KeyPair.Generate();
                amounts[i] = UnitConversion.ToBigInteger(20 + (i + 1), DomainSettings.FuelTokenDecimals);

                var script = ScriptUtils.BeginScript().
                             AllowGas(keysA.Address, Address.Null, 1, 9999).
                             TransferTokens(symbol, keysA.Address, keysB.Address, amounts[i]).
                             SpendGas(keysA.Address).
                             EndScript();

                var tx = new Transaction("simnet", "main", script, Timestamp.Now - TimeSpan.FromMinutes(i));

                txs.Add(tx);
            }

            var  chainKeys = KeyPair.Generate();
            var  hashes    = txs.Select(x => x.Hash);
            uint protocol  = 42;
            var  block     = new Block(1, chainKeys.Address, Timestamp.Now, hashes, Hash.Null, protocol);

            int index = 0;

            foreach (var hash in hashes)
            {
                var data = new TokenEventData()
                {
                    symbol = symbol, chainAddress = keysA.Address, value = amounts[index]
                };
                var dataBytes = Serialization.Serialize(data);
                block.Notify(hash, new Event(EventKind.TokenSend, keysA.Address, "test", dataBytes));
                index++;
            }

            var bytes = block.ToByteArray();

            Assert.IsTrue(bytes != null);

            var block2 = Block.Unserialize(bytes);

            Assert.IsTrue(block2 != null);

            Assert.IsTrue(block.Hash == block2.Hash);
        }
Ejemplo n.º 2
0
        public void BlockSerialization()
        {
            var keysA = PhantasmaKeys.Generate();

            var txs    = new List <Transaction>();
            var symbol = DomainSettings.FuelTokenSymbol;

            int count   = 5;
            var amounts = new BigInteger[count];

            for (int i = 0; i < count; i++)
            {
                var keysB = PhantasmaKeys.Generate();
                amounts[i] = UnitConversion.ToBigInteger(20 + (i + 1), DomainSettings.FuelTokenDecimals);

                var script = ScriptUtils.BeginScript().
                             AllowGas(keysA.Address, Address.Null, 1, 9999).
                             TransferTokens(symbol, keysA.Address, keysB.Address, amounts[i]).
                             SpendGas(keysA.Address).
                             EndScript();

                var tx = new Transaction("simnet", "main", script, Timestamp.Now - TimeSpan.FromMinutes(i));

                txs.Add(tx);
            }

            var  chainKeys = PhantasmaKeys.Generate();
            var  hashes    = txs.Select(x => x.Hash);
            uint protocol  = 42;

            var oracleEntries = new OracleEntry[]
            {
                new OracleEntry("test", new BigInteger(123).AsByteArray()),
                new OracleEntry("test2", Encoding.UTF8.GetBytes("hello world")),
            };

            var block = new Block(1, chainKeys.Address, Timestamp.Now, hashes, Hash.Null, protocol, chainKeys.Address, System.Text.Encoding.UTF8.GetBytes("TEST"), oracleEntries);

            Assert.IsTrue(block.OracleData.Length == oracleEntries.Length);

            int index = 0;

            foreach (var hash in hashes)
            {
                var data      = new TokenEventData(symbol, amounts[index], "main");
                var dataBytes = Serialization.Serialize(data);
                block.Notify(hash, new Event(EventKind.TokenSend, keysA.Address, "test", dataBytes));
                index++;
            }

            block.Sign(chainKeys);

            for (int i = 0; i < oracleEntries.Length; i++)
            {
                Assert.IsTrue(oracleEntries[i].URL == block.OracleData[i].URL);
                Assert.IsTrue(oracleEntries[i].Content == block.OracleData[i].Content);
            }

            var bytes = block.ToByteArray(true);

            Assert.IsTrue(bytes != null);

            var block2 = Block.Unserialize(bytes);

            Assert.IsTrue(block2 != null);

            var bytes2 = block2.ToByteArray(true);

            Assert.IsTrue(bytes2.Length == bytes.Length);

            Assert.IsTrue(block2.OracleData.Length == oracleEntries.Length);

            for (int i = 0; i < oracleEntries.Length; i++)
            {
                Assert.IsTrue(oracleEntries[i].URL == block2.OracleData[i].URL);
                Assert.IsTrue(oracleEntries[i].Content.SequenceEqual(block2.OracleData[i].Content));
            }

            Assert.IsTrue(block.Hash == block2.Hash);
        }