Ejemplo n.º 1
0
        public async Task AddRecordsAsync(IEnumerable <Record> records)
        {
            var records_list = new List <RecordModel>();

            foreach (var record in records)
            {
                records_list.Add(Serializer.SerializeRecord(record));
            }

            db.Records.AddRange(records_list);
            await db.SaveChangesAsync();
        }
Ejemplo n.º 2
0
        public async Task <byte[]> AddTransactionAsync(IEnumerable <Transaction> transactions)
        {
            IList <TransactionModel> tx_list = new List <TransactionModel>();
            string result = null;

            foreach (var tx in transactions)
            {
                if (tx.Data.Select(s => s.Value).First() == null)
                {
                    continue;
                }

                var list = tx.Data.Select(s => s.Value.ToString()).ToList();

                result = Serializer.ConcatenateData(list);

                var model = new TransactionModel()
                {
                    TransactionHash = tx.Hash.ToByteArray(),
                    RawData         = Serializer.ToBinaryArray(result),
                    Timestamp       = tx.TimeStamp,
                    Signature       = tx.Sign.ToByteArray(),
                    PubKey          = tx.PubKey.ToByteArray(),
                };

                var txs = database.Transactions.ToList();
                foreach (var raw_tx in txs)
                {
                    if (raw_tx.TransactionHash.SequenceEqual(model.TransactionHash))
                    {
                        throw new InvalidTransactionException("Optimistic concurrency");
                    }
                }

                tx_list.Add(model);
            }


            try
            {
                database.Transactions.AddRange(tx_list);
                await database.SaveChangesAsync();
            }
            catch (DbEntityValidationException ex)
            {
                throw new InvalidOperationException(ex.EntityValidationErrors.First()
                                                    .ValidationErrors
                                                    .FirstOrDefault()
                                                    .ErrorMessage);
            }

            return(Serializer.ComputeHash(Serializer.ToBinaryArray(result)));
        }