I like the idea though, nothing gets people interested like free money.
Could use a similar idea to get help identifying people/things/songs for BTC reward money. (eg. "5 btc to whoever tells me the name of the actor in this photo" *uploads random pic*). "First person to get triples gains 200 BTC" (chance of triples = 1/1000 or 0.2 btc per person). But I couldn't think of a way to stop the same person spamming all the posts. This way by posting images, there's a small amount of work involved. Would be cool to offer mass-phonecalls/DoS for bitcoins. Then you go on 4chan and offer money per recorded prank. i.e be a pimp. how fast do u generate bitcoins? I enabled the "generate" Option and after 14 hours i still had 0,00. All blocks are downloaded and i can see no progress in creating btc this means, the coins i generate dont belong to me? kthx for ur reply, i was kinda irritated coz ive read on the official page: "Im Schnitt werden Sie (6 * 50) * (Ihre Rechenkapazität / Rechenkapazität aller Teilnehmer) Münzen pro Stunde erzeugen. Im Moment (Oktober 2009) könnten das zum Beispiel 500 Münzen pro Tag sein."
translated from german to english: Average of 500 coins generated per day! but now i checked the english faq, it says 50 coins per year.
|
|
|
There's no better way to promote the concept Agreed. I'm just have trouble thinking how I could pay and get semi-useful things in return. Anyone wants to consider donating, 19K9PAANER8Qy2w8KeMop2YagbHPK5cU17 All of the donations I receive then I'll add 1/4 and do another 4chan rally.
|
|
|
Agreed with stack overflow format. Web forums suck.
|
|
|
Aaargh! .. I can't transfer funds with my "Online Banking" without ordering some stupid usb card reader!
Haha, know the feeling. Seems everybody is trying to bluff the other side to meet their prices ATM. Starting to see buyers/sellers converge towards each other. Tomorrow I have unexpected business come up that I have to attend to. So payments may not show up in accounts until later in the day/at night.
|
|
|
If you want to set one up then contact me and we can sort something out. FYI I run Britcoin.
|
|
|
Just want to chime in and say that me and CCCMikey are discussing opening an AU exchange where I'll maintain/run/design his site using the software at Britcoin. I originally wrote this software so that there could be many Bitcoin exchanges, and we can develop a solid piece of exchange site code for Bitcoin. Hence why I'm running Britcoin for free, at a loss. We are doing method 1. There's a company so far that has given me various resources, and they plan to take over in a month after gaining the required licenses and legitimisation. Then they'll be able to integrate other payment services, the site will start charging and I'll relinquish control. One of our stipulations was that the site's sourcecode is released for free (and so I'm not receiving any payment from them). Anyway, converging all of our resources to build a secure, customisable, easy to setup exchange site should be a priority. I want to get it so any Joe Sixpack can open a new exchange site in an afternoon eventually and allow people to trade Bitcoins. This is our strongest weapon- diversification.
|
|
|
Can you give sgnornick permission to update the front page with 4 news items every 2 days? He's been fairly consistently generating a history.
|
|
|
Right. Check under your profile.
I'm carefully monitoring the site ATM. Everything requires my permission before the scripts can deposit into your account. This is because I'm checking + double checking in case there's errors.
Your payment should be authorised soon.
EDIT: Did you refresh the page yet? It should show up under your profile as an not yet authorised request. EDIT2: OK, it's actually my fault. Refresh your profile now.
|
|
|
These are my previous sites: http://genjix.freehostia.com/http://britcoin.co.uk/Tell me what you mean by 'really cool'. Does my style fit that category? Because it usually takes a lot of work to design a professional looking site. Probably for a Bitcoin website we'd make pixel art + some mascots.
|
|
|
Very nice. Thanks for all the replies & outside info.
|
|
|
by moderating your own forum, you just fracture statism into mini states.
This is a private forum and we are only guests. This is a private internet and we are only guests.
|
|
|
If you're a trusted forum member (>200 posts) and deposit at http://britcoin.co.uk/ then PM me your deposit reference code and it will be verified immediately.
|
|
|
EDIT: Did you actually read what I wrote above? Re-read it. Try this: #include <string> #include <exception> using std::string;
//typedef struct RSA; #include <openssl/rsa.h>
class ReadError : public std::exception { public: virtual const char* what() const throw(); };
class NoKeypairLoaded : public std::exception { public: virtual const char* what() const throw(); };
class AccessCard { public: AccessCard(); ~AccessCard(); void Generate(); void Load(const string& pem, const string& pass); void PublicKey(string& pem) const; void PrivateKey(string& pem, const string& passphrase) const;
private: void CheckKey() const;
RSA* keypair; };
class BioBox { public: struct Buffer { void* buf; int size; };
BioBox(); ~BioBox(); void ConstructSink(const string& str); void NewBuffer(); BIO* Bio() const; Buffer ReadAll(); private: BIO* bio; Buffer buf; };
class EvpBox { public: EvpBox(RSA* keyp); ~EvpBox(); EVP_PKEY* Key(); private: EVP_PKEY* evpkey; };
//-------------------- #include <openssl/pem.h>
const char* ReadError::what() const throw() { return "Problem reading BIO."; } const char* NoKeypairLoaded::what() const throw() { return "No keypair loaded."; }
AccessCard::AccessCard() : keypair(NULL) { if (EVP_get_cipherbyname("aes-256-cbc") == NULL) OpenSSL_add_all_algorithms(); } AccessCard::~AccessCard() { RSA_free(keypair); } void AccessCard::CheckKey() const { if (!keypair) throw NoKeypairLoaded(); }
void AccessCard::Generate() { RSA_free(keypair); keypair = RSA_generate_key(2048, RSA_F4, NULL, NULL); CheckKey(); }
static char *LoseStringConst(const string& str) { return const_cast<char*>(str.c_str()); } static void* StringAsVoid(const string& str) { return reinterpret_cast<void*>(LoseStringConst(str)); }
BioBox::BioBox() : bio(NULL) { buf.buf = NULL; buf.size = 0; } BioBox::~BioBox() { BIO_free(bio); free(buf.buf); } void BioBox::ConstructSink(const string& str) { BIO_free(bio); bio = BIO_new_mem_buf(StringAsVoid(str), -1); if (!bio) throw ReadError(); } void BioBox::NewBuffer() { BIO_free(bio); bio = BIO_new(BIO_s_mem()); if (!bio) throw ReadError(); } BIO* BioBox::Bio() const { return bio; } BioBox::Buffer BioBox::ReadAll() { buf.size = BIO_ctrl_pending(bio); buf.buf = malloc(buf.size); if (BIO_read(bio, buf.buf, buf.size) < 0) { //if (ERR_peek_error()) { // ERR_reason_error_string(ERR_get_error()); // return NULL; //} throw ReadError(); } return buf; }
EvpBox::EvpBox(RSA* keyp) { evpkey = EVP_PKEY_new(); if (!EVP_PKEY_set1_RSA(evpkey, keyp)) { throw ReadError(); } } EvpBox::~EvpBox() { EVP_PKEY_free(evpkey); } EVP_PKEY* EvpBox::Key() { return evpkey; }
static int pass_cb(char* buf, int size, int rwflag, void* u) { const string pass = reinterpret_cast<char*>(u); int len = pass.size(); // if too long, truncate if (len > size) len = size; pass.copy(buf, len); return len; } void AccessCard::Load(const string& pem, const string& pass) { RSA_free(keypair); BioBox bio; bio.ConstructSink(pem); keypair = PEM_read_bio_RSAPrivateKey(bio.Bio(), NULL, pass_cb, StringAsVoid(pass)); CheckKey(); } void AccessCard::PublicKey(string& pem) const { CheckKey(); BioBox bio; bio.NewBuffer(); int ret = PEM_write_bio_RSA_PUBKEY(bio.Bio(), keypair); if (!ret) throw ReadError(); const BioBox::Buffer& buf = bio.ReadAll(); pem = string(reinterpret_cast<const char*>(buf.buf), buf.size); }
void AccessCard::PrivateKey(string& pem, const string& passphrase) const { CheckKey(); BioBox bio; bio.NewBuffer();
EvpBox evp(keypair); int ret = PEM_write_bio_PKCS8PrivateKey(bio.Bio(), evp.Key(), EVP_aes_256_cbc(), LoseStringConst(passphrase), passphrase.size(), NULL, NULL); if (!ret) throw ReadError(); const BioBox::Buffer& buf = bio.ReadAll(); pem = string(reinterpret_cast<const char*>(buf.buf), buf.size); }
//------------------------------------------------------------------- // this wont be in the final file... it's our unit test //------------------------------------------------------------------- #include <iostream> #include <assert.h> using std::cout;
int main() { AccessCard acc; // New key acc.Generate(); string pem; // Get public key acc.PublicKey(pem); cout << pem << "\n"; // Get private key acc.PrivateKey(pem, "hello"); cout << pem << "\n"; // Load a private key using pass 'hello' acc.Load(pem, "hello"); acc.PublicKey(pem); cout << pem << "\n"; return 0; }
|
|
|
Is the presented method cryptographically strong? SSL recommends to use SEAL which does RSA + AES with IVs (as above). You shouldn't use constant IVs because that can lead to a statistical attack. Should we encrypt the entire wallet, and not just private keys? Entire wallet. Decrypt into memory once at startup. Randomise location in memory somehow. How to check for invalid passphrase? It seems cryptographically unwise to use the naive implementation (encrypt a static, well known string; check for invalid passphrase by attempting to decrypt to well known plaintext). The above code I wrote, will try to load the PEM but throw an exception when an invalid passphrase is used. So the code is as simple as: try { // load } catch (ReadError err) { }
|
|
|
|