Новые апдейты v0.4.4.6-nvc-update5 включены в основную ветку.
- Core: Функции создания подписи теперь генерируют подписи, защищенные от манипуляции значением S;
- Core: Правила проверки формата скриптов приведены к боле строгому виду: DER формат для подписи теперь является обязательным, а последний аргумент CHECKMULTISIG теперь обязан быть пустым значением (это значение никак не используется и удаляется при подписывании/проверке подписи, а потому является источником возможных манипуляций содержимым);
- Core: Многопоточная проверка скриптов, использование разделяемой блокировки для кэша подписей;
- Core: Поддержка слежения за «недоступными» инпутами: возможен импорт адреса без добавления соответствующих ему ключей;
- QT: Недоступный для траты баланс отображается на главной странице рядом с общим балансом;
- QT: На странице отправки текущий баланс заменен суммой инпутов, доступных для траты;
- RPC: getcheckpoint теперь возвращает информацию о чекпоинт-сообщении (версию, хэш блока, raw представление и подпись);
- RPC: getblock (hash, true) и getblockbynumber (height, true) теперь возвращают массивы raw транзакций вместо их декодированного представления;
- RPC: Добавлен вызов importaddress, позволяющий импортировать в клиент любые адреса, в том числе «чужие»;
- RPC: Добавлено поле redeemScript в вывод listunspent, добавлена обработка этого поля в signrawtransaction.
Подробнее о генерации подписей новой версией клиента:
При подписывании транзакций сравниваем S в получившейся подписи с n/2. Если больше — вычитаем из него n, в противном случае ничего не делаем. Это позволяет избежать генерации подписей с неоправданно большим значением S, которое в дальнейшем может быть заменено на «нормальное» в новом варианте транзакции. Это позволяет закрыть данную возможность манипуляции содержимым транзакции. Аналогичная проверка с 20 сентября будет производиться перед добавлением транзакции в локальный пул. Если S больше n/2, то транзакция с такой подписью будет отклонена. Возможно, в дальнейшем реализуем рассылку «исправленного» варианта транзакции при получении, но пока в этом большого смысла нет.
Значение n здесь является одной из базовых констант для кривой secp256k1, подробнее в этом документе.
Подробнее о недоступных инпутах:
Недоступными в данном случае называются инпуты, которые пользователь хоть и может отличить от прочих, подобно своим собственным, но не может потратить т.к. в кошельке не имеется соответствующих ключей.
Возможные применения данной функции:
- Создание на незащищенной машине кошелька-двойника для слежения за proof-of-stake майнингом, идущим на защищенной машине. Новые транзакции будут появляться в таком кошельке по мере появления их в оригинале;
- Слежение за транзакциями на онлайн-сервисах (скрипты пополнения баланса на биржах и т.п., скрипты для слежения за статусами намайненных блоков на пулах);
- Наблюдение за статусом интересующего адреса без регулярных визитов в эксплорер.
Q: Недоступные входы? Что это такое?
A: Это входы с адресами, за которыми можно наблюдать, но нельзя ничего с них тратить.
Q: Как это работает?
A: Вы можете импортировать адрес в клиент, не добавляя никаких соответствующих ему ключей.
Q: Как этим пользоватся?
A: Откройте RPC консоль и наберите: importaddress . Здесь должно быть заменено на адрес, за которым вы хотите наблюдать.
Q: Есть ли какие-нибудь ограничения на адреса, которые можно добавлять в клиент таким образом?
A: Нет, вы можете добавлять любые адреса, необязательно даже свои собственные.
Выполнив в консоли importaddress адрес, можно будет следить в своем клиенте за состоянием любого адреса. При этом, потратить с него пользователь что-либо не сможет, только посмотреть.
Сумма недоступных входов отображается на главной странице
и в выводе функции getinfo