public Block(ChainIdentifier chainIdentifier, Data data, Hash previousHash) { ChainIdentifier = chainIdentifier; Timestamp = Timestamp.UtcNow; Data = data; PreviousHash = previousHash; Hash = new Hash(PreviousHash, Timestamp, Data); }
public Block(ChainIdentifier chainIdentifier, Timestamp timestamp, Data data, Hash previousHash, Hash hash) { ChainIdentifier = chainIdentifier; Timestamp = timestamp; Data = data; PreviousHash = previousHash; Hash = hash; }
public Block(Data data) { ChainIdentifier = new ChainIdentifier(); Timestamp = Timestamp.UtcNow; Data = data; PreviousHash = Hash.FirstHash; Hash = new Hash(PreviousHash, Timestamp, Data); }
public Task <Chain> Get(ChainIdentifier id) { var blocksFromChain = _blocks.Where(b => b.ChainIdentifier.Equals(id)).ToList(); var orderedBlocks = (from block in blocksFromChain orderby block.Timestamp select block).ToList(); var chain = new Chain(orderedBlocks.First().ChainIdentifier, orderedBlocks); return(Task.FromResult(chain)); }
public async Task AddToChain(ChainIdentifier chainIdentifier, Data data) { var chain = await _chainRepository.Get(chainIdentifier); var lastHastOfTheChain = chain.LastOrDefault.Hash; var block = new Block(chainIdentifier, data, lastHastOfTheChain); await _blockRepository.Add(block); }
public static bool ValidateChainUidAgainst(this string uid, GenerationEnvironment env) { if (!ChainIdentifier.TryParse(uid, env.errorContext, out var parsed)) { return(false); } if (env.exportingClasses.TryGetValue(parsed.Class, out var exportingType)) { switch (parsed.Type) { case ChainContributionType.More: case ChainContributionType.Global: return(TrueOr( exportingType.contributedChains.Any(chain => chain.Name == parsed.Chain && chain.ContributionType == parsed.Type), () => env.ReportError($"{uid} references a non-existent chain: {parsed.Chain}."))); case ChainContributionType.Instance: if (exportingType is BehaviorSymbolWrapper behavior) { if (behavior.Chains.Any(chain => chain.Name == parsed.Chain)) { return(true); } env.ReportError($"{uid} references a non-existent behavior chain: {parsed.Chain}."); } else { env.ReportError($"{uid} referenced an exporting class that was not a behavior: {parsed.Class}. If you meant a static class, use '+{uid}' instead."); } return(false); default: return(false); } } else { env.ReportError($"{uid} references a non-existent exporting class: {parsed.Class}"); } return(false); }
public static bool TryParse(string uid, ErrorContext ctx, out ChainIdentifier parsed) { var strippedUid = uid; var type = StripContributionType(ref strippedUid); var split = strippedUid.Split('.'); if (split.Length != 2) { ctx.Report($"{uid} had wrong format. Expecting format [+]<ExportingClassName>.<ChainName>"); parsed = default; return(false); } parsed = new ChainIdentifier { Type = type, Class = split[0], Chain = split[1] }; return(true); }