Майнер с на МК ардуино

Алексей911
Offline
Зарегистрирован: 04.11.2016

Как Вы думаете можно чтото подобное написать под ардуино и чтоб работало?

[​IMG]

Криптографическая функция хэширования на вход получает блок с данными, а выдаёт небольшой, но непредсказуемый, выход. Она спроектирована так, что не существует быстрого способа получить нужный выход, и вы должны продолжать перебор пока не найдёте подходящее значение. Биткойн использует SHA-256 в качестве такой функции. Причём для усиления стойкости SHA-256 применяется к блоку дважды и называется уже двойным SHA-256.

 

SHA-256



Алгоритм работает с данными, разбитыми на куски по 512 бит (64 байт), криптографически их смешивает и выдаёт 256-битный (32 байта) хэш. SHA-256 состоит из относительно простого раунда, повторяющегося 64 раза. Снизу, как раз, и показан такой раунд, принимающий на вход 8 4-байтовых слов — от A до H.



cb881410bd5a4c56a0f7754416df3632.png

Один раунд SHA-256 для восьми входных слов A-H. Схема нарисована kockmeyer, CC BY-SA 3.0.



Синие блоки нелинейно перемешивают биты для усложнения криптографического анализа. Причём для еще большей надежности используются разные функции перемешивания (если вы сможете найти математическую лазейку для быстрого генерирования валидных хэшей, то возьмёте под контроль весь процесс майнинга биткойнов).



Функция большинства (Ma блок) побитово работает со словами A, B и C. Для каждой битовой позиции она возвращает 0, если большинство входных битов в этой позиции — нули, иначе вернёт 1.



Блок Σ0 циклически сдвигает A на 2 бита, затем исходное слово A циклически сдвигается на 13 бит, и, аналогично, на 22 бита. Получившиеся три сдвинутые версии A побитово складываются по модулю 2 (обычный xor, (A ror 2) xor (A ror 13) xor (A ror 22)).



Ch реализует функцию выбора. На каждой битовой позиции проверяется бит из E, если он равен единице, то на выход идёт бит из F с этой позиции, иначе бит из G. Таким образом, биты из F и G перемешиваются, исходя из значения E.



Σ1 по структуре аналогичен Σ0, но работает со словом E, а соответствующие сдвиговые константы — 6, 11 и 25.



Красные блоки выполняют 32-битное сложение, формируя новые значения для выходных слов A и E. Значение Wt генерируется на основе входных данных (это происходит в том участке алгоритма, который получает и обрабатывает хэшируемые данные. Он вне нашего рассмотрения). Kt — своя константа для каждого раунда. [2]



На схеме сверху заметно, что только A и E меняются за один криптографический раунд. Остальные слова не меняются, но сдвигаются на выходе — старое A превращается в выходное B, старое B — в новое C, и так далее. Хотя отдельный раунд алгоритма не сильно изменяет данные, но после 64 раундов, входная информация будет полностью зашифрованной.

Logik
Offline
Зарегистрирован: 05.08.2014

написать можна, работать будет, но медлено. Пока копейку насчитает - биткоинты уже пополнят мировую историю финансовых пирамид.

b707
Offline
Зарегистрирован: 26.05.2017

Для майнинга крайне важна вычислительная мощность. Даже на мощных кластерах сейчас доход от майнинга не покрывает счетов за электричество. На слабенькой Ардуине что-то заработать -  никаких шансов вообще.

Но как теоретическая задача - почему нет

Алексей911
Offline
Зарегистрирован: 04.11.2016

А ктонибуть может подсказать путь ее выполнения с ардуинкой дружу но с чего начать?

меня не интересует доход только спортивный интерес)

negavoid
Offline
Зарегистрирован: 09.07.2016

всё уже сделано :)

https://rweather.github.io/arduinolibs/crypto.html

https://github.com/Cathedrow/Cryptosuite

но я не могу понять, неужели было так трудно написать в гугл "arduino sha256"? :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

negavoid пишет:

написать в гугл "arduino sha256"? :)

Не наш метод!

Алексей911
Offline
Зарегистрирован: 04.11.2016
#include "sha256.h"

uint8_t hmacKey1[]={
  0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b
};
uint8_t hmacKey2[]={
  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,
  0x15,0x16,0x17,0x18,0x19
};
uint8_t hmacKey3[]={
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
};
uint8_t hmacKey4[]={
  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c
};
uint8_t hmacKey5[]={
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
  0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
};

