Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
26 апреля 2014, 4:40:48 AM   # 1
 
 
Сообщений: 38
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Мне было интересно посмотреть, какой негативный эффект производительности большое количество счетов имеет на bitcoind. Результаты не очень. Мои тесты не были особенно научными, но вот что я узнал.

методология

Я создал 50K счета в пустой бумажник с небольшим балансом. Полученный файл кошелек примерно 13MB. Создание учетных записей занимает около 0,03 секунд на каждый счет.

Код:
для N = 1 до 5e4
client.move ( '', AccountN, smallAmount)

Затем я выполнил последовательность 10K случайных переводов между этими счетами. Эти передачи займет примерно 0,1 секунды каждый, в среднем. Опять же, это в пустом кошельке, и все эти переводы являются внутренними по отношению к кошельку (никаких операций фактически передается в сеть Bitcoin).

Код:
client.move (account1, account2, smallAmount)

Далее, я выполнил следующую последовательность внешних трансфертов (т.е. фактических сетевые операции), на каждой передаче передающего средство от случайного счета на другой счет случайного.
  • отправить 100 переводов
  • 500 переводов отправить
  • 10 переводов отправить
  • 50 переводов отправить

Код:
    account1 = getRandomAccount ()
    account2 = getRandomAccount (за исключением: Account1)
        
    адрес = client.getaccountaddress (account2)

    если (client.getbalance (account1) > 1e-4):
        Тх = client.sendfrom (account1, адрес, 1e-4)              
    Элиф client.getbalance () > 1e-4:
        Тх = client.sendtoaddress (адрес, 1e-4)
    еще:
        поднять Exception ( «Нет баланса, доступных в любой учетной записи»)  

Результаты

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


Результаты удивительно плохо. Файл wallet.dat раздулся до 85Mb (!) Только после 660 передач. Я понятия не имею, что могло занять так много места, но я буду стараться, чтобы просмотреть файл с помощью BerkeleyDB инструментов и добавить к этому сообщению, если я получить некоторое представление.

Действительно плохая новость заключается в том, что передача в конечном итоге принимает несколько секунд каждый, в среднем. Как и ожидалось, продолжительность увеличивается как количество сделок в бумажнике идет вверх.

Я проверил bitcoind журналы и оказывается, что большая часть задержки, потому что wallet.dat сбрасывается на диск после каждой передачи.

Другие наблюдения
Я был в состоянии серьезно повредить файл бумажника прекратив bitcoind процесса. Я не терять ключи, но информация баланс счета был поврежден. В сущности, я был в состоянии потерять след того, что правильный баланс в каждом счете без каких-либо усилий.

