Фигура 1029Created with Avocode. Фигура 1029Created with Avocode. ДропдаунCreated with Avocode. Фигура 4Created with Avocode.

Основные принципы

  • Что есть такое

    Что такое Novacoin и для чего это может быть полезно

    Novacoin – это открытая криптографическая сеть, использующая P2P (peer-to-peer) технологию и работающая без центральной системы контроля. Обработка транзакций и выпуск (процесс эмиссии) условных единиц производится совместно, совокупной мощностью всей сети.

    Основными преимуществами сети являются:

    • уникальная технология "цепочки блоков" (унаследованная от технологии bitcoin), позволяющая последовательно и структурированно хранить все произведённые в сети транзакции;
    • использование криптографии, позволяющей не только идентифицировать уникальность производимых действий, но и защищать саму сеть от несанкционированных действий;
    • стойкий и надёжный алгоритм создания цифровой подписи ECDSA;
    • децентрализованная одноранговая сеть, преимуществом которой является то, что любой набор узлов может использоваться в качестве доверенного источника;
    • сбалансированная система из двух доказательных методах (Proof-of-Work / Proof-of-Stake), обеспечивающих непрерывную и стабильную работу сети, а также дополнительную защиту от возможных атак по одному из методов;
    • открытый исходный код и наличие достоверных подписанных бинарных пакетов для Windows-систем.

    Основная идея проекта. Отличие от уже имеющихся

    Проект был изначально создан, как ответвление PeerCoin (PPCoin), потому что его основатели считают реализацию Proof-of-Stake не соответствующей требованиям гибридного дизайна, что делает ее менее безопасной, чем возможно. Начиная с версии 0.4 проект более не является форком PPCoin и разрабатывается независимо.

  • Как это работает

    Как работает сеть

    Основу сети составляют ноды (или узлы), на которых запущены клиенты и которые соединены между собой с синхронизированными базами данных основной цепочки блоков. Эти узлы (в любом их наборе) поддерживают сеть в активном состоянии и позволяют:
    • обмениваться между собой информацией о транзакциях и блоках, а, в перспективе, и сообщениями;
    • выступать как точки присоединения так называемых майнеров (сервера или отдельные рабочие станции, производящие работу по поиску решений для блоков по методу Proof-of-Work);
    • выступать как узлы, производящие работу по поиску решений для блоков по методу Proof-of-Stake).
    Основой обмена информации в сети являются транзакции, которые могут создаваться как в клиенте, подключенном к сети, так и в независимом режиме (оффлайн) или ручном режиме. После создания транзакция передаётся на один любой активный узел, где она в свою очередь проверяется и рассылается на подключенные узлы. Это происходит до тех пор пока все узлы не будут знать о её существовании, после чего узлы будут ожидать её включения в блок для того, чтобы она стала подтверждённой и принятой в цепочку.

    Механизм поиска узлов

    В настоящий момент в сети Novacoin основным способом поиска узлов является обращение к серверам DNS seeders, которые содержат информацию об активных узлах.

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

    Процесс выпуска (эмиссии)

    Выпуск (эмиссия) условных единиц сети производится, как отмечалось ранее, в сбалансированном режиме работы двух основных методов решения задач для нахождения блоков Proof-of-Work и Proof-of-Stake.

    Если рассматривать эмиссионную кривую в сравнении с другими сетями, то она в своей основе уникальна тем, что она неопределённа в любом будущем интервале, т.е. абсолютно невозможно предсказать какое количество единиц будет доступно в конкретный будущий момент времени.

    Более подробно это описано в подразделе Выпуск (эмиссия).

    Комиссии

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

    Хотя в настоящее время большинство транзакций принимаются сетью "бесплатно", т.е. отсутствует снятие комиссии за принятие транзакции сетью, есть некоторые условия, при которых она обязательна:

    • размер транзакции больше 1000 байт, начисление производится как произведение минимального размера комиссии на размер транзакции делённый 1000;
    • размер выхода в транзакции меньше 0.01 (CENT), минимальная комиссия начисляется за каждый такой выход;
    • если размер транзакции превышает 249000 байт, то расчитанная по ранее указанным правилам комиссия увеличивается кратно соотношению половины максимального размера блока к разнице между этим размером и размером транзакции:
      nMinFee *= (MAX_BLOCK_SIZE/2) / ((MAX_BLOCK_SIZE/2) - (nBytes + 1000))
    • если размер транзакции превышает 499000 байт, то комиссия составляет 20.
    Минимальный размер обязательной комиссии установлен на уровне 0.001, при этом общая комиссия не может составлять больше 20.

    Где эта сеть может работать

    Сеть Novacoin может работать как по протоколам IPv4 и IPv6, так и через сети Tor и I2P.

  • Выпуск (эмиссия)

    Процесс выпуска условных единиц сети (эмиссия)

    Выпуск (эмиссия) условных единиц сети производится, как отмечалось ранее, в сбалансированном режиме работы двух основных методов решения задач для нахождения блоков Proof-of-Work (PoW) и Proof-of-Stake (PoS).

    Принципы эмиссии строились исходя из базы, заложеной при проектировании сети:

    • защита децентрализованной системы от централизации на ранних этапах существования сети;
    • создание гибкого алгоритма эмиссии, зависящего от числа транзакций в сети (фактически от активности использования сети);
    • дефляционная модель, основой которой является уничтожение (списание) комиссии.

    Если рассматривать эмиссионную кривую в сравнении с другими сетями, то она в своей основе уникальна тем, что она неопределённа в любом будущем интервале, т.е. абсолютно невозможно предсказать какое количество единиц будет доступно в конкретный будущий момент времени.

    Это, в первую очередь, связано с доказательным методом Proof-of-Stake, который в принципе трудно предсказуем как во временном, так и в количественном разрезах, потому как его работа стоится на основании суммы CoinDayWeight (возраста единиц) всей сети и меняется с каждой новой транзакцией, а награда зависит, в том числе, от суммы выхода, который явился основой для создания блока.

    Также на процесс эмиссии и общего объёма единиц влияет уничтожение комиссии.

    Кроме того на процесс эмиссии влияет и относительная неопределённость награды за решения по методу Proof-of-Work, т.к. награда за каждый следующий решённый блок меняется после нахождения решения очередного блока и сильно зависит от вычислительных мощностей, приложенных в каждый момент времени.

    Но есть и определённые правила, на основе которых строится эмиссия:
    • эмиссия PoW обратно пропорциональна вычислительной мощности (из которой исходит параметр сложности задачи), прилагаемой для решения задач и выражается в строго определённой награде за решение на момент нахождения очередного блока;
    • эмиссия PoS также обратно пропорциональна, но уже сумме CoinDayWeight всей сети, на основании которой вычисляется как сложность решения, так и базовая награда на 1 условную единицу, приложенная к номинальному возрасту в 365 дней (ROI);
    • целевое количество блоков, которые должны создаваться сетью в течение 1 часа равно 8, из которых:
      • 6 PoS блоков;
      • 2 PoW блока.
    • количество подтверждений транзакции (блоков созданных с момента включения транзакции в блок, считая сам блок, включивший транзакцию), указывающих на достоверность и разрешающих последующую трату (перевод на свой или другой адрес), зависит от типа транзакции:
      • для обычной транзакции траты: 6 подтверждений (блоков);
      • для транзакции, являющейся эмиссионной для PoW (нулевая согласно нумерации в блоке): 520 подтверждений (блоков);
      • для транзакции, являющейся эмиссионной для PoS, а фактически содержащей выходы, сумма которых представляет из себя сумму выходов, определивших базу для создания блока и награда (первая согласно нумерации в блоке): 520 подтверждений (блоков);

    Рассмотрим подробнее особенности каждого из протоколов эмиссии.

    Proof-of-Work берёт своё начало от сети bitcoin, но имеет некоторые отличительные особенности применения.
    Количество PoW блоков приводится к их целевому объёму выпуска в период времени (48 блоков в сутки) через увеличение или уменьшение сложности нахождения решения. Делается это динамически для каждого последующего блока, что кординально отличает использование PoW от сети bitcoin, где используется пороговый пересчёт после определённого количества найденных решений.
    Благодаря такому механизму производится более плавная и при этом более быстрая реакция на изменение мощности сети решения задач PoW и стабилизирует сеть.

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

    Награда за создание PoW блока обратно пропорциональна корню 6-й степени сложности и вычисляется по следующей формуле:
    nBlockReward = 100 / (difficulty / 0.000244) ^ (1/6)
    Proof-of-Stake берёт своё начало от сети peercoin (ppcoin), где впервые был применён этот метод нахождения решений.
    Но в отличие от сети peercoin, где PoS является фактически независимым методом нахождения решений относительно PoW и в последствии должен был бы стать доминирующим, этот метод находится в балансе с PoW и имеет целевой суточный объём выпуска в 144 блока.
    Второй отличительной особенностью использования PoS является динамическое изменение награды за нахождение блока и вычисляется по следующей формуле:
    nProofReward = min(10, CoinAge / 365 / (difficulty / 0.03125) ^ (1/3))
    из которой видно, награда прямо пропорционально зависит от размера транзакции, участвующей в нахождении блока, но при этом искусственно создан верхний предел награды в 10 единиц.

    Это сделано, в своей основе, исходя из того, чтобы растущая сеть не концентрировала на отдельных адресах награды на одном выходе, а для того, чтобы была создана основа для более равномерного и более эффективного распределения выходов для создания PoS блоков.
    Кроме того это создаёт условия для построения действительной дефляционной модели, которая подразумевается этой сетью.

    Для прогноза возможной полученной награды используется понятие ROI (Return On Investment), т.е. размер награды, приходящийся на одну целую условную единицу при её возрасте в 365 дней (т.е. CoinDayWeight = 365), который вычисляется по формуле:
    ROI = 100 * (0.03125 / difficulty) ^ (1/3)
    но при этом имеет верхнее ограничение в 1 условную единицу и нижнее в 0.01 (так называемый CENT).
  • Технические детали

    Технические детали в вопросах и ответах

    Как создаётся новый адрес
    При первом запуске клиента генерится пул (массив) адресов, из которого в дальнейшем будут браться адреса для работы. Данный массив обслуживает как запросы пользователя на новые адреса, так и предоставляет адреса для сдачи, которые впоследствии могут быть выданы пользователю в качестве нового адреса, если клиент не введёт этот адрес самостоятельно, увидев его как используемый в транзакции.
    Пример использования адресов из имеющегося пула, которые могут быть впоследствии выданы в качестве новых.
    Как настроить PoS майнинг
    Никаких настроек для генерации PoS блоков не требуется, достаточно лишь того, чтобы клиент, имеющий ненулевой баланс, был запущен и разблокирован. Относитесь к другим любого рода "инструкциям" с большой осторожностью.
    Будет ли клиент с установленным паролем генерировать PoS блоки
    Да, если его разблокировать для этого. Для разблокирования можно воспользоваться командой walletpassphrase в командной строке или в консоли GUI-клиента с параметром true в конце.
    Есть ли ограничение на объем монет
    NovaCoin использует дефляционный дизайн с неопределенным количеством монет в системе. Предполагается, что такой дизайн делает систему более похожей на драгоценные металлы, чем жесткое ограничение на количество создаваемых монет. Т.е. ограничение существует, но оно заранее неизвестно.
    Кому идет комиссия за перевод
    В настоящий момент комиссия за транзакции в Coinstake блоке уничтожается, т.е. списывается таким образом что сумма выходов транзакций уменьшена на сумму комиссии относительно суммы входов, а в PoW блоке сумма комиссий добавляется в выход Coinbase транзакции.

