Bitcoin Forum

Local => Кодеры => Topic started by: somenick on May 11, 2012, 05:25:49 AM



Title: Исходники bitcoin
Post by: somenick on May 11, 2012, 05:25:49 AM
Это так круто брать хеш ?  :o
Я уже боюсь дальше читать )
Кто считает что это нормальный способ, и этот способ не зависит от архитектуры компьютера ?

Code:
#define BEGIN(a)            ((char*)&(a))
#define END(a)              ((char*)&((&(a))[1]))

class CBlock
{
public:
    // header
    int nVersion;
    uint256 hashPrevBlock;
    uint256 hashMerkleRoot;
    unsigned int nTime;
    unsigned int nBits;
    unsigned int nNonce;

    uint256 GetHash() const
    {
        return Hash(BEGIN(nVersion), END(nNonce));
    }


Code:
inline uint256 Hash(const T1 pbegin, const T1 pend)
{
    static unsigned char pblank[1];
    uint256 hash1;
    SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1);
    uint256 hash2;
    SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
    return hash2;
}


Title: Re: Исходники bitcoin
Post by: LZ on May 11, 2012, 08:13:55 PM
Главное, чтобы работало. 8)


Title: Re: Исходники bitcoin
Post by: SHawk on May 12, 2012, 07:18:01 AM
меня в этой конструкции только отсутствие pragma pack смущает. Но все так пишут и это, обычно, работает.
Написане кода - всегда компромис :)


Title: Re: Исходники bitcoin
Post by: rPman on May 12, 2012, 07:57:22 AM
хм, а как это собирается на x86_64 платформе О_о, я имею в виду int
p.s. не ожидал, как минимум прагма и __int32 должны были стоять.


Title: Re: Исходники bitcoin
Post by: somenick on May 12, 2012, 06:57:06 PM
здесь вообще зависимость от little-endian и big-endian


Title: Re: Исходники bitcoin
Post by: SHawk on May 12, 2012, 07:44:36 PM
здесь вообще зависимость от little-endian и big-endian


если на это закладываться, то как минимум, нужно бы еще декларацию uint256 приводить. В ней, наверняка, эта зависимость тоже есть и исправлением приведенного кода она не обойдется...

да и ХЭШ(&int) в little-endian и big-endian по-любому разный будет, не нужно так много строк кода приводить для того, чтобы это показать...


Title: Re: Исходники bitcoin
Post by: Balthazar on May 12, 2012, 11:09:22 PM
Вышеприведенный код работает нормально на большинстве платформ, потому что размер структуры 80 байт ( кратно 2 и 8 ) . Со структурой других размеров (81 байт, к примеру) данный код уже неработоспособен без #pragma pack(push, 1) ... #pragma pack(pop). Но структура не может иметь размер, отличный от 80 байт, потому что заголовок блока всегда имеет размер 80 байт, это требование протокола, поэтому можно не думать о выравнивании.


Title: Re: Исходники bitcoin
Post by: somenick on May 12, 2012, 11:56:01 PM
вывод код гавно ) (тему можно закрывать :) )


Title: Re: Исходники bitcoin
Post by: Balthazar on May 13, 2012, 12:02:59 AM
вывод код гавно ) (тему можно закрывать :) )
Если бы автор сделал что-то ценное и полезное для сообщества, его выводы имели бы какой-то вес. А называть говном проект, тыкая в фрагменты кода в нем, много ума-времени-сил не надо. Тему можно закрывать. :)


Title: Re: Исходники bitcoin
Post by: somenick on May 13, 2012, 03:12:17 AM
вывод код гавно ) (тему можно закрывать :) )
Если бы автор сделал что-то ценное и полезное для сообщества, его выводы имели бы какой-то вес. А называть говном проект, тыкая в фрагменты кода в нем, много ума-времени-сил не надо. Тему можно закрывать. :)

а что вас задело ? моё высказывание ? ) Как будто это ваш код )
И что вы так привязываетесь к моей личности, я же не поносю вас говном ), хотя мог бы ), потому как вы ВООБЩЕ ничего не сделали, да ещё пытаетесь что то другим сказать.
Я хотябы взял исходники почитал, и выявил очевидные программиские промашки, и выкладываю свои находки для других людей. Если вам это не интересно... никто вас сюда заходить не заставляет.

И вообще когда то была статья что что якобы биткоин написан качественным программистом. Так что то это не очень то подтвержается.