void printHash(uint8_t* hash) {
  int i;
  for (i=0; i<32; i++) {
    Serial.print("0123456789abcdef"[hash[i]>>4]);
    Serial.print("0123456789abcdef"[hash[i]&0xf]);
  }
  Serial.println();
}

void setup() {
  uint8_t* hash;
  uint32_t a;
  
  Serial.begin(9600);

  // HMAC tests
  Serial.println("Test: RFC4231 4.2");
  Serial.println("Expect:b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7");
  Serial.print("Result:");
  Sha256.initHmac(hmacKey1,20);
  Sha256.print("Hi There");
  printHash(Sha256.resultHmac());
  Serial.println();
  
  Serial.println("Test: RFC4231 4.3");
  Serial.println("Expect:5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843");
  Serial.print("Result:");
  Sha256.initHmac((uint8_t*)"Jefe",4);
  Sha256.print("what do ya want for nothing?");
  printHash(Sha256.resultHmac());
  Serial.println();
  
  Serial.println("Test: RFC4231 4.4");
  Serial.println("Expect:773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe");
  Serial.print("Result:");
  Sha256.initHmac(hmacKey3,20);
  for (a=0; a<50; a++) Sha256.write(0xdd);
  printHash(Sha256.resultHmac());
  Serial.println();

  Serial.println("Test: RFC4231 4.5");
  Serial.println("Expect:82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b");
  Serial.print("Result:");
  Sha256.initHmac(hmacKey2,25);
  for (a=0; a<50; a++) Sha256.write(0xcd);
  printHash(Sha256.resultHmac());
  Serial.println();
  
  Serial.println("Test: RFC4231 4.6");
  Serial.println("Expect:a3b6167473100ee06e0c796c2955552b-------------------------------");
  Serial.print("Result:");
  Sha256.initHmac(hmacKey4,20);
  Sha256.print("Test With Truncation");
  printHash(Sha256.resultHmac());
  Serial.println();
  
  Serial.println("Test: RFC4231 4.7");
  Serial.println("Expect:60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54");
  Serial.print("Result:");
  Sha256.initHmac(hmacKey5,131);
  Sha256.print("Test Using Larger Than Block-Size Key - Hash Key First");
  printHash(Sha256.resultHmac());
  Serial.println();

  Serial.println("Test: RFC4231 4.8");
  Serial.println("Expect:9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2");
  Serial.print("Result:");
  Sha256.initHmac(hmacKey5,131);
  Sha256.print("This is a test using a larger than block-size key and a larger than "
  "block-size data. The key needs to be hashed before being used by the HMAC algorithm.");
  printHash(Sha256.resultHmac());
  Serial.println();
  
}

void loop() {
}

 

Алексей911
Offline
Зарегистрирован: 04.11.2016

Реч идет а данном скрипте

 

Алексей911
Offline
Зарегистрирован: 04.11.2016

Где скачать библиотеку?

b707
Offline
Зарегистрирован: 26.05.2017

Алексей911 пишет:

Где скачать библиотеку?

в интернете? :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей911 пишет:

Где скачать библиотеку?

Алексей, Вы вообще в сети можете хоть что-нибудь найти? Или даже порнуху не находите?

https://github.com/Cathedrow/Cryptosuite - вот она Ваша библиотека, первый же результат в гугловском поиске. С Вас биткоин!

Алексей911
Offline
Зарегистрирован: 04.11.2016
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "sha256.h"

uint32_t sha256K[] PROGMEM = {
  0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
  0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
  0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
  0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
  0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
  0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
  0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
  0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
};

#define BUFFER_SIZE 64

uint8_t sha256InitState[] PROGMEM = {
  0x67,0xe6,0x09,0x6a, // H0
  0x85,0xae,0x67,0xbb, // H1
  0x72,0xf3,0x6e,0x3c, // H2
  0x3a,0xf5,0x4f,0xa5, // H3
  0x7f,0x52,0x0e,0x51, // H4
  0x8c,0x68,0x05,0x9b, // H5
  0xab,0xd9,0x83,0x1f, // H6
  0x19,0xcd,0xe0,0x5b  // H7
};

void Sha256Class::init(void) {
  memcpy_P(state.b,sha256InitState,32);
  byteCount = 0;
  bufferOffset = 0;
}

uint32_t Sha256Class::ror32(uint32_t number, uint8_t bits) {
  return ((number << (32-bits)) | (number >> bits));
}