Базовые определения

  • Блок

    Блок

    История транзакций постоянно сохраняется в сети в так называемых блоках. Блок - это набор некоторых или всех последних транзакций, которые еще не были записаны в предыдущие блоки. Каждый блок запоминает то, что происходило перед его созданием.

    Структура блока

    ПолеТипРазмерОписание
    Магическое числоunsigned int4Всегда 0xE5E9E8E4
    Размер блокаunsigned int4Количество байтов до конца блока
    Заголовок блокаstruct80Состоит из 6 элементов
    Количество транзакцийVariable integer1 - 9-
    Набор транзакцийtransaction[]Размер транзакцийСписок транзакций
    Подпись заголовкаunsigned char[]<= 72Подпись Proof-of-Stake хранится здесь
  • Транзакция

    Транзакция

    Транзакция - это подписанный набор данных, который распространяется в сети и объединяется в блоки. Обычно она ссылается на предыдущие транзакции и направляет определенное количество новакоинов из них на один или несколько новых публичных ключей.

    В настоящее время возможно несколько типов транзакций.

    Пользовательская операция

    Такие транзакции обычно используются для передачи новакоинов из непотраченных входов. Как правило, они ссылаются на непотраченные входы и создают новые выход(ы) с указанием сумм и получателей.

    Coinbase

    Coinbase имеет один вход с параметром 'coinbase' вместо scriptSig. В 'coinbase' могут быть любые данные, они не используются. Novacoin помещает туда текущую целевую величину в компактном формате и число произвольной точности 'extraNonce', которое увеличивается каждый раз при переволнении поля Nonce в заголовке блока. extranonce участвует в увеличении области определения функции proof of work.

    Эти транзакции используются для выдачи награды майнерам Proof-of-Work. Блоки proof-of-stake также содержат транзакцию coinbase, но с пустым выходом.

    Coinstake

    Эти транзакции используются для предоставления доказательства в заголовке блока Proof-of-Stake. Они похожи на пользовательские транзакции, но имеют некоторые отличия:

    • Первый выход должен быть пустым;
    • Первый вход транзакции должен удовлетворять текущей сложности Proof-of-Stake.
    • Разрешена генерация новых единиц через уплату отрицательной комиссии.
    • Местом назначения второго выхода должно быть Pay-to-Pubkey (описано позже).

    Общий формат транзакции

    ПолеТипРазмерОписание
    Версияunsigned int4В настоящее время 1
    Timestampunsigned int4Время транзакции
    Число входовvariable int1 - 9-
    Массив входовTxIn[]размер набора входовМассив входов или coinbase
    Число выходовvariable int1 - 9-
    Массив выходовTxOut[]размер набора выходовМассив структур выходов
    Время блокировкиunsigned int4Высота блока или timestamp, когда транзакцию считать завершенной

    Формат входа

    Вход - это ссылка на выход другой транзакции. Транзакция часто содержит несколько входов. Величины указанных выходов суммируются, и сумму можно использовать в выходах этой транзакции.

    ПолеТипРазмерОписание
    txidunsigned char[]32Хеш предыдущей транзакции
    nunsigned int4Номер выхода предыдущей транзакции
    scriptSigLengthvariable int1-9Длина scriptSig
    scriptSigunsigned char[]-Первая половина скрипта, подписи для scriptPubKey
    nSequenceunsigned int4Номер варианта транзакции, не имеет значения, если не указано nLockTime. 0xffffffff по умолчанию, см. подробное описание.

    Формат выхода

    Выход содержит инструкции для отправки новакоинов. Величина - количество сатоши (1 NVC = 1,000,000 сатоши), которое этот выход будет стоить при использовании.

    ПолеТипРазмерОписание
    nValueunsigned long int8количество передаваемых сатоши(NVC/106)
    scriptPubKeyLengthvariable int1-9длина scriptPubKey
    scriptPubKeyunsigned char[]-вторая половина скрипта, инструкции по расходованию

    Получатели

    Существуют следующие типы получателей для пользовательских и coinbase транзакций:

    • Публичный ключ (Pay-to-Pubkey);
    • Хеш публичного ключа (Pay-to-PubkeyHash);
    • Хеш скрипта (Pay-to-ScriptHash);
    • Пустой получатель;
    • Нестандартный скрипт.

    Pay-to-Pubkey

     scriptPubKey: [pubKey] OP_CHECKSIG
     scriptSig: [sig]
    

    Pay-to-PubkeyHash

     scriptPubKey: OP_DUP OP_HASH160 [pubKeyHash] OP_EQUALVERIFY OP_CHECKSIG
     scriptSig: [sig] [pubKey]
    

    Pay-to-ScriptHash

    Отправка на хеш скрипта:

     scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
     scriptSig: <зависит от типа входов>
    

    Пример расходования:

     scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL
     scriptSig: [signature] {[pubkey] OP_CHECKSIG}
    

    Пустой получатель

     scriptPubKey: (пусто)
     scriptSig: (пусто)
    

    Нестандартные скрипты

    Любой может потратить:

     scriptPubKey: (empty)
     scriptSig: OP_TRUE
    
  • Proof-of-Stake

    Proof-of-Stake

    Proof-of-Stake это термин, означающий использование самой массы единиц (факта владения), для достижения определенных целей. В NovaCoin Proof-of-Stake используется, чтобы обеспечить майнинг и обработку транзакций наравне с Proof-of-Work.

    Novacoin использует смешанный Coin-Age/CoinDayWeight подход, чтобы предоставить доказательство доли. Сложность Proof-of-Stake регулируется таким образом, чтобы ограничить скорость, с которой новые блоки могут быть сгенерированы сетью, до 10 минутного целевого интервала между блоками. Из-за очень низкой вероятности успешной генерации доказательства, это делает непредсказуемым определение того, какой именно компьютер в сети, сможет сгенерировать следующее решение.

    Как это должно работать?

    Это выполняется посредством сканирования всех доступных входов, чтобы найти один удачный, который удовлетворяет следующему условию:
    SHA256(SHA256(KERNEL)) < CoinDayWeight *  NetworkTarget
    Майнер должен найти хеш SHA256, который меньше целевого значения. Целевое значение получается из текущей сложности в сети, с использованием параметра CoinDayWeight. Доказательство представлено хешем ядра и подписью заголовка. Каждое coinstake ядро представлено структурой из 6 полей, некоторые из этих полей могут быть изменены довольно свободно.
    ПолеТипРазмерТребования
    nStakeModifierunsigned long int8Изменения вручную недопустимы.
    nTimeBlockFromunsigned int4Метка времени для блока, который обеспечил предыдущую транзакцию.
    nTxPrevOffsetunsigned int4Смещение предыдущей транзакции в блоке.
    nTxPrevTimeunsigned int4Метка времени предыдущих транзакций.
    nPrevoutNumunsigned int4Выходное число предыдущей транзакции.
    nTimeTxunsigned int4Текущая метка времени.
    Результат хеширования допустимого значения Proof-of-Stake должен быть ниже чем цель для блока. Майнер пытается найти это подходящее решение, проверяя все доступные неизрасходованные входы с подходящим CoinDayWeight.

    Сколько времени займет у меня генерация Proof-of-Stake?

    Точно так же как с Proof-of-Work, никто не может сказать точно. Но можно оценить, сколько времени это могло бы занять. Вычисления очень похожи на вычисления вероятности Proof-of-Work, но вместо параметра скорость перебора хэшей в секунду, здесь используется единица * день-в-секунду. Так, если сложность 1.0 то необходимо ~ 4294967297 единица * день-в-секундах, чтобы найти блок.

    Вероятность успешной генерации блока в течение одного дня может быть вычислена от доступного CoinDayWeight используя формулу:
    P = CoinDayWeight * 86400 / (4294967297 * difficulty)
    Оценим вероятность для предполагаемой сложности (0.23482093):
            Возраст
    Сумма \
    <= 306090120
    100.00130.00260.00510.0077
    1000.01280.02570.05140.0771
    10000.12850.2570.5140.771

    Среднее время генерации блока может быть вычислено как:

    T =  4294967297 * difficulty / (CoinDayWeight * 86400)
            Возраст
    Сумма \
    <= 30456090120
    1778.2389.1194.55129.7129.7
    1077.8238.9119.4612.9712.97
    1007.783.891.951.31.3

    Как начать генерировать Proof-of-Stake блоки?

    Если есть ненулевой баланс, то novacoind будет автоматически пытаться сгенерировать хеши. Если нашелся PoS-блок, то награда вычисляется используя текущую Proof-of-Stake сложность и использованное количество единица-дней. Величина награды добавляется к затраченному на этот PoS блок количеству единиц (иначе инпут, вход) и показывается суммарно, в поле stake вывода getinfo.

    Поскольку доля временно удерживается от траты (на 520 блоков), предусмотрен параметр конфигурации reservebalance на случай, если есть необходимость сохранить баланс доступным для траты, предотвратив его использование в качестве доли. Можно добавить строку reservebalance=10000 в novacoin.conf и перезапустить novacoind. В этом случае novacoind будет пытаться сохранить баланс выше 10000 единиц при генерации доли.

    Что относительно наград?

    Награда за блок основана на параметре Coin-Age и Proof-of-Stake сложности. Награда может быть вычислена, используя формулу
     nProofReward = min(10, CoinAge * (0.03125 / difficulty) ^ (1 / 3) * 33 / (365 * 33 + 8)) 
    Другими словами награда ограничена значением в 10 единиц, запускается с 1 единицы на единица-год и ополовинивается каждое 8-ми кратное увеличение сложности.
  • Proof-of-Work

    Proof-of-Work

    Proof-of-Work это решение для тяжёлой (дорогостоящей) математической задачи. Это решение должно быть тривиальным, чтобы можно было легко проверить, удовлетворяет ли данное решение заявленным требованиям.

    Для обеспечения Proof-of-Work Novacoin использует метод hashcash. Сложность этой работы регулируется таким образом, чтобы ограничить частоту, с которой новые блоки могут быть сгенерированы сетью, до необходимого целевого интервала (от 10 до 30 минут). Из-за очень низкой вероятности успешной генерации доказательства, это делает непредсказуемым определение того, какой именно компьютер в сети сможет сгенерировать следующее решение.

    Сколько времени займет генерация Proof-of-Work?

    Никто не может сказать точно. Но существует оценка того, сколько времени может потребоваться.

    Представим, что есть оборудование со скоростью хэширования в 1 MH/s. Оценим сколько в среднем займёт у Вас генерация Proof-of-Work с текущей сложностью Proof-of-Work в сети Novacoin.

    Сложность 1.0 представлена целевым значением в

    0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    Итак, чтобы получить успешное доказательство работы, необходимо выполнить 0xFFFFFFFFFFFFFFFF / 0x00000000FFFFFFFF или ~ 4294967297 попыток.

    При сложности 360 мы нуждаемся в ~ 360 * 4294967297 = 1546188226920 попытках. Если имеется 1 MH/s (или 1000000 хешей в секунду) тогда возможно отсканировать такое количество хешей в пределах 1546188226920 / 1000000 = 1546188 секунд или 1546188 / 86400 = 17,89 дней.

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

     P = nHashesPerSecond * 86400 / (4294967297 * difficulty)

    Как это работает?

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

    ПолеТипРазмерТребовани
    nVersionunsigned int4Изменения вручную недопустимы
    hashPrevBlockunsigned char[]32Изменения вручную недопустимы
    hashMerkleRootunsigned char[]32Это хэш дерева merkle. Может быть изменено посредством модификации, дополнения или удаления транзакций
    nTimeunsigned int4Может быть обновлено вручную на любое значение из интервала [max tx timestamp, time() + 3600] interval.
    nBitsunsigned int4Изменения вручную недопустимы
    nNonceunsigned int4Счетчик попыток для Proof-of-Work. Необходимо обновлять это поле при каждой новой попытке хеширования

    Результат хеширования допустимого значения Proof-of-Work должен быть меньше, чем текущая цель. Майнер пытается найти это подходящее решение, сканируя все возможные значения nNonce (от 0 до UINT_MAX). В случае переполнения будет создаваться новая coinbase транзакция. Это позволяет майнеру заменять значение merkle хеша новым и снова начать nNonce сканирование с нуля. Корректировка метки времени также возможна.

    Что относительно наград?

    Награда за блок может быть вычислена, используя формулу
     nBlockReward = 100 / (diffuculty / 0,000244) ^ (1/6)
    Это означает, максимальную награду в 100 единиц и уполовинивание награды при росте сложности в 64 раза.
  • Генерация и цепочка блоков

    Генерация (Mining) и цепочка блоков(blockchain)

    Генерация (Mining)- это термин, обозначающий процесс создания новых блоков для цепочки блоков Novacoin. Это требуется для обеспечения подтверждения транзакций и сохранения истории транзакций.

    Как это должно работать?

    У всех майнеров(miners) есть копия каждой неподтвержденной допустимой транзакции в собственном пуле транзакций. Как правило, процесс добычи осуществляется в четыре этапа:

    1. Получить ряд транзакций от пула транзакций;
    2. Вычислить merkle хеш для этого набора транзакций;
    3. Создать шаблон заголовка блока и связать его с этим набором транзакций, используя его merkle хеш;
    4. Попытаться найти подходящий хеш доказательства для заголовка блока, созданного прежде.

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

    Что может использоваться в качестве доказательства?

    Единственным необходимым свойством доказательства является то, что его чрезвычайно трудно получить, но очень легко проверить. Существует множество концептов доказательства, такие как Proof-of-Work, Proof-of-Stake или Proof-of-Burn. Novacoin поддерживает использование как работы(PoW), так и владения(PoS) с целью получения доказательства для заголовка блока.
  • ЧаВо

    Часто задаваемые вопросы (ЧаВо)

    Какие существенные различия между NovaCoin и PPCoin?

    Хотя Novacoin в некоторых особенностях похож на PPCoin, но это - проект с собственной идеологией и независимой кодовой базой, именно поэтому трудно провести такое сравнение.

    Можно сказать определенно, что:

    • NovaCoin в качестве основы использует более новую версию bitcoin.
    • NovaCoin использует другую модель генерации (плавающая награда за единица-год).
    • NovaCoin использует scrypt хеш-функцию для Proof-of-Work.
    • NovaCoin использует гибридную Proof-of-Work/Proof-of-Stake оценку для расчёта веса цепочки.
    • NovaCoin использует независимые значения сложности для Proof-of-Work и Proof-of-Stake.
    • NovaCoin не использует подписей для Proof-of-Work блоков.

    Что такое Proof-of-Stake?

    Proof-of-stake это термин, относящийся к использованию самих единиц (в собственности), чтобы достигнуть определенных целей. В NovaCoin концепция Proof-of-Stake используется как доказательство при подтверждении блоков (и обработке транзакций), наравне с концепцией Proof-of-Work.

    Что относительно предварительной, скрытой добычи? Я слышал что-то о 200/150/90 тысячах...

    Несерьезно... не слушайте малограмотных

    http://www.devtome.com/doku.php?id=Novacoin

    https://bitcointalk.org/index.php?topic=143221.msg3730462#msg3730462

    https://bitcointalk.org/index.php?topic=217110.msg2298533#msg2298533

    Как это может быть энергоэффективным, когда это по-сути все тот-же майнинг?

    Энергоэффективность, к которой мы апеллируем, это в первую очередь долгосрочная эффективность. А в долгосрочной перспективе сеть не потребует использования энергии для поддержания своей работы.

    В настоящий момент Proof-of-Work остается самым практичным способом обеспечить начальную крипто-генерацию. Таким образом, мы решили сохранить его как часть нашего гибридного проекта.

    Почему есть необходимость в централизованном управлении контрольными точками (checkpoints)?

    Фактически в них нет необходимости. Основная цель - обеспечить дополнительную защиту для сети в течение начального периода роста, и помощь, гарантирующая гладкую процедуру обновления, если критическая уязвимость вдруг будет найдена. Мы уверены, что централизованное управление контрольными точками теперь может быть постепенно ослаблено и в конечном счете удалено, чтобы достигнуть сопоставимого с Bitcoin уровня децентрализации, поскольку сеть Novacoin растёт. Так-же пользователи имеют возможность проигнорировать широковещательно разосланный чекпоинт, использовав опцию -cppolicy, если пожелают.

    Могу ли я использовать шифрование в клиенте?

    Да. Шифрование клиентом поддерживается, но есть некоторое отличие от Bitcoin. Если Вы используете шифрование в клиенте, необходимо предварительно произвести разблокировку, чтобы генерировать Proof-of-Stake блоки. Для большей безопасности пользователей добавлена опция walletpassphrase как RPC-команда, которая позволяет лишь чеканить PoS-блоки. В этом разблокированном режиме нельзя отправить транзакцию посредством команды RPC, таким образом, обеспечивается дополнительная безопасность в клиенте, если хакер получает доступ через RPC.

    Есть ли ограничение на полную массу как 21 миллион Bitcoin?

    Фактически нет никакого жёсткого ограничения, кроме значения в 2 миллиарда единиц, прописанного в исходном коде как константа, да и то лишь на текущий момент. Но это не должно быть интерпретировано как достижимое ограничение, так как, возможно, на практике это никогда не будет достигнуто. Так же это нельзя считать неким фундаментальным ограничением, поскольку оно может быть снято, но это, вероятно, не понадобится очень-очень долгое время. Так же из-за плавающей природы процентной ставки генерации, невозможно заранее предсказать заключительное, финальное ограничение генерации, поскольку это зависит в большой степени от участия пользователей, а так же влияния PoW/PoS-генерации и доли уничтоженных комиссий за транзакции (там даже не может быть математического предела, если темпы генерации блоков будут продолжать опережать уничтоженные комиссии). Что точно известно, так это то, что PoW-генерация будет замедляться согласно закону Гордона Мура (да, мы знаем что закон Мура однажды станет неактуальным), и PoS-генерация введёт в будущем инфляцию на уровне 1% в год (впрочем, стартовав с более высоких значений). Таким образом, этот дизайн в перспективе обеспечивает низкий уровень инфляции, сопоставимый с Bitcoin.

    Как мне сгенерировать красивый адрес, содержащий заданный шаблон, аналогично генерации красивых адресов Bitcoin?

    (любезно предоставлено dreamwatcher)
     vanitygen -X 8 <шаблон>
    Как только ключ сгенерирован, можно использовать novacoind importprivkey, чтобы импортировать его в свой клиент.

