Thanks for the explanation Griffith, your input is greatly appreciated, I'm a bit disappointed that the dev team didn't acknowledge MY input at all, but it seems that's just the way they are..
Maybe if you help them, they'll get it fixed someday.
Hey OCMiner,
Because i know a mining pool is a business in a sense, and i hate to see a business lose money at no fault of their own and earn a bad rep, im going to give you this bit of friendly advice because i saw it in the code and have since tested it to make sure i wasnt mistaken.
actually... this goes for all services/users that are running a daemon as opposed to a gui client.
Do NOT send a transaction of less than 0.01 from the daemon. there is NO check in the code for a lower limit free transaction that the miner will later consider too low of a priority and never send. you will lose all outputs from that missing input branch. if your services code does not automatically pay a fee to send a tx, then you might lose coins due to this bug.
what i mean by this is:
say you mine a block and get 50,000 coins. you then send 0.001 from the daemon to another wallet (for whatever reason) and it uses that 50k esper block you just mined as input. this is what will happen. it will take that 50k input. mark it as spent. and create a transaction that sends the 0.001 to another wallet and returns the 49999.999 to your wallet. this is the standard for every transaction ever, including bitcoin so dont think this is weird, this is how the system works. that part is normal.
what the problem is, is that the espers daemon (Espersd) will not warn you or preform a check to see if that makes the priority too low for the transaction to be passed into a block due to the way the min tx fee is structured (there isnt one, esp allows free transactions) and will in turn NEVER process that tx into a block. since the 0.001 transaction was not processed, the 49,999.999 is also never reconnected to your wallet and you lose those coins. (they will still show up in your wallet, but because the input for any transaction that includes those coins is now reliant on the 0.001 transaction that was never processed it is impossible to send them anywhere as they too will never be processed due to missing inputs).
until they fix this with the daemon (to be honest the gui client might also do this but i havent tested it and wont be testing it tonight) you should add
paytxfee=0.01
to your Espers.conf file so that this fee will stop you from accidentally losing coins by sending a too low priority transaction because a fee will raise the priority of the transaction causing it to be packaged. i did test it and it does ensure that all transactions down to the lowest sendable amount (0.00055) will be send and will be processed by the miners.
i would go over this in code but its 3:45 am, so you can test it if you'd like (although send coins, say 100 coins, to a NEW wallet on a SEPARATE MACHINE before testing it, you WILL LOSE COINS DURING TEST) or you can take my word for it because i already tested it.
[FULL DISCLOSURE: i originally thought this was a merkle building problem and that is why small transactions with no fee are never processed, but the addition of the fee, which i know for a fact raises the priority in the miner for that transaction, causes the small transactions to be processed leads me to believe it is more than likely a priority issue]
-Griffith
edit: i know from reading this the most obvious fix is just to check to see if the amount sent is below 0.01, which yes. does patch the issue for the future, but it doesnt fix the actual problem at heart. just covers it up, like the government on a tuesday (that last part is a joke for anyone who doesnt get it, its supposed to be funny)
I've used this solution in the same situation (from
https://dashtalk.org/threads/frozen-transactions-why-it-happens-and-how-to-fix-it.1649/):
Solution B:
This solution is slightly more complex, but is still very easy and has always worked for me instantaneously and without fail. What we're going to do is get the raw hex data (the raw binary transaction message converted into its numeric hexadecimal equivalent) and manually re-broadcast it to the network from a different node. If all goes well, this will cause the transaction message to instantly spread across the network and finally make it to all the peers online and, most importantly, the miners and mining pools which will add it to the next block and quickly confirm it. Please follow the steps below:
1) Click on the Transactions tab in your client window and select the frozen transaction
2) Right-click on the transaction and select Show Transaction Details to bring up the Transaction Details pop-up window
3) Now highlight the entire Transaction ID number and copy it to the clipboard (i.e., right-click and select Copy or hit Ctrl+C)
EXAMPLE: 52123febc4f61fe384252a64ee7daebabc3cabae97b7954b90aa70232794d5f0
4) Now close the Transaction Details window and select Help >> Debug Window in the top menu bar of your client window. The Debug Window has two tabs: Information and Console. You need to switch to the Console tab so we can input commands for the Darkcoin/Bitcoin client.
5) Now we're going to use the getrawtransaction command to obtain the raw transaction data in hex form. The getrawtransaction command accepts a transaction ID number as its parameter. So to use it, we will call the getrawtransaction method and feed it our transaction ID we just copied from the Transaction Details window a moment ago. Type in the following command and press Enter to execute:
getrawtransaction <your transaction ID>
Obviously, you replace the <your transaction ID> part with your transaction ID number you copied from the Transaction Details window in Step #3. For example, I typed in the following:
getrawtransaction 52123febc4f61fe384252a64ee7daebabc3cabae97b7954b90aa70232794d5f0
6) As soon as you press enter, there should be a response in the Console window. My console window showed me the following response:
getrawtransaction 52123febc4f61fe384252a64ee7daebabc3cabae97b7954b90aa70232794d5f0
0100000001a09c05d6f32801adc8592ed17214b88d8cfd643448d6cfa5fadd1a0c4b34cdf4000000006b483045022071be3697934aa53ed86f217b34531e3f4f0ecb6c41df8f221f536e5005621ee4022100fe06e286452a3cdecb8fecd67f05d8d7b9357759c9cf86f7500d2aaf2e12b757012103abb9442be150b2499450c29f76880430ee1959b3c419b3dbb8f5289a34cf70ceffffffff01605af405000000001976a914edf6e6c268f77059c701fee4c05276af662fbed988ac00000000
The "getrawtransaction <tx id>" line will be displayed in a bluish-green color if the command succeeds, and beneath it your client will respond giving you the raw transaction data (in black text). This is what we want! Now we will highlight all of the hexadecimal data (just the black text; don't copy the command line where you typed getrawtransaction <tx id>) and copy it to our clipboard.
7) Now that we have obtained the raw hex data of our frozen transaction, we can get it unfrozen by re-broadcasting it to the network through a different node. You will either need another computer running the client software (Bitcoin-qt or Darkcoin-qt) with a good connection to the network or you will need a friend online to help you complete the final part of the process. You can't do it with the same client from which the transaction originated because it already knows about the transaction and will reject it as invalid or a double-spending tx.
But now we need to copy our raw tx data somewhere that we can copy+paste it from on another computer, or send it to a friend or helper who will help us complete the process. When I did it, I just took my tx data and pasted it up at PasteBin.com so I could get on my other PC and copy it. But you can also send it to a friend (or yourself) through email, Skype or a private message on forums. If you don't have another computer to use and can't find anyone to help you, you can just paste your raw transaction data here or pm me and I will help you. :-)
Alternatively, if you're a more experienced user, you can do this on the same PC from which the problem originated. To do so, you need to navigate to your Bitcoin or Darkcoin data directory (default data directory for Windows users is: C:\Users\<your username>\AppData\Roaming\Darkcoin) and make a copy of it in an easily accessible location (like your desktop). Open the new copy of the data directory and delete the wallet.dat file inside. Just make sure you're not deleting your original wallet.dat file or that you have a back-up copy of it! Once you've done this, you need to launch a second instance of Darkcoin-qt or Bitcoin-qt and tell it to use the new copy of your data directory as its data directory. You do this by launching your client with the -datadir=<path> command and proceeding to the next step...
Example (Windows):
darkcoin-qt.exe -datadir=C:\Users\DRKLord\Desktop\DataDirCopy
Now that we have a second node (Darkcoin-qt running on different computer, a friend helping us remotely or a second local instance of Darkcoin-qt) we can complete the process by using the sendrawtransaction command and re-broadcasting the frozen transaction to the network. To do so, we must go to Help >> Debug Window >> Console on our other client node to open the Console window and complete the following steps (if you have a friend online helping you, he/she needs to do these steps):
A) Open the Console window in the second Darkcoin/Bitcoin client (or have your friend open their Console and do the following)
B) Now copy the raw transaction data we got from the getrawtransaction command earlier and saved on PasteBin or stored elsewhere
C) We must now input the sendrawtransaction <tx data> command and press the Enter key:
Command:
sendrawtransaction <paste raw hex data here>
Example:
sendrawtransaction 0100000001a09c05d6f32801adc8592ed17214b88d8cfd643448d6cfa5fadd1a0c4b34cdf4000000006b483045022071be3697934aa53ed86f217b34531e3f4f0ecb6c41df8f221f536e5005621ee4022100fe06e286452a3cdecb8fecd67f05d8d7b9357759c9cf86f7500d2aaf2e12b757012103abb9442be150b2499450c29f76880430ee1959b3c419b3dbb8f5289a34cf70ceffffffff01605af405000000001976a914edf6e6c268f77059c701fee4c05276af662fbed988ac00000000
D) If done correctly your input should show up in the Console now in bluish-green text, as I demonstrated above, and your transaction has now been re-broadcasted to the network and should now fully propagate and soon receive confirmations! :-)
That's it, we did it! I've never had a problem with this method failing or not working, but if it doesn't work for you do not despair. If you're not an advanced or experienced user you may have just done it wrong and need to get some help. Or maybe there is another problem requiring some help from a more experienced user. In any case, don't panic. Coins don't just evaporate into thin air, and there's always a solution! ;-)