Bitcoin Forum
June 16, 2024, 03:23:21 PM *
News: Voting for pizza day contest
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 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 »
941  Economy / Service Discussion / Re: Meni Rosenfeld's vanity thread on: April 28, 2013, 04:30:48 AM
I, for one, am glad you made this point and found it quite interesting. As it turns out, my Masters thesis in Computer Science was also somewhat related to machine learning (summary, I used a naive Bayes classifier and some other tools to increase the click-through rate of ads on a web site). I suspect yours was far heavier on the math, though. Wink (My Bachelors's was also in C.S. with a minor in mathematics, but that feels so long ago.) I left the computer industry in 2001-2002 after the dot com implosion, but my hobbyist interest remains, likely for life.

I'm thankful for your contributions to the community and to mining pool compensation analysis.
942  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 28, 2013, 03:20:36 AM
TLDR: If you jump down to Edit #2, I figured it out.

The expected payout for the next block is S/s * (1 - c/(1-o+co)) * (1-f).

This is giving me values about half of the actual amount paid in the blocks. To use some real numbers on one specific block, here is my amount paid out formula. I am re-scaling $s to 1 every share. So it is $s=$s*$r in the figures below.

Code:
Actual payout: $score * ($r - 1.0) * (1 - $f) / ($p * $s)
(12.932020560171 * (1.0000315757467 - 1.0) * (1 - 0) / (3.2552316167526E-5 * 1.0000315757467)) = 12.543663867791

If I also calculate the estimated payout for the next block at the same time, I get (leaving out /s since I re-scale to 1 constantly.)

Code:
Estimated payout: $score * (1.0 - $c/(1.0-$o+$c*$o)) * (1.0-$f) 
12.932020560171 * (1.0 - 0.03/(1.0-0.97+0.03*0.97)) * (1.0-0) = 6.36754311846

For S=12.932020560171, r=1.0000315757467, c=.03, f=0.0, o=.97, p=3.2552316167526E-5, s=1.0000315757467. The estimated equation reduces to 12.932020560171 * 0.4923857868 which is why it's about half. (With re-scaling every share, the payouts are extremely similar to the actual score value itself.)

I think I have the math coded properly. So either I misunderstand what "expected payout for next block" means or I have a blatant bug in how I'm coding the formula. Assuming formula is correct.

(To try and get a handle on how DGM operates, I'm using my share database to recreate "what would have happened" with DGM from start to finish. Since I'm only doing private testing, my test data is limited with about a week of mining and 3 blocks found, on an alt coin. Maybe the sample size is too small. 99K shares recorded with average block difficulty 36K, the block difficulty changes every block.)

Edit: Just occurred to me. Is the expected payout for next block given above if the miner stopped mining? So on average, D shares from now the payout to the miner would of course be much lower than the numbers I'm seeing (since the miner in my data sample kept mining away).

Edit #2: Yes that's it. I should have worked on it more before posting. Sorry for all the noise. It's spot on.

I injected an extra 41000 shares of work on a 41000 difficulty block into my database, and then injected a new "found share".

Before these changes, up to the final point in time for a worker (not the one listed above):
"Expected remaining total payout 6.1845766103505, next block pays 3.0451976203249"

After my artificial data injection,

Block Found: (score 3.1393789900256) pays out: 3.0451255771104

Nailed it within .00008. And I bet that's because there actually were a few thousand shares in the database after the last real block I left alone (so it was a slightly long round I created). So if someone stops mining, I can tell them their expected remaining total payout and their expected payout in the next block too. Awesome.
943  Bitcoin / Bitcoin Discussion / Re: Bitcoin on Oanda on: April 28, 2013, 12:12:03 AM
Just need one legitimate forex provider to start trading BTC and all of the other exchanges can go away.
944  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 27, 2013, 11:24:51 PM
Right. In practice you could trim scores which are below a very low threshold.

I think maybe I was paranoid about changing values in the database somehow making it unstable. Given your answer below, I'm thinking if a miner hasn't mined for a bit of time (to not trim brand new low hash rate miners) then do a single manual payout if S/s gets too low, and delete them from database completely.

S/s is not the expected payout from the next block. S/s (or more accurately (1-f)*(1-c)*S/s, accounting for fees) is what you asked about just now - the expected total eventual payout for already submitted shares.

The expected payout for the next block is S/s * (1 - c/(1-o+co)) * (1-f).

*bonks self on head*. Thanks.
945  Other / CPU/GPU Bitcoin mining hardware / Re: If mining doesn't use much bandwidth.... on: April 27, 2013, 12:44:54 PM
Also try raising the difficulty at the pool you are mining at, but really you shouldn't need to send a lot of traffic back and forth. I assume you are using a modern miner like cgminer/bfgminer with stratum which will generate local work instead of asking the server for new work constantly.
946  Other / Beginners & Help / Re: Forgotten Transaction Fee on: April 27, 2013, 04:29:12 AM
You can't change the fee after the fact so far as I know, so I think you just have to wait for some pool somewhere to get your feeless transaction into a block. Eventually.
947  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 27, 2013, 04:27:56 AM
a. Periodic rescaling: The only thing that matters is the values of the scores relative to the variable s. Thus, if the values grow to large, all that is needed is to rescale them. This means dividing the scores of all participants by s, and then setting s=1. This should be done once in a while, the exact times do not matter (it can even be done for every share).

I was going to use logs so I didn't need to rescale, but it occurred to me that if I rescale every share I don't need to store s. Since s=s*r and s is always 1 going into the share, s is now always r. Thus, the payout becomes (S(r-1)(1-f))/(pr).

I guess the question is, do I really want to divide every score by r every share (updating hundreds of rows if there are hundreds of workers) vs storing s and using logs. It'd seem logs would be less impact to the database.

Edit: Final question for now. Is there a formula to calculate the total expected future payouts for a miner if they stop mining? That is, given the current state of things like s, r, p, B, and their score, can you approximate "if you stop mining right now the sum of all of your future payments is expected to be X". Basically, the value of their capacitor discharging from the current state down to zero. I think miners might find that useful (in addition to expected payout on next block from S/s), so they have a sort of idea of the long-term trailing reward that offsets the slow startup as the capacitor charged.

Thanks.
948  Bitcoin / Pools / Re: Visual comparison of pool payout methods based on real-world data on: April 27, 2013, 02:58:38 AM
I love this graph. However, it doesn't work right in Chrome btw, MSIE is needed. Also, if you added CGM and CPPSRB one day that'd be epic. Smiley
949  Alternate cryptocurrencies / Altcoin Discussion / Re: PPC,TRC,FRC,FC,NVC & BTE Alt-Coin Block Explorers @ CryptocoinExplorer.com on: April 27, 2013, 12:35:57 AM
Looks like TRC web interface is back up, just a few hundred blocks behind. Smiley Yay!
950  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 26, 2013, 11:29:35 PM
I've done the math and if you simply cancel the payment specified for the orphan blocks, everything is just right. This assumes, however, that every block, once received by the pool, has the same chance to become an orphan.

I think I'll just take your word for it and run with it. Smiley As they said in Star Trek II, "Yours is the superior intellect."
951  Alternate cryptocurrencies / Altcoin Discussion / Re: PPC,TRC,FRC,FC,NVC & BTE Alt-Coin Block Explorers @ CryptocoinExplorer.com on: April 26, 2013, 11:08:43 PM
There's always Amazon EC if you are a do it yourself person. Smiley
952  Economy / Scam Accusations / Re: Butterflylabs Huge SCAM on: April 26, 2013, 04:13:12 PM
Has anyone been successful  at
minimizing the cost of electricity with alternative power sources. Like wind, water currents, and  solar?

Don't know who it was, but someone says in their signature all of their BTC farming is solar powered.
953  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 26, 2013, 01:29:23 PM
It's even simpler than that - you don't need to set S=S/o. The score will remain in its reduced state and only the actual payment will be cancelled, and if you pay in the coinbase this happens naturally when the block is orphaned.

What I'm struggling with getting my mind around is that work done before the orphan are at S*o and work done after the orphan is at S. When the orphan goes away and the payment is cancelled, aren't shares after the orphan worth more than the shares before it improperly? (If the orphan never happened and scores were never updated, then all work since last block (before or after the orphan that never happened) are all at S.)

I'm hoping you are indeed correct, since being able to ignore the score changes from the orphan event would be so easy. And you are normally correct. Wink

Quote
A tricky part is how to combine this with the dust payments mentioned earlier. You can no longer rely on the network to cancel the orphan payments - you'll need to actually remember for each worker the reward per specific block, and if a block becomes an orphan remove that record yourself.

Dust is an issue for everyone eventually I think (if I'm understanding correctly) since there's no 0-1 cutoff. We are going down by S=S*o every payout the scores for a miner who stops mining will approach zero but never actually get there, they will just have ever decreasing scores. (Eventually so low it's just dust, forever?)
954  Bitcoin / Development & Technical Discussion / Re: Vanitygen: Vanity bitcoin address generator/miner [v0.22] on: April 26, 2013, 01:27:36 AM
Same error. I should also point out that this only happens with the 64bit version so that just adds to the confusion.

Same problem here, but I get it with 32 or 64 bit versions.

Googling the error it's a standard SSL error response. Some solutions for other applications:

http://curl.haxx.se/docs/sslcerts.html

http://stackoverflow.com/questions/14566864/peer-certificate-cannot-be-authenticated-with-known-ca-certificates-how-to-reso

Verbose output:

Code:
* timeout on name lookup is not supported
* About to connect() to vanitypool.appspot.com port 443 (#0)
*   Trying 74.125.137.141...
* Connected to vanitypool.appspot.com (74.125.137.141) port 443 (#0)
* libcurl is now using a weak random seed!
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
Get work request failed: Peer certificate cannot be authenticated with given CA certificates

Tried the ENV variables from this:

http://stackoverflow.com/questions/14286265/how-to-use-ssl-cert-file-for-openssl-windows-openssl-1-0-1c

with no luck. Also set PATH to the directory the .pem file is in. I'm betting Windows 8 is part of the problem since the earlier guy uses it also.
955  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 25, 2013, 11:46:35 PM
4. If the share found happens to be a valid block, then after doing #3, also do the following for each participant: Letting S be his score, give him a payout of (S(r-1)(1-f))/(ps). Set S=S*o. The remaining reward is given to the operator.

Two implementation questions, if you have ever thought about this.

For miners that have a very small payout due, it's best to not pay them at this time and rather let their payout grow higher first. Otherwise they collect too much "dust" and when they try to go spend those coins, the transfer fees eat it all up (or cost more than the inputs, making the dust useless). Is handling this as easy as skipping their payment and leaving their score alone?

I realize even with f=0 future blocks may have more rewards to pay than the block contains. The other alternative is I could "pay" it to a separate dust database (keep the coins for a pool "dust reserve") then once the dust has gotten big enough do a payout from pool funds. Then the DGM scoring system/database isn't effected and knows nothing about it.

If you are paying miners in the coinbase of the block found, you can't wait for confirmation of the block to adjust their scores (or you might pay them multiple times if you find multiple blocks in a row). In a *PPS system you mark the found block as a "payout" for the relevant shares, and if that block later becomes an orphan you mark those share back to unpaid. Piece of cake, conceptually. In DGM, is the way to handle this to go through everyone paid in that block and set S=S/o? The payout in effect never happened, and the only change in database before was S=S*o. Seems simple, but wanted to know if you agreed.

Thanks!
956  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 25, 2013, 06:41:23 PM
Correct. But it wasn't a misunderstanding on your part either - if f<0 the operator can indeed pay out of his own pocket.

You can choose f=0 to avoid having to pay out of pocket, but it limits your options for reducing variance and maturity for miners. You could use something like f=0, c=0.01, o=0.99, it turns out similar to PPLNS. in core parameters.

So instead of a PPLNS pool with a fixed 3% (f=.03) fee, one could run DGM with f=0, c=.03, o=.97 to have a similar pool with average fee to operator of 3%, but less variance for the miners because the operator is taking on that variance.

I didn't see it explicit in the OP, but does o need to equal 1-c?

I skimmed back over the thread, I thought I saw this discussed before but missed it just now if so, but if you are adjusting the parameters per-miner are there any specific constraints that must be observed? I'm specifically thinking of pools where the fee is based on the difficulty you are mining at. So as the user selectable difficulty rises, the pool's fee for that miner goes down. I wasn't sure if multiple miners all with f=0 but a variable c (and o=1-c?) would pose a problem.
957  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 25, 2013, 05:54:57 PM
In other news, I've thought of a new framework which includes as special cases double geometric, 0-1 and linear PPLNS, and their extension to operator variance. Some parts of this I've known for months, others for weeks and a key part I've just thought about. I think in particular the extension of linear PPLNS will give the ultimate variance tradeoff (though it's not pure score-based). I'm so excited... And yet I really need to work on Bitcoil now. So much to do, so little time...

Did you ever write this up someplace? Smiley
958  Bitcoin / Pools / Re: Double geometric method: Hopping-proof, low-variance reward system on: April 25, 2013, 04:09:15 PM
Or, if the total is higher than the block reward (only possible if f<0), the operator pays the difference out of his own funds.

In any case where f>=0, the operator will not be paying out of his own funds, is that accurate? I think I was misunderstanding "operator variance" as meaning the operator may be paying money out of his own funds like PPS in long rounds. Which I'm not willing to do. However, if it is simply variance in how much the operator earns without ever going negative, that's a totally different situation. Smiley I wouldn't mind my earnings (as an operator) going all over the place as long as the pool cannot ever go bankrupt in terms of payouts to miners like PPS.
959  Bitcoin / Pools / Re: PPLNS on: April 24, 2013, 10:34:57 PM
I added in a later comment that to be protected from hopping based on block reward (which will be critical when the reward is based on tx fees), B for each share needs to be chosen when the share is submitted, not when the block is found.

When a reward drop is coming up, like when Bitcoin went from 50 to 25, the shares submitted before the drop would be earning twice the reward as the shares after the drop if you store credit by current potential reward at the time of submission instead of the actual reward at the time a block is found. Is that that intentional? In a pure PPS model, that's how it'd have worked of course. But in a pay-once PPNLS model you can only pay back as many shares as you actually received from the found block. So if the D shares up to the reward drop didn't find a block, then D+1 finds a block with half the reward, you're only going to be able to pay the most recent D/2 shares. It seems a bit counter intuitive to me, I'd think the last D shares would all get paid on the actual block (half reward than if we found the block sooner, but it is what it is, you can only pay out what the pool receives).

I guess the same applies long-term with transaction fee based blocks, although then the reward would be going up and down from block to block.

For pay-once, does it just boil down to this then:

1- Knowing exactly what you are earning (share of potential reward+fees for current block, the reward you earned never changes between now and when you get paid) but not knowing how long until you get paid (if reward drops, your time until getting paid increases if your shares weren't recent enough)

OR

2- Knowing a better idea when you get paid (based on average time to solve blocks regardless of varying reward) but not knowing how much you'll earn (reward+transaction fees of the block actually found in the future).

As far as I understand things currently, most PPS models (should, if coded to use reward at time of share) fall under #1. Pay-Once-PPLNS using block rewards at time shares are submitted would also fall under #1. Proportional would fall under #2.
960  Bitcoin / Pools / Re: PPLNS on: April 24, 2013, 12:55:50 PM
Ah okay, excellent. The initial pool I'm setting up is for TRC where the difficulty changes with each block. I store in my shares database d (user selected difficulty) and D (difficulty of the block you just submitted a share for) but do all of the payment logic based on sum(d/D for each share submitted individually, ie: D will vary over time) in LIFO (most recent) order. I mark shares if paid and then ignore them moving forward (stored for graphing and historical record).

The only thing I'm not doing is storing the reward based on B at the time you submit a share. I was only storing "You have earned sum(d/D) blocks" and then pay it out when a block is found based on the reward of the block found, not the reward at the time of submission. Which is exactly what you said not to do. I'll need to look at that.
Pages: « 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 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!