Alrighty, I just put something up on GitHub:
https://github.com/javgh/greenaddress-pos-tools .
As mentioned in the README, here is how to get started:
- install dependencies: python-qrencode, python-qt4
- add "server=1" (but not daemon=1) to bitcoin.conf and configure rpcuser & rpcpassword
- edit RPC_URL in controller.py
- run: python pos-tool.py
I'm developing on Linux, so this is only tested on Linux. But I would hope this to be fairly portable. Patches to make it work (better) on Windows and/or Mac OS are welcome.
You should see two windows popping up: The merchant backend and the customer display. If you enter a BTC amount and click "show", a new Bitcoin address and associated QR code will be generated and displayed to the customer. The tool then listens for transactions to the Bitcoin address and as soon as it receives something, it changes the display to read "Payment received". If the payment was done via Instawallets green address, it will add the phrase "Verified by Instawallet". The merchant is expected to use their Bitcoin client to see if the correct amount was sent.
What is missing:
- some hardcoded stuff should be moved into a configuration file
- a button to bring the customer display to fullscreen and some logic to go back to idle mode after a while
- interfacing with Mt.Gox and/or Tradehill to do currency conversion
- slick design for the customer display
If you look at the code, you will see that it contains a simple Bitcoin node implementation. This is used to listen for transactions and get notified as soon as one arrives. This could be done much easier with a patch to bitcoind (for example a version of Gavin's monitor patch:
https://github.com/bitcoin/bitcoin/pull/198 ), but an important goal of this project is to have as few dependencies as possible and especially be able to run with a vanilla Bitcoin daemon. This is why I went the route of using ArtForz' "half-a-node" implementation to listen for transactions manually. (Hopefully this can be dropped at some point in the future, when the official client allows some form of push-notification directly.)
As to the customer display: As mentioned before, I now went the route of putting it all into a single HTML file (data/customer_display.html) and using Javascript functions to toggle between the different states ("show_idle()", "show_payment_info()", "show_payment_received()"). The Javascript functions will show and hide DIVs. In designing a new look, you can pretty much just work with that HTML file directly, as it also contains some debug links to trigger those Javascript functions. This should also make it fairly easy to bundle a number of different "skins" for the system.
Looking forward to your input!