সি #। নেট দিয়ে স্থানীয় স্থানীয় বিটকয়েন ব্লকচেইন অনুসন্ধান করুন


175

আমি চেক করার চেষ্টা করছি ভারসাম্য ব্যবহার করে একটি প্রদত্ত বিটকয়েন ঠিকানার শুধুমাত্র স্থানীয়ভাবে সঞ্চিত 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;
}
  1. এটি ক্যোয়ারির সময় স্তব্ধ হয়ে যায়
  2. যা কিছুটা ধীর InMemoryNoSqlRepositoryকরে ReIndex()দেয় তা ব্যবহার না করার জন্য আমি কোনও ফাইলের পরিবর্তে কিছু সঞ্চয় করতে চাই

আমার প্রয়োজনীয়তা হল প্রথম পদ্ধতির মতোই ব্যালেন্স পরীক্ষা করা কিন্তু আমার ডিস্কে থাকা ব্লকগুলি অনুসন্ধান করে।

আসলে আমার যা যা প্রয়োজন তা কেবল এই প্রশ্নের উত্তর হতে পারে :


1
আদর্শভাবে আমি কেবলমাত্র আমার দ্বিতীয় পদ্ধতির মতো NBitcoin ব্যবহার করতে চাই যা কাজ করে না এবং আমি জানি না কেন। আইআইএস-এ কিউবিটনিঞ্জা সার্ভারটি আমার দ্বিতীয় বিকল্প, তবে আপনি বিটকয়েনলিবের কথা যেমন উল্লেখ করেছেন, আমি এটি একটি শেষ রিসোর্ট হিসাবে চেষ্টা করতে পারি। ভারসাম্য এখানে একটি উদাহরণ, আমি অনেক আকর্ষণীয় জিনিসের জন্য স্থানীয় ব্লকচেইনকে জিজ্ঞাসা করতে চাই। যদিও আমি ভেবেছিলাম বিটকয়েনলিব আর আপডেট হয় না। আমি যে কোনও সহায়তার প্রশংসা করি এবং দেখে মনে হচ্ছে আপনিই এখন পর্যন্ত চেষ্টা করছেন :) সুতরাং হ্যাঁ আমি আপনাকে 50 টি উত্তর দেব যদি কেউ এর চেয়ে ভাল উত্তর না দেয়।
rvnlord

1
আমার কাছে স্থানীয় নোড নেই তবে আমি প্রায় 4 বছর আগে ব্লকচেইন কোড দিয়ে কাজ করেছি। আমি খুব ভাল শিক্ষিত অনুমান দিতে পারি যে এটি এত দীর্ঘ সময় নেওয়ার কারণটি হ'ল সিরিয়ালাইজড ব্লকচেইন ডেটাটি যেভাবে কাঠামোযুক্ত করা হয়েছে এবং লিনাক ইঞ্জিন যেভাবে ডেটা অনুসন্ধান করে qu আমি সন্দেহ করি যে আপনার রুটিন "ঝুলন্ত" কারণ অন্তর্নিহিত পার্সিং / কোয়েরিং কোডটি অনুকূলিত হয়নি। আপনার কোডটি খুব সম্ভবত কাজ করছে তবে প্রতিক্রিয়াশীল মৃত্যুর জন্য এর কিছু অন্তর্নিহিত অপ্টিমাইজেশনের প্রয়োজন হতে পারে।
আরএলএইচ

12
হাই, এটি একটি পুরানো প্রশ্ন তবে আমি গতকাল এটি দেখেছি। আমি আপনার কোডটি এনবিটকয়েন দিয়ে চেষ্টা করেছি। আপনার কোডটি কেবল আমার আংশিক পুরাতন স্থানীয় নোডে কাজ করে যদি আমি এই লাইন সূচকে মন্তব্য করি eআর ইন্ডেক্স (); এবং এই রেখাটি ভার চেইন = নোড.গেটচেইন ();। আমি আমার কোডটি কিছুটা টুইটও করেছি যা গেটচেইনের পরিবর্তে আমি গেটব্লক করেছি। এবং সিমিলার পরিবর্তন করে এটি কাজ করে। আমি হতাশ হতে চাই না তাই আমি এই মন্তব্যটি পোস্ট করছি :)। আমি এটি আপনাকে সাহায্য করে আশা করি।
হে 24 শেপ

19
@ আরে 24 শিপ আপনার কোড কাজ করে? তারপরে উত্তর হিসাবে পোস্ট করুন। আমি বিশ্বাস করি না যে কোনও কাজের সমাধানের জন্য আপনাকে কেউ নীচে নামিয়ে দেবে।
মার্টিন ব্রাউন

5
লোকেরা কেন কোনও সমাধান পোস্ট করতে এবং ভোটে নামতে ভয় পাচ্ছে? এটি কি এই লক্ষণ যে বিটকয়েন এটি আমাদের মনে হয় না? আমি কি বিটকয়েন স্যুটুলেটর হিসাবে উদ্বিগ্ন হই না? @ হে 24 শেপ এবং অন্যান্যদের দ্বারা করা মন্তব্যে উল্লেখ করা। হলুদ পতাকা সময়?
ধনী বিয়ানকো

উত্তর:


1

আপনার প্রশ্নের প্রথম এবং দ্বিতীয় প্রচেষ্টা একই রকম কিছু নয়। ভারসাম্যের জন্য ডেমোনকে জিজ্ঞাসা করতে প্রথমে জসন আরপিসি ব্যবহার করে (এবং আমি সাহস করে বলি এটি যথাযথ উপায় - আপনি নিজের গাড়ি ইঞ্জিনের উপরের অংশটি নিবেন না এবং পিস্টনগুলিকে এগিয়ে নিয়ে যান এবং সামনের দিকে গতি অর্জনের জন্য, নিজেকে না?) দ্বিতীয়টি ডিমনটির ডেটাবেস নিজেই খোলার চেষ্টা করে এবং সরাসরি ব্যালেন্স গণনা করে।

লোকালহোস্টের ক্যোয়ারী করার জন্য আপনার "নেটওয়ার্কের দরকার নেই", আপনার কেবল একটি মেশিনের দরকার আছে যার টিসিপি / আইপি সমর্থন ইনস্টল করা আছে, সুতরাং যে কোনও উপায় দ্বারা প্রথম পদ্ধতিটি ব্যবহার করুন - হয় প্রাসঙ্গিক জেসন-আরপিসি ডেটা লেখার জন্য একটি লাইব্রেরি ব্যবহার করে কোনও http অনুরোধের মধ্যে, বা প্রাসঙ্গিক HTTP অনুরোধ নিজে গঠন করে ..

বিটকয়েনলিব বজায় রাখা যেতে পারে বা নাও রাখতে পারে (আমি জানি না) তবে এটি আপনার স্থানীয় ডেমনকে জিজ্ঞাসা করার ক্ষমতা অকার্যকর করে না; যতদূর আমি জানি গেটবালেন্স সরানো হয়নি বা পুনরুদ্ধার করা হয়নি, এবং আমি গেটবুলেন্স সহ বিভিন্ন ক্রিয়াকলাপের জন্য সর্বশেষ বিটকয়ন্ড সহ বিটকয়েনলিব ব্যবহার করি


আমি এই প্রশ্নটি সম্পর্কে সম্পূর্ণ ভুলে গেছি। @ আরে 24 শিপ সমস্যার সমাধান করেছে, যদিও এখন আমার কাছে সম্পূর্ণ স্থানীয় নোড নেই। আমার তখন লোকাল এবং অফলাইন ডেটা জিজ্ঞাসা করার প্রচেষ্টা প্রয়োজন needed তৃতীয় পক্ষের উত্সগুলিতে এপিআই ব্যবহার করে যা অর্জন করতে পারি তার থেকে আমার এটি আরও দ্রুত জিজ্ঞাসা করা দরকার।
rvnlord
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.