Author

Topic: Исходники bitcoin (Read 5484 times)

full member
Activity: 225
Merit: 100
December 14, 2013, 08:32:52 AM
#27
Ищу специалиста по биткоин для консалтинга и разработки. Пишите в личку или в скайп.
legendary
Activity: 1120
Merit: 1069
May 31, 2012, 03:07:08 AM
#26
Изучаю гитхаб и некоторые уже закрытые пулреквесты, какие там вкусности...
* 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 в статус реквеста? Я думаю это очень полезное и удобное нововведение, не требующее серьезного кодинга:
Quote
Разделение wallet.dat на две части - приватные ключи и остальное
wallet.dat слишком часто обновляется, имеет неоправданно большой размер, это создает неудобства при его обслуживании и резервном копировании.
1. wallet-private.dat: часть с секретными ключами должна содержать только ту информацию, достаточную чтобы обеспечить полный доступ к бумажнику, на данный момент это может быть только список адресов в виде пар их открытого и закрытого ключей.
2. wallet-cache.dat: остальная информация (метки, комментарии, кэша транзакций и т.д.) должна быть перемещена в другой файл. Наиболее важная информация из этого может быть восстановлена из blockchain и предыдущего файла с ключами с помощью ключа командной строки -rescan
p.s. Также можно добавить два дополнительных ключа командной строки для указания различных мест хранения этих файлов (я думаю, что wallet-private.dat может находиться на съемном диске, а, например, в будущем, на других устройств с доступом по API, подобно клиенту Электрум)
legendary
Activity: 3108
Merit: 1359
May 30, 2012, 04:15:39 PM
#25
BitcoinJ за вас уже гугл изобрел.  Roll Eyes А еще изобрели Bitcoin#, правда он недоделан.
legendary
Activity: 1286
Merit: 1004
May 17, 2012, 04:59:31 AM
#24
вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.
А если за плату?
Во сколько можно оценить исправление алгоритма хеширования? В том числе ту часть, из-за которой (как утверждают некоторые на форуме) текущая реализация официального клиента очень медленно обрабатывает загружаемые блоки (в т.ч. при первой загрузке), даже если загрузка происходит с соседней машины в локальной сети.

Можно и за плату, но час работы у меня дорогой.
bitcoind мне не интересно писать, интересно написать с нуля, используя нормальну базу данных.
У меня есть основная работа. И времени мало.
Так что я по маленьку буду разбираться в алгоритме, и когда-нибудь может что-то родится.
Писаться если и будет то на java.
legendary
Activity: 3108
Merit: 1359
May 16, 2012, 12:54:50 AM
#23
Это debian-специфичные доделки скриптов сборки. У них в дистрибутиве нет почти программ, которые они не патчили просто, традиция такая.
legendary
Activity: 1386
Merit: 1000
May 15, 2012, 11:07:09 PM
#22
накладываемые при сборке под эти архитектуры патчи

что/кто мешает принять эти патчи в основной код?
legendary
Activity: 3108
Merit: 1359
May 15, 2012, 04:28:38 PM
#21
Тоже дам на_водку. Демон bitcoind собирается и корректно работает на SPARC и MIPSEL, проверялось экспериментально в том числе и мной, еще на версии 0.3.24. Так же, в официальном репозитории дебиана есть пакеты под IA64, ARM и PowerPC, причем накладываемые при сборке под эти архитектуры патчи минималистичны и даже близко не относятся к затронутым в этой теме фрагментам кода. Вот такая страшная тайна. Cheesy
sr. member
Activity: 658
Merit: 250
May 15, 2012, 02:10:24 PM
#20
даю на_водку
Code:
byte* Hash(CBlock& block)

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

Чет на водку не хватает... Можно подробней?
Меня гложут сильные сомнения, что с такой наводкой код ровно так же остается зависимым от порядка байт в слове. Ага?
sr. member
Activity: 427
Merit: 250
May 15, 2012, 01:51:35 PM
#19
Quote
В том числе ту часть, из-за которой (как утверждают некоторые на форуме) текущая реализация официального клиента очень медленно обрабатывает загружаемые блоки (в т.ч. при первой загрузке), даже если загрузка происходит с соседней машины в локальной сети.
Вроде бы это исправляли недавно, не? И по словам тех же некоторых стало все значительно быстрее. Уже не помню тему на форуме, но вроде бы в официально-релизной за 0.6.0 или 0.6.1
legendary
Activity: 1120
Merit: 1069
May 15, 2012, 01:26:48 PM
#18
вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.
А если за плату?
Во сколько можно оценить исправление алгоритма хеширования? В том числе ту часть, из-за которой (как утверждают некоторые на форуме) текущая реализация официального клиента очень медленно обрабатывает загружаемые блоки (в т.ч. при первой загрузке), даже если загрузка происходит с соседней машины в локальной сети.
legendary
Activity: 1286
Merit: 1004
May 15, 2012, 01:05:09 PM
#17
даю на_водку
Code:
byte* Hash(CBlock& block)

