* our_result - If pushpool accepts the hash from the miner, this is Y... else N
* reason - If pushpool doesn't accept the hash, this is the reason (so.. mostly 'stale' I guess)
* upstream_result - If pushpool accepted the hash, it gets forwarded to bitcoind, if it's not accepted it's N, if it's a success it's Y (and a new block is born?)...
I've got a couple of "our_result=Y; upstream_result=N" what does that mean? (Is it related to rpc.target.rewrite?)
For easy-target pools, pushpool does not submit all H==0 solutions to upstream bitcoind. That would be a lot of solutions with zero chance of being a valid mainnet block hash.
pushpool requires 8 additional zero bits, before it submits to upstream. Therefore, you will see (Y, NULL) for most shares, (Y, N) for uncommon shares that are just a bit closer to the target, and (Y, Y) for valid, full-target mainnet block hash accepted by upstream. Only the latter (Y, Y) pays you 50 BTC, and generates a block w/ transactions.
If you are difficulty 1 pool, then each share represents 2**32 hashes. Divide over time to get hashes/second.