আমি চেক করার চেষ্টা করছি ভারসাম্য ব্যবহার করে একটি প্রদত্ত বিটকয়েন ঠিকানার শুধুমাত্র স্থানীয়ভাবে সঞ্চিত blockchain (বিটকয়েন কোর এর মাধ্যমে ডাউনলোড)। এর সাথে অনুরূপ কিছু (এনবিটকয়েন এবং / অথবা কিউবিটনিঞ্জ ব্যবহার করে) তবে নেটওয়ার্কটিতে অ্যাক্সেসের প্রয়োজন ছাড়াই:
private static readonly QBitNinjaClient client = new QBitNinjaClient(Network.Main);
public decimal CheckBalance(BitcoinPubKeyAddress address)
{
var balanceModel = client.GetBalance(address, true).Result;
decimal balance = 0;
if (balanceModel.Operations.Count > 0)
{
var unspentCoins = new List<Coin>();
foreach (var operation in balanceModel.Operations)
unspentCoins.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin));
balance = unspentCoins.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));
}
return balance;
}
উপরের উদাহরণটিতে নেটওয়ার্কটিতে অ্যাক্সেস দরকার। আমার একই জিনিস অফলাইনে করা দরকার। আমি এই জাতীয় কিছু নিয়ে এসেছি, তবে স্পষ্টত এটি কার্যকর হয় না:
public decimal CheckBalanceLocal(BitcoinPubKeyAddress address)
{
var node = Node.ConnectToLocal(Network.Main);
node.VersionHandshake();
var chain = node.GetChain();
var store = new BlockStore(@"F:\Program Files\Bitcoin\Cache\blocks", Network.Main);
var index = new IndexedBlockStore(new InMemoryNoSqlRepository(), store);
index.ReIndex();
var headers = chain.ToEnumerable(false).ToArray();
var balance = (
from header in headers
select index.Get(header.HashBlock)
into block
from tx in block.Transactions
from txout in tx.Outputs
where txout.ScriptPubKey.GetDestinationAddress(Network.Main) == address
select txout.Value.ToDecimal(MoneyUnit.BTC)).Sum();
return balance;
}
- এটি ক্যোয়ারির সময় স্তব্ধ হয়ে যায়
- যা কিছুটা ধীর
InMemoryNoSqlRepository
করেReIndex()
দেয় তা ব্যবহার না করার জন্য আমি কোনও ফাইলের পরিবর্তে কিছু সঞ্চয় করতে চাই
আমার প্রয়োজনীয়তা হল প্রথম পদ্ধতির মতোই ব্যালেন্স পরীক্ষা করা কিন্তু আমার ডিস্কে থাকা ব্লকগুলি অনুসন্ধান করে।
আসলে আমার যা যা প্রয়োজন তা কেবল এই প্রশ্নের উত্তর হতে পারে :