Выводы
Другие говорили, как здесь, на этом форуме и в других местах: не использовать учетные записи в среде сервера. Что еще более важно, bitcoind сама не кажется, подходит для любого типа системы, где большое количество сделок, как ожидается, произойдет. Другое решение необходимо. Существует только одна коммерческая, на уровне предприятия решение, которое я отдаю себе отчет (https://bitsofproof.com/?page_id=323).

Кроме того, BerkeleyDB (который bitcoind использует для хранения счета, адреса и другие данные) не появляется, чтобы быть достаточно надежным решением, если вы действительно заботитесь о остатках на счетах. Я не знаю достаточно об этом, чтобы комментировать, но вполне возможно, что она будет работать лучше, если бы она была реализована по-разному. Например, я хотел бы видеть возможность для транзакционной репликации всех данных бумажника на отдельный диск или сервер. Это, по крайней мере, обеспечить внутренне согласованная копию базы данных бумажника существует. Как сейчас обстоят дела, если файл бумажник будет поврежден, все потеряно, и я был в состоянии развратить файл очень легко (и непреднамеренно).

Я созерцая начиная альтернативу с открытым исходным кодом для встроенной инфраструктурой управления bitcoind счета. Это будет по-прежнему использовать bitcoind для взаимодействия с сетью, но будет использовать более надежную настройку базы данных для хранения и обработки данных учетных записей. Более подробно об этом в отдельном посте.
arosca сейчас офлайн Пожаловаться на arosca   Ответить с цитированием Мультицитирование сообщения от arosca Быстрый ответ на сообщение arosca


Как заработать Биткоины?
Без вложений. Не майнинг.


26 апреля 2014, 9:33:29 AM   # 2
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Получил 1806 Биткоинов
Реальная история.





Я был в состоянии серьезно повредить файл бумажника прекратив bitcoind процесса. Я не терять ключи, но информация баланс счета был поврежден. В сущности, я был в состоянии потерять след того, что правильный баланс в каждом счете без каких-либо усилий.
Можете ли вы предоставить более подробную информацию здесь? Были ли вы бежите двоичные файлы релиз? Какая версия? Какая операционная система? Как вы убить процесс? Какое состояние было это, когда вы принесли его обратно? Какие ошибки вы получили? Будет ли это возможно для Вас, чтобы обеспечить courrupted бумажник и базы данных / каталог для меня?

Я спрашиваю, потому что в прошлом году я провел цикл убийства процесс под нагрузкой в ​​течение более месяца, убив его тысячи и тысячи раз пытается чесать некоторые редкие вопросы и не был в состоянии произвести одно мгновение коррупции таким образом. Перед тем, как начать пытаться воспроизвести свой опыт, который я хочу, чтобы иметь сравнимую установку.

Как правило, использование функциональности «счета» не рекомендуется он не был предназначен для того, что большинство людей, которые пытаются использовать его ожидать, чтобы использовать его для, а также другие методы (которые поддерживают прочность через аппаратного сбоя) следует использовать вместо этого. WRT большое количество сделок, там я должен disagree- лучше или хуже некоторых из крупнейших Bitcoin используя сайты собирают свои операции в bitcoind с помощью кошелька. К сожалению, ни один из людей, заинтересованных в этих высоких приложений нагрузки транзакций не вносит свой вклад в базу кода, но мне говорят, что им не нужно, потому что в настоящее время работает на них с разумными соображениями. Если вы автоматизированы тестов достаточно, чтобы они могли быть запущены против testnet / regtest бумажника из сценария может быть полезно, чтобы получить их импортировать в интеграционном тестирование, используемое для Bitcoin core-это довольно застенчивые на связанный бумажник испытаний.

котировка
Действительно плохая новость заключается в том, что передача в конечном итоге принимает несколько секунд каждый, в среднем
Я предполагаю, что вы тратили неподтвержденные монеты в этих операциях? Принимая несколько секунд за расходами является известным артефактом текущего программного обеспечения behavior- кода, который проходит неизрасходованные монеты имеет факторный иш сложности. Хотя это может быть improved- есть патчи доступны, а просто отключить расходы неподтвержденных выходов позволяет избежать это-, так как общая пропускная способность сети не очень большая, я в основном считал это ошибкой полезным при обескураживающих неумелых атаках отказа в обслуживании, так что я не лично считал приоритетом. (И большинство людей, которые заметили его, кто упомянул его мне, кажется, есть только проводит испытания или попытки атак отказа в обслуживании ...)
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

26 апреля 2014, 1:58:08 PM   # 3
 
 
Сообщений: 38
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Можете ли вы предоставить более подробную информацию здесь? Были ли вы бежите двоичные файлы релиз? Какая версия? Какая операционная система? Как вы убить процесс? Какое состояние было это, когда вы принесли его обратно? Какие ошибки вы получили? Будет ли это возможно для Вас, чтобы обеспечить courrupted бумажник и базы данных / каталог для меня?

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

Я бегала старую версию (которая случилась быть установлена ​​с моей Оружейной, например), 8.2.2-бета (80202). Вы абсолютно правы, я, вероятно, следует попробовать это снова на последней версии.

Я буду рад предоставить файлы базы данных к вам (это все на testnet), но в настоящее время они очень велики. Wallet.dat является 85Mb. Свяжитесь со мной напрямую, пожалуйста, и я пришлю вам ссылку для загрузки.

Я бегу на Windows 7 и делает звонки с Python 2.7.

Я не намеренно убить процесс, но когда я изначально настроил свой код, который я использовал эту конструкцию, которая, кажется, возникла проблема:
Код:
    Процесс = subprocess.Popen ([r'C: \ Program Files (x86) \ Bitcoin \ демон \ bitcoind.exe», '-testnet', '-rpcuser = тест', '-rpcpassword = test1'])
    time.sleep (20) #give bitcoind время запуска; умнее всего было бы проверить подключение к сети в цикле, но для наших целей это нормально
   
    пытаться:   
          #run различные тесты в цикле 
    в конце концов:
        process.terminate ()
Вызов прекращается () является то, что, как представляется, привести к коррупции. Позже я стал немного умнее, как я приобрел опыт как с bitcoind и Python:
Код:
    Процесс = subprocess.Popen ([r'C: \ Program Files (x86) \ Bitcoin \ демон \ bitcoind.exe», '-testnet', '-rpcuser = тест', '-rpcpassword = test1'])
    time.sleep (20) #give bitcoind время запуска; умнее всего было бы проверить подключение к сети в цикле, но для наших целей это нормально
   
    пытаться:   
          #run различные тесты в цикле 
    в конце концов:
        если клиент не None:
            client.stop ()
            time.sleep (5) 

        process.terminate ()
Но все еще не 100% OK. В настоящее время я получаю это когда я начинаю вверх:
Код:
Предупреждение: Предупреждение: ошибка чтения wallet.dat! Все ключи правильно читать, но данные транзакции или запись адресной книги могут отсутствовать или быть неправильными.
В своем нынешнем состоянии, является ли этот вопрос с базой данных бумажника или с базой данных цепи, я не в состоянии выполнять некоторые операции бумажника:
Код:
>>> client.getbalance ()
Traceback (самый последний вызов последнего):
  файл "", Строка 1, в <модуль>
  файл "C: \ python27 \ Lib \ сайт-пакеты \ jsonrpc \ proxy.py", Строка 45, в __call__
    поднять JSONRPCException (соответственно [ 'ошибки'])
JSONRPCException

Я предполагаю, что вы тратили неподтвержденные монеты в этих операциях? Принимая несколько секунд за расходами является известным артефактом текущего программного обеспечения behavior- кода, который проходит неизрасходованные монеты имеет факторный иш сложности. Хотя это может быть improved- есть патчи доступны, а просто отключить расходы неподтвержденных выходов позволяет избежать это-, так как общая пропускная способность сети не очень большая, я в основном считал это ошибкой полезным при обескураживающих неумелых атаках отказа в обслуживании, так что я не лично считал приоритетом. (И большинство людей, которые заметили его, кто упомянул его мне, кажется, есть только проводит испытания или попытки атак отказа в обслуживании ...)
Я не уверен, но я считаю, что входы были подтверждены. Я начал с 5 подтвердил BTC и послал 0.0001 на случайный адрес в бумажнике на каждой итерации. Код ниже.

Мне кажется, все или большую часть задержки не в коде, а с дисковыми операциями, а более конкретно промывке wallet.dat (который теперь 85Mb). В любом случае, я не считаю, что это будет серьезной проблемой.

Это код, который я использовал в моем тесте:

Заполняем кошелек с 50K счетов и продолжительность испытания перемещения средств между счетами внутри:
Код:
импорт подпроцесс
время импорта
импорт дата и время
импорт ОС
импорт shutil
импорт timeit
от jsonrpc импорта ServiceProxy
от случайного импорта randrange


#config

    #location из "пустой" бумажник файл (только по умолчанию ( «») учетная запись существует)
blankWalletFile = r'C: \ Users \ User \ AppData \ Roaming \ Bitcoin \ testnet3 \ wallet.empty.dat»

    #location файла живого бумажника; этот файл будет резервное копирование, а затем восстановлен после завершения теста
liveWalletFile = r'C: \ Users \ User \ AppData \ Roaming \ Bitcoin \ testnet3 \ wallet.dat»

    #The количество счетов, которые будут созданы
account_count = 50000

    #The количества случайных переводов для выполнения между счетами
transfer_count = 10000


Защиту resetWallet (account_count = 1):
    #back вверх живой бумажник
    shutil.copy (liveWalletFile, '.bak' liveWalletFile +)

    если account_count > 1: #see, если у нас уже есть бумажник файл с таким количеством счетов
        source_wallet_file = liveWalletFile + '' + Ул (account_count)
   
    если не os.path.isfile (source_wallet_file):
            печать ( «бумажник файл не существует, начиная с пустым файлом»)
            source_wallet_file = blankWalletFile
    еще:
            печать ( «файл существует бумажник, повторное использование существующего файла бумажник»)
           
    #overwrite живой бумажник с пустым бумажником
    shutil.copy (source_wallet_file, liveWalletFile)

Защиту restoreLiveWallet ():
    #make копии этого файла тестового бумажника для использования в будущем
    shutil.copy (liveWalletFile, liveWalletFile + '' + ул (account_count))
    #overwrite тест бумажник с резервной копией живым бумажника
    shutil.move (liveWalletFile + '.bak', liveWalletFile)

Защиту createAccounts (клиент, количество):
    для я в диапазоне (0, количество):
        client.move ( '', 'счетом% d' % я, 1e-8)
        #print (client.getbalance ( 'счетом% d' % я))

Защиту performRandomTransfers (клиент, количество):
    account1 = ''
    account2 = getRandomAccount (account_count)

    для я в диапазоне (0, количество):
        client.move (account1, account2, 1e-8)
        account1 = account2
        account2 = getRandomAccount (account_count, account1)

Защиту getRandomAccount (account_count, except_account = ''):
    счет = except_account
   
    в то время как счета == except_account:
        Счета% d '% randrange Account = (0, account_count)

    вернуть учетную запись

Защита основные ():
    печать (datetime.datetime.now (). время ())

    resetWallet (account_count)

    печать ( 'начиная bitcoind ...')
    Процесс = subprocess.Popen ([r'C: \ Program Files (x86) \ Bitcoin \ демон \ bitcoind.exe», '-testnet', '-rpcuser = тест', '-rpcpassword = test1'])
    time.sleep (10) #give bitcoind время запуска; умнее всего было бы проверить подключение к сети в цикле, но для наших целей это нормально
    печать ( 'bitcoind начал')
   
    пытаться:   
        Клиент = ServiceProxy ("Http: // Тест: test1 @ локальный: 18332")

        actual_account_count = LEN (client.listaccounts ())
        печать ( "Есть в настоящее время {} accounts'.format (actual_account_count))

        to_create_count = account_count - actual_account_count + 1

        если actual_account_count < account_count:
            печать (% to_create_count ", создающий% D счетам)
            Total_time = timeit.timeit (лямбда: createAccounts (клиент, to_create_count), число = 1)
            печать ( "время, прошедшее с начала создания {0: d} счета: {1: .2f} seconds'.format (to_create_count, Total_time))

        печать (datetime.datetime.now (). время ())

        печать 'выполнения% d случайных трансфертов% transfer_count
        Total_time = timeit.timeit (лямбда: performRandomTransfers (клиент, transfer_count), число = 1)
        печать «время, прошедшее выполнения {0: D} переводы: {1: .2f} seconds'.format (transfer_count, Total_time)

        печать ( "Есть в настоящее время {} accounts'.format (LEN (client.listaccounts ())))
        #print (client.listaccounts ())

        печать (datetime.datetime.now (). время ())

        печать ( "закрытие bitcoind ...)
        client.stop ()
        time.sleep (5)       
           
    в конце концов:
        process.terminate ()
        restoreLiveWallet ()


если __name__ == "__главный__":
    главный()


Выполнение внешних переводов между счетами:
Код:
импорт подпроцесс
время импорта
импорт дата и время
импорт ОС
импорт shutil
импорт timeit
от jsonrpc импорта ServiceProxy
от случайного импорта randrange


#config
transfer_count = 50 #The числа случайных передач для выполнения между счетами
account_count = 50000 #number существующих счетов в кошельке


Защиту performRandomTransfer (клиент, actual_count):
    account1 = getRandomAccount ()
    account2 = getRandomAccount (account1)
       
    адрес = client.getaccountaddress (account2)

    если (client.getbalance (account1) > 1e-4):
        Тх = client.sendfrom (account1, адрес, 1e-4)             
    Элиф client.getbalance () > 1e-4:
        Тх = client.sendtoaddress (адрес, 1e-4)
    еще:
        поднять Exception ( «Нет баланса, доступных в любой учетной записи») 
   
    actual_count [0] = 1 +

    печать (ТХ)

Защиту getRandomAccount (except_account = ''):
    счет = except_account
   
    в то время как счета == except_account:
        Счета% d '% randrange Account = (0, account_count)

    вернуть учетную запись

Защита основные ():
    печать (datetime.datetime.now (). время ())

    печать ( 'начиная bitcoind ...')
    Процесс = subprocess.Popen ([r'C: \ Program Files (x86) \ Bitcoin \ демон \ bitcoind.exe», '-testnet', '-rpcuser = тест', '-rpcpassword = test1'])
    time.sleep (20) #give bitcoind время запуска; умнее всего было бы проверить подключение к сети в цикле, но для наших целей это нормально
    печать ( 'bitcoind начал')
   
    пытаться:   
        Клиент = ServiceProxy ("Http: // Тест: test1 @ локальный: 18332")

        печать (datetime.datetime.now (). время ())

        печать 'выполнения% d случайных трансфертов% transfer_count

        actual_count = [0]
        Total_time = timeit.timeit (лямбда: performRandomTransfer (клиент, actual_count), число = transfer_count)

        печать «время, прошедшее выполнения {0: D} переводы: {1: .2f} seconds'.format (actual_count [0], Total_time)
        печать (datetime.datetime.now (). время ())
                 
    в конце концов:
        печать ( "закрытие bitcoind ...)
        если клиент не None:
            client.stop ()
            time.sleep (5) 

        process.terminate ()


если __name__ == "__главный__":
    главный()
arosca сейчас офлайн Пожаловаться на arosca   Ответить с цитированием Мультицитирование сообщения от arosca Быстрый ответ на сообщение arosca

26 апреля 2014, 3:54:40 PM   # 4
 
 
Сообщений: 28
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Мне было интересно посмотреть, какой негативный эффект производительности большое количество счетов имеет на bitcoind. Результаты не очень. Мои тесты не были особенно научными, но вот что я узнал.

методология

Я создал 50K счета в пустой бумажник с небольшим балансом. Полученный файл кошелек примерно 13MB. Создание учетных записей занимает около 0,03 секунд на каждый счет.

Код:
для N = 1 до 5e4
client.move ( '', AccountN, smallAmount)

Затем я выполнил последовательность 10K случайных переводов между этими счетами. Эти передачи займет примерно 0,1 секунды каждый, в среднем. Опять же, это в пустом кошельке, и все эти переводы являются внутренними по отношению к кошельку (никаких операций фактически передается в сеть Bitcoin).

Код:
client.move (account1, account2, smallAmount)

Далее, я выполнил следующую последовательность внешних трансфертов (т.е. фактических сетевые операции), на каждой передаче передающего средство от случайного счета на другой счет случайного.
  • отправить 100 переводов
  • 500 переводов отправить
  • 10 переводов отправить
  • 50 переводов отправить

Код:
    account1 = getRandomAccount ()
    account2 = getRandomAccount (за исключением: Account1)
        
    адрес = client.getaccountaddress (account2)

    если (client.getbalance (account1) > 1e-4):
        Тх = client.sendfrom (account1, адрес, 1e-4)              
    Элиф client.getbalance () > 1e-4:
        Тх = client.sendtoaddress (адрес, 1e-4)
    еще:
        поднять Exception ( «Нет баланса, доступных в любой учетной записи»)  

Результаты

После каждого шага выше, я записал размер файла бумажника, время, которое потребовалось для bitcoind для запуска (т.е. инициализации, читая бумажник и другие файлы базы данных), а также время, которое потребовалось, чтобы фактически выполнять переводы. Вот краткое изложение моих результатов:
http://i.snag.gy/1Zh8Z.jpg

Результаты удивительно плохо. Файл wallet.dat раздулся до 85Mb (!) Только после 660 передач. Я понятия не имею, что могло занять так много места, но я буду стараться, чтобы просмотреть файл с помощью BerkeleyDB инструментов и добавить к этому сообщению, если я получить некоторое представление.

Действительно плохая новость заключается в том, что передача в конечном итоге принимает несколько секунд каждый, в среднем. Как и ожидалось, продолжительность увеличивается как количество сделок в бумажнике идет вверх.

Я проверил bitcoind журналы и оказывается, что большая часть задержки, потому что wallet.dat сбрасывается на диск после каждой передачи.

Другие наблюдения
Я был в состоянии серьезно повредить файл бумажника прекратив bitcoind процесса. Я не терять ключи, но информация баланс счета был поврежден. В сущности, я был в состоянии потерять след того, что правильный баланс в каждом счете без каких-либо усилий.

Выводы
Другие говорили, как здесь, на этом форуме и в других местах: не использовать учетные записи в среде сервера. Что еще более важно, bitcoind сама не кажется, подходит для любого типа системы, где большое количество сделок, как ожидается, произойдет. Другое решение необходимо. Существует только одна коммерческая, на уровне предприятия решение, которое я отдаю себе отчет (https://bitsofproof.com/?page_id=323).

Кроме того, BerkeleyDB (который bitcoind использует для хранения счета, адреса и другие данные) не появляется, чтобы быть достаточно надежным решением, если вы действительно заботитесь о остатках на счетах. Я не знаю достаточно об этом, чтобы комментировать, но вполне возможно, что она будет работать лучше, если бы она была реализована по-разному. Например, я хотел бы видеть возможность для транзакционной репликации всех данных бумажника на отдельный диск или сервер. Это, по крайней мере, обеспечить внутренне согласованная копию базы данных бумажника существует. Как сейчас обстоят дела, если файл бумажник будет поврежден, все потеряно, и я был в состоянии развратить файл очень легко (и непреднамеренно).

Я созерцая начиная альтернативу с открытым исходным кодом для встроенной инфраструктурой управления bitcoind счета. Это будет по-прежнему использовать bitcoind для взаимодействия с сетью, но будет использовать более надежную настройку базы данных для хранения и обработки данных учетных записей. Более подробно об этом в отдельном посте.


https://en.bitcoin.it/wiki/Accounts_explained
Из вики:
Код:
Слабые данные
Поскольку функция счета была введена несколько услуг, которые использовали его, чтобы отслеживать остатки Bitcoin клиента и имели следующие проблемы:

Бумажник резервное копирование проблема; если вы полагаетесь на хорошей резервной копии wallet.dat то резервное копирование должно быть сделано каждый раз, когда адрес, связанный с учетной записью и каждый раз, когда используется команда «подвинуть».
Код счета не масштабируется до тысяч счетов с десятками тысяч сделок, потому что по-счет (а-счет-по-времени) показатели не выполняются. Поэтому многие операции (такие как вычисление баланса счета) требуют доступ к каждой операции бумажника.
Большинство приложений уже есть клиентская база, реализованного с MySQL или какой-либо другой технологии реляционных баз данных. Это неудобно, в лучшем случае, чтобы сохранить Bitcoin поддержанного Berkely DB бумажника базы данных и базы данных приложений резервное копирования и синхронизированные во все времена.
DocJeff сейчас офлайн Пожаловаться на DocJeff   Ответить с цитированием Мультицитирование сообщения от DocJeff Быстрый ответ на сообщение DocJeff

26 апреля 2014, 8:06:10 PM   # 5
 
 
Сообщений: 38
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind


https://en.bitcoin.it/wiki/Accounts_explained
Из вики:
Код:
Слабые данные
Поскольку функция счета была введена несколько услуг, которые использовали его, чтобы отслеживать остатки Bitcoin клиента и имели следующие проблемы:

Бумажник резервное копирование проблема; если вы полагаетесь на хорошей резервной копии wallet.dat то резервное копирование должно быть сделано каждый раз, когда адрес, связанный с учетной записью и каждый раз, когда используется команда «подвинуть».
Код счета не масштабируется до тысяч счетов с десятками тысяч сделок, потому что по-счет (а-счет-по-времени) показатели не выполняются. Поэтому многие операции (такие как вычисление баланса счета) требуют доступ к каждой операции бумажника.
Большинство приложений уже есть клиентская база, реализованного с MySQL или какой-либо другой технологии реляционных баз данных. Это неудобно, в лучшем случае, чтобы сохранить Bitcoin поддержанного Berkely DB бумажника базы данных и базы данных приложений резервное копирования и синхронизированные во все времена.

Да, без сомнения, но я хотел, чтобы количественно оценить это и посмотреть, что пределы bitcoind в плане управления счетами. Сколько пользователей я могу реально справиться, прежде чем запускать в неприятности?
arosca сейчас офлайн Пожаловаться на arosca   Ответить с цитированием Мультицитирование сообщения от arosca Быстрый ответ на сообщение arosca

26 апреля 2014, 8:38:11 PM   # 6
 
 
Сообщения: 1988
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Сколько пользователей я могу реально справиться, прежде чем запускать в неприятности?
Во-первых, перед запуском в беду. С двумя пользователями проблема начинается: в bitcoind "Счета" в отличие от любого другого "Счета" в любой точке вселенной. Любой бухгалтер будет возражать против их использования, поскольку это нарушает принципы бухгалтерского учета.

Как и со многими вещами в Bitcoin есть, однако неожиданное преимущество: предприятия, заинтересованные в использовании встроенных учетных записей имеют историю потери Bitcoins клиента вследствие недобросовестных действий или грубой небрежности. Два случая наиболее хорошо знать, является InstaWallet и BitFloor.

Опять же, как со многими вещами Bitcoin: это трудно найти определенное доказательство причинно-следственных отношений на предприятиях, которые по конструкции сделаны не-проверяемым и снимите ответственности. Но это, кажется, полезно быстро лакмусовая бумажка.
2112 сейчас офлайн Пожаловаться на 2112   Ответить с цитированием Мультицитирование Сообщения от 2112 Быстрый ответ на сообщение 2112

26 апреля 2014, 9:12:17 PM   # 7
 
 
Сообщений: 38
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

После всего, что я читал и испытал, я полностью согласен. Я думаю, что основные принципы того, как реализуются счета в порядке (вы можете получить список транзакций, "объяснять" баланс на каждом счете), но техническая реализация не велика. На мой взгляд, это отчасти связано с реализацией BerkeleyDB. Более надежное решение базы данных необходимо для обработки учетных записей, в том числе вариант для репликации выездные транзакционной. Я не знаю достаточно о BerkeleyDB, но это не кажется, что он поддерживает репликацию. Эта функция не реализована в bitcoind однако.
arosca сейчас офлайн Пожаловаться на arosca   Ответить с цитированием Мультицитирование сообщения от arosca Быстрый ответ на сообщение arosca

27 апреля 2014, 6:35:04 AM   # 8
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Другие говорили, как здесь, на этом форуме и в других местах: не использовать учетные записи в среде сервера.
Мы уже знаем, что. Вы могли бы просто попросили Это одна из худших частей коды bitcoind.

Каждый хочет что-то другое из системы счета, но вывод, что она принадлежит на более высоком уровне (с базой данных) не с кошелька. Поддержание баланса стороннего не является частью ответственности Bitcoin Core.

Есть планы, чтобы полностью удалить систему счета в будущем пересмотре JSON RPC API (см https://github.com/bitcoin/bitcoin/issues/3816 ). Маркировка адресов будет сохранена, но не счета-с-противовесами.

котировка
Я созерцая начиная альтернативу с открытым исходным кодом для встроенной инфраструктурой управления bitcoind счета. Это будет по-прежнему использовать bitcoind для взаимодействия с сетью, но будет использовать более надежную настройку базы данных для хранения и обработки данных учетных записей. Более подробно об этом в отдельном посте.
Отличная идея. Это то, что должно быть, решение сверху.
Wumpus сейчас офлайн Пожаловаться на Wumpus   Ответить с цитированием Мультицитирование сообщения от Wumpus Быстрый ответ на сообщение Wumpus

27 апреля 2014, 1:14:19 PM   # 9
 
 
Сообщений: 38
Цитировать по имени
цитировать ответ
по умолчанию Re: Производительность структур счетов в bitcoind

Отличная идея. Это то, что должно быть, решение сверху.

Я отправил несколько идей здесь:


Я признателен за любую обратную связь!
arosca сейчас офлайн Пожаловаться на arosca   Ответить с цитированием Мультицитирование сообщения от arosca Быстрый ответ на сообщение arosca



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW