The parameters included in the staking are listed here:
// ppcoin kernel protocol // coinstake must meet hash target according to the protocol: // kernel (input 0) must meet the formula // hash(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime) < bnTarget * nCoinDayWeight // this ensures that the chance of getting a coinstake is proportional to the // amount of coin age one owns. // The reason this hash is chosen is the following: // nStakeModifier: // (v0.3) scrambles computation to make it very difficult to precompute // future proof-of-stake at the time of the coin's confirmation // (v0.2) nBits (deprecated): encodes all past block timestamps // txPrev.block.nTime: prevent nodes from guessing a good timestamp to // generate transaction for future advantage // txPrev.offset: offset of txPrev inside block, to reduce the chance of // nodes generating coinstake at the same time // txPrev.nTime: reduce the chance of nodes generating coinstake at the same // time // txPrev.vout.n: output number of txPrev, to reduce the chance of nodes // generating coinstake at the same time // block/tx hash should not be used here as they can be generated in vast // quantities so as to generate blocks faster, degrading the system back into // a proof-of-work situation. //
I don't see anything that proves ownership of the coins that were staked in a particular output. I assume there must be something, though, or else anyone could stake with anyone else's UTXOs. What am I missing?
Maybe it is just a requirement that there be a transactions spending the output be included in the block? If so, then if someone created that initial transaction, then they could give it to someone else and let them do the manual labor of checking once per second to see if their stake succeeds?