本文整理汇总了C#中Chain.GetOrAdd方法的典型用法代码示例。如果您正苦于以下问题:C# Chain.GetOrAdd方法的具体用法?C# Chain.GetOrAdd怎么用?C# Chain.GetOrAdd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Chain
的用法示例。
在下文中一共展示了Chain.GetOrAdd方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RunFullBlockTest
public void RunFullBlockTest()
{
var generator = new FullBlockTestGenerator(Network.Main);
ValidationState validation = new ValidationState(Network.Main);
validation.CheckMerkleRoot = false;
validation.CheckProofOfWork = false;
var scan =
new ScanState(new PubKeyHashScanner(generator.CoinbaseKey.PubKey.ID),
new Chain(),
new Account(),
0);
scan.CheckDoubleSpend = true;
var mainChain = new Chain(Network.Main);
var indexed = new IndexedBlockStore(new InMemoryNoSqlRepository(), CreateBlockStore());
indexed.Put(Network.Main.GetGenesis());
foreach(var test in generator.GetBlocksToTest(true, true).list.OfType<BlockAndValidity>())
{
indexed.Put(test.block);
mainChain.GetOrAdd(test.block.Header);
Assert.True(scan.Process(mainChain, indexed) == test.connects);
//if(!)
//{
// Assert.True(test.throwsException);
//}
Assert.Equal(test.heightAfterBlock, scan.Chain.Height);
Assert.Equal(test.hashChainTipAfterBlock, scan.Chain.Tip.HashBlock);
mainChain.SetTip(scan.Chain.Tip);
}
}
示例2: BuildChain
public Chain BuildChain(ObjectStream<ChainChange> changes = null, CancellationToken cancellationToken = default(CancellationToken))
{
if(changes == null)
changes = new StreamObjectStream<ChainChange>();
var chain = new Chain(Network, changes);
TraceCorrelation trace = new TraceCorrelation(NodeServerTrace.Trace, "Build chain");
using(trace.Open())
{
using(var pool = CreateNodeSet(3))
{
int height = pool.GetNodes().Max(o => o.FullVersion.StartHeight);
var listener = new PollMessageListener<IncomingMessage>();
pool.SendMessage(new GetHeadersPayload()
{
BlockLocators = chain.Tip.GetLocator()
});
using(pool.MessageProducer.AddMessageListener(listener))
{
while(chain.Height != height)
{
var before = chain.Tip;
var headers = listener.RecieveMessage(cancellationToken).Message.Payload as HeadersPayload;
if(headers != null)
{
foreach(var header in headers.Headers)
{
chain.GetOrAdd(header);
}
if(before.HashBlock != chain.Tip.HashBlock)
{
NodeServerTrace.Information("Chain progress : " + chain.Height + "/" + height);
pool.SendMessage(new GetHeadersPayload()
{
BlockLocators = chain.Tip.GetLocator()
});
}
}
}
}
}
}
return chain;
}
示例3: AppendBlock
internal void AppendBlock(Transaction tx, Chain chain)
{
var block = TestUtils.CreateFakeBlock(tx);
block.Header.HashPrevBlock = chain.Tip.HashBlock;
chain.GetOrAdd(block.Header);
_Index.Put(block);
Assert.NotNull(_Index.Get(block.Header.GetHash())); //Seems not useful but already detected a bug in index thanks to that.
}