Кто помешает разрабам Bitcoin Core продать свои битки, потом объявить об увеличении эмиссии
Объявлять они могут всё что угодно, но разрабы не майнят блоки, а значит их эмиссия останется только на бумаге. Можно вспомнить с каким скрипом внедрялся SegWit, а тут святая святых - эмиссия.
|
|
|
нужна скорость
Если требуется быстрый подбор приватных ключей для заранее известного списка адресов, тогда нужно привести вашу задачу к виду, пригодному для работы с BitCrack. Если стоит какая-то другая задача, тогда возникают дополнительные вопросы: Список мини-ключей у вас уже готовый в файле или вы его генерируете случайным образом на лету? Что вы делаете с полученным списком адресов? Проверяете его на вхождение в какой-то другой список адресов? есть одно но он генерирует рандомно а мне нужно от мини-кеев ( по правилу миникеев ) Но ведь мини-ключи в скрипте, который я редактировал, тоже генерируются случайным образом. Случайно сгенерированные мини-ключи в формате Base-58 преобразуются при помощи операции хеширования SHA-256 в 256-битное число, которое и является приватным ключом. Так не проще ли сразу перебирать 256-битное число? Проблема в том, что вы показываете только середину вашей задачи, не показывая при этом её начало - исходные данные и конечную цель.
|
|
|
просто если запустить скрипт тот что я дал с википедии то выходит 1 миллион записей в 4 минуты а скрипт что вы дали выше за несколько часов только справится с 1 миллионом
Для получения адреса из приватного ключа требуется выполнить три криптографических операции. Не удивительно, что программа значительно замедлилась. Скажите есть ещё варианты генерации?
Если бы вы сформулировали задачу, а главное - цель, в более общем виде, варианты (может быть!) бы нашлись.
|
|
|
Уж не знаю, зачем вам эти мини-ключи понадобились, но держите: import random import hashlib import codecs import ecdsa
BASE58 = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def Candidate(): """ Generate a random, well-formed mini private key. """ return('%s%s' % ('S', ''.join( [BASE58[ random.randrange(0,len(BASE58)) ] for i in range(29)])))
def GenerateKeys(numKeys = 10): """ Generate mini private keys and output the mini key as well as the full private key. numKeys is The number of keys to generate, and """ keysGenerated = 0 totalCandidates = 0 while keysGenerated < numKeys: try: cand = Candidate() # Do typo check t = '%s?' % cand # Take one round of SHA256 candHash = hashlib.sha256(t).digest() # Check if the first eight bits of the hash are 0 if candHash[0] == '\x00': privateKey = GetPrivateKey(cand) print('\n%s\nSHA256( ): %s\nsha256(?): %s\nUncompressed address: %s\nCompressed address: %s' % (cand, privateKey, candHash.encode('hex_codec'), generate_address(privateKey), generate_compressed_address(privateKey))) if CheckShortKey(cand): print('Validated.') else: print('Invalid!') keysGenerated += 1 totalCandidates += 1 except KeyboardInterrupt: break print('\n%s: %i\n%s: %i\n%s: %.1f' % ('Keys Generated', keysGenerated, 'Total Candidates', totalCandidates, 'Reject Percentage', 100*(1.0-keysGenerated/float(totalCandidates))))
def GetPrivateKey(shortKey): """ Returns the hexadecimal representation of the private key corresponding to the given short key. """ if CheckShortKey(shortKey): return hashlib.sha256(shortKey).hexdigest() else: print('Typo detected in private key!') return None
def CheckShortKey(shortKey): """ Checks for typos in the short key. """ if len(shortKey) != 30: return False t = '%s?' % shortKey tHash = hashlib.sha256(t).digest() # Check to see that first byte is \x00 if tHash[0] == '\x00': return True return False def generate_address(private_key): public_key = __private_to_public(private_key) address = __public_to_address(public_key) return address
def generate_compressed_address(private_key): public_key = __private_to_compressed_public(private_key) address = __public_to_address(public_key) return address
def __private_to_public(private_key): private_key_bytes = codecs.decode(private_key, 'hex') # Get ECDSA public key key = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1).verifying_key key_bytes = key.to_string() key_hex = codecs.encode(key_bytes, 'hex') # Add bitcoin byte bitcoin_byte = b'04' public_key = bitcoin_byte + key_hex return public_key def __private_to_compressed_public(private_key): private_hex = codecs.decode(private_key, 'hex') # Get ECDSA public key key = ecdsa.SigningKey.from_string(private_hex, curve=ecdsa.SECP256k1).verifying_key key_bytes = key.to_string() key_hex = codecs.encode(key_bytes, 'hex') # Get X from the key (first half) key_string = key_hex.decode('utf-8') half_len = len(key_hex) // 2 key_half = key_hex[:half_len] # Add bitcoin byte: 0x02 if the last digit is even, 0x03 if the last digit is odd last_byte = int(key_string[-1], 16) bitcoin_byte = b'02' if last_byte % 2 == 0 else b'03' public_key = bitcoin_byte + key_half return public_key def __public_to_address(public_key): public_key_bytes = codecs.decode(public_key, 'hex') # Run SHA256 for the public key sha256_bpk = hashlib.sha256(public_key_bytes) sha256_bpk_digest = sha256_bpk.digest() # Run ripemd160 for the SHA256 ripemd160_bpk = hashlib.new('ripemd160') ripemd160_bpk.update(sha256_bpk_digest) ripemd160_bpk_digest = ripemd160_bpk.digest() ripemd160_bpk_hex = codecs.encode(ripemd160_bpk_digest, 'hex') # Add network byte network_byte = b'00' network_bitcoin_public_key = network_byte + ripemd160_bpk_hex network_bitcoin_public_key_bytes = codecs.decode(network_bitcoin_public_key, 'hex') # Double SHA256 to get checksum sha256_nbpk = hashlib.sha256(network_bitcoin_public_key_bytes) sha256_nbpk_digest = sha256_nbpk.digest() sha256_2_nbpk = hashlib.sha256(sha256_nbpk_digest) sha256_2_nbpk_digest = sha256_2_nbpk.digest() sha256_2_hex = codecs.encode(sha256_2_nbpk_digest, 'hex') checksum = sha256_2_hex[:8] # Concatenate public key and checksum to get the address address_hex = (network_bitcoin_public_key + checksum).decode('utf-8') wallet = base58(address_hex) return wallet
def base58(address_hex): alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' b58_string = '' # Get the number of leading zeros and convert hex to decimal leading_zeros = len(address_hex) - len(address_hex.lstrip('0')) # Convert hex to decimal address_int = int(address_hex, 16) # Append digits to the start of string while address_int > 0: digit = address_int % 58 digit_char = alphabet[digit] b58_string = digit_char + b58_string address_int //= 58 # Add '1' for each 2 leading zeros ones = leading_zeros // 2 for one in range(ones): b58_string = '1' + b58_string return b58_string GenerateKeys()
Код взят отсюда.
|
|
|
Вам точно нужно генерировать приватные ключи в формате мини-ключей - древнем, никем не поддерживаемом формате?
|
|
|
Можно уже считать, что произошла активация протокола Lightning Network в основной сети Биткоин или пока еще идет тестирование бета-версий ? Не догоняю этот момент пока
LN не является протоколом Bitcoin, поэтому для запуска LN не надо ничего активировать в сети Bitcoin. И, вообще, LN с использованием основной сети Bitcoin уж год как работает.
|
|
|
Ну я бы на месте государства, выпустил крипторубль. Форк биткоина который майнить можно только по лицензии цб. Атакеры 51 все побреются.
А зачем государству нужен крипторубль, если у государства есть старый добрый безналичный рубль, который "майнится" Банком России и легко и быстро ходит между банками без всяких блокчейнов? В чём для государства преимущество крипторубля перед рублём?
|
|
|
что за Дарья?
Дарья Хавченко - владелец WORLD EXCHANGE SERVICES PTE. LTD
|
|
|
А как в биткоин коре это принцип работает? Я ввожу пароль, прога расшифровывает приватник, если совпадает, оплата проходит?
Если например из консоли импортировать приватник, и у меня его украдут, то другому человеку, который вставит его в биткоин коре пароль не нужен?
Да, всё верно.
|
|
|
Можете немного прояснить? Пароль к кошельку является приватным ключем
Нет. При помощи пароля шифруются приватные ключи.
|
|
|
какие подвижки ?
Сейчас все подвижки происходят в Телеге. Адвокат Дмитрия Хавченко Сергей Шугаев оказывает бесплатную психологическую помощь пострадавшим: Записывайтесь на приём! Впрочем, экстренная помощь оказывается прямо в Телеге:
|
|
|
Немного выше верно указали, что слитые средства с краптопии могли быть уже через 10-20 минут зачислены на кошелёк Бинанса. Обменены на любую другую крипту и выведены на личный кошелёк, в идеале это должна быть не отслеживаемая монета, вроде монерки. Следовательно Бинанс блокирует уже не украденные, а свои средства - что безусловно враньё.
Обменены и выведены или могли быть обменены и выведены. У вас есть какие-то основания утверждать, что хакер успел что-то обменять и вывести? Или вы, не располагая никакими фактами, безосновательно обвиняете Бинанс во лжи?
|
|
|
Это откуда 3.5 евро взялись, что-то я нигде такой инфы не видел?
Отсюда.
|
|
|
Я думал что приватный ключ если программа найдет.
Верно. Плюс там не хватает slfj библиотеки когда запущен btcaddress.jar.
Не обращайте на это внимания. Оно ругается на то, что не имеет возможности писать лог, но при этом программа продолжает работать - перебор приватных ключей идёт, судя по загрузке процессора. Сколько времени он будет искать приватный ключ?
Миллионы лет. И это правильно. Если подбор приватного ключа можно было бы делать быстро, криптовалюты можно было бы выкинуть на помойку. Кстати, есть намного более производительный инструмент для подбора приватных ключей - BitCrack, который позволяет использовать видеокарты. Но и он бессилен, если о приватном ключе нет информации, позволяющей сократить диапазон перебора.
|
|
|
Скачиваете btcaddress.jar и запускаете его так: Но вы хоть сами понимаете, какой результат вы рассчитываете получить от выполнения этой программы?
|
|
|
Теперь благодаря блокчейну и криптовалютам - неактивное и пассивное большинство сможет также активно противостоять преступному меньшинству, которое раньше было хорошо организовано и скоординировано. Теперь же и у большинства появился инструмент координации своих действий и хорошей организации.
Не сможет. Серьёзная контора не будет браться за работу, не имея гарантий оплаты. А ваша схема не даёт этих гарантий. Исполнитель заранее не знает, сколько человек, из вложившихся в контракт, разблокируют свои средства для оплаты за выполненную работу. А также не знает, когда именно после выполнения работы будет сделана оплата. То есть, контора должна сперва понести расходы и риски, связанные с выполнением работы, а потом, после выполнения, ждать, что может кто-нибудь хоть что-то заплатит. Не взлетит такая схема. Эта схема (утром - стулья, а когда-нибудь потом деньги, и то, неизвестно сколько) подходит для сбора донатов за open source разработки и не более того.
|
|
|
пока даже не-программисту станет понятно что там за хрень понаписана и как...
Теплоухов, вы зачем себе нового пользователя создали? Вы здесь несколько лет выступали под учёткой tvv, которая у всех порядочных людей была в игноре. Под новой личиной вас не все сходу признают и ошибочно общаются с вами, как с умственно полноценным человеком. Это неправильно, я считаю.
|
|
|
|