As the network hash rate increases with the advancement of Moore's Law, the proof-of-work mint rate is reduced, so it would be more and more difficult for such attackers to gain significant wealth via proof-of-work and then launch attack on proof-of-stake after 30 days.
Does that mean the chain can easily be forked by buying a lot of coins and holding them, then? Allowing a person with a vast majority of coins to manipulate transactions along with the rest of the block chain so long as they possessed some of the proof of work?
|
|
|
If you pay the fees for PP, and show me a couple successful transactions from the past with forum members, I will make the deal.
bump, you still interested?
|
|
|
Thanks for the rep+
|
|
|
Think I only have one purchase on here: https://bitcointalk.org/index.php?topic=44929.20I have bought from maptor as well (japanbit) but I don't think anything was posted about it here And of course I would pay the fees (conversion + gift fee)
|
|
|
Motherboard Asus P8H67 $150 CPU Xeon E3-1275 4 core, 3.4 Ghz, 8 mb $150
Would you sell these and 2x 4GB sticks of RAM For $300? Also, would you accept PP? I'm low on BTC ATM and I've been on this forum forever, I can PM you my heatware or overclock trader profile if you want it And also would you ship to Canada? (I would pay for shipping, probably $20-ish)
|
|
|
How about when Bitcoin becomes no longer profitable to GPU mine because of ASIC introduction in the next couple of months?
Go back and look at the BTC charts for price and difficulty. In 2010 when GPU mining began, the hash rate of the network skyrocketed while the price largely stagnated. Then, in 2011, the price exploded, following the difficulty instead of the other way around.
This is the whole reason Litecoin has survived this long and continues to survive. People want to eventually get rich, and they're buying it and holding it. We're already 3/8th of the way to block reward halving, and it keeps going every day.
|
|
|
It does kind of look as if they were mining until a couple days ago so they could make as much much as possible before shipping them...
|
|
|
Hey, Been mining for 24 hr with 1.6 MH/s and should have gotten at least ten coins by now but my wallet is empty. I will PM you my address. Also Pool total payout: 0.00000000 Is not very encouraging
|
|
|
I hoard. Some people are going to tell you it's crap. Others that it's invaluable. It's the longest lasting alt. chain to maintain any value. It's ASIC resistant.
|
|
|
The GPU will try to use all threads even with the lower difficulty. The easiest way to lower heat is to reduce the voltage, if your cards allow you to.
|
|
|
Another issue is ppcoin's totally wacky per block adjustment algorithm. Ideally, you shouldn't be checking what the current difficulty and reward are when doing the calculation but rather the amortized reward and difficulty for the last 520 or so blocks, with weighting toward the last blocks.
Wouldn't it be better to estimate the future difficulty and block rewards based on the current difficulty and hashrate of recent blocks, as a miner would want to know what coin to mine now, not which one was more profitable in the past? Okay, now that I understand PPC difficulty adjustment a little better I think it's okay as is. I had been mistaken about the way the difficulty changed.
|
|
|
Is this a problem with Terracoin? It was my understanding that the retarget rate is so much quicker that it would settle pretty quickly once you jumped off the chain.
The shorter the retarget time, the more susceptible a chain is to this sort of exploitation; for TRC you would just adjust the code above to mine TRC for 30 blocks, mine something else for the next 30 blocks, then hop onto TRC again. This is why retarget times should NEVER be set too short. The code (I guess) would be floor((blockheight) / 30) % 2 == 0 I was mistaken as thought that PPC retargeted per block with a small maximum decrease or increase, but it actually adjusts difficulty based on the rolling exponential average for the past 1008 blocks.
|
|
|
Right. Okay, I'll try and fix this by the end of the week. The neat thing about PPC/NVC is that it helps with hopping between chains because there are no present difficulty change times, so you can just hop on at any time to the chain and begin ramping up the difficulty. This is in contrast to BTC or LTC in which difficulty adjustments occur at fixed periods. Because of the fixed periods, it'd be more difficult to get the chains to coincide with one another. Thus, per-block difficulty adjustment seems to encourage block chain hopping, especially as the number of chains exist that use it increase.
Anyway, it'd go something like this:
Mine NVC for 288 blocks Mine PPC for 288 blocks Wait for LTC to adjust difficulty, then hop on to that chain and mine for 2016 blocks if (NVC has mined at least 720 blocks since) mine for 288 blocks else wait if (PPC has mined at least 720 blocks since) mine for 288 blocks else wait Wait for LTC to adjust difficulty, then hop on to that chain and mine for 2016 blocks etc
The more chains there are the greater benefit to the person manipulating the difficulty, especially if these chains have per-block difficulty adjustments because the amount of time spent waiting is decreased
|
|
|
Okay, so weighting factors decrease exponentially, that is, the farther towards the end of the week the values go from the present, the less they influence the difficulty. So, a possible attack would be to mine with high hash rate for 2 days, wait 5 days until the high hash rate has barely any impact on the present difficulty, and repeat? Additionally, because of // ppcoin: subsidy is cut in half every 16x multiply of difficulty , won't the benefit to the attacker to mine every nth block be exponential and increasing with the gap between number of blocks (as n increases) because of the subsidy calculation as above? For instance, if you adjust line if (output_j['blocks'] % 2 == 0): to if (output_j['blocks'] % 16 == 0): , the attacker with a ton of hashing power likely gets every 16th block for very little overall work and their influence on subsidy and difficulty is negligible; not only this, but if this person had a massive quantity of hash power (e.g. a few ASICs right now) the benefit to the attacker in terms of work it takes to acquire PPC would be exponential because of the increase in block reward as compared to what the block reward would be if they were continually mining. edit: Sorry, made lots of edits for clarity/typos. I agree that the exploit as posted in the OP doesn't work as stated because of how I understood your adjustment algorithm, but it should work by mining for 288 PPC/NVC blocks followed by mining something else for 720 PPC/NVC blocks and then hopping back on the chain. I guess this is more analogous to pool hopping than anything else.
|
|
|
Maybe I misunderstood your code; retargets are based on a one week moving average? This is from your main.cpp: // ppcoin: target change every block // ppcoin: retarget with exponential moving toward target spacing CBigNum bnNew; bnNew.SetCompact(pindexPrev->nBits); int64 nTargetSpacing = fProofOfStake? STAKE_TARGET_SPACING : min(nTargetSpacingWorkMax, (int64) STAKE_TARGET_SPACING * (1 + pindexLast->nHeight - pindexPrev->nHeight)); int64 nInterval = nTargetTimespan / nTargetSpacing; bnNew *= ((nInterval - 1) * nTargetSpacing + nActualSpacing + nActualSpacing); bnNew /= ((nInterval + 1) * nTargetSpacing);
if (bnNew > bnProofOfWorkLimit) bnNew = bnProofOfWorkLimit;
return bnNew.GetCompact();
It's a little convoluted, help me out? edit: Even if you base it on a one week moving average, with 50% of the network running the script wouldn't you achieve a disproportionate increase in block reward per amount of work required to find a block?
|
|
|
Brief description of the exploitDifficulty and reward adjust per block for NovaCoin and PPCoin (see main.cpp). By mining every other block and having a large hash power (ideally as large as possible), difficulty may be kept low and reward may be kept high for the person with the high hash power. This is because there is a maximum cap on difficulty change for each round. The higher the hashing power, the more the exploiter benefits. Code (Unix, python 2.7, Novacoin targeting) from subprocess import Popen, PIPE, STDOUT import time import json
class Nova(object): def __init__(self, blocks): self.blocks = blocks
scan_time = 5
while(True): ### Get the initial block number from novacoind, store in output_j['blocks'] cmd = './novacoind getinfo' ### Command for dumping info from novacoind in json format; we use this lots p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) ### Execute command output = p.stdout.read() ### Read the stdout that output gives us output_j = json.loads(output) ### Convert from json to python values; we call block number using the class given above print("Current block is " + str(output_j['blocks']))
if (output_j['blocks'] % 2 == 0): ### Block is even, mine NovaCoin print ("Even block, mining NVC...")
novacoin_config = open('novamine.conf','r') card_config = open('cardconf.conf','r') configuration = open('litecoin.conf', 'w')
### Copy the reaper configuration to litecoin.conf for novacoin for line in novacoin_config: configuration.write(line) for line in card_config: configuration.write(line)
novacoin_config.close() card_config.close() configuration.close()
miner_cmd = './reaper' ### Command for your miner to mine NVC miner_thread = Popen(miner_cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
### Loop below checks to see when block we're on, terminates miner if we are on an off number block while(True): p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) output = p.stdout.read() output_j = json.loads(output) if not(output_j['blocks'] % 2 == 0): miner_thread.terminate() break else: print("Block still even, mining novacoin.") time.sleep(scan_time)
else: ### Block is odd, mine something else print ("Odd block, mining another chain...")
novacoin_config = open('elsemine.conf','r') card_config = open('cardconf.conf','r') configuration = open('litecoin.conf', 'w')
### Copy the reaper configuration to litecoin.conf for other chain for line in novacoin_config: configuration.write(line) for line in card_config: configuration.write(line)
novacoin_config.close() card_config.close() configuration.close()
miner_cmd = './reaper' ### Command for your miner to mine something else; the same here because we use reaper miner_thread = Popen(miner_cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
### Loop below checks to see when block we're on, terminates miner if we are on an even number block while(True): p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) output = p.stdout.read() output_j = json.loads(output) if (output_j['blocks'] % 2 == 0): miner_thread.terminate() break else: print("Block still odd, mining another chain.") time.sleep(scan_time) Code (Windows, python 2.7, Novacoin targeting) from subprocess import Popen, PIPE, STDOUT import time import json
class Nova(object): def __init__(self, blocks): self.blocks = blocks
scan_time = 5
while(True): ### Get the initial block number from novacoind, store in output_j['blocks'] cmd = 'novacoind.exe getinfo' ### Command for dumping info from novacoind in json format; we use this lots p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) ### Execute command output = p.stdout.read() ### Read the stdout that output gives us output_j = json.loads(output) ### Convert from json to python values; we call block number using the class given above print("Current block is " + str(output_j['blocks']))
if (output_j['blocks'] % 2 == 0): ### Block is even, mine NovaCoin print ("Even block, mining NVC...")
novacoin_config = open('novamine.conf','r') card_config = open('cardconf.conf','r') configuration = open('litecoin.conf', 'w')
### Copy the reaper configuration to litecoin.conf for novacoin for line in novacoin_config: configuration.write(line) for line in card_config: configuration.write(line)
novacoin_config.close() card_config.close() configuration.close()
miner_cmd = 'reaper.exe' ### Command for your miner to mine NVC miner_thread = Popen(miner_cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
### Loop below checks to see when block we're on, terminates miner if we are on an off number block while(True): p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) output = p.stdout.read() output_j = json.loads(output) if not(output_j['blocks'] % 2 == 0): miner_thread.terminate() break else: print("Block still even, mining novacoin.") time.sleep(scan_time)
else: ### Block is odd, mine something else print ("Odd block, mining another chain...")
novacoin_config = open('elsemine.conf','r') card_config = open('cardconf.conf','r') configuration = open('litecoin.conf', 'w')
### Copy the reaper configuration to litecoin.conf for other chain for line in novacoin_config: configuration.write(line) for line in card_config: configuration.write(line)
novacoin_config.close() card_config.close() configuration.close()
miner_cmd = 'reaper.exe' ### Command for your miner to mine something else; the same here because we use reaper miner_thread = Popen(miner_cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
### Loop below checks to see when block we're on, terminates miner if we are on an even number block while(True): p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) output = p.stdout.read() output_j = json.loads(output) if (output_j['blocks'] % 2 == 0): miner_thread.terminate() break else: print("Block still odd, mining another chain.") time.sleep(scan_time) Requires the following files to exist: novacoind (or ppcoind) executable that is running prior to executing the python code above reaper executable reaper.conf (configured as per normal) novamine.conf: host novacoinhost port ???? user username pass password elsemine.conf (mines litecoin here, could be anything): host litecoinhost port ???? user username pass password cardconf.conf (configuration for scrypt): protocol litecoin
worksize 256 vectors 1 aggression 20 threads_per_gpu 1 sharethreads 32 lookup_gap 2 gpu_thread_concurrency ####
Notes- The exploit is made doubly beneficial by inducing both decreased difficulty and increased block reward for the attacker, as per NVC/PPCs algorithms for adjustment - Solo miners with high hash rates especially benefit - The attack is easily identified by watching the network block rate and difficulty/block reward - The attack can be collusional; if lots of miners run it, it benefits all of them by giving them more coins for less electricity - The attack should also work on round-based proportional pay-per-share pools - The attack screws up PPS pools that are smaller than the attacker's hash power, because the pool will likely only get every other block - Such an attack is avoidable by making retarget based on a larger span of blocks, hence why bitcoin chose two week retarget times - The attack has previously been observed on the litecoin network, but is especially easy to implement here because of per-block retargeting - To use cgminer, simply put 'cgminer --your_args' in the lines labeled: miner_cmd = 'whatever'
|
|
|
Not necessarily, or at least, you'd have to weight at least the last 50 blocks I would say (because maximum possible adjustments are small, I think around 1-2% per block). The reason being that difficulty adjustments for the coin are erratic. Plot it out yourself, they tend to average one direction or the other but bounce around due to a high dependence on variance influencing the next difficulty of the block.
The problem is compounded by the 520 block confirmation to even obtain the coins, so by the time you've confirmed the block it might be worth something else completely. The NVC/PPC difficulty/reward adjustment algorithm lends itself to volatility.
|
|
|
Another issue is ppcoin's totally wacky per block adjustment algorithm. Ideally, you shouldn't be checking what the current difficulty and reward are when doing the calculation but rather the amortized reward and difficulty for the last 520 or so blocks, with weighting toward the last blocks.
|
|
|
|