Станьте оператором ноды

Внимание: Команды для управления нодой все еще доводятся до стабильного состояния, поэтому в будущем могут измениться. Если вы обнаружили ошибки, не стесняйтесь исправлять их, открывайте запросы на исправление (pull request) в репозитории разработчиков Coda!

Итак, мы уже настроили нашу ноду Coda и отправили первую транзакцию, давайте рассмотрим другие способы взаимодействия с сетью Coda, а именно участие в консенсусе и помощь в сжатии данных путем создания zk-SNARKs. Управляя нодой, которая помогает защитить сеть, вы можете получить coda за ваши усилия.

Участие в консенсусе

Сеть Coda защищена алгоритмом консенсуса Proof-of-Stake (подтверждение доли). С этой моделью консенсуса вам не нужно иметь дорогое оборудование, как при майнинге биткойнов. Просто имея в своем кошельке coda (доля, необходимая для запуска ноды), мы можем либо держать запущенной свою ноду, либо делегировать долю другому узлу. Давайте сначала рассмотрим как запуcтить свою ноду:

Стейкинг coda

Так как мы уже имеем средства в нашем кошельке из предыдущего шага, мы можем запустить демон с флагом -propose-key, чтобы начать стейкинг coda. Давайте остановим наш текущий процесс демона и перезапустим его с помощью следующей команды, передавая путь к файлу для соответствующего закрытого ключа (по умолчанию ключи находятся в папке ~/.coda-config/wallets/store). Поскольку на предыдущем шаге мы сохранили его как переменную среды (CODA_PRIVATE_KEY_FILE), теперь мы можем запустить следующую команду:

coda daemon \
    -external-port 8302 \
    -discovery-port 8303 \
    -peer /dns4/seed-one.genesis-redux.o1test.net/tcp/10002/ipfs/12D3KooWP7fTKbyiUcYJGajQDpCFo2rDexgTHFJTxCH8jvcL1eAH \
    -peer /dns4/seed-two.genesis-redux.o1test.net/tcp/10002/ipfs/12D3KooWL9ywbiXNfMBqnUKHSB1Q1BaHFNUzppu6JLMVn9TTPFSA \
    -propose-key $CODA_PRIVATE_KEY_FILE

Примечание: Вы можете предоставить список файлов c ключами, для того чтобы включить стейкинг для нескольких кошельков одновременно.

Мы всегда можем проверить с каким кошельком в данный момент мы стейкаем, используя команду coda client status:

coda client status

Coda Daemon Status 
-----------------------------------

Global number of accounts:                     10045
Block height:                                  249
Max observed block length:                     249
Local Uptime:                                  36s
Ledger Merkle Root:                            ...
Staged-ledger Hash:                            ...
Staged Hash:                                   ...
GIT SHA1:                                      ...
Configuration Directory:                       ...
Peers:                                         ...
User_commands Sent:                            0
SNARK worker:                                  None
SNARK work fee:                                1
Sync Status:                                   Offline
Block producers running:                       Total: 1 (4vsRCVzBeSxp3iBQ1C3ahHyKjKVbPd93JLSAsqtRtmjB9Xhn29NBdnzT4o6Hb3iNwaFECrh18YsxhAkqMY8nZQrN8jRX5LfbB9h4p5csrRe8xza4VWToXnFaHtGx6gB9FKAr1eKebSiPyH5c)
Best tip consensus time:                       epoch=6, slot=88
Next proposal:                                 None this epoch…
Consensus time now:                            epoch=6, slot=93
Consensus Mechanism:                           proof_of_stake
...

Поле Block producers running показывает количество аккаунтов, занятых в процессе стейкинга и связанные с аккаунтом открытые ключи.

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

Делегирование coda

Делегирование coda это альтернатива самостоятельному стейкингу, с тем преимуществом, что вам уже не нужно постоянно оставаться подключенным к сети. Однако имейте в виду, что:

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

  • делегат, стейкающий для вас, может принять решение взимать с вас комиссию за предоставление этой услуги

Сначала убедитесь в том, что вы разблокировали ваш аккаунт:

coda account unlock -public-key $CODA_PUBLIC_KEY

Затем введите следующую команду, чтобы делегировать свою долю:

coda client delegate-stake \
  -delegate <delegate-public-key> \
  -privkey-path <file> \
  -fee <fee>

Вместо того чтобы запустить свою ноду и делегировать свою долю запустите команду:

coda client delegate-stake \
    -delegate <delegate-public-key> \
    -privkey-path <file> \
    -fee <fee>

Поля в этой команде означают следующее:

  • delegate - флаг которому нужно передать открытый ключ выбронного вами делегата
  • privkey-path - путь к файлу закрытого ключа, в котором хранятся средства, которые вы хотите делегировать
  • fee - комиссия, взимаемая за запись транзакции в блокчейн

Делегирование вашего стейка может быть полезна, если вы заинтересованы в:

  • Запуске собственной стейкинг ноды , которая использует средства из «холодного кошелька»
  • Делегирование в “staking пул”, который будет периодически выплачивать вам монеты coda

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

Сжатие данных в сети Coda

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

Однако это не кодирование или сжатие данных в традиционном смысле - скорее ноды “сжимают” данные в сети, генерируя криптографические доказательства. Операторы нод играют решающую роль в этом процессе, определяя себя как snark workers которые генерируют zk-SNARKs для транзакций, добавляемых в блоки.

Когда вы запускаете демон, задайте эти дополнительные аргументы, чтобы также запустить snark-worker:

coda daemon \
    -external-port 8302 \
    -discovery-port 8303 \
    -peer /dns4/seed-one.genesis-redux.o1test.net/tcp/10002/ipfs/12D3KooWP7fTKbyiUcYJGajQDpCFo2rDexgTHFJTxCH8jvcL1eAH \
    -peer /dns4/seed-two.genesis-redux.o1test.net/tcp/10002/ipfs/12D3KooWL9ywbiXNfMBqnUKHSB1Q1BaHFNUzppu6JLMVn9TTPFSA \
    -run-snark-worker $CODA_PK \
    -snark-worker-fee <fee>

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

Snark workers могут потребовать значительных вычислительных ресурсов, поэтому, если вам нужно ограничить их потребление процессорного времени, вы можете указать количество потоков, которые используют snark workers. Coda использует библиотеку OPENMP для поддержки параллельной обработки процессором SNARKs (снарков). Таким образом, каждый snark worker может быть настроен с помощью переменной среды OMP_NUM_THREADS, чтобы определить, сколько потоков будет задействовано. По умолчанию используется количество обнаруженных логических ядер. Демон также использует эту переменную, когда проверяет снарк блокчейна. Вы можете запустить export OMP_NUM_THREAD = 4, чтобы установить эту переменную среды перед тем, как запустить демон.

Это касается ролей и обязанностей оператора ноды coda. Поскольку Coda - это одноранговая сеть без прав доступа (все ноды равны), все децентрализованно управляется узлами по всему миру. В свою очередь проект Coda распространяется точно также. Исходный код проекта полностью открыт, и еще предстоит проделать огромную работу во всех направлениях. Чтобы узнать больше о том, как вы можете принять участие в Coda, пожалуйста, ознакомьтесь с разделом Содействие Coda.