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); }
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); }