上一篇文章,我們談到 查詢所有收入的紀錄 接下來,我們就是要把收到的錢,轉到另一個錢包 mshr22VWpq7XTTA3EhAoqoizPuqRAvZfvi
我從網站測試鏈上面 得到收到的 Transation Id 為 d3425d5f912552a47358df8b6647330e914019b1745c88b89d376896d35864e5 並且序號為 0
這篇文章 目標就是將此 0.01 的比特幣轉到 mshr22VWpq7XTTA3EhAoqoizPuqRAvZfvi
C# Code :
//還原主錢包
var walletA = NBitcoin.Key.Parse("6PYQBZhumqnrhETBXNvqW61XHpwYVefbTmZtM2BZcekPjunUbPgUPGe8H2", "your_pass_word", NBitcoin.Network.TestNet).GetWif(NBitcoin.Network.TestNet);
//準備被接收端的錢包(目的地)
var reveiveAddress = NBitcoin.BitcoinAddress.Create("mshr22VWpq7XTTA3EhAoqoizPuqRAvZfvi", NBitcoin.Network.TestNet);
var tx = NBitcoin.Transaction.Create(NBitcoin.Network.TestNet);
var input = new NBitcoin.TxIn();
// 帶入來源端的 Trasaction Id 還有 Index
// Source from : https://blog.no2don.com/2019/02/c-bitcoin_96.html
// https://live.blockcypher.com/btc-testnet/tx/d3425d5f912552a47358df8b6647330e914019b1745c88b89d376896d35864e5/
input.PrevOut = new NBitcoin.OutPoint(new NBitcoin.uint256("d3425d5f912552a47358df8b6647330e914019b1745c88b89d376896d35864e5"), 0);
input.ScriptSig = walletA.GetAddress().ScriptPubKey;
tx.Inputs.Add(input);
var output = new NBitcoin.TxOut();
//這是 GAS Fee
var gasFee = NBitcoin.Money.Coins(0.0001M);
output.Value = NBitcoin.Money.Coins(0.01M) - gasFee;
//設定轉出到指定的錢包至 Output
output.ScriptPubKey = reveiveAddress.ScriptPubKey;
tx.Outputs.Add(output);
tx.Sign(walletA.PrivateKey, false);
Console.WriteLine("========== TXINO ===========");
Console.WriteLine(tx.ToString());
var txBuilder = NBitcoin.Network.TestNet.CreateTransactionBuilder();
var res = txBuilder.Verify(tx);
//對一個節點傳送交易 ,使其進行廣播
var node = NBitcoin.Protocol.Node.Connect(NBitcoin.Network.TestNet, "testnet-seed.bitcoin.jonasschnelli.ch");
node.VersionHandshake();
node.SendMessage(new NBitcoin.Protocol.InvPayload(tx));
node.SendMessage(new NBitcoin.Protocol.TxPayload(tx));
System.Threading.Thread.Sleep(2000);
node.Disconnect();
Console.WriteLine("========== NODE TX ===========");
Console.WriteLine("TXID:" + tx.GetHash().ToString());
其中我把 TX 送給節點的資訊 印出來看看
{
"hash": "4855870423f470f8514052e86d04fabd89eac91430fbe193d68cdd5404d3c26a",
"ver": 1,
"vin_sz": 1,
"vout_sz": 1,
"lock_time": 0,
"size": 191,
"in": [
{
"prev_out": {
"hash": "d3425d5f912552a47358df8b6647330e914019b1745c88b89d376896d35864e5",
"n": 0
},
"scriptSig": "304402203278ab4c3e680e019ae03af3f518b01880f0dd4a413723faa19f42e91b3a4fda02204f5ca7207e72e49c7f6dc2b300abaa654f54f7b890b9b541dc2f844e4763fd7801 0357ae7df6a954e68074d89f9e8e80d8e032e972b00b5977131bff5409bf6a4cdc"
}
],
"out": [
{
"value": "0.00990000",
"scriptPubKey": "OP_DUP OP_HASH160 85b0d883f657d39365af3457775497ce6925404f OP_EQUALVERIFY OP_CHECKSIG"
}
]
}
交易結果 ,你就可以看到發射端的錢包發出去 0.0099 BTC 到 mshr22VWpq7XTTA3EhAoqoizPuqRAvZfvi 你會很好奇其中的 0.0001 怎麼不見了,那就所謂的GAS 也就是給礦工的手續費,在真實世界裡面手續費會決定該筆 confim 的速度
接收端也收到了該筆交易
在上述程式碼中你會看到 testnet-seed.bitcoin.jonasschnelli.ch 這網址,這是一台有對外公開的測試節點,當然這都可以上網去找,只是因為我測試時後發現他比較穩定,所以測試都是對他發送。
寫到這裡透過比特幣交易就到一段落,有些地方我是碰到很多壁才會知道怎麼做,而且關於C# 操控的文件也很少,可能也是我功力太弱,有點小心得就筆記一下畢竟我抱持者 不客觀,非教學,真體驗的想法在寫這一系列的文,希望有對後面碰壁者有些幫助 :)
---
請你暫時把你的勇氣給我 在夢想快消失的時候 讓我的 Code 用力的穿過天空 為愛我的人做一秒英雄 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...