로컬로 저장된 블록 체인 (Bitcoin Core를 통해 다운로드) 만 사용하여 주어진 Bitcoin 주소 의 잔액 을 확인하려고합니다 . NBitCoin 및 / 또는 QBitNinja를 사용하여 이와 유사하지만 네트워크에 액세스 할 필요가없는 것 :
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()
하는 것을 방지하기 위해 파일에 저장하는 대신 무언가를 원합니다.
내 요구 사항은 잔액 을 확인하는 것입니다 첫 번째 방법과 동일한 방식으로 디스크에 저장된 블록을 쿼리하여 하는 것입니다.
실제로 내가 필요한 것은 이 질문에 대한 대답 일 수 있습니다 .
답변
귀하의 질문에 대한 첫 번째와 두 번째 시도는 비슷하지 않습니다. 첫 번째 방법은 json rpc를 사용하여 데몬에게 균형을 요청합니다 (그리고 나는 그것이 올바른 방법이라고 감히 말합니다-당신은 자동차 엔진에서 윗부분을 차지하지 않고 피스톤을 앞뒤로 밀어서 앞으로 움직입니다.) 두 번째는 데몬의 데이터베이스 자체를 열고 균형을 직접 계산합니다.
로컬 호스트를 쿼리하기 위해 “네트워크가 필요하지”않고 TCP / IP를 지원하는 머신 만 있으면됩니다. 따라서 관련 json-rpc 데이터를 작성하는 라이브러리를 사용하여 어떤 방법 으로든 첫 번째 방법 만 사용하십시오. http 요청으로 또는 관련 http 요청을 직접 작성하여 ..
BitcoinLib은 유지 관리되거나 유지 관리되지 않을 수도 있지만 (모름) 로컬 데몬을 쿼리하는 기능을 무효화하지는 않습니다. 내가 아는 한 GetBalance는 제거되거나 리팩토링되지 않았으며 GetBalance를 포함한 다양한 작업에 최신 비트 코인과 함께 BitcoinLib를 사용합니다