void Sha256Class::hashBlock() {
  uint8_t i;
  uint32_t a,b,c,d,e,f,g,h,t1,t2;

  a=state.w[0];
  b=state.w[1];
  c=state.w[2];
  d=state.w[3];
  e=state.w[4];
  f=state.w[5];
  g=state.w[6];
  h=state.w[7];
  
  for (i=0; i<64; i++) {
    if (i>=16) {
      t1 = buffer.w[i&15] + buffer.w[(i-7)&15];
      t2 = buffer.w[(i-2)&15];
      t1 += ror32(t2,17) ^ ror32(t2,19) ^ (t2>>10);
      t2 = buffer.w[(i-15)&15];
      t1 += ror32(t2,7) ^ ror32(t2,18) ^ (t2>>3);
      buffer.w[i&15] = t1;
    }
    t1 = h;
    t1 += ror32(e,6) ^ ror32(e,11) ^ ror32(e,25); // ∑1(e)
    t1 += g ^ (e & (g ^ f)); // Ch(e,f,g)
    t1 += pgm_read_dword(sha256K+i); // Ki
    t1 += buffer.w[i&15]; // Wi
    t2 = ror32(a,2) ^ ror32(a,13) ^ ror32(a,22); // ∑0(a)
    t2 += ((b & c) | (a & (b | c))); // Maj(a,b,c)
    h=g; g=f; f=e; e=d+t1; d=c; c=b; b=a; a=t1+t2;
  }
  state.w[0] += a;
  state.w[1] += b;
  state.w[2] += c;
  state.w[3] += d;
  state.w[4] += e;
  state.w[5] += f;
  state.w[6] += g;
  state.w[7] += h;
}

void Sha256Class::addUncounted(uint8_t data) {
  buffer.b[bufferOffset ^ 3] = data;
  bufferOffset++;
  if (bufferOffset == BUFFER_SIZE) {
    hashBlock();
    bufferOffset = 0;
  }
}

void Sha256Class::write(uint8_t data) {
  ++byteCount;
  addUncounted(data);
}

void Sha256Class::pad() {
  // Implement SHA-256 padding (fips180-2 §5.1.1)

  // Pad with 0x80 followed by 0x00 until the end of the block
  addUncounted(0x80);
  while (bufferOffset != 56) addUncounted(0x00);

  // Append length in the last 8 bytes
  addUncounted(0); // We're only using 32 bit lengths
  addUncounted(0); // But SHA-1 supports 64 bit lengths
  addUncounted(0); // So zero pad the top bits
  addUncounted(byteCount >> 29); // Shifting to multiply by 8
  addUncounted(byteCount >> 21); // as SHA-1 supports bitstreams as well as
  addUncounted(byteCount >> 13); // byte.
  addUncounted(byteCount >> 5);
  addUncounted(byteCount << 3);
}


uint8_t* Sha256Class::result(void) {
  // Pad to complete the last block
  pad();
  
  // Swap byte order back
  for (int i=0; i<8; i++) {
    uint32_t a,b;
    a=state.w[i];
    b=a<<24;
    b|=(a<<8) & 0x00ff0000;
    b|=(a>>8) & 0x0000ff00;
    b|=a>>24;
    state.w[i]=b;
  }
  
  // Return pointer to hash (20 characters)
  return state.b;
}

#define HMAC_IPAD 0x36
#define HMAC_OPAD 0x5c

uint8_t keyBuffer[BLOCK_LENGTH]; // K0 in FIPS-198a
uint8_t innerHash[HASH_LENGTH];

void Sha256Class::initHmac(const uint8_t* key, int keyLength) {
  uint8_t i;
  memset(keyBuffer,0,BLOCK_LENGTH);
  if (keyLength > BLOCK_LENGTH) {
    // Hash long keys
    init();
    for (;keyLength--;) write(*key++);
    memcpy(keyBuffer,result(),HASH_LENGTH);
  } else {
    // Block length keys are used as is
    memcpy(keyBuffer,key,keyLength);
  }
  // Start inner hash
  init();
  for (i=0; i<BLOCK_LENGTH; i++) {
    write(keyBuffer[i] ^ HMAC_IPAD);
  }
}

uint8_t* Sha256Class::resultHmac(void) {
  uint8_t i;
  // Complete inner hash
  memcpy(innerHash,result(),HASH_LENGTH);
  // Calculate outer hash
  init();
  for (i=0; i<BLOCK_LENGTH; i++) write(keyBuffer[i] ^ HMAC_OPAD);
  for (i=0; i<HASH_LENGTH; i++) write(innerHash[i]);
  return result();
}
Sha256Class Sha256;
In file included from C:ppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/Arduino.h:28:0,
 
                 from sketch\pr49______.ino.cpp:1:
 
