Ejemplo n.º 1
0
        /// <summary>
        /// Adds the coin.
        /// </summary>
        /// <returns>The coin.</returns>
        /// <param name="coin">Coin.</param>
        public async Task <byte[]> AddCoin(CoinProto coin)
        {
            if (coin == null)
            {
                throw new ArgumentNullException(nameof(coin));
            }

            try
            {
                var coinHasElements = coin.Validate().Any();
                if (!coinHasElements)
                {
                    var blockIDExist = await unitOfWork.BlockID.HasCoin(coin.Stamp, coin.Version);

                    if (blockIDExist)
                    {
                        return(null);
                    }

                    var blockGraphExist = await unitOfWork.BlockGraph.GetFirstOrDefault(x =>
                                                                                        x.Block.Hash.Equals(coin.Stamp) &&
                                                                                        x.Block.SignedBlock.Coin.Version.Equals(coin.Version) &&
                                                                                        x.Block.Node.Equals(httpService.NodeIdentity));

                    if (blockGraphExist != null)
                    {
                        return(null);
                    }

                    var blockGraph = new BlockGraphProto
                    {
                        Block = new BlockIDProto
                        {
                            Node        = httpService.NodeIdentity,
                            Hash        = coin.Stamp,
                            SignedBlock = new BlockProto {
                                Coin = coin, Key = coin.Stamp
                            }
                        },
                        Deps = new List <DepProto>()
                    };

                    var graphProto = await blockGraphService.SetBlockGraph(blockGraph);

                    if (graphProto == null)
                    {
                        return(null);
                    }

                    var block = Util.SerializeProto(graphProto.Block);
                    return(block);
                }
            }
            catch (Exception ex)
            {
                logger.LogError($"<<< CoinService.AddCoin >>>: {ex.ToString()}");
            }

            return(null);
        }
Ejemplo n.º 2
0
 public SignedHashCoinMessage(CoinProto coin, byte[] key = null)
 {
     Coin = coin;
     Key  = key;
 }
Ejemplo n.º 3
0
 public VerifiyHashChainMessage(CoinProto previous, CoinProto next)
 {
     Previous = previous;
     Next     = next;
 }
 public ValidateCoinRuleMessage(CoinProto coin)
 {
     Coin = coin;
 }