Программное обеспечение

  • Сборка и установка

    Сборка и установка

    Этапы процесса установки зависят от операционной системы, которая используется.

    Сборка для Linux

    Если предпочитаете компилировать свои собственные бинарные файлы, тогда нужны пакеты разработчика:
     sudo apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev
       libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev
       libssl-dev libdb++-dev libminiupnpc-dev
    И git также, конечно:
     sudo apt-get install git
    После того, как установка завершалась, можно клонировать Novacoin репозитарий
     git clone https://github.com/novacoin-project/novacoin.git
    и наконец, скомпилировать свой клиент
     cd novacoin
     qmake RELEASE=1 USE_UPNP=1 USE_O3=1
     make
     cd src
     make -f makefile.unix USE_UPNP=1 STATIC=1 USE_O3=1

    Сборка для Windows

    // Этот раздел ещё не завершен.

    Установка в Windows.

    Загрузите свежую копию клиента NovaCoin отсюда.

    Существуют два варианта:

    1. Использовать установщик;
    2. Использовать zip-архив с исполняемыми файлами.

    Если Вы будете использовать установщик, тогда путь установки по умолчанию будет C:\Program Files (x86)\NovaCoin для 32 битной версии клиента в 64 битной версии Windows или C:\Program Files\NovaCoin в ином случае.

    Если Вы выбрали zip архив, то просто извлеките исполняемые файлы клиента в соответствующее место на диске.

    Установка на Linux

    Если Вы используете операционную систему Linux, у Вас есть несколько вариантов получить работающий клиент Novacoin.

    1. Использовать пакеты от pmconrad;
    2. Используйте бинарные файлы tarball (Ubuntu/ARM);
    3. Использовать готовый portage (для Gentoo);
    4. Скомпилировать клиент самостоятельно.

    Если Вы хотите использовать бинарный файл tarball, тогда сначала необходимо установить Qt библиотеку.

    Debian подобные дистрибутивы:
     sudo apt-get install libqtgui4
    RPM дистрибутивы:
     yum install libqtgui4
  • Пример конфигурации

    Образец конфигурации

    Обратите внимание, что следующий пример не предназначен для штатной эксплуатации программы конечным пользователем. Он помещен сюда, чтобы разъяснить назначение некоторых настроек
    # novacoin.conf файл конфигурации. Строки начинающиеся с октоторпа (#) - это комментарии.
    
    # Настройки, связанные с сетью:
    
    # Запуск в тестовой сети вместо реальной сети NVC
    #testnet=0
    
    # Связь через socks4 proxy по умолчанию отключена.
    #proxy=127.0.0.1:9050
    # Поддержка входящих подключений
    #listen=1
    # Доступ UPnP связи с роутером\фаерволлом
    для принятия входящих подключений
    #upnp=1
    
    ######################################################################################
    ##             Краткое пояснение для начинающих о addnode и connect                 ##
    ## Положим, вы используете addnode=193.23.181.148, addnode подключит Вас и передаст ##
    ##   информацию об узлах, подключенных к 193.23.181.148. Кроме того, это позволит   ##
    ## другим нодам узнать о вашем подключении и то, что они могут подключиться к вам.  ##
    ## connect не будет делать вышеупомянутого, когда вы к нему подключитесь. Он только ##
    ##              подключит вас к 193.23.181.148 и ни к чему другому.                 ##
    ##   Таким образом, если вы находитесь за фаерволлом или имеете другие проблемы с   ##
    ##                     обнаружением узлов, используйте addnode.                     ##
    ##    Если Вы хотите остаться невидимым, используйте connect, чтобы подключится     ##
    ##                           только к "доверенным" узлам.                           ##
    ##   Если вы работаете с несколькими узлами локальной сети, нет необходимости для   ##
    ##  всех из них создавать множество подключений. Вместо этого подключите их все к   ##
    ##   одному узлу, имеющему доступ к внешнему порту и имеет множество соединений.    ##
    ##                Благодарности присылайте [Noodle] на Freenode.                    ##
    ######################################################################################
    
    # Можно использовать несколько addnode= команд, для подключения отдельных пиров.
    #addnode=193.23.181.148
    #addnode=91.235.143.61:7777
    
    # ... или необходимое количество connect= команд, для подключения отдельных пиров:
    #connect=193.23.181.148
    #connect=91.235.143.61:7777
    
    # Максимальное число входящих\исходящих подключений
    #maxconnections=
    
    # Настройки JSON-RPC (для того, чтобы управлять выполняющимся процессом novacoind)
    
    # Необходимо установить rpcuser и rpcpassword чтобы обезопасить JSON-RPC api
    #rpcuser=Ulysseys
    #rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593
    
    # Сколько секунд NVC будет ждать полного RPC HTTP запроса
    # после установки HTTP соединения.
    #rpctimeout=30
    
    # По умолчанию RPC подключения позволены только с локального узла. Можно указывать
    # несколько rpcallowip=, необходимые открыть для подключений с других узлов (также
    # можно использовать * как символ маски).
    #rpcallowip=10.1.1.34
    #rpcallowip=192.168.1.*
    
    # Принимать RPC подключения к назначенному TCP порту:
    #rpcport=8344
    
    # Можно использовать novacoind для управления другим novacoind, работающем на другом узле:
    #rpcconnect=127.0.0.1
    
    # Использовать Secure Sockets Layer (также известные как TLS или HTTPS) для связи с novacoind
    #rpcssl=1
    
    # Настройки OpenSSL, используемые при rpcssl=1
    #rpcsslciphers=TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH
    #rpcsslcertificatechainfile=server.cert
    #rpcsslprivatekeyfile=server.pem
    
    # Опциональные параметры
    
    # Предварительно создаваемые пары public/private key, тогда резервные копии кошелька будут
    # действительны не только для предшествующих транзакций, но и для некоторого количества будущих
    # транзакций.
    #keypool=100
    
    # Путь к директории с данными, расположению ключей, копии блокчейна и неизрасходованных входов
    #datadir=D:\NovaCoin
    
    # Имя файла кошелька
    #wallet=wallet.dat
    
    # политика контрольных точек (возможные значения: строгий (strict) или консультативный
    # (advisory))
    #cppolicy=strict
    
    # Требование подтверждения изменений (отключено по умолчанию)
    #confchange=0
    
    # Включение обязательного использования каноничных PUSH операторов
    #enforcecanonical=1
  • Параметры командной строки

    Параметры командной строки novacoind и консоли GUI-клиента novacoin

    Список параметров, используемых в командной строке клиента novacoind, можно вывести используя команду
     novacoind help
    
    Оригинальное описание каждого параметра можно получить командой
     novacoind help <параметр>
    
    В консоли GUI-клиента для этого используется команда help и help <параметр> соответственно.

    Общие положения и переменные

       < >                  обязательное поле с сохранением пунктуации
       [ ]                  необязательное поле
       |                    разделитель, используемый для указания команды на выбор
       account, label       имя для адреса/адресов в клиенте, указываемое пользователем
                               для упрощения идентификации
       minconf              минимальное количество подтверждений для транзакций, целое число >=0
    

    Параметры

       addmultisigaddress <nrequired> <'["key","key"]'> [account]
                                        создание адреса с несколькими подписями с добавлением в клиент
                                        nrequired – минимальное количество подписей, необходимых
                                           для подтверждения транзакции с адреса
                                        key – публичный ключ адреса, участвующего в подписи
                                           исходящих транзакций
       addnode <node> <add|remove|onetry>
                                        операции с добавлением/удалением узлов сети в список, используемых
                                           для синхронизации базы с сетью
                                        node – IP-адрес узла сети
                                        add – добавить узел в список
                                        remove – удалить узел из списка
                                        onetry – произвести однократное тестовое подключение к узлу
       addredeemscript <redeemScript> [account]
                                        добавление адреса с несколькими подписями путём добавления его
                                        скрипта
       backupwallet <destination>
                                        создание резервной копии wallet.dat
                                        destination – путь для сохранения
       checkwallet
                                        проверка целостности данных клиента
       createmultisig <nrequired> <'["key","key"]'>
                                        создание адреса с несколькими подписями без добавления в клиент,
                                        выводится JSON-объект, содержащий адрес и redeemScript
                                        nrequired – минимальное количество подписей, необходимых
                                           для подтверждения транзакции с адреса
                                        key – публичный ключ адреса, участвующего в подписи
                                           исходящих транзакций
       createrawtransaction [{"txid":txid,"vout":n},...] {address:amount,...}
                                        создание исходящей транзакции, готовой для отправки в сеть (RAW формат)
                                        txid – номер транзакции
                                        n – номер выхода транзакции
                                        {"txid":txid,"vout":n},... используется для ручной подборки
                                           транзакций, которые необходимо израсходовать в создаваемой
                                           транзакции
       decoderawtransaction <hex string>
                                        преобразование формата транзакции из RAW (HEX) в JSON представление
       decodescript <hex string>
                                        преобразование формата multiSig скрипта из RAW (HEX) в JSON представление
       dumpblock <block hash> [path]
                                        получить дамп указанного блока в 16-тиричной системе
                                        path – записать дамп в файл по относительному пути
                                           в пределах директории данных клиента
       dumpblockbynumber <block number> [path]
                                        получить дамп указанного блока в 16-тиричной системе
                                        path – записать дамп в файл по относительному пути
                                           в пределах директории данных клиента
       dumpprivkey <novacoinaddress>
                                        вывести приватный ключ указанного адреса (при его наличии в wallet.dat)
       dumpwallet <filename>
                                        выгрузить адреса и их ключи в отдельный файл
       encryptwallet <passphrase>
                                        зашифровать wallet.dat клиента
                                        passphrase – пароль
       getaccount <novacoinaddress>
                                        получить имя записи, установленного для указанного адреса
       getaccountaddress <account>
                                        получить адрес, идентифицируемый указанным именем
       getaddednodeinfo <dns> [node]
                                        получить информацию по узлам, добавленным командой addnode
                                        dns – флаг, выставляемый для метода отображения информации:
                                           false – вывести только список добавленных узлов
                                           true – вывести список добавленных узлов с информацией о
                                              статусе подключения
       getaddressesbyaccount <account>
                                        вывести весь список адресов, идентифицируемый указанным именем
       getaddrmaninfo [networkType]
                                        вывести список всех активных подключений клиента
                                        networkType – переменная для фильтрации списка, может иметь
                                           значения ipv4 или ipv6
       getbalance [account] [minconf=1] [watchonly=0]
                                        получить баланс по имеющимся в wallet.dat адресам
                                        account – фильтр по адреса
                                        watchonly – флаг, позволяющий добавить в итог баланс адресов,
                                           добавленных только для наблюдения, принимает значения true или false
       getbestblockhash
                                        хэш последнего найденного блока в сети
       getblock <hash> [txinfo]
                                        вывести данные о блоке с указанным хэшем
                                        txinfo – флаг, указывающий что вместо хэша транзакции необходимо вывести
                                           детализированную информацию, принимает значения true или false
       getblockbynumber <number> [txinfo]
                                        вывести данные о блоке с указанным номером в цепочке
                                        txinfo – флаг, указывающий что вместо хэша транзакции необходимо вывести
                                           детализированную информацию, принимает значения true или false
       getblockcount
                                        вывести количество блоков в основной цепочке (исключая нулевой)
       getblockhash <index>
                                        вывести хэш блока по его номеру(индексу) в цепочке блоков
       getblocktemplate [params]
                                        вывести данные, необходимые для генерации нового блока
       getcheckpoint
                                        вывести данные о последнем чекпоинте (контрольной точке)
       getconnectioncount
                                        вывести количество активных подключений клиента в сети
       getdifficulty
                                        вывести данные о текущей сложности сети
       getinfo
                                        вывести основные данные о клиенте, балансе и состоянии сети
       getmininginfo
                                        вывести основные данные о состоянии майнинга в сети
       getnettotals
                                        вывести данные о данных состоянии обмена с сетью
       getnewaddress [account]
                                        создать и зарегистрировать новый адрес в клиенте
                                        account – привязать адрес к указанному имени
       getpeerinfo
                                        вывести детальную информацию о клиентах, подключенных к локальному
       getrawmempool
                                        информация о транзакциях, ещё не включенных в блок
       getrawtransaction <txid> [verbose=0]
                                        вывести транзакцию по её хэшу
                                        verbose – определяет как её выводить:
                                           0 для вывода в RAW (HEX) формате (по-умолчанию)
                                           1 для вывода в JSON формате
       getreceivedbyaccount <account> [minconf=1]
                                        сумма полученных средств, поступивших на адреса, привязанные к указанному имени
       getreceivedbyaddress <novacoinaddress> [minconf=1]
                                        сумма полученных средств, поступивших на указанный адрес
       getsubsidy [nTarget]
                                        вывести награду согласно запрашиваемого таргета (по-умолчанию, текущая для PoW)
       gettransaction <txid>
                                        вывести транзакцию по её хэшу в JSON формате
       getwork [data]
                                        получить данные для майнинга
       getworkex [data, coinbase]
                                        получить расширенные данные для майнинга
       help [command]
                                        вывести попощь по командам, а если указана команда, то расширенная информация по ней
       importaddress <address> [label] [rescan=true]
                                        импортировать (зарегистрировать) в клиенте адрес для наблюдения за ним (операции по
                                           трате средств невозможны)
                                        rescan – указание на проведение полного сбора информации по адресу
                                           (по умолчанию, производить)
       importprivkey <novacoinprivkey> [label] [rescan=true]
                                        импортировать (зарегистрировать) в клиенте адрес по его приватному ключу для последующего
                                           проведения операций со средствами
                                        rescan – указание на проведение полного сбора информации по адресу
                                           (по умолчанию, производить)
       importwallet <filename>
                                        импортировать все данные, находящиеся в другом файле со структурой wallet.dat
       keypoolrefill [new-size]
                                        перезаполнить пул предварительно сгенерённых адресов
                                        new-size – новый размер пула (по умолчанию 100)
                                        ВАЖНО: после регенерации необходимо создать новую резервную копию кошелька
       keypoolreset [new-size]
                                        обнулить пул предварительно сгенерённых адресов
                                        new-size – новый размер пула (по умолчанию 100)
                                        ВАЖНО: после регенерации необходимо создать новую резервную копию кошелька
       listaccounts [minconf=1]
                                        вывести все имена, зарегистрированные в клиенте
       listaddressgroupings
                                        вывести все адреса, сгруппированные по зарегистрированным именам
       listreceivedbyaccount [minconf=1] [includeempty=false]
                                        суммы полученных средств сгрупированные по используемым именам
       listreceivedbyaddress [minconf=1] [includeempty=false]
                                        суммы полученных средств сгрупированные по адресам
       listsinceblock [blockhash] [target-confirmations]
                                        вывести проведённые клиентом транзакции (начиная с указанного блока, если указан
                                           хэш блока)
       listtransactions [account] [count=10] [from=0]
                                        вывести проведённые клиентом транзакции, начиная с начала
                                        count – количество выводимых транзакций (по умолчанию 10)
                                        from – количество первых транзакций, которые пропустить (по умолчанию 0)
       listunspent [minconf=1] [maxconf=9999999]  ["address",...]
                                        вывести непотраченные транзакции
                                        maxconf – максимальное количество выводимых транзакций (по умолчанию 9999999)
                                        "address",... – адреса, по которым необходимо произвести отбор (по умолчанию все)
       makekeypair [prefix]
                                        сгенерировать пару публичного и приватного ключа
                                        prefix – предустановление префикса публичного ключа
       mergecoins <amount> <minvalue> <outputvalue>
                                        объединить ("склеить") выходы по заданным параметрам
                                        amount – объём обрабатываемых выходов
                                        minvalue – минимальный размер выхода, участвующий в объединении
                                        outputvalue – конечный размер выходов, который должен получиться после объединения
                                        ВАЖНО: все значения дробные и округляются до 0.0001
       move <fromaccount> <toaccount> <amount> [minconf=1] [comment]
                                        перенести средства с одного имени на другое
                                        fromaccount – откуда переносить
                                        toaccount – куда переносить
                                        amount – сколько переносить
       removeaddress 'address'
                                        удалить адрес из клиента
       repairwallet
                                        восстановить потерянные/неверно зарегистрированные/пропущенные данные в wallet.dat, после вызова
                                           команды необходим перезапуск
       resendtx
                                        повторно отправить неполученные сетью или невошедшие в блок транзакции
       reservebalance [<reserve> [amount]]
                                        указать сумму, которая не будет участвовать в PoS майнинге при его активности, что позволяет всегда
                                           иметь неблокируемые средства в клиенте для траты
                                        reserve – флаг, указывающий на включение (true) или выключение (false) функции блокировки
                                        amount – количество средств, подлежащие резервированию
       scaninput '{"txid":"txid", "vout":[vout1, vout2, ..., voutN], "difficulty":difficulty, "days":days}'
                                        метод, позволяющий спрогнозировать возможную генерацию блока выходом при указанных параметрах
                                        txid – хэш выхода, по которому делается прогноз
                                        vout1, ... voutN – массив номеров выходов в транзакции
                                           (один/единственный выход тоже заключается в квадратные скобки)
                                        difficulty – максимально возможная сложность при расчёте (по умолчанию текущая)
                                        days – временной интервал в днях (по умолчанию 90)
       sendalert <message> <privatekey> <minver> <maxver> <priority> <id> [cancelupto]
                                        отправка сообщения в сеть
       sendfrom <fromaccount> <tonovacoinaddress> <amount> [minconf=1] [comment] [comment-to]
                                        отправить средства с указанного имени (адреса выбираются клиентом) на адрес
                                        fromaccount – имя-идентификатор, откуда будут браться средства
                                        tonovacoinaddress – адрес получателя
                                        amount – отправляемая сумма
                                        ВАЖНО: значение суммы дробное и округляется до 0.0001
       sendmany <fromaccount> {address:amount,...} [minconf=1] [comment]
                                        отправить средства с указанного имени (адреса выбираются клиентом) на несколько адресов
                                        fromaccount – имя-идентификатор, откуда будут браться средства
                                        {address:amount,...} – перечисление адресов и сумм отправки
                                        ВАЖНО: значения сумм дробные двойной точности
       sendrawtransaction <hex string>
                                        отправить подготовленную RAW (HEX) транзакцию в сеть
       sendtoaddress <novacoinaddress> <amount> [comment] [comment-to]
                                        отправить средства (адреса выбираются клиентом) на указанный адрес
                                        tnovacoinaddress – адрес получателя
                                        amount – отправляемая сумма
                                        ВАЖНО: значение суммы дробное и округляется до 0.0001
       setaccount <novacoinaddress> <account>
                                        установить имя для адреса
       settxfee <amount>
                                        указать минимальную комиссию
                                        ВАЖНО: значение дробное и округляется до 0.001
       signmessage <novacoinaddress> <message>
                                        отправить сообщение на адрес
       signrawtransaction <hex string> [{"txid":txid,"vout":n,"scriptPubKey":hex,"redeemScript":hex},...] \
                         [<privatekey1>,...] [sighashtype="ALL"]
                                        подписать сгенерённую транзакцию
                                        ВАЖНО: необзательные аргументы могут быть использованы для создания транзакции для клиентов,
                                           находящися вне сети по известным их данным
       stop <detach>
                                        остановить работу клиента
                                        detach – флаг, указывающий что отсоединиться от базы данных (true/false)
       submitblock <hex data> [optional-params-obj]
                                        отправить сгенерённый блок в сеть
       validateaddress <novacoinaddress>
                                        проверить корректность адреса
       walletlock
                                        блокирует клиента (удаляет из памяти клиента пароль)
                                        ВАЖНО: для разблокировки необходимо повторно вызывать команду walletpassphrase
       walletpassphrase <passphrase> <timeout> [mintonly]
                                        разблокировать клиент для проведения действий без ввода пароля (сохраняет с памяти клиента
                                           пароль на время, указанное в timeout)
                                        passphrase – пароль
                                        timeout – время разблокировки, в секундах
                                        mintonly – флаг, указывающий на полную разблокировку клиента (false или отсутствие значения)
                                           или на разблокировку только для PoS-майнинга (true)
       walletpassphrasechange <oldpassphrase> <newpassphrase>
                                        поменять пароль блокировки клиента
                                        oldpassphrase – старый пароль
                                        newpassphrase – новый пароль
                                        ВАЖНО: после смены пароля разблокировку командой walletpassphrase необходимо выполнить заново
    
  • Обновление

    Обновление

    Процедура обновления вполне проста. Необходимо закрыть клиент и удалить все файлы из каталога файлов данных приложения, за исключением novacoin.conf и wallet.dat.

    Расположение файлов данных приложения:

    • ~/Library/Application Support/NovaCoin для Mac OS X
    • ~/.novacoin для других UNIX подобных систем
    • %UserProfile%\Application Data\NovaCoin для NT 5 (Win 2000/XP, Win Server 2003/2003R2, Win XP x64 Edition)
    • %UserProfile%\AppData\Roaming\NovaCoin для NT 6 и старше (Win Vista/7/8)

    После этого можно следовать инструкциям на странице Установки. Перед обновлением рекомендуется создать резервную копию файла wallet.dat.

  • Знакомимся с Novacoin-Qt GUI

    Знакомимся с графическим интерфейсом Novacoin-Qt

    Основной экран

    На первой вкладке представлена основная информация по состоянию клиента и базовый набор функций для работы с ним.

    Стартовая вкладка Novacoin-Qt

    Кроме того, в правом нижнем углу можно увидеть функциональное состояние клиента:

    • заблокирован он или разблокирован;
    • активность PoS-майнинга и его статистика;
    • наличие подключения к сети, количество используемых соединений с ней;
    • актуальность данных в соответствии с состоянием сети.

    Состояние клиента (активность) Novacoin-Qt

    Вкладка отправки позволяет создать транзакцию для перевода имеющихся средств на другой адрес. Секция выбора входов по-умолчанию отключена, но её можно активировать зайдя в меню НастройкиОпции...ОтображениеУправление входами

    Вкладка отправки в Novacoin-Qt

    Во вкладке получения отображаются адреса, которые созданы/добавлены пользователем вручную. Адреса "сдачи" не отображаются.

    Вкладка получения в Novacoin-Qt

    Следующая вкладка позволяет увидеть все транзакции, в которых участвовали адреса, отображённые на вкладке получения.

    Вкладка транзакций в Novacoin-Qt

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

    Вкладка вероятностных данных генерации CoinStake транзакции в Novacoin-Qt

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

    Адресная книга в Novacoin-Qt

    Основное меню

    Основное меню, первый пункт в Novacoin-Qt

    Основное меню, второй пункт в Novacoin-Qt

    Отдельные функциональные окна

    Выбрав ПомощьО NovaCoin появляется окно, в котором собрана основная информация о клиенте: его версия, информация о сборке, лицензионые права и ссылки на сторонее ПО, используемое в клиенте.

    Окно информации о клиенте Novacoin-Qt

    Также в меню Помощь есть Окно отладки, где в первой вкладке Информация представлено более полное описание как самого клиента и его состоянии в сети, так и информация об используемых компонентах.

    Первая вкладка окна отладки Novacoin-Qt

    Вкладка Консоль используется для вызова PRC-методов, доступных в клиенте, для получения необходимой дополнительной информации.

    Вторая вкладка (PRC консоль) окна отладки в Novacoin-Qt
  • Установка и настройка P2Pool

    Установка и настройка P2Pool

    P2Pool является децентрализованным пулом для совместной работы по генерации PoW блоков.

    Установка

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

    Linux:
    Исходный код находится на сайте https://github.com/novacoin-project/p2pool.
    Также, для работы кода потребуются следующие пакеты:

       python
       python-twisted (варианты названия: twisted, twisted-core)
       python-zope (python-zope.interface, zope-interface)
       python-argparse
    
    Затем необходимо собрать и установить модуль из каталога litecoin_scrypt, команда запуска:
    python setup.py install

    Windows:
    Готовая сборка для Windows: http://sourceforge.net/projects/novacoin/files/p2pool_win32_13.4-25-g6da08c4.zip.
    Достаточно просто распаковать в нужный каталог.

    Настройка

    Настройка клиента
    Параметры, указываемые в novacoin.conf, которые необходимы для доступа P2Pool'а к клиенту:

       rpcuser=<имя пользователя>
       rpcpassword=<пароль>
       server=1
       rpcallowip=<IP-адрес или подсеть откуда будет подключаться P2Pool>
          (данный параметр необходимо указывать если клиент и P2Pool находятся на разных компьютерах,
          по умолчанию клиент разрешает подключение только программам, работающим на том же компьютере)
    
    После изменения настроек запускаем/перезапускаем клиент.

    Запуск

    Заранее стоит оговориться, что указанный ниже метод запускает P2Pool с параметрами по умолчанию, т.е. с учетом того, что клиент находится на том же компьютере, порты доступа к клиенту не изменялись и P2Pool будет использовать порты, установленные у него по умолчанию.
    В других случаях необходимо сформировать строку запуска с дополнительныеми параметрами (описаны в данной статье ниже).

    Переходим в каталог P2Pool'а и запускаем:

    Linux:
       python run_p2pool.py
    
    или просто
       ./run_p2pool.py
    
    если у файла есть права на выполнение.

    Windows:
       run_p2pool.exe
    

    Использование

    В майнере указываем:

    • IP-адрес или DNS-имя машины, на которой установлен P2Pool
    • стандартный порт P2Pool'а 8336
    • имя пользователя — адрес куда зачислять награду
    • пароль пользователя — любое значение

    Параметр подключения такого вида (stratum поддерживается на равне с getwork):
    -o stratum+tcp://localhost:8336 -u 4<продолжение адреса> -p password
    

    Дополнительные параметры P2Pool'а

    При запуске клиента P2Pool'а с ключом --help на экран выводятся параметры, которыми можно изменить настройки клиента P2Pool'а по умолчанию:

    использование: run_p2pool.py  [-h] [--version] [--net {novacoin}] [--testnet] [--debug]
                                  [-a ADDRESS] [--datadir DATADIR] [--logfile LOGFILE]
                                  [--merged MERGED_URLS]
                                  [--give-author DONATION_PERCENTAGE] [--iocp]
                                  [--irc-announce] [--no-bugreport] [--p2pool-port PORT]
                                  [-n ADDR[:PORT]] [--disable-upnp] [--max-conns CONNS]
                                  [--outgoing-conns CONNS] [--disable-advertise]
                                  [-w PORT or ADDR:PORT] [-f FEE_PERCENTAGE]
                                  [--bitcoind-address BITCOIND_ADDRESS]
                                  [--bitcoind-rpc-port BITCOIND_RPC_PORT]
                                  [--bitcoind-rpc-ssl]
                                  [--bitcoind-p2p-port BITCOIND_P2P_PORT]
                                  [BITCOIND_RPCUSERPASS [BITCOIND_RPCUSERPASS ...]]
    
    дополнительные параметры:
      -h, --help            показать этот список параметров и закончить работу
      --version             показать версию программного обеспечения и закончить работу
      --net {novacoin}      использовать указанную сеть (по умолчанию: novacoin)
      --testnet             использовать тестовую сеть
      --debug               включить режим отладки
      -a ADDRESS, --address ADDRESS
                            использовать указанный адрес для начисления выплат
                            (по умолчанию: <адрес, зарегистрированный в клиенте>)
      --datadir DATADIR     сохранять рабочие данные в указанном каталоге
                            (по умолчанию: <каталог выполняемого скрипта run_p2pool.py>/data)
      --logfile LOGFILE     сохранять журнал работы в указанный файл
                            (по умолчанию: data/<наименование сети>/log)
      --merged MERGED_URLS  вызывать метод getauxblock для указанного пути для совместного решения задач
                            (пример: http://ncuser:ncpass@127.0.0.1:10332/)
      --give-author DONATION_PERCENTAGE
                            перечислять этот процент в помощь разработчику за разработку p2pool'а
                            (по умолчанию: 1.0)
      --iocp                использовать Windows IOCP API для того, чтобы избежать ошибок, связанных
                            с большим количеством открытых сокетов
      --irc-announce        извещать о найденных блоках на канале irc://irc.freenode.net/#p2pool
      --no-bugreport        отключить извещение разработчика о найденных проблемах
      --disable-upnp        не пытаться использовать UPnP для проброса порта P2Pool'а в глобальную сеть
      --disable-advertise   не рассылать локальный IP-адрес, как точку приёма входящих подключений
                            используется для создания непубличной (скрытой) ноды
                            используется совместно с -n ADDR's и --outgoing-conns 0
    
    p2pool интерфейс:
      --p2pool-port PORT    использовать указанный PORT для приёма входящих подключений
                            (этот порт необходимо пробросить через маршрутизатор во внешнюю сеть)
                            (по умолчанию: 8777)
      -n ADDR[:PORT], --p2pool-node ADDR[:PORT]
                            подключиться к сущестующей ноде p2pool'а по адресу ADDR на котором слушается
                            порт PORT (если порт не указан, то используется стандартный порт p2pool'а)
                            в дополнение к адресам, указанным по умолчанию
      --max-conns CONNS     максимальное количество принимаемых (входящих) подключений (по умолчанию: 40)
      --outgoing-conns CONNS
                            количество исходящих подключений (по умолчанию: 6)
    
    интерфейс подключения майнера:
      -w PORT or ADDR:PORT, --worker-port PORT or ADDR:PORT
                            слушать порт PORT на интерфейсе с адресом ADDR для RPC подключений майнеров
                            (по умолчанию: все интерфейсы, порт: 8336)
      -f FEE_PERCENTAGE, --fee FEE_PERCENTAGE
                            изменить комиссию, собираемую с майнеров в пользу владельца ноды (согласно
                            параметрам, установленным как адрес для начисления выплат по умолчанию)
                            данный процент используется только на текущей ноде
                            начисления можно увидеть по адресу http://127.0.0.1:WORKER_PORT/fee
                            (по умолчанию: 0)
    
    интерфейс клиента novacoin:
      --bitcoind-address BITCOIND_ADDRESS
                            подключаться с указанному адресу (по умолчанию: 127.0.0.1)
      --bitcoind-rpc-port BITCOIND_RPC_PORT
                            поключаться к интерфейсу JSON-RPC клиента на указанный порт
                            (по умолчанию: 8344 <пароль берётся из novacoin.conf если не указан
                            дополнительно>)
      --bitcoind-rpc-ssl    подключаться к интерфейсу JSON-RPC используя SSL
      --bitcoind-p2p-port BITCOIND_P2P_PORT
                            подключаться к P2P интерфейсу клиента на указанный порт
                            (по умолчанию: 7777 <пароль берётся из novacoin.conf если не указан
                            дополнительно>)
      BITCOIND_RPCUSERPASS  имя пользователя и пароль для подключения к RPC интерфейсу клиента, указываются
                            разделёнными пробелом (наличие только одного параметра будет означать, что имя
                            пользователя будет пустым, отсутствие параметров означает использование настроек
                            из novacoin.conf)
    

Связанные страницы

  • Ядро coinstake

    Ядро coinstake

    Структура ядра

    Ядро coinstake - это виртуальная структура, которая создается при попытке проверки блока Proof-of-Stake. Эта структура существует в базе данных и в памяти, но не в сети. Параметры ядра описаны в следующей таблице.

    FieldTypesizeofDescription
    nStakeModifierunsigned long int8Детерминированный модификатор, усложняет вычисления, чтобы затруднить вычисление будущих Proof-of-Stake во время подтверждения.
    nTimeBlockFromunsigned int4Время блока, предоставившего предыдущую транзакцию, предотвращает угадывание узлами удачного времени для генерации более выгодной транзакции в будущем.
    nTxPrevOffsetunsigned int4Номер предыдущей транзакции в блоке, используется для уменьшения вероятности одновременной генерации coinstake узлами.
    nTxPrevTimeunsigned int4Время предыдущей транзакции, используется для уменьшения вероятности одновременной генерации coinstake узлами.
    nPrevoutNumunsigned int4Число выходов предыдущей транзакции, используется для уменьшения вероятности одновременной генерации coinstake узлами.
    nTimeTxunsigned int4Текущее время
  • Заголовок блока

    Заголовок блока

    Заголовок блока - это структура метаданных, которая используется для соединения блоков в цепочку.

    Заголовок блока имеет размер 80 байтов и состоит из 6 полей:

    ПолеТипРазмерОписаниеКогда обновляется
    nVersionunsigned int4Версия заголовка блокаПри обновлении программного обеспечения
    hashPrevBlockunsigned char[]32Хеш заголовка предыдущего блока, используется для связи заголовков в списокНовый блок принят
    hashMerkleRootunsigned char[]32Merkle tree, используется для связи заголовка и содержимого блокаОбновлен пул транзакций
    nTimeunsigned int4Unix timestampКаждые несколько секунд для Proof-of-Work, каждую успешную попытку для Proof-of-Stake
    nBitsunsigned int4Компактное представление сложностиПри изменении сложности
    nNonceunsigned int4Количество попыток для Proof-of-WorkПри новой попытке хеширования Proof-of-Work, или никогда для Proof-of-Stake

    Каждый заголовок блока должен удовлетворять соответствующему доказательству.

  • CoinDayWeight

    CoinDayWeight

    Что это?

    Это аналогично coin age, но возраст вычисляется с 30-дневным смещением до предела в 90 дней.

    Пример для 1 единицы:

    Параметр0 дней10 дней15 дней30 дней60 дней90 дней120 дней200 дней
    CoinAge01015306090120200
    CoinDayWeight00003060909090

    Как это используется в Novacoin?

    CoinDayWeight является параметром целевого значения в системе Proof-of-Stake.
     nBlockTarget = CoinDayWeight * nNetworkTarget
    Хеш доказательства должен удовлетворять nBlockTarget, так что более высокое значение CoinDayWeight означает более высокую вероятность создания блока Proof-of-Stake.
  • CoinAge

    Coin Age

    Coin age связан с возрастом входов транзакций. Coin age равен произведению количества отправленных единиц и среднего возраста этих единиц. Возраст измеряется в днях. Возраст обнуляется всякий раз при отправке единиц И всякий раз, когда единица обеспечивает подпись. Coin age может использоваться для расчета обязательной комиссии, награды за блок или целевого значения.

    Novacoin использует потребленный coin age для расчета награды за Proof-of-Stake блок.
  • Словарь терминов

    Словарь терминов и определений

    NovaCoin (новакоин)
    наименование сети и одноименное наименование условной единицы этой сети
    Block (блок)
    структурированный набор данных, содержащий в себе:
    • дата/время создания блока;
    • информацию (хэш) о предыдущем блоке;
    • транзакции, принятые сетью, но не подборанные в предыдущие блоки;
    • другая служебная информация
    BlockChain (цепочка блоков)
    базовая информационная составляющая сети, фактически представляющая собой базу данных с реестром блоков и транзакций
    CENT
    дробная часть от условной единицы равная её одной сотой (0.01)
    CoinAge
    параметр, используемый с методе Proof-of-Stake для вычисления награды за решённый блок и равный произведению выхода транзакции на её возраст в днях
    CoinDayWeight
    параметр, используемый с методе Proof-of-Stake для расчёта целевого значения для решения блока, удовлетворяющего определённым параметрам текущих значений в сети
    Mining (майнинг, генерация блоков)
    процесс нахождения решения для создания блока цепочки, отвечающий определённым условиям (заданным параметрам) сети
    Proof-of-Stake (PoS)
    метод нахождения доказательства/решения блока, основанный на весе условных единиц сети CoinDayWeight
    Proof-of-Work (PoW)
    метод нахождения доказательства/решения блока, основанный на решении математической задачи
    ROI (Return On Investment)
    термин, используемый в основном в экономике и означающий получаемое вознаграждение на одну целую единицу в определённый период времени (обычно один год или 365 дней)
    Transaction (транзакция)
    операция, содержащая в себе данные, пересылаемые с одного адреса или группы адресов на другой (допустим и тот же) адрес или группу адресов и подписанная с помощью цифрового ключа отправителя (ключей отправителей) и может быть подтверждена или отвергнута только полностью