Title: Re: Исходники bitcoin
Post by: ArsenShnurkov on May 13, 2012, 05:16:18 AM
Я хотябы взял исходники почитал, и выявил очевидные программиские промашки, и выкладываю свои находки для других людей.

Мне нравится, пиши еще.


И вообще когда то была статья что что якобы биткоин написан качественным программистом. Так что то это не очень то подтвержается.

И это хорошо, а то итак параноя замучала (https://bitcointalk.org/index.php?topic=78598.0)...


Title: Re: Исходники bitcoin
Post by: LZ on May 13, 2012, 03:57:47 PM
Bitcoin написан гением, а гениальность, в отличие от качества, не измеряется.
Так что неважно качественный или некачественный программист. Он - гений!

а что вас задело ? моё высказывание ? )
Меня вот задевает. Код работает, а Вы вдруг называете чем-то нехорошим. >:(


Title: Re: Исходники bitcoin
Post by: Balthazar on May 13, 2012, 08:50:54 PM
Да просто на любое критическое высказывание в подобной форме всегда возникает закономерный вопрос "а кто вы, собственно, вообще такой?". И дело тут не в том, задело или не задело.


Title: Re: Исходники bitcoin
Post by: ArsenShnurkov on May 13, 2012, 09:48:02 PM
https://bitcointalk.org/index.php?topic=81651.0


Title: Re: Исходники bitcoin
Post by: SHawk on May 14, 2012, 04:05:40 PM
вывод код гавно ) (тему можно закрывать :) )

Давайте сделаем так:
Вы предлагаете (здесь) свою реализацию кода, так сказать, чтобы критика была конструктивной.
А потом, если захотите, сможете ее (свою реализацию) сами прокомментировать... :)


Title: Re: Исходники bitcoin
Post by: Balthazar on May 14, 2012, 04:43:30 PM
Вы предлагаете (здесь) свою реализацию кода, так сказать, чтобы критика была конструктивной.
Причем, полностью совместимую с протоколом. ::)


Title: Re: Исходники bitcoin
Post by: somenick on May 15, 2012, 06:05:09 PM
даю на_водку
Code:
byte* Hash(CBlock& block)

вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.


Title: Re: Исходники bitcoin
Post by: rPman on May 15, 2012, 06:26:48 PM
вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.
А если за плату?
Во сколько можно оценить исправление алгоритма хеширования? В том числе ту часть, из-за которой (как утверждают некоторые на форуме) текущая реализация официального клиента очень медленно обрабатывает загружаемые блоки (в т.ч. при первой загрузке), даже если загрузка происходит с соседней машины в локальной сети.


Title: Re: Исходники bitcoin
Post by: N.Z. on May 15, 2012, 06:51:35 PM
Quote
В том числе ту часть, из-за которой (как утверждают некоторые на форуме) текущая реализация официального клиента очень медленно обрабатывает загружаемые блоки (в т.ч. при первой загрузке), даже если загрузка происходит с соседней машины в локальной сети.
Вроде бы это исправляли недавно, не? И по словам тех же некоторых стало все значительно быстрее. Уже не помню тему на форуме, но вроде бы в официально-релизной за 0.6.0 или 0.6.1


Title: Re: Исходники bitcoin
Post by: SHawk on May 15, 2012, 07:10:24 PM
даю на_водку
Code:
byte* Hash(CBlock& block)

вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.

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


Title: Re: Исходники bitcoin
Post by: Balthazar on May 15, 2012, 09:28:38 PM
Тоже дам на_водку. Демон bitcoind собирается и корректно работает на SPARC и MIPSEL, проверялось экспериментально в том числе и мной, еще на версии 0.3.24. Так же, в официальном репозитории дебиана есть пакеты под IA64, ARM и PowerPC, причем накладываемые при сборке под эти архитектуры патчи минималистичны и даже близко не относятся к затронутым в этой теме фрагментам кода. Вот такая страшная тайна. :D


Title: Re: Исходники bitcoin
Post by: ArsenShnurkov on May 16, 2012, 04:07:09 AM
накладываемые при сборке под эти архитектуры патчи

что/кто мешает принять эти патчи в основной код?


Title: Re: Исходники bitcoin
Post by: Balthazar on May 16, 2012, 05:54:50 AM
Это debian-специфичные доделки скриптов сборки. У них в дистрибутиве нет почти программ, которые они не патчили просто, традиция такая.


Title: Re: Исходники bitcoin
Post by: somenick on May 17, 2012, 09:59:31 AM
вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.
А если за плату?
Во сколько можно оценить исправление алгоритма хеширования? В том числе ту часть, из-за которой (как утверждают некоторые на форуме) текущая реализация официального клиента очень медленно обрабатывает загружаемые блоки (в т.ч. при первой загрузке), даже если загрузка происходит с соседней машины в локальной сети.

Можно и за плату, но час работы у меня дорогой.
bitcoind мне не интересно писать, интересно написать с нуля, используя нормальну базу данных.
У меня есть основная работа. И времени мало.
Так что я по маленьку буду разбираться в алгоритме, и когда-нибудь может что-то родится.
Писаться если и будет то на java.


Title: Re: Исходники bitcoin
Post by: Balthazar on May 30, 2012, 09:15:39 PM
BitcoinJ за вас уже гугл изобрел.  ::) А еще изобрели Bitcoin#, правда он недоделан.


Title: Re: Исходники bitcoin
Post by: rPman on May 31, 2012, 08:07:08 AM
Изучаю гитхаб и некоторые уже закрытые пулреквесты, какие там вкусности...
* https://github.com/bitcoin/bitcoin/pull/841 - rpc gettransaction для любых транзакций, а не только из кошелька (закрыт), жаль еще не работает для пула неподтвержденных транзакций (я бы разделил разными командами), нереально полезное изменение (блин там кода кот наплакал... не могли раньше сделать, а я дурак думал там сложно)
теперь с помощью только rpc на запущенном клиенте можно анализировать базу:
1. ключом указать приложение, автоматически запускаемое при появлении нового блока -blocknotify
2. с помощью getinfo узнаем последний блок
3. с попомощью getblockhash узнаем хеш блока по индексу (кстати -blocknotify в параметрах запуска приложения может указать хеш нового блока)
4. с помощью getblock получаем краткую информацию по блоку и список хешей транзакций
5. с помщью gettransaction получаем информацию по любой транзакции!!!
Теперь приложение, анализирующее блокчейн не требует утилиты или abe и занимает всего одну страничку кода (даже меньше), все это в реальном времени, без перезапуска и остановки клиента (у меня был вариант с созданием снапшота lvm для диска, на котором размещен блокчейн, все лучше чем останавливать офф клиент или хранить две базы блоков рядом)
p.s. пока есть недостаток, нужно самостоятельно парсить "scriptSig" и "scriptPubKey" (в чистом виде не показаны адреса)

* https://github.com/bitcoin/bitcoin/pull/1386 - запуск комманд при появлении транзакций в соответствии с условием (еще открыт)
* https://github.com/bitcoin/bitcoin/pull/1174 - поддержка tor (bitcoin как нода сети) (еще открыт но я так понимаю уже работает), странно что для i2p нет аналогичного реквеста
* https://github.com/bitcoin/bitcoin/pull/570 - возможность узнать до отсылки и даже принудительно указать свою комиссию на транзакцию (открыт), даже без принудительного указания я считаю очень полезная вещь (мне бы хватило возможности указать допустимые границы для комиссии, и если она их превышает - выдавать error вместо создания транзакции)
...

p.s. есть желающие/способные перевести мой issue (https://github.com/bitcoin/bitcoin/issues/1402) в статус реквеста? Я думаю это очень полезное и удобное нововведение, не требующее серьезного кодинга:
Quote
Разделение wallet.dat на две части - приватные ключи и остальное
wallet.dat слишком часто обновляется, имеет неоправданно большой размер, это создает неудобства при его обслуживании и резервном копировании.
1. wallet-private.dat: часть с секретными ключами должна содержать только ту информацию, достаточную чтобы обеспечить полный доступ к бумажнику, на данный момент это может быть только список адресов в виде пар их открытого и закрытого ключей.
2. wallet-cache.dat: остальная информация (метки, комментарии, кэша транзакций и т.д.) должна быть перемещена в другой файл. Наиболее важная информация из этого может быть восстановлена из blockchain и предыдущего файла с ключами с помощью ключа командной строки -rescan
p.s. Также можно добавить два дополнительных ключа командной строки для указания различных мест хранения этих файлов (я думаю, что wallet-private.dat может находиться на съемном диске, а, например, в будущем, на других устройств с доступом по API, подобно клиенту Электрум)


Title: Re: Исходники bitcoin
Post by: Ivelon on December 14, 2013, 01:32:52 PM
Ищу специалиста по биткоин для консалтинга и разработки. Пишите в личку или в скайп.