主页 > imtoken钱包新版下载 > C#使用区块链浏览器的Web Api开发比特币应用

C#使用区块链浏览器的Web Api开发比特币应用

imtoken钱包新版下载 2023-02-10 07:36:17

区块链浏览器通常提供块浏览,或者更具体地说是 Web API,可以帮助您快速入门。 区块链浏览器是一种自托管或第三方托管的解决方案,如 QBitNinja,可为您提供有关区块链中的区块、交易和地址的信息。

以太坊有区块链记录一定是真的吗_以太坊区块生成时间_以太坊区块浏览器api

区块链浏览器连接到比特币节点,索引区块链的数据并公开一个易于使用的 API。 解决方案包括:QBitNinja、Blockcypher、Smartbit、Electrum 服务器、Insight、NBXplorer。 优点是:

弱点是:

不同的区块链浏览器暴露不同的 API 和功能。 例如,大多数区块链浏览器使用 HTTP Web API,而 Electrum 使用 Stratum 协议。 `区块浏览器永远不会拥有钱包的私钥。

使用 QBitNinja,很难跟踪总是更改地址的钱包,因为您需要轮询属于同一钱包的所有地址以检测任何更改。

然而,Electrum 或 NBXplorer 和 SmartBit 通过 websockets 或长轮询发布消息,所以你不需要轮询你钱包的所有地址。

洞察力不容易维护。 Blockcypher、QBitNinja 和 Smartbit 是托管的。 如果您有兴趣以这种方式构建钱包,请查看 nopara73 的 CodeProject 文章:在 C# 中使用 QBitNinja 构建您自己的比特币钱包。

NBxplorer 的创建具有非常简单的 API,可以自托管,并且只跟踪钱包需要的内容。 与 QBitNinja 相反,它依赖于你拥有一个完整的节点以太坊区块浏览器api,但它提供了 websocket 通知以及查询钱包余额的简单方法。

NBXplorer 也是单一服务器上的多加密货币。 截至 2018 年 10 月,它支持比特币、莱特币、BCash、BGold、Dash、Dogecoin、Dystem、Feathercoin、Groestlcoin、Monacoin、Polis、UFO、Viacoin 和 Zclassic。 它与 NBitcoin 无缝集成。

要设置 NBXplorer,您需要一个具有默认参数的完全同步的 bitcoind 节点。 然后使用默认参数克隆并运行 NBXplorer。

参考NBXplorer.Client nuget包然后需要通知NBXplorer跟踪用户钱包:

var network = new NBXplorerNetworkProvider(ChainType.Main).GetBTC();
var userExtKey = new ExtKey();
var userDerivationScheme = network.DerivationStrategyFactory.CreateDirectDerivationStrategy(userExtKey.Neuter(), new DerivationStrategyOptions()

以太坊区块浏览器api_以太坊区块生成时间_以太坊有区块链记录一定是真的吗

{ // Use non-segwit Legacy = true }); ExplorerClient client = new ExplorerClient(network); client.Track(userDerivationScheme);

如果您想使用 Testnet 或 Regtest,请更改 ChainType.Main。

如果你想要一个新的未使用的地址:

Console.WriteLine(client.GetUnused(userDerivationScheme, DerivationFeature.Deposit).Address);

然后您可以查询用户的 UTXO 并按如下方式使用它们:

var utxos = client.GetUTXOs(userDerivationScheme, null, false);

以太坊区块生成时间_以太坊区块浏览器api_以太坊有区块链记录一定是真的吗

如果你想花费这些 UTXO:

var coins = utxos.GetUnspentCoins();
var keys = utxos.GetKeys(userExtKey);
TransactionBuilder builder = new TransactionBuilder();
builder.AddCoins(coins);
builder.AddKeys(keys);
builder.Send(new Key(), Money.Coins(0.5m));
builder.SetChange(changeAddress.ScriptPubKey);
// Set the fee rate
var fallbackFeeRate = new FeeRate(Money.Satoshis(100), 1);
var feeRate = tester.Client.GetFeeRate(1, fallbackFeeRate).FeeRate;
builder.SendEstimatedFees(feeRate);
/////

以太坊有区块链记录一定是真的吗_以太坊区块生成时间_以太坊区块浏览器api

var tx = builder.BuildTransaction(true); Console.WriteLine(client.Broadcast(tx));

这个解决方案的一个问题是,如果你同时调用这个代码两次,你可能会广播两个使用相同币种的交易以太坊区块浏览器api,导致其中一个交易被删除。 为防止出现此问题,您需要确保不会两次使用完全相同的硬币。 该问题的解决方案是简单地重试:

while(true)
{    
    var coins = utxos.GetUnspentCoins();
    var keys = utxos.GetKeys(userExtKey);
    TransactionBuilder builder = new TransactionBuilder();
    builder.AddCoins(coins);
    builder.AddKeys(keys);
    builder.Send(new Key(), Money.Coins(0.5m));
    builder.SetChange(changeAddress.ScriptPubKey);

以太坊区块生成时间_以太坊有区块链记录一定是真的吗_以太坊区块浏览器api

// Set the fee rate var fallbackFeeRate = new FeeRate(Money.Satoshis(100), 1); var feeRate = tester.Client.GetFeeRate(1, fallbackFeeRate).FeeRate; builder.SendEstimatedFees(feeRate); ///// var tx = builder.BuildTransaction(true); var result = client.Broadcast(tx); if(result.Success) { Console.WriteLine("Success!"); break; }

以太坊区块浏览器api_以太坊有区块链记录一定是真的吗_以太坊区块生成时间

else if(result.RPCCode.HasValue && result.RPCCode.Value == RPCErrorCode.RPC_TRANSACTION_REJECTED) { Console.WriteLine("We probably got a conflict, let's try again!"); continue; } else { Console.WriteLine($"Something is really wrong {result.RPCCode} {result.RPCCodeMessage} {result.RPCMessage}"); // Do something!!! } }

另一种常见的方法是拥有一个可以检查的已用出点的全局列表。

================================================ == =====================

分享一些与比特币、以太坊、EOS、Fabric等区块链相关的交互式在线编程实战教程: