The other nodes check if the p2pool-block is valid by verifing the difficulty, the reference to the previous p2pool block and the including transactions.
Thanks for the response! So P2Pool chain contains ALL bitcoin transactions? What happen if one P2Pool miner include transaction which does not fit the rules of other P2Pool participants? OP_EVAL is the good example.
|
|
|
I have maybe stupid question. I understand that P2Pool uses alternate blockchain to keep track of partially solved blocks in the network, which is used for accounting "shares" and paying the reward to the miners, right?
But who picks transactions into block? And who check if transactions are valid, so miner in P2Pool is providing useful work (work which can be accepted by bitcoin network)? Does P2Pool address and solve this problem somehow?
What happen when Bitcoin network start to accepting OP_EVAL or P2SH, but miners in the P2Pool don't update their miners? As I understand correctly, they'll be still providing "shares" to the P2Pool, but if they really solve the block, it will be eventually rejected by the Bitcoin network. But afaik P2Pool blockchain is storing prevhashes, so maybe P2Pool blockchain will be split into two separate chains when split in the transaction rules happen?
|
|
|
Very nice, thank you :-). I didn't commited into git for few days, because I'm finishing one project in my job, but then I'll work more actively on the Stratum again. I'm missing it!
|
|
|
feature request: payout time intervall my problem is that i want a daily payout, i am doing this right now by setting payout_limit to 7day average, but i am a little unhappy that the intervall in which my payments get send is so variable i would like somethink like if last_payment_time + payment_timeintervall < actual_time && payout_limit > btc_balance then PAYOUTTIME
i think that is the easiest way to explane about what i think, no language problems in code i think payment_timeintervall should be in days and the payout_limit which already can't be set under 0.01 afaik will secure that there aren't to tiny payouts what do you think? Yep, I was thinking about it too and I pretty like your proposal. I'll do it soon.
|
|
|
sadpandatech: Thanks for doing mining support! I don't have such experience to help members with hardware...
|
|
|
It's actually hosted by BitVPS.COM not .Net....
Fixed, thanks
|
|
|
damn we've been having some bad luck here the last day or so... a couple 7-8 hour blocks. edit: 1 day pool luck is currently at 39% Yep, it was insane day. But we're now at 130% in one day and 99% in seven day average, which is pretty good.
|
|
|
Gratz on 10k blocks!
Heh, I didn't noticed that, thanks! :-)
|
|
|
Any documentation on what is and is not implemented right now?
get_history() works now, however the result data may be slightly changed in the future. I'm writing API for standard services, then will be much cleaner what method expect what parameters and what will be the result object.
|
|
|
This also happens when I try a prodnet address:
POST / HTTP/1.1 Host: chicago.stratum.bitcoin.cz:8000 Content-Type: application/stratum Connection: keep-alive Accept: */* User-Agent: NING/1.0 Content-Length: 84
id=1&method=blockchain.address.get_history¶ms=14obksEpeUTAKsdKsw3vTSUoiYeK9S3thA
Hi, your payload is wrong, you must use json-encoded data. So {"id":1, "method":"blockchain.address.get_history", "params": ["14obksEpeUTAKsdKsw3vTSUoiYeK9S3thA"]} instead of url-encoded data.
|
|
|
Granted, difficulty has increased since then. We have also had some fairly terrible luck recently, so that may explain it as well. Obviously payout is going to have some inherit variation here due to luck as this isn't a PPS pool either.
You joined the pool in very unlucky day; From the Statistics page, the luck was around 39%, which is very low. However, as you can see, monthly luck is very close to 100% (it usually fluctuates from 99% to 101%, which is expected).
|
|
|
Let me try to rephrase. Assuming servers don't rate-limit just yet - if I don't send any cookies, and just poll every minute on address.get_history, and once in a while do transaction.broadcast ... will this work?
Assuming that such services are already implemented on the Stratum nodes (which isn't yet) - yes, it will work. But you're doing exactly the case b) from my previous post, so you don't need to use get_history at all, just subscribe the address in the time when you send it to the user. But I understand you're mostly playing with the stuff so I'm ok with it...
|
|
|
The first one is a meta question - how about using Shapado as a Q&A forum? It's "setup in 8 seconds", and better than a forum thread. It might be better than just firing these questions away at the Stack Exchange. The advantage of a dedicate forum is that you (and other Stratum devs) could follow that website and quickly respond to questions, and the answers would be findable later via Google. Yes, some better tools should be better in the future, but at this moment the forum thread is doing well. There is only few people so the discussion is pretty clean now. Especially I'll try to move that google docs to some wiki which allow me to separate whole document into more parts and include some additional info (as an examples). The APIs that I need right now appear to be only address.get_history and transaction.broadcast (I'll start by implementing the simple & naive polling protocol). For these purposes, I'm not sure why I need to maintain a session. As a matter of fact ... can you give an example when a session is useful?
What's your purpose of such calls? You probably don't want to download whole address history on every request (say 5 seconds), right? I'm not sure, because I don't know your application, but you probably want to download address history on the startup and then subscribe your client for changes on given address, to receive only new transactions. In this way you save server resources and bandwidth. It's also possible that server may block your requests when you start overflooding server with "get_history" requests every few seconds, because there's no reason to do that so frequently (rate limiting isn't implemented yet, but it is pretty good feature for the future). There are mostly two main usecases: a) The address you're interested in is already existing, so you need to ask for history + subscribe for new transactions. b) The address is freshly generated by you, so you know that there's no history and you want ONLY to subsribe for new transactions. This is the case of some merchant tool, which created fresh address for receiving coins for the order... case a) first http call (one HTTP request can contain more RPC calls, divided by newline character): blockchain.address.get_history('1SomeAddress') => list of transactions blockchain.address.subscribe('1SomeAddress') => returns only True on a success, but server will send you data for incoming transactions in following HTTP responses. following http calls: blank HTTP request (with the session) to the server case b) first HTTP call: blockchain.address.subscribe('1SomeAddress') (no get_history() command is needed!) following HTTP calls: blank HTTP request (with the session) to the server I think there's big misunderstanding about the "polling" thing. Polling does not mean that the connection is stateless and you need to ask for everyting on every request. Polling mechanism is only the workaround for the situation when only the client can initiate the communication and is giving a chance to counterparty to send pending data back in the polling response (like information about incoming transaction)... So yes, you need to "care" about the session even in your use case. But almost every http client library can do cookie management internally, when you perform more calls ("http polling requests") in the row..
|
|
|
Mining jobs do not differ only in the nonce, read about merkle root hash and nExtraNonce on the bitcoin.it wiki...
|
|
|
Good news, NMC payouts are fixed and working again!
|
|
|
The incompatibility should now be resolved.
Excellent! Thank you for your hard work :-).
|
|
|
Can you explain a bit more your decisions?
Of course. HTTP is just a transport carrying abstract Stratum payload. There is TCP transport already and there can be a lot more transports in the future. Stratum protocol is designed to be bi-directional, so server can send some payload to client (information about new block, new transaction) at any time. It's not the part of application layer itself to decide HOW transport will deliver such payload to the client. So server just tell "send <this> to the client" and don't care about it anymore. HTTP Poll transport is just the alternative for the environment where real bi-directional communication (like TCP socket or websocket) is not possible. So every poll request just give a chance to send pending messages from the server to the client in the HTTP response, simulating bi-directional communication, just with some delay (=polling interval). From the view of this idea, creating RPC command for polling is going against the whole conception, because RPC commands are handled by different layer than HTTP transport mechanism. And there's nothing like 'poll' RPC command for standard bi-directional transports anyway. Also, how would that work with TCP?
In the TCP transport, which is bi-directional, polling is not needed at all. Server will send the payload when it's ready, in real time. It's the beauty of pub-sub mechanism.
|
|
|
I used the rpc calls that you provided in your document where it was possible, but some calls are missing for session management.
What exactly are you missing? I see only three session-related calls in server.py (new_session, update_session, poll_session) which are useless in Stratum protocol. Edit: To be more verbose: new_session: You just don't send session cookie to the server and it will create new session for the client automatically. No RPC command needed. update_session: Replaced with blockchain.address.subscribe() poll_session: Perform just blank HTTP request to Stratum server, it will put pending messages to the response. No RPC command needed.
|
|
|
I do not know. The initial idea was to propose a new name for the communication protocol, so that it can be distinguished from the software.
Thomas, I proposed the protocol and asked you for the opinion. You told me that you don't understand and/or don't see any point in it and you want reference implementation of the protocol. So I created Stratum server implementation. What's unclear in this? Now it seems that slush has decided to rewrite client and server from scratch, and that "Stratum" is being used to designate his software, not the protocol.
It's still Stratum protocol + server reference implementation + I'm writing some "default" services into it. Protocol implementation is already here and you know that I decided to separate Stratum from Electrum project, because I see some potential for lightweight clients generally, not only for Electrum. But of course I'm open to help you with integrating Stratum into Electrum client, if you want. We already had the discussion about Twisted on the IRC and I accept that you don't like Twisted in the client, so I'll provide you clean-python implementation of Stratum client.
|
|
|
deleted (I wrote some bullshit but then I realized I'm too tired. So I'll think about it and write later).
|
|
|
|