You may like: bitcoind -blocknotify=<cmd>
|
|
|
This is what multisig transactions are for.
|
|
|
After I learn c++ what other languages are worth learning and which ar?
It depends why you're learning. Do you want something that will be practical ASAP? If so Java, Python, and C are all excellent. If you want to learn something new that changes the way you think about programming then try Haskell, J (not related to Java), and assembly on an Arduino. Each one of these will be a completely alien world when you start and they will teach you a lot more than just learning another OO/imperative language.
|
|
|
Turn off the computer and quit using it. You don't want to overwrite any more than you already have. Boot from a rescue CD (your Linux install CD will probably work). Download this: https://github.com/jackjack-jj/pywallet/blob/master/pywallet.py . Then run: python pywallet.py --recover --recov_device=/dev/sda --recov_size=2Tio --recov_outputdir=~/.bitcoin (set the 2Tio to the size of your HD) I'm assuming you know your way around Linux a little. If not, ask and we'll walk you through it. Edit: /dev/sda is your drive C. You may want /dev/sdb. Run 'fdisk -l' to see which drive is which.
|
|
|
Unfortunately it's complicated: https://en.bitcoin.it/wiki/Transaction_feesAnd the standard client doesn't do a good job of showing the fees. I suggest just setting a small fee, sending it, and waiting for it to confirm. Unless it's an unreasonably large transaction it should go through.
|
|
|
You can spend them. You can take a whole bunch of small inputs and send them to one output. Your wallet will do this automatically. It's like gathering a few hundred pennies and using them to buy milk.
|
|
|
The former. A transaction's inputs are the outputs of previous transaction(s), not the balance of an address.
|
|
|
When you start it up it'll give you some options. Just hit enter, then enter again when it asks for your keyboard settings. After a couple minutes you'll get a command prompt. First plug in your external storage drive. Wait a few seconds, then type this: That will list all your hard drives. You need to identify your C: drive (probably /dev/sda) and your external drive (probably /dev/sdc) - it should be obvious from the sizes but if your external drive is the same size as you D: drive you can verify it by unplugging it, hitting (up)(enter) to run the command again, and see which one appeared or disappeared. For this example we'll say your external drive is /dev/sdc. Next you'll need to find the partition number. Do this: It will give you a table listing /dev/sdc1 and maybe some more partition numbers - it's probably just /dev/sdc1 unless you created a bunch of partitions yourself, so I'll use /dev/sdc1 for this example. Next you mount it (it's like giving it a drive letter): mkdir /external mount /dev/sdc1 /external
Finally you dump the C: drive: pv /dev/sda > /external/dump
If that gives you an error after the first few GB are copied then do this instead: pv /dev/sda | split -a 5 -b 1G -d /external/dump
Make sure it completes with no errors, then: And you're done. That dump will be a complete raw copy of your hard drive. Once we have it we can start looking for your wallet without worrying about losing anything.
|
|
|
Step 1. IMMEDIATELY TURN OFF YOUR COMPUTER. RIGHT NOW. Don't even bother shutting it down, just unplug it. Log back on here from another computer.
Step 2. Get a new hard drive and make a raw dump of your whole drive. We can help with this if you're not sure how.
Step 3. Windows may have created a restore point before it rolled back. If we can go back to that restore point you'll get your stuff back.
Step 4. If that doesn't work several tools exist which can scan the raw dump and recover keys. PyWallet is a good first choice. We can help you with this as well, but the more you use your computer the greater the chance that the deleted files will be overwritten - that's why it's important to turn off your computer.
|
|
|
"super-paranoia mode" is relative. Your suggested method has several vulnerabilities:
* Someone hacked your machine and grabs your paper wallet files while you're generating them. * The keys are written to your hard drive during steps 4 and 6. Deleting the files does not wipe the keys - they may still be recovered. * Have you verified your bitcoind binary? Do you know it isn't trojaned?
|
|
|
Please ignore most of my previous posting, I think I found the "missing link".
My mistake was to assume that a solution (of the form hash < target) must necessarily exist within the address space spanned by iterating through all possible values of the nonce in the block header. Of course, it is absolutely possible (and even likely) that no solution will exist within that address space, so that other parts of the block header need to be altered. Correct. Once you're out of nonce you bump the extranonce, generate a new input hash, and feed it to the miners. Question: is there mathematical proof that double-SHA256(block_header) will output every possible value in the 2**256 hash address space, for every possible 2**640 block header input value?
No. It's actually believed that there will be both gaps and duplicates in the 2**256 space even for a 2**256 input. The overall the distribution is believed to be good but it's difficult (impossible?) to prove. The term you're looking for: https://en.wikipedia.org/wiki/Random_oracleLots more on that, including some commentary on SHA256 specifically: http://crypto.stackexchange.com/questions/879/what-is-the-random-oracle-model-and-why-is-it-controversial
|
|
|
I recommend you use pywallet to dump your wallet. Take just the pubkeys and copy them to a USB drive. You can then check the balances on blockchain.info or blockexplorer. Alternatively you can encrypt your wallet on the offline computer then import it to an online computer. Alternatively import your wallet into Armory https://bitcoinarmory.com/ . It's designed for this.
|
|
|
Yes, you can use walletpassphrase to unlock the wallet, send the coins, then relock the wallet.
Why are you doing this though? You haven't added much security if the script which unlocks the wallet is on the same server. If the script is on another server, why not just sen the coins from there?
|
|
|
We have a success over in the Newbies forum: https://bitcointalk.org/index.php?topic=169232.msgNiklas, you should try what he did in line 2 to mark the script as UTF-8 (or UTF-16, if you saved it on windows). When I get a chance I'll add some proper unicode support, but just adding the comment at the top to ensure the embedded strings are handled correctly might be worth a shot for now. Here's his post in case it helps anyone else: Hi, could some admin please move this to https://bitcointalk.org/index.php?topic=85495.100 and let member Revalin know (being a newbie, I cannot post there nor PM him).
Revalin, thanks for your script. Me, too, I forgot my precise passphrase. I remembered the overall mechanism to construct my wallet passphrase but didn't remember exactly how I applied it. My wallet passphrase consists of a left and a right part. The left part was a sequence of character, maybe "Start" or "start" or "beginning"... Same with the right part. It could have been "end" or "End" or ... So, the passphrase could have been "startend", "Startend", "beginningEnd", ... There were about twenty possibilities for the left and also for the right part, too many to test manually. So I adapted your script. #!/usr/bin/ruby # -*- coding: utf-8 -*- lefts = [ "start", "Start", "Beginning" ] # The possible words for the left part rights = ["end", "End", "ending"] # The possible words for the right part
def test(phrase) print phrase, "\t" system("./bitcoind", "walletpassphrase", phrase, "20") case $?.exitstatus when 0 puts "Found it! #{phrase}" exit 0 when 127 puts "bitcoind not found in current dir" exit 1 when nil puts "Aborting" exit 1 end end
lefts.each do |left| rights.each do |right| test(left + right) end end
If someone wants to use it, then replace the words in lefts and rights with your words and add as many as required. Another comment: as reported earlier by niklas, the script runs unusable slow on Windows. I recommend installing some Linux image. I had no problems with German special characters. Revalin, please PM me, I would like to send you a Bitcoin reward. Without your script, I probably wouldn't have recovered my wallet.
|
|
|
What about this solution for the bitcoin-client to prevent forgotten passwords:
support for yubi-key so you can buy your own Yubi-key and connect it to the specifik wallet. In this way each wallet would be locked to a specifik Yubi-key. The risk now is that if you lose your Yubi-key you will never get your coins back - Is this assumption correct or is it possible to order a new Yubi-key with identical key?
The advantage of a Yubikey is it can do challenge-response auth instead of passphrases. That's not really useful in this case. I recommend storing your passphrase on paper. If you want cut and paste convenience I think it's cheaper and equally secure to store it on a thumb drive, or preferably a few thumb drives.
|
|
|
Here's one for mik3 @ https://bitcointalk.org/index.php?topic=170137 . Anyone on Windows or who's had trouble getting these scripts to run may want to grab the test() function from this one. It uses JSON-RPC instead of calling bitcoind, as suggested by 2112 above. #!/usr/bin/ruby require "net/http" require "json"
# Fill in your RPC username and password from your bitcoin.conf here. $rpc_auth = "user", "pass"
max_bangs = 10 words = [ [ "one" , "One" , "ONE"] , [ "two" , "Two" , "TWO"] , [ "three" , "Three" , "THREE"] , [ "four" , "Four" , "FOUR"] , ]
def test(passphrase) puts passphrase request = Net::HTTP::Post.new("/") request.basic_auth *$rpc_auth request.body = { method:"walletpassphrase", params:[passphrase, 1] }.to_json response = Net::HTTP.new("localhost", 8332).request(request) if response.code == "401" ; puts "Incorrect RPC user/pass" ; exit 1 ; end ret = JSON.parse response.body if ret["error"].nil? ; puts "\nFound it! #{passphrase.inspect}" ; exit ; end return if ret["error"]["code"] == -14 # wrong passphrase raise "WTF? #{ret.inspect}" end
def spin(phrase, array) return phrase if array.empty? array.first.map do |word| p = phrase.dup.push word spin(p, array[1,99]) end end
spin([], words).flatten(words.count - 1).each do |phrase| phrase.permutation(words.count) do |shuffled| (max_bangs + 1).times do |bangs| test shuffled.join(" ") + ("!" * bangs) end end end
puts "No luck."
|
|
|
|