@JSBangs : я міг би заприсягтися, я сказав, 'сир', що означає, що американські і Велвета не маєте права. (хоча, зізнаюся, у мене є досить хороший Mac і сир, який використовувала їх) Ну нам фанатів Linux не проти...але ось нові користувачі, переходять з інших ОС може віддати перевагу графічний метод останнім часом чітко проглядаються файлів. Одна важлива річ, щоб відзначити, що експромтом з рівнів кислоти для безнапірних консерви нерозумно. Я голосую, щоб закрити це питання також не по темі, тому що питання надто локалізовано і навряд чи допоможе майбутнім відвідувачам @rollo1996: я не знаю, що це можливо. Чи Можете ви надати більш детальну інформацію про те, як це працює, або де ви про це чули? Ви можете перевірити продуктивність диска? _dd графа=1к БС=8М, якщо=/dev/нуль=/Дів/sda_

Я підозрюю, що це є липким в програмістських колах, щоб дати відповідь на власне запитання, але в даному випадку моєю помилкою було досить небезпечно, тому я б хотів поділитися подробицями з вами.

Повторення:

На моє запитання заявив, що API громадський тиск Техас не даючи життєздатне повідомлення про помилки після відмови мого наговору форматі сировинних операцій. Відповідь від пана Чоу зазначила, що проблема помилки підпису, яку він отримав після спроби штовхнути мого спотвореного TX через свій особистий сайт. Що вказав мені в правильному напрямку.

Його припущення полягало в тому, що, можливо, я не серіалізації мій sighash правильно, оскільки це часто призводить до повідомлення про помилку він посилається. Але код, який формулює, що sighash працює добре протягом багатьох років, я зрозумів, що проблема була в іншому місці. Дійсно, це було. Коротше кажучи, що моя логіка, що використовується для отримання відкритого ключа із секретного ключа, який працював бездоганно, вічно, і зараз був збій після оновлення після встановлення BouncyCastle .Компонент чистого шифрування.

Ось уривок з мого коду, який перетворює закритий ключ, відкритий ключ:

відкритий клас BTCUtils2{
 публічний статичний байт[] DerivePublicKey(байт[] привчной,боол isCompr){
 ECPoint pubPt=ComputePublicECPoint(привчной);

 //байт[] xCoord = pubPt.Х.ToBigInteger().ToByteArrayUnsigned(), //2015: працювала в С після установки BouncyCastle 1.7.4114.6375
 // yCoord = pubPt.Р.ToBigInteger().ToByteArrayUnsigned();

 //байт[] xCoord = pubPt.XCoord.GetEncoded(), //2019-07-01: оновлено до 1.8.5; генерує невірні дані
 // yCoord = pubPt.YCoord.GetEncoded();

 PublicParams ECPublicKeyParameters = новий ECPublicKeyParameters(pubPt,ECParams); //2019-07-16; правильне використання 1.8.5
 байт[] xCoord=publicParams.Питання.XCoord.GetEncoded(),
yCoord=publicParams.Питання.YCoord.GetEncoded();

 якщо(xCoord.Довжина!=32 || yCoord.Довжина!=32){кинути нове виключення applicationexception("перевірка на осудність: очікується, що 32 байта для Х/Y координати");}
 байт[] байт=новий байт[isCompr?33:65]; //публічний ключ складається з одного байта префікса (0х04=разархивироваться,0x02=стислих Ж\ Р=навіть, 0x03=стислих ж\ р=непар.) до навантаження
якщо(isCompr){
 байт[0]=((yCoord[31] & 0х01)==0)?(байт)0x02:(байт)0x03; //стиснене; набір префікса залежності Y є парним або непарним
 Масив.Копія(xCoord,0,байт 1,32); //х коорд
}
ще{
 байт[0]=0х04; //без стиснення; набір префікса 0х04
 Масив.Копія(xCoord,0,байт 1,32); //х коорд
 Масив.Копія(yCoord,0,байт,33,32); //р коорд
}
 повертає байт;
}
 приватна статичні ECPoint ComputePublicECPoint(байт[] привчной){повернення ECParams.Р.Множення(нового типу BigInteger(1,привчной));}
 приватна статичні ECDomainParameters тільки для читання ECParams=нуль;
 статичні BTCUtils2(){
 Сrv X9ECParameters = орг.Після установки BouncyCastle.Є asn1.С.SecNamedCurves.GetByName("крива secp256k1");
 ECParams=новий ECDomainParameters(ВСР.Кривий, сrv.Р, сrv.Н НСВ.Ч);
}
}

Проблема виникає у верхній частині, де я перетворення секретного ключа, виражене в байтовий масив, з відкритим ключем, виражається через його X і y координати. Побачити мої коментарі. Код 2015 чудово працювали протягом року з 2011 року випуску після установки BouncyCastle.

У липні 2019-07-01, мені довелося оновити до версії 1.8.5 в надувний замок. Код не компілюється. Я подумав, що агов, вони повинні бути перейменовані кілька речей, або що таким чином я застосував дві лінії позначається як 2019-07-01, вважаючи, що я був зробити те ж саме. ГОЛОВНОЮ ПОМИЛКОЮ. Я не впевнений, що саме ті функції, дзвінки повернути, але вони не коорд Х/Y відкритого ключа. Вони щось зовсім інше.

Як ви можете собі уявити, маючи відкритий ключ, який не працює належним чином відповідає вашим закритим ключем призводить до різного роду проблем, у тому числі біткойн-адреси спотвореної підписання помилок і т. д.

Сьогодні Я замінив ці жахливі рядки з написом 2019-07-16. Що зробив трюк. Я перевірив, що ці рядки були насправді генерувати дійсний відкритий ключ. Угод зараз уявити без помилок.

Сподіваюся, що це корисно для кого-то.

Кращі,

Фестус