вообще я не собираюсь исправлять чужие баги.
желание было и есть понять СМЫСЛ.
и как я уже писал, для меня не является сложностью написать свой клиент, зная алгоритм.
legendary
Activity: 3108
Merit: 1359
May 14, 2012, 11:43:30 AM
#16
Вы предлагаете (здесь) свою реализацию кода, так сказать, чтобы критика была конструктивной.
Причем, полностью совместимую с протоколом. Roll Eyes
sr. member
Activity: 658
Merit: 250
May 14, 2012, 11:05:40 AM
#15
вывод код гавно ) (тему можно закрывать Smiley )

Давайте сделаем так:
Вы предлагаете (здесь) свою реализацию кода, так сказать, чтобы критика была конструктивной.
А потом, если захотите, сможете ее (свою реализацию) сами прокомментировать... Smiley
legendary
Activity: 1386
Merit: 1000
legendary
Activity: 3108
Merit: 1359
May 13, 2012, 03:50:54 PM
#13
Да просто на любое критическое высказывание в подобной форме всегда возникает закономерный вопрос "а кто вы, собственно, вообще такой?". И дело тут не в том, задело или не задело.
LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
May 13, 2012, 10:57:47 AM
#12
Bitcoin написан гением, а гениальность, в отличие от качества, не измеряется.
Так что неважно качественный или некачественный программист. Он - гений!

а что вас задело ? моё высказывание ? )
Меня вот задевает. Код работает, а Вы вдруг называете чем-то нехорошим. Angry
legendary
Activity: 1386
Merit: 1000
May 13, 2012, 12:16:18 AM
#11
Я хотябы взял исходники почитал, и выявил очевидные программиские промашки, и выкладываю свои находки для других людей.

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


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

И это хорошо, а то итак параноя замучала...
legendary
Activity: 1286
Merit: 1004
May 12, 2012, 10:12:17 PM
#10
вывод код гавно ) (тему можно закрывать Smiley )
Если бы автор сделал что-то ценное и полезное для сообщества, его выводы имели бы какой-то вес. А называть говном проект, тыкая в фрагменты кода в нем, много ума-времени-сил не надо. Тему можно закрывать. Smiley

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

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


legendary
Activity: 3108
Merit: 1359
May 12, 2012, 07:02:59 PM
#9
вывод код гавно ) (тему можно закрывать Smiley )
Если бы автор сделал что-то ценное и полезное для сообщества, его выводы имели бы какой-то вес. А называть говном проект, тыкая в фрагменты кода в нем, много ума-времени-сил не надо. Тему можно закрывать. Smiley
legendary
Activity: 1286
Merit: 1004
May 12, 2012, 06:56:01 PM
#8
вывод код гавно ) (тему можно закрывать Smiley )
legendary
Activity: 3108
Merit: 1359
May 12, 2012, 06:09:22 PM
#7
Вышеприведенный код работает нормально на большинстве платформ, потому что размер структуры 80 байт ( кратно 2 и 8 ) . Со структурой других размеров (81 байт, к примеру) данный код уже неработоспособен без #pragma pack(push, 1) ... #pragma pack(pop). Но структура не может иметь размер, отличный от 80 байт, потому что заголовок блока всегда имеет размер 80 байт, это требование протокола, поэтому можно не думать о выравнивании.
sr. member
Activity: 658
Merit: 250
May 12, 2012, 02:44:36 PM
#6
здесь вообще зависимость от little-endian и big-endian


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

да и ХЭШ(&int) в little-endian и big-endian по-любому разный будет, не нужно так много строк кода приводить для того, чтобы это показать...
legendary
Activity: 1286
Merit: 1004
May 12, 2012, 01:57:06 PM
#5
здесь вообще зависимость от little-endian и big-endian
legendary
Activity: 1120
Merit: 1069
May 12, 2012, 02:57:22 AM
#4
хм, а как это собирается на x86_64 платформе О_о, я имею в виду int
p.s. не ожидал, как минимум прагма и __int32 должны были стоять.
sr. member
Activity: 658
Merit: 250
May 12, 2012, 02:18:01 AM
#3
меня в этой конструкции только отсутствие pragma pack смущает. Но все так пишут и это, обычно, работает.
Написане кода - всегда компромис Smiley
LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
May 11, 2012, 03:13:55 PM
#2
Главное, чтобы работало. Cool
legendary
Activity: 1286
Merit: 1004
May 11, 2012, 12:25:49 AM
#1
Это так круто брать хеш ?  Shocked
Я уже боюсь дальше читать )
Кто считает что это нормальный способ, и этот способ не зависит от архитектуры компьютера ?

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;
}
Jump to: