-
Notifications
You must be signed in to change notification settings - Fork 0
/
Setup.cs
125 lines (93 loc) · 4.31 KB
/
Setup.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using NBitcoin;
using System.Text;
using QBitNinja.Client;
using System.Threading.Tasks;
namespace blockchainfile
class Program
{
static void Main(string[] args)
{
Network network = Network.TestNet;
var treasurer = new BitcoinSecret("key")
var alice = new BitcoinSecret("key");
Console.WriteLine("treasurer key: " + treasurer.PrivateKey.GetWif(network));
Console.WriteLine("Alice key: " + alice.PrivateKey.GetWif(network));
var scriptPubKey = PayToMultiSigTemplate
.Instance
.GenerateScriptPubKey(2, new[] { alice.PubKey, treasurer.PubKey });
Console.WriteLine("PubKey script: " + scriptPubKey);
var redeemScript = PayToMultiSigTemplate
.Instance
.GenerateScriptPubKey(2, new[] { bob.PubKey, alice.PubKey, treasurer.PubKey });
var paymentScript = redeemScript.PaymentScript;
Console.WriteLine("paymentScript: " + paymentScript);
Console.WriteLine("multi-sig address: " + redeemScript.Hash.GetAddress(network));
var client = new QBitNinjaClient(network);
// Update
var receiveTransactionId = uint256.Parse("yourid");
var receiveTransactionResponse = client.GetTransaction(receiveTransactionId).Result;
Console.WriteLine(receiveTransactionResponse.TransactionId);
var receiveTransactionResponse = client.GetTransaction(receiveTransactionId).Result;
Console.WriteLine(receiveTransactionResponse.TransactionId);
Console.WriteLine(receiveTransactionResponse.Block.Confirmations);
var receivedCoins = receiveTransactionResponse.ReceivedCoins;
OutPoint outpointToSpend = null;
ScriptCoin coinToSpend = null;
foreach (var c in receivedCoins)
{
try
{
coinToSpend = new ScriptCoin(c.Outpoint, c.TxOut, redeemScript);
outpointToSpend = c.Outpoint;
break;
}
catch { }
if (outpointToSpend == null)
throw new Exception("TxOut doesn't contain any our ScriptPubKey");
Console.WriteLine("outpoint #{0}");
var lucasAddress = BitcoinAddress.Create("address", network);
TransactionBuilder builder = network.CreateTransactionBuilder();
var minerFee = new Money(0.0005m, MoneyUnit.BTC);
var txInAmount = (Money)receivedCoins[(int)outpointToSpend.N].Amount;
var sendAmount = txInAmount - minerFee;
Transaction unsigned =
builder
.AddCoins(coinToSpend)
.Send(lucasAddress, sendAmount)
.SetChange(lucasAddress, ChangeType.Uncolored)
.BuildTransaction(sign: false);
Transaction aliceSigned =
builder
.AddCoins(coinToSpend)
.AddKeys(alice)
Transaction bobSigned =
builder
.AddCoins(coinToSpend)
.AddKeys(bob)
.SignTransaction(aliceSigned);
.SignTransaction(unsigned);
Transaction fullySigned =
builder
.AddCoins(coinToSpend)
.CombineSignatures(aliceSigned, bobSigned);
Console.WriteLine(fullySigned);
]]
var broadcastResponse = client.Broadcast(fullySigned).Result;
if (!broadcastResponse.Success)
{
Console.Error.WriteLine("ErrorCode: " + broadcastResponse.Error.ErrorCode);
Console.Error.WriteLine("Error message: " + broadcastResponse.Error.Reason);
}
else
{
Console.WriteLine("Success! You can check out the hash of the transaciton in any block explorer:");
Console.WriteLine(fullySigned.GetHash());
}
}
}
}
}
}
}
}