pr49______:6: error: variable 'sha256K' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 
pr49______:19: error: variable 'sha256InitState' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 
pr49______:90: error: prototype for 'void Sha256Class::write(uint8_t)' does not match any in class 'Sha256Class'
 
In file included from C:\Users\АЛё-ля)\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/Stream.h:26:0,
 
                 from C:\Users\АЛё-ля)\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/HardwareSerial.h:29,
 
                 from C:\Users\АЛё-ля)\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/Arduino.h:232,
 
                 from sketch\pr49______.ino.cpp:1:
 
C:\Users\АЛё-ля)\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/Print.h:49:12: error: candidates are: size_t Print::write(const char*)
 
     size_t write(const char *str) {
 
            ^
 
C:\Users\АЛё-ля)\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/Print.h:53:20: error:                 virtual size_t Print::write(const uint8_t*, size_t)
 
     virtual size_t write(const uint8_t *buffer, size_t size);
 
                    ^
 
C:\Users\АЛё-ля)\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.17\cores\arduino/Print.h:54:12: error:                 size_t Print::write(const char*, size_t)
 
     size_t write(const char *buffer, size_t size) {
 
            ^
 
In file included from C:\Users\АЛё-ля)\Desktop\pr49______\pr49______.ino:4:0:
 
C:\Program Files (x86)\Arduino\libraries\Sha/sha256.h:94:17: error:                 virtual size_t Sha256Class::write(uint8_t)
 
  virtual size_t write(uint8_t);
 
                 ^
 
exit status 1
variable 'sha256K' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Алексей911
Offline
Зарегистрирован: 04.11.2016

Бесконечные ошибки компиляции

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей911 пишет:

Бесконечные ошибки компиляции

Так исправляйте. Только побыстрее, пока не пришёл Клапауций и не запретил.

Алексей911
Offline
Зарегистрирован: 04.11.2016
 
                 from c:\Program Files (x86)\FLProg\ideV1\libraries\Sha\sha1_config.h:13,
 
                 from c:\Program Files (x86)\FLProg\ideV1\libraries\Sha\sha1.h:4,
 
                 from c:\Program Files (x86)\FLProg\ideV1\libraries\Sha\sha1.cpp:1:
 
c:\Program Files (x86)\FLProg\ideV1\libraries\Sha\sha1.cpp:8:25: error: variable 'sha1InitState' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 
 uint8_t sha1InitState[] PROGMEM = {
 
                         ^
 
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не понял зачем Вы это постите? Исправляйте эту мелочёвку - со старыми библиотеками всегда так. IDE поменялась и они с ней несовместимы, надо подправить.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Всегда бесили дебилы, не хотящие ничего делать, только деньги получать. Человек, б@ть, ни хрена не понимая в программировании, лезет майнить биткоины.  Вот что халява-то жывотварящая делает.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

DetSimen пишет:

Человек, б@ть, ни хрена не понимая в программировании, лезет майнить биткоины.

человек-нисчеброд, Карл!

майнящие железки десятки килобаксов стоят, а дуино - пару баксов.

ничего ты не понимаешь в булгахтерии.

*ЗЫ. я - разрешаю. \о

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

*ЗЫ. я - разрешаю. \о

а тут по другому и нельзя. 

Алексей911
Offline
Зарегистрирован: 04.11.2016
Test: RFC4231 4.2
Expect:b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7
Result:b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7
 
Test: RFC4231 4.3
Expect:5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
Result:5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
 
Test: RFC4231 4.4
Expect:773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe
Result:773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe
 
Test: RFC4231 4.5
Expect:82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b
Result:82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b
 
Test: RFC4231 4.6
Expect:a3b6167473100ee06e0c796c2955552b-------------------------------
Result:a3b6167473100ee06e0c796c2955552bfa6f7c0a6a8aef8b93f860aab0cd20c5
 
Test: RFC4231 4.7
Expect:60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54
Result:60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54
 
Test: RFC4231 4.8
Expect:9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2
Result:9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2
 
 
пустилась)
Алексей911
Offline
Зарегистрирован: 04.11.2016

меня не интересует доход только спортивный интерес

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей911 пишет:

пустилась)

Не забываем про последнюю фразу из моего поста!

joric
Offline
Зарегистрирован: 15.04.2018
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я не понял, а что мне биткоин не обломится? Я же вроде как только этом условии ссылку выдал в посте #10 Вот и помогай людям :(

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Я не понял, а что мне биткоин не обломится? Я же вроде как только этом условии ссылку выдал в посте #10 Вот и помогай людям :(

Зачем вам неликвидная валюта? Просите солёными огурцами - всяко полезней.