Высокий - ура, что. Я уже записал вопрос с возвратом сжатого ключа каждый раз, это в моем списке психического Todo. Nunit является удивительным, мое личное предпочтение в рамках тестирования, какие насмешливый рамки вы обычно используете? Я вполне поклонник JustMock Telerik в.
Moq действительно только рамки я использовал, хотя они достаточно похожи, я не вижу, что быть большая часть вопроса.
Да, мой класс расширений полная неразбериха в данный момент. Каково ваше мнение о продлении срока для строк, как HexToBigInteger, HexToBytes и байт [] ToBigIntegerUnsigned и т.д.? Я не был уверен, что, если они будут лучше храниться как статические методы или методы расширения.
Расширения из "правда" типы / классы прост. байт [] -> BigInteger, ULONG ->VarInt и т.д. Расширения от "классы псевдопользователей" становится немного грязнее. Прямо сейчас "наговор" это просто строка поэтому иметь методы расширения прочь из класса строки, которые не применимы для не шестнадцатеричных строк начинает чувствовать себя немного запутано. С другой стороны, я не поклонник статического класса с методами полезности, если нет другого выбора. Мне интересно, если это легкий класс для шестнадцатеричного был бы лучшим выбором дизайна.
Может быть, что-то вроде этого?
Шестнадцатеричная privHex = новый шестнадцатеричная ("E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262");
вар aBigInt = privHex.ToBigInteger ();
...
Console.WriteLine ("Private Key (шест) {0}", PrivHex.ToString ());
Не 100% уверен, что до сих пор ходит взад и вперед на том.
Кроме того, ваш пункт о добавлении в классе KeyPair. Я был не слишком уверен в этом, я знаю, что подобный Bitcoinj использует этот подход. Но я рассматривал, возможно, отделяя вещи немного более, имеющие классы, как:
PrivateKey - тогда PrivateKey будет иметь свойство PublicKey
PublicKey - тогда PublicKey будет иметь свойство PubKeyHash
PubKeyHash - который является по существу адрес Bitcoin, который может представлять с различными способами кодирования.
Ну Адрес является версионируются и контрольная сумма PubKeyHash. Тем не менее, что может работать. если был использован класс KeyPair Я думаю, что это должно быть легким, главным образом, облегчая преобразование между связанными объектами. Я не люблю bitcoinj подход по этому вопросу, как это делает KeyPair (ЭКЕЙ я считаю) класс очень тяжелая и не существует четкого разделения объектов.
Я не положил много думал в класс Address. Но я думал о том, может быть, делая адрес класса аннотацию и имеющие классы как PubKeyHashAddress и ScriptHashAddress унаследовав от адреса.
Это может работать. Отношения между объектами Bitcoin является сложным, и это делает имея четкое наследование "интересно", Для того, чтобы бросить гаечный ключ в вашей структуре выше, имейте в виду, что WIFPrivateKey и адресатами являются реализации структуры Base58Check (версия + контрольная сумма добавляется к полезной нагрузке, закодированного в base58).