public static void Run(string[] args) { var file = new FileInfo(args[0]); var wallet = Wallet.LoadFromFile(file); Console.WriteLine(wallet.ToString()); // Set up the components and link them together. var @params = NetworkParameters.TestNet(); using (var blockStore = new MemoryBlockStore(@params)) { var chain = new BlockChain(@params, wallet, blockStore); var peerGroup = new PeerGroup(blockStore, @params, chain); peerGroup.AddAddress(new PeerAddress(IPAddress.Loopback)); peerGroup.Start(); wallet.CoinsReceived += (sender, e) => { Console.WriteLine(); Console.WriteLine("Received tx " + e.Tx.HashAsString); Console.WriteLine(e.Tx.ToString()); }; // Now download and process the block chain. peerGroup.DownloadBlockChain(); peerGroup.Stop(); } wallet.SaveToFile(file); Console.WriteLine(); Console.WriteLine("Done!"); Console.WriteLine(); Console.WriteLine(wallet.ToString()); }
public void SetUp() { _wallet = new Wallet(_params); _blockStore = new MemoryBlockStore(_params); var chain = new BlockChain(_params, _wallet, _blockStore); _peerGroup = new PeerGroup(_blockStore, _params, chain); }
public static void Run(string[] args) { // TODO: Assumes production network not testnet. Make it selectable. var networkParams = NetworkParameters.ProdNet(); try { // Decode the private key from Satoshi's Base58 variant. If 51 characters long then it's from BitCoins // "dumpprivkey" command and includes a version byte and checksum. Otherwise assume it's a raw key. EcKey key; if (args[0].Length == 51) { var dumpedPrivateKey = new DumpedPrivateKey(networkParams, args[0]); key = dumpedPrivateKey.Key; } else { var privKey = Base58.DecodeToBigInteger(args[0]); key = new EcKey(privKey); } Console.WriteLine("Address from private key is: " + key.ToAddress(networkParams)); // And the address ... var destination = new Address(networkParams, args[1]); // Import the private key to a fresh wallet. var wallet = new Wallet(networkParams); wallet.AddKey(key); // Find the transactions that involve those coins. using (var blockStore = new MemoryBlockStore(networkParams)) { var chain = new BlockChain(networkParams, wallet, blockStore); var peerGroup = new PeerGroup(blockStore, networkParams, chain); peerGroup.AddAddress(new PeerAddress(IPAddress.Loopback)); peerGroup.Start(); peerGroup.DownloadBlockChain(); peerGroup.Stop(); // And take them! Console.WriteLine("Claiming " + Utils.BitcoinValueToFriendlystring(wallet.GetBalance()) + " coins"); wallet.SendCoins(peerGroup, destination, wallet.GetBalance()); // Wait a few seconds to let the packets flush out to the network (ugly). Thread.Sleep(5000); } } catch (IndexOutOfRangeException) { Console.WriteLine("First arg should be private key in Base58 format. Second argument should be address to send to."); } }
/// <summary> /// Create a shell with a given peer group. /// </summary> /// <param name="netPG"></param> public Shell(PeerGroup netPG) { netPeerGroup = netPG; textWriter = Console.Out; textReader = Console.In; }
/// <summary> /// Create a shell with a given peer group, input and output stream. /// </summary> /// <param name="netPG"></param> /// <param name="writer"></param> /// <param name="reader"></param> public Shell(PeerGroup netPG, TextWriter writer, TextReader reader) { netPeerGroup = netPG; textWriter = writer; textReader = reader; }
public override void init(PeerGroup group, ID assignedID, Advertisement implAdv) { jxta_module_init(this.self, ((PeerGroupImpl)group).self, assignedID.self, implAdv.self); }
public abstract void init(PeerGroup group, ID assignedID, Advertisement implAdv);
public PeerGroupRequest(string sender, PeerGroup data) { Sender = sender; Data = data; }
public static void Run(string[] args) { var testNet = args.Length > 0 && string.Equals(args[0], "testnet", StringComparison.InvariantCultureIgnoreCase); var @params = testNet ? NetworkParameters.TestNet() : NetworkParameters.ProdNet(); var filePrefix = testNet ? "pingservice-testnet" : "pingservice-prodnet"; // Try to read the wallet from storage, create a new one if not possible. Wallet wallet; var walletFile = new FileInfo(filePrefix + ".wallet"); try { wallet = Wallet.LoadFromFile(walletFile); } catch (IOException) { wallet = new Wallet(@params); wallet.Keychain.Add(new EcKey()); wallet.SaveToFile(walletFile); } // Fetch the first key in the wallet (should be the only key). var key = wallet.Keychain[0]; Console.WriteLine(wallet); // Load the block chain, if there is one stored locally. Console.WriteLine("Reading block store from disk"); using (var blockStore = new BoundedOverheadBlockStore(@params, new FileInfo(filePrefix + ".blockchain"))) { // Connect to the localhost node. One minute timeout since we won't try any other peers Console.WriteLine("Connecting ..."); var chain = new BlockChain(@params, wallet, blockStore); var peerGroup = new PeerGroup(blockStore, @params, chain); peerGroup.AddAddress(new PeerAddress(IPAddress.Loopback)); peerGroup.Start(); // We want to know when the balance changes. wallet.CoinsReceived += (sender, e) => { // Running on a peer thread. Debug.Assert(!e.NewBalance.Equals(0)); // It's impossible to pick one specific identity that you receive coins from in BitCoin as there // could be inputs from many addresses. So instead we just pick the first and assume they were all // owned by the same person. var input = e.Tx.Inputs[0]; var from = input.FromAddress; var value = e.Tx.GetValueSentToMe(wallet); Console.WriteLine("Received " + Utils.BitcoinValueToFriendlyString(value) + " from " + from); // Now send the coins back! var sendTx = wallet.SendCoins(peerGroup, from, value); Debug.Assert(sendTx != null); // We should never try to send more coins than we have! Console.WriteLine("Sent coins back! Transaction hash is " + sendTx.HashAsString); wallet.SaveToFile(walletFile); }; peerGroup.DownloadBlockChain(); Console.WriteLine("Send coins to: " + key.ToAddress(@params)); Console.WriteLine("Waiting for coins to arrive. Press Ctrl-C to quit."); // The PeerGroup thread keeps us alive until something kills the process. } }
void Awake() { this.groups = this.GetComponent <GameObjectGroup>(); this.peerGroup = this.GetComponent <PeerGroup>(); }