mirror of
https://github.com/logos-storage/logos-storage-docs.git
synced 2026-01-02 13:23:07 +00:00
docs: add russian translations (#73)
Co-authored-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
This commit is contained in:
parent
f359fb9150
commit
e654a293e0
3
ru/codex/about.md
Normal file
3
ru/codex/about.md
Normal file
@ -0,0 +1,3 @@
|
||||
# О Codex
|
||||
|
||||
В процессе разработки :construction:
|
||||
5
ru/codex/disclaimer.md
Normal file
5
ru/codex/disclaimer.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Отказ от ответственности
|
||||
|
||||
Код и инструкции, предоставленные в этом репозитории и связанных репозиториях, предоставляются "как есть", без каких-либо гарантий, явных или подразумеваемых, включая, но не ограничиваясь, безопасностью, корректностью или производительностью предоставленного кода или инструкций. Мы не гарантируем, что код будет работать как задумано, и пользователи могут столкнуться с задержками, сбоями, ошибками, пропусками или потерей передаваемой информации при использовании или запуске Codex.
|
||||
|
||||
Запуск Codex осуществляется на ваш собственный риск. Таким образом, мы не несем ответственности и не обязаны возмещать любой ущерб, который может быть нанесен вашему оборудованию, программному обеспечению, данным или сети, или за любые потери, претензии, ущерб любого характера или другие обязательства, возникающие в связи с использованием предоставленного кода и инструкций.
|
||||
103
ru/codex/installer-disclaimer.md
Normal file
103
ru/codex/installer-disclaimer.md
Normal file
@ -0,0 +1,103 @@
|
||||
# Codex Testnet Privacy Policy
|
||||
|
||||
This Privacy Policy applies exclusively when you access the Codex testnet through the Command Line Interface (CLI) installer provided by us. It is designed to inform you about the personal data we collect and process, our approach to that collection and processing, and your rights when you participate in the Codex Testnet Programme using our CLI installer. For the avoidance of doubt, your participation in the Codex Testnet Programme is subject to the [Codex Testnet Terms and Conditions](https://docs.codex.storage/networks/testnet).
|
||||
|
||||
Before using the CLI installer to participate in the Codex Testnet Programme, please review this privacy policy carefully. By agreeing to use our CLI installer to participate in the Codex Testnet Programme, you acknowledge that this Privacy Policy is applicable to your use of the testnet through our provided CLI tool.
|
||||
|
||||
## Who We Are
|
||||
|
||||
For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is **IFT Studio Pte Ltd.**, a company duly organised and registered under the laws of Singapore, having its registered office at:
|
||||
|
||||
**160 Robinson Road, #24-09, Singapore 068914**
|
||||
|
||||
Whenever we refer to **“IFT”**, **“we”**, **“us”**, or any other similar references, we are referring to IFT Studio Pte Ltd.
|
||||
|
||||
## Data Collection and Processing
|
||||
|
||||
We limit the collection and processing of personal data from your participation in the Codex Testnet Programme. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable data protection law, and in this case, with your explicit consent.
|
||||
|
||||
We will not collect or process any personal data that we don’t need, and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose.
|
||||
|
||||
### Personal Data We Collect
|
||||
|
||||
We collect and process the following personal data as a result of your participation in the Codex Testnet Programme:
|
||||
|
||||
#### **Wallet Addresses**
|
||||
In order to provide you with Codex Testnet tokens and facilitate your participation in the Codex Testnet Programme, we may collect and process two types of blockchain addresses from you. This data processing is necessary for the performance of our contract with you to participate in the testnet.
|
||||
|
||||
The information we collect includes:
|
||||
|
||||
- **Codex testnet address** – Used to distribute Codex testnet tokens, allowing you to interact with the storage contracts and trigger “persistence mode” on the Codex testnet.
|
||||
- **Live L1/L2 Ethereum public address** – Used for potential future network-related distributions and community engagement initiatives.
|
||||
|
||||
These addresses are collected through our automated CLI installer or can be manually submitted via our Discord bot, depending on your method of installation. Your participation in the testnet and provision of these addresses constitutes your agreement to this data collection and processing.
|
||||
|
||||
You have the right to withdraw from the Codex testnet at any time, in which case we will cease processing this data.
|
||||
|
||||
#### **Node and Network Information**
|
||||
To improve the future functionality, performance, and security of Codex, we collect and process technical information from users participating in the Codex testnet. We rely on our **legitimate interest** as the legal basis for this data processing activity.
|
||||
|
||||
The information we collect includes:
|
||||
|
||||
- **Node ID**
|
||||
- **Peer ID**
|
||||
- **Public IP address**
|
||||
- **Codex node version**
|
||||
- **Number of connected peers**
|
||||
- **Discovery and listening ports**
|
||||
- **Discord Handle** (associated with your Node ID)
|
||||
|
||||
We will retain this data only for as long as strictly necessary to fulfill the purposes outlined above and in compliance with applicable privacy laws.
|
||||
|
||||
While we believe this data processing is necessary and proportionate to our legitimate interests, you may exercise your **right to object** or any other rights available to you as set out in this Privacy Policy and applicable data protection law.
|
||||
|
||||
> **Note:** Opting out may prevent you from being able to participate in the testnet.
|
||||
|
||||
We are committed to **data minimization** and **purpose limitation**. After the mainnet launch of Codex, all personal data collected during the testnet phase will be securely deleted.
|
||||
|
||||
## Third-Party Processing of Personal Data
|
||||
|
||||
In addition to our limited collection of personal data, **third parties may collect or process your personal data** as part of your participation in the Codex Testnet Programme, particularly when we use their services to facilitate your participation.
|
||||
|
||||
When you interact with these third parties, **their respective privacy policies will govern** the collection and use of your data. We encourage you to review these privacy policies to understand how your personal data may be handled by these third parties.
|
||||
|
||||
## Security Measures We Take
|
||||
|
||||
As a general approach, we take **data security** seriously and have implemented a variety of **security measures** to maintain the safety of your personal data when you submit such information to us.
|
||||
|
||||
## Exporting Personal Data Outside Singapore
|
||||
|
||||
We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data outside Singapore.
|
||||
|
||||
This means that personal data will only be processed in **countries or by parties that provide an adequate level of protection** comparable to the relevant data protection laws in Singapore. Otherwise, we will use **other forms of protections**, such as specific **contractual clauses**, to ensure such personal data is provided the same protection as required under such legislation.
|
||||
|
||||
In any event, the transmission of personal data outside Singapore will always occur in conformity with applicable data protection laws.
|
||||
|
||||
## Your Choices and Rights
|
||||
|
||||
As explained in this Privacy Policy, we **limit our collection and processing** of your personal data wherever possible. Nonetheless, you still have certain **choices and rights** regarding the personal data we do collect and process.
|
||||
|
||||
According to relevant privacy legislation, you have the right to:
|
||||
|
||||
- **Request corrections or updates** to your personal data (where reasonably possible).
|
||||
- **Request the removal** of your personal data from our systems.
|
||||
- **Request a copy** of your personal data, which may also be transferred to another data controller at your request.
|
||||
- **Withdraw your consent** to process your personal data (only if consent was asked for a processing activity). This only affects processing activities based on consent and does not affect the validity of such processing before withdrawal.
|
||||
- **Object to the processing** of your personal data.
|
||||
- **File a complaint** with the Personal Data Protection Committee of Singapore (PDPC) if you believe your personal data has been processed unlawfully.
|
||||
|
||||
## This Privacy Policy Might Change
|
||||
|
||||
We may modify or replace any part of this Privacy Policy **at any time and without notice**. Please check the Privacy Policy periodically for any changes.
|
||||
|
||||
> **Note:** The new Privacy Policy will be effective **immediately** upon posting.
|
||||
|
||||
## Contact Information
|
||||
|
||||
If you have any questions about the Privacy Policy, please contact us at:
|
||||
|
||||
📧 **legal@free.technology**
|
||||
|
||||
---
|
||||
|
||||
**This document is licensed under [CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/).**
|
||||
72
ru/codex/privacy-policy.md
Normal file
72
ru/codex/privacy-policy.md
Normal file
@ -0,0 +1,72 @@
|
||||
---
|
||||
lastUpdated: false
|
||||
---
|
||||
# Политика конфиденциальности
|
||||
|
||||
Последнее обновление: 9 февраля 2024 года
|
||||
|
||||
Настоящая Политика конфиденциальности предназначена для информирования пользователей о нашем подходе к конфиденциальности в отношении данного веб-сайта (**"Веб-сайт"**). В этом отношении, если вы посещаете наш Веб-сайт, настоящая Политика конфиденциальности применяется к вам.
|
||||
|
||||
### 1) Кто мы
|
||||
|
||||
Для целей настоящей Политики конфиденциальности и сбора и обработки персональных данных в качестве контролера соответствующей организацией является Logos Collective Association, которая имеет зарегистрированный офис в Цуге и юридический адрес:
|
||||
|
||||
```
|
||||
Logos Collective Association
|
||||
c/o PST Consulting GmbH
|
||||
Baarerstrasse 10
|
||||
6300 Zug
|
||||
Switzerland
|
||||
```
|
||||
|
||||
Всякий раз, когда мы ссылаемся на "Logos", "мы" или другие подобные ссылки, мы имеем в виду Logos Collective Association.
|
||||
|
||||
### 2) Мы ограничиваем сбор и обработку персональных данных при использовании вами Веб-сайта
|
||||
|
||||
Мы стремимся ограничить сбор и обработку персональных данных от пользователей Веб-сайта. Мы собираем и обрабатываем только определенные персональные данные для конкретных целей и только в тех случаях, когда у нас есть правовое основание для этого в соответствии с применимым законодательством о конфиденциальности. Мы не будем собирать или обрабатывать какие-либо персональные данные, которые нам не нужны, и там, где мы храним какие-либо персональные данные, мы будем хранить их только в течение минимального времени, необходимого для указанной цели.
|
||||
|
||||
В этом отношении мы собираем и обрабатываем следующие персональные данные при использовании вами Веб-сайта:
|
||||
|
||||
* **IP-адрес**: В рамках такого использования Веб-сайта мы кратковременно обрабатываем ваш IP-адрес, но у нас нет возможности идентифицировать вас. Однако у нас есть законный интерес в обработке таких IP-адресов для обеспечения технической функциональности и усиления мер безопасности Веб-сайта. Этот IP-адрес не хранится нами с течением времени.
|
||||
|
||||
### 3) Обработка персональных данных третьими сторонами
|
||||
|
||||
В дополнение к нашему ограниченному сбору персональных данных, третьи стороны могут собирать или обрабатывать персональные данные в результате использования Веб-сайтом определенных функций или для предоставления определенного контента. В той степени, в которой вы взаимодействуете с таким контентом или функциями третьих сторон, будут применяться их соответствующие политики конфиденциальности.
|
||||
|
||||
### 4) Меры безопасности, которые мы принимаем в отношении Веб-сайта
|
||||
|
||||
В качестве общего подхода мы серьезно относимся к безопасности данных и внедрили различные меры безопасности на Веб-сайте для поддержания безопасности ваших персональных данных, когда вы отправляете такую информацию нам.
|
||||
|
||||
### 5) Экспорт данных за пределы Европейского Союза и Швейцарии
|
||||
|
||||
Мы обязаны защищать конфиденциальность персональных данных, которые вы могли предоставить в маловероятном случае, если мы экспортируем ваши персональные данные в места за пределами Европейского Союза или Швейцарии. Это означает, что персональные данные будут обрабатываться только в странах или сторонами, которые обеспечивают адекватный уровень защиты, признанный Швейцарией или Европейской комиссией. В противном случае мы будем использовать другие формы защиты, такие как специальные формы договорных положений, чтобы обеспечить таким персональным данным такую же защиту, как требуется в Швейцарии или Европе. В любом случае передача персональных данных за пределы Европейского Союза и Швейцарии всегда будет происходить в соответствии с применимым законодательством о конфиденциальности.
|
||||
|
||||
### 6) Ваши выбор и права
|
||||
|
||||
Как объяснено в настоящей Политике конфиденциальности, мы ограничиваем сбор и обработку ваших персональных данных везде, где это возможно. Тем не менее, у вас все еще есть определенные выбор и права в отношении персональных данных, которые мы собираем и обрабатываем. Как изложено в соответствующем законодательстве о конфиденциальности, вы имеете право:
|
||||
|
||||
* Попросить нас исправить или обновить ваши персональные данные (где это разумно возможно);
|
||||
|
||||
* Попросить нас удалить ваши персональные данные из наших систем;
|
||||
|
||||
* Попросить нас предоставить копию ваших персональных данных, которая также может быть передана другому контролеру данных по вашему запросу;
|
||||
|
||||
* Отозвать свое согласие на обработку ваших персональных данных (только если согласие было запрошено для деятельности по обработке), что влияет только на действия по обработке, основанные на вашем согласии, и не влияет на действительность таких действий по обработке до того, как вы отозвали свое согласие;
|
||||
|
||||
* Возражать против обработки ваших персональных данных; и
|
||||
|
||||
* Подать жалобу в Федерального комиссара по защите данных и информации (FDPIC), если вы считаете, что ваши персональные данные были обработаны незаконно.
|
||||
|
||||
### 7) Ссылки на сторонние сайты
|
||||
|
||||
На этом Веб-сайте вы можете встретить ссылки на сторонние веб-сайты. У этих сторонних сайтов есть отдельные и независимые политики конфиденциальности. Поэтому мы не несем ответственности за содержание и деятельность этих сторонних веб-сайтов.
|
||||
|
||||
### 8) Настоящая Политика конфиденциальности может измениться
|
||||
|
||||
Мы можем изменить или заменить любую часть настоящей Политики конфиденциальности в любое время и без уведомления. Пожалуйста, периодически проверяйте Веб-сайт на наличие изменений. Новая Политика конфиденциальности вступает в силу немедленно после ее размещения на нашем Веб-сайте.
|
||||
|
||||
### 9) Контактная информация
|
||||
|
||||
Если у вас есть какие-либо вопросы о Политике конфиденциальности, пожалуйста, свяжитесь с нами по адресу <a href="mailto:legal@free.technology">legal@free.technology</a>.
|
||||
|
||||
Этот документ лицензирован под CC-BY-SA.
|
||||
7
ru/codex/security.md
Normal file
7
ru/codex/security.md
Normal file
@ -0,0 +1,7 @@
|
||||
# Безопасность
|
||||
|
||||
Мы серьезно относимся к безопасности в Codex и в <a href="https://free.technology/" target="_blank">Институте свободных технологий</a> и его филиалах.
|
||||
|
||||
Пожалуйста, сообщайте о любых инцидентах безопасности по адресу <a href="mailto:security@free.technology">security@free.technology</a>.
|
||||
|
||||
Пожалуйста, сообщайте о любых обнаруженных уязвимостях в нашей программе вознаграждений на <a href="https://hackenproof.com/ift" target="_blank">HackenProof</a>, чтобы помочь обеспечить безопасность наших протоколов и программного обеспечения.
|
||||
96
ru/codex/terms-of-use.md
Normal file
96
ru/codex/terms-of-use.md
Normal file
@ -0,0 +1,96 @@
|
||||
---
|
||||
lastUpdated: false
|
||||
---
|
||||
# Условия использования
|
||||
|
||||
Последнее обновление: 14 февраля 2024 года
|
||||
|
||||
Настоящие условия использования веб-сайта ("**Условия использования веб-сайта**") заключены между вами и нами и регулируют ваш доступ и использование данного веб-сайта, включая любой контент и функциональность, содержащиеся на веб-сайте.
|
||||
|
||||
Вы несете ответственность за тщательное ознакомление с Условиями использования веб-сайта перед использованием веб-сайта, и ваше использование веб-сайта означает ваше согласие соблюдать настоящие Условия использования веб-сайта.
|
||||
|
||||
Если вы не согласны с настоящими Условиями использования веб-сайта, вы не должны получать доступ к веб-сайту или использовать его.
|
||||
|
||||
### 1) Кто мы
|
||||
|
||||
Для целей настоящих Условий использования веб-сайта соответствующей организацией является Logos Collective Association, которая имеет зарегистрированный офис в Цуге и юридический адрес:
|
||||
|
||||
```
|
||||
Logos Collective Association
|
||||
c/o PST Consulting GmbH
|
||||
Baarerstrasse 10
|
||||
6300 Zug
|
||||
Switzerland
|
||||
```
|
||||
|
||||
Всякий раз, когда мы ссылаемся на "Logos", "мы", "нас" или любые другие подобные ссылки, мы имеем в виду Logos Collective Association.
|
||||
|
||||
### 2) Отказ от ответственности
|
||||
|
||||
Веб-сайт предоставляется нами на условиях "как есть", и вы используете веб-сайт на свой собственный риск.
|
||||
|
||||
Мы отказываемся от всех гарантий любого рода, явных или подразумеваемых, включая, помимо прочего, гарантии товарности, пригодности для определенной цели и ненарушения прав интеллектуальной собственности или других прав. Мы не гарантируем и не делаем никаких заявлений относительно полноты, точности, законности, полезности, надежности, пригодности или доступности использования веб-сайта, контента на этом веб-сайте или иным образом связанного с веб-сайтом, такого контента или любых сайтов, связанных с этим сайтом. Эти отказы от ответственности применяются в максимальной степени, разрешенной применимым законодательством.
|
||||
|
||||
Мы не заявляем, что веб-сайт или любой его контент доступен, соответствует законодательству или подходит в вашей юрисдикции. Ваш доступ или использование веб-сайта осуществляется на ваш собственный риск, и вы несете единоличную ответственность за соблюдение любых применимых местных законов.
|
||||
|
||||
Контент, содержащийся здесь или доступный через этот веб-сайт, предназначен только для информационных целей и не должен рассматриваться как создающий какие-либо ожидания или формирующий основу любого контракта, обязательства или обязательного обязательства с нами. Никакая информация здесь не должна рассматриваться как содержащая или на которую можно полагаться как на обещание, заявление, гарантию или гарантию, будь то явная или подразумеваемая, и будь то в отношении прошлого, настоящего или будущего в отношении проектов и вопросов, описанных здесь.
|
||||
|
||||
Информация, содержащаяся здесь, не является финансовой, юридической, налоговой или иной консультацией и не должна рассматриваться как таковая.
|
||||
|
||||
Ничто на этом веб-сайте не должно толковаться вами как предложение купить или продать, или призыв к предложению купить или продать какие-либо токены или ценные бумаги.
|
||||
|
||||
### 3) Прогнозные заявления
|
||||
|
||||
Веб-сайт также может содержать прогнозные заявления, основанные на текущих ожиданиях, оценках, прогнозах, предположениях и проекциях о технологии, отрасли и рынках в целом.
|
||||
|
||||
Прогнозные заявления, которые могут включать заявления о дорожной карте, описаниях проектов, технических деталях, функциональности, функциях, разработке и использовании токенов проектами, и любые другие заявления, связанные с такими вопросами или доступные через этот веб-сайт, подвержены высокой степени риска и неопределенности. Прогнозные заявления могут изменяться в зависимости от, среди прочего, рыночных условий, технических разработок и нормативной среды. Фактическая разработка и результаты, включая порядок и сроки, могут отличаться от представленных. Информация, содержащаяся здесь, является кратким изложением и не претендует на точность, надежность или полноту, и мы не несем ответственности за точность, надежность или полноту информации, содержащейся здесь. Из-за высокой степени риска и неопределенности, описанных выше, вы не должны чрезмерно полагаться на любые вопросы, описанные на этом веб-сайте или доступные через этот веб-сайт.
|
||||
|
||||
Хотя мы стремимся регулярно обновлять наш веб-сайт, вся информация, включая сроки и детали каждого этапа, может быть изменена и может быть изменена или дополнена в любое время без уведомления и по нашему собственному усмотрению.
|
||||
|
||||
### 4) Права интеллектуальной собственности
|
||||
|
||||
Веб-сайт и его содержимое доступны под лицензией Creative Commons Attribution 4.0 International (CC-BY 4.0). По сути, эта лицензия позволяет пользователям копировать, изменять и распространять контент в любом формате для любых целей, включая коммерческое использование, при условии соблюдения определенных требований, таких как указание авторства. Для полных условий этой лицензии, пожалуйста, обратитесь к следующему веб-сайту: https://creativecommons.org/licenses/by/4.0/.
|
||||
|
||||
### 5) Ссылки на сторонние веб-сайты
|
||||
|
||||
В той степени, в которой веб-сайт предоставляет какие-либо ссылки на сторонний веб-сайт, их условия и положения, включая политики конфиденциальности, регулируют ваше использование этих сторонних веб-сайтов. Ссылаясь на такие сторонние веб-сайты, Status не представляет и не подразумевает, что он поддерживает такие сторонние веб-сайты или контент на них, или что он считает такие сторонние веб-сайты и контент на них точными, полезными или безвредными. Мы не контролируем такие сторонние веб-сайты и не несем ответственности за ваше использование или действия на любых сторонних веб-сайтах, доступ к которым осуществляется через веб-сайт. Если вы получаете доступ к таким сторонним веб-сайтам через веб-сайт, это происходит на ваш собственный риск, и вы несете единоличную ответственность за свои действия на таких сторонних веб-сайтах.
|
||||
|
||||
### 6) Ограничение ответственности
|
||||
|
||||
Мы не несем ответственности перед вами по любому контракту, небрежности, строгой ответственности или любой другой правовой или справедливой теории за любые упущенные выгоды, стоимость приобретения замещающих услуг или любые специальные, случайные или косвенные убытки, связанные с, возникающие из или каким-либо образом связанные с настоящими Условиями использования веб-сайта, веб-сайтом, контентом на веб-сайте или вашим использованием веб-сайта, даже если мы были уведомлены о возможности таких убытков. В любом случае наша совокупная ответственность за такие претензии ограничена 100 евро (сто евро). Это ограничение ответственности применяется в максимальной степени, разрешенной применимым законодательством.
|
||||
|
||||
### 7) Возмещение убытков
|
||||
|
||||
Вы должны возместить нам убытки и защитить нас от любых и всех претензий, убытков и расходов, включая гонорары адвокатов, возникающих в связи с или связанных с вашим использованием веб-сайта, контентом на веб-сайте, включая, помимо прочего, ваше нарушение настоящих Условий использования веб-сайта.
|
||||
|
||||
### 8) Изменения
|
||||
|
||||
Мы можем изменить или заменить любую часть настоящих Условий использования веб-сайта в любое время и без уведомления. Вы несете ответственность за периодическую проверку веб-сайта на наличие изменений. Новые Условия использования веб-сайта вступают в силу немедленно после их размещения на веб-сайте.
|
||||
|
||||
### 9) Применимое право
|
||||
|
||||
Швейцарское право регулирует настоящие Условия использования веб-сайта и любые споры между вами и нами, будь то в суде или арбитраже, без учета положений о коллизии законов.
|
||||
|
||||
### 10) Споры
|
||||
|
||||
В этих условиях термин "спор" имеет самое широкое значение, допустимое законом, и включает любую претензию, которую вы предъявляете, или спор, который у вас может возникнуть в отношении настоящих Условий использования веб-сайта, веб-сайта, контента на веб-сайте или вашего использования веб-сайта.
|
||||
|
||||
Мы предпочитаем арбитраж судебному разбирательству, поскольку считаем, что он соответствует нашему принципу разрешения споров наиболее эффективным и экономически эффективным способом. Вы связаны следующим арбитражным положением, которое отказывает вам в праве на судебное разбирательство и на слушание судьей. Обратите внимание, что судебный пересмотр арбитражного решения ограничен. Вы также отказываетесь от всех своих прав на суд присяжных (если таковые имеются) во всех юрисдикциях.
|
||||
|
||||
Если возникает (потенциальный) спор, вы должны сначала использовать разумные усилия для его урегулирования с нами. Если эти усилия не приводят к разрешению такого спора, вы должны отправить нам письменное уведомление о споре, в котором указывается (i) характер спора и претензия, которую вы предъявляете; и (ii) средство правовой защиты, которое вы ищете.
|
||||
|
||||
Если мы и вы не сможем разрешить этот спор в течение шестидесяти (60) календарных дней с момента получения нами этого уведомления о споре, то любой такой спор будет передан и окончательно разрешен вами и нами через арбитраж, проводимый Швейцарским арбитражным институтом в соответствии с действующими Швейцарскими правилами международного арбитража, которые считаются включенными здесь посредством ссылки. Арбитражное решение может быть исполнено в любом суде. Арбитраж будет проводиться в Цуге, Швейцария, и может проводиться с помощью видеоконференции виртуальными/онлайн методами, если это возможно. Трибунал будет состоять из одного арбитра, и все разбирательства, а также переписка между сторонами будут конфиденциальными. Языком арбитража будет английский. Оплата всех соответствующих сборов в отношении арбитража, включая подачу, администрирование и гонорары арбитра, будет осуществляться в соответствии с Швейцарскими правилами международного арбитража.
|
||||
|
||||
Независимо от любого применимого срока исковой давности, вы должны предъявить любые претензии в течение одного года после возникновения претензии или времени, когда вы должны были разумно узнать о претензии. Вы также отказываетесь от права участвовать в коллективном иске или коллективном арбитраже против нас.
|
||||
|
||||
### 11) О настоящих Условиях использования веб-сайта
|
||||
|
||||
Настоящие Условия использования веб-сайта охватывают все соглашение между вами и нами в отношении веб-сайта и заменяют все предыдущие и современные договоренности, соглашения, заявления и гарантии, как письменные, так и устные, в отношении веб-сайта.
|
||||
|
||||
Заголовки и подзаголовки, идентифицирующие разделы и подразделы настоящих Условий использования веб-сайта, предназначены только для справки и не определяют, не изменяют, не расширяют, не ограничивают и не влияют на толкование каких-либо положений настоящих Условий использования веб-сайта.
|
||||
|
||||
Если какая-либо часть настоящих Условий использования веб-сайта признана недействительной или не имеющей исковой силы, эта часть будет отделима от настоящих Условий использования веб-сайта, а оставшиеся части останутся в полной силе и действии. Если мы не применяем какие-либо из настоящих Условий использования веб-сайта, это не означает, что мы отказались от нашего права применять их.
|
||||
|
||||
Если у вас есть какие-либо конкретные вопросы о настоящих Условиях использования веб-сайта, пожалуйста, свяжитесь с нами по адресу <a href="mailto:legal@free.technology">legal@free.technology</a>.
|
||||
|
||||
This document is licensed under CC-BY-SA.
|
||||
5
ru/developers/api.md
Normal file
5
ru/developers/api.md
Normal file
@ -0,0 +1,5 @@
|
||||
# API Codex
|
||||
|
||||
Codex использует REST API для взаимодействия с узлом, и мы можем использовать HTTP-клиент для взаимодействия и настройки.
|
||||
|
||||
Спецификация API доступна на [api.codex.storage](https://api.codex.storage) и генерируется на основе [openapi.yaml](https://github.com/codex-storage/nim-codex/blob/master/openapi.yaml). Мы также генерируем [Postman Collection](https://api.codex.storage/postman.json).
|
||||
33
ru/index.md
Normal file
33
ru/index.md
Normal file
@ -0,0 +1,33 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: Codex
|
||||
text: Decentralised data storage platform
|
||||
tagline: Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship.
|
||||
actions:
|
||||
- theme: brand
|
||||
text: What is Codex?
|
||||
link: /learn/what-is-codex
|
||||
- theme: alt
|
||||
text: Quick start
|
||||
link: /learn/quick-start
|
||||
- theme: alt
|
||||
text: Join Codex Testnet
|
||||
link: /networks/testnet
|
||||
|
||||
features:
|
||||
- title: Learn
|
||||
details: Get more information about Codex
|
||||
link: /learn/what-is-codex
|
||||
icon: 📚
|
||||
- title: Networks
|
||||
details: Participate in Codex network as a Storage operator or Buyer
|
||||
link: /networks/networks
|
||||
icon: 🚦
|
||||
- title: Developers
|
||||
details: Build and Codex and
|
||||
link: /developers/api
|
||||
icon: 🏗️
|
||||
---
|
||||
86
ru/learn/architecture.md
Normal file
86
ru/learn/architecture.md
Normal file
@ -0,0 +1,86 @@
|
||||
# Описание и архитектура
|
||||
|
||||
Codex создает надежный механизм хранения данных, который полностью децентрализован и обеспечивает устойчивость к коррупции и цензуре для web3-приложений. Он изначально защищает участников сети, предоставляя хостам правдоподобное отрицание ответственности за хранимые ими данные, а клиентам - доказуемые гарантии долговечности - до 99,99%, оставаясь при этом эффективным с точки зрения хранения и пропускной способности.
|
||||
|
||||
Эти четыре ключевые особенности объединяются, чтобы отличить Codex от существующих проектов в нише децентрализованного хранения:
|
||||
|
||||
- **Кодирование с исправлением ошибок:** Обеспечивает эффективную избыточность данных, что повышает гарантии долговечности данных.
|
||||
|
||||
- **Доказательство извлекаемости на основе ZK:** Для легких гарантий долговечности данных.
|
||||
|
||||
- **Механизм ленивого восстановления:** Для эффективного восстановления данных и предотвращения потерь.
|
||||
|
||||
- **Стимулирование:** Для поощрения рационального поведения, широкого участия в сети и эффективного предоставления ограниченных сетевых ресурсов.
|
||||
|
||||
### Стимулируемая децентрализация
|
||||
|
||||
Механизмы стимулирования - это один из ключевых элементов, отсутствующих в традиционных файлообменных сетях. Codex считает, что надежная структура стимулирования на основе рынка обеспечит широкое участие всех типов узлов, описанных ниже.
|
||||
|
||||
Разработка адекватной структуры стимулирования обусловлена следующими целями:
|
||||
|
||||
- Спрос и предложение для поощрения оптимального использования сетевых ресурсов.
|
||||
|
||||
- Увеличение участия путем предоставления узлам возможности использовать свои конкурентные преимущества для максимизации прибыли.
|
||||
|
||||
- Предотвращение спама и сдерживание вредоносного участия.
|
||||
|
||||
Хотя структура стимулирования Codex еще не окончательно определена, она будет включать рынок участников, желающих хранить данные, и тех, кто предоставляет хранилище, размещающих залог, причем последние будут делать ставки на открытые контракты на хранение. Эта структура направлена на обеспечение согласования стимулов участников, в результате чего Codex будет функционировать как задумано.
|
||||
|
||||
### Сетевая архитектура
|
||||
|
||||
Codex состоит из нескольких типов узлов, каждый из которых выполняет свою роль в работе сети. Аналогично, требования к оборудованию для каждого типа узла различаются, что позволяет участвовать тем, кто использует устройства с ограниченными ресурсами.
|
||||
|
||||
**Узлы хранения**
|
||||
|
||||
Как надежные поставщики долгосрочного хранения Codex, узлы хранения размещают залог на основе залога, размещенного на стороне запроса контрактов, и количества слотов, которые имеет контракт. Это связано с долговечностью, требуемой пользователем. Непредоставление периодических доказательств владения данными приводит к штрафам за сокращение.
|
||||
|
||||
**Узел-агрегатор**
|
||||
|
||||
Метод разгрузки кодирования с исправлением ошибок, генерации доказательств и агрегации доказательств клиентским узлом с низкими ресурсами, в настоящее время находится в разработке и будет частью следующего выпуска Codex во втором/четвертом квартале следующего года.
|
||||
|
||||
**Клиентские узлы**
|
||||
|
||||
Клиентские узлы делают запросы к другим узлам на хранение, поиск и извлечение данных. Большая часть сети Codex будет состоять из клиентских узлов, и эти участники могут одновременно выступать в качестве кэширующих узлов для компенсации стоимости потребляемых сетевых ресурсов.
|
||||
|
||||
Когда узел берет на себя обязательство по контракту на хранение и пользователь загружает данные, сеть будет активно проверять, что узел хранения находится в сети и что данные доступны для извлечения. Затем узлы хранения случайным образом опрашиваются для передачи доказательств владения данными в течение интервала, соответствующего продолжительности контракта и гарантии извлекаемости, которую предоставляет протокол.
|
||||
|
||||
Если узел хранения отправляет недействительные доказательства или не предоставляет их вовремя, сеть исключает узел хранения из слота, и слот станет доступным для первого узла, который сгенерирует действительное доказательство для этого слота.
|
||||
|
||||
Когда контракт перепубликуется, часть залога неисправного узла оплачивает комиссию за пропускную способность нового узла хранения. Кодирование с исправлением ошибок дополняет схему восстановления, позволяя восстанавливать отсутствующие фрагменты из данных в других слотах в рамках того же контракта на хранение, размещенного на безупречных узлах хранения.
|
||||
|
||||

|
||||
|
||||
### Архитектура рынка ###
|
||||
|
||||
Рынок состоит из смарт-контракта, развернутого в блокчейне, и модулей покупки и продажи, которые являются частью программного обеспечения узла. Модуль покупки отвечает за размещение запросов на хранение в смарт-контракте. Модуль продаж является его аналогом, который поставщики хранилищ используют для определения того, какие запросы на хранение их интересуют.
|
||||
|
||||
#### Смарт-контракт ####
|
||||
|
||||
Смарт-контракт облегчает сопоставление между поставщиками хранилищ и клиентами хранилищ. Клиент хранилища может запросить определенный объем хранилища на определенный срок. Этот запрос затем размещается в блокчейне, чтобы поставщики хранилищ могли его увидеть и решить, хотят ли они заполнить слот в запросе.
|
||||
|
||||
Основные параметры запроса на хранение:
|
||||
- количество байтов хранилища, которое запрашивается
|
||||
- идентификатор контента (CID) данных, которые должны быть сохранены
|
||||
- срок, на который должны быть сохранены данные
|
||||
- количество слотов (на основе параметров кодирования с исправлением ошибок)
|
||||
- количество токенов для оплаты хранения
|
||||
|
||||
На уровне протокола клиент хранилища свободен в определении этих параметров по своему усмотрению, чтобы он мог выбрать уровень долговечности, подходящий для данных, и скорректировать его с учетом изменяющихся цен на хранение. Приложения, построенные на Codex, могут предоставлять рекомендации своим пользователям по выбору правильных параметров, аналогично тому, как кошельки Ethereum помогают с определением комиссий за газ.
|
||||
|
||||
Смарт-контракт также проверяет, что поставщики хранилищ выполняют свои обещания. Поставщики хранилищ размещают залог, когда обещают заполнить слот запроса на хранение. От них ожидается предоставление периодических доказательств хранения в контракт, либо напрямую, либо через агрегатор. Если они неоднократно не делают этого, их залог может быть конфискован. Их слот затем присуждается другому поставщику хранилищ.
|
||||
|
||||
Смарт-контракт указывает, когда определенный поставщик хранилищ должен предоставить доказательство хранения. Это делается не с фиксированным интервалом времени, а определяется стохастически, чтобы гарантировать, что поставщик хранилищ не может предсказать, когда он должен предоставить следующее доказательство хранения.
|
||||
|
||||
#### Покупка ####
|
||||
|
||||
Модуль покупки в программном обеспечении узла взаимодействует со смарт-контрактом от имени оператора узла. Он размещает запросы на хранение и обрабатывает любые другие взаимодействия, которые требуются в течение срока действия запроса. Например, когда запрос отменяется из-за недостаточного количества заинтересованных поставщиков хранилищ, модуль покупки может вывести токены, связанные с запросом.
|
||||
|
||||
#### Продажи ####
|
||||
|
||||
Модуль продаж является аналогом модуля продаж. Он отслеживает смарт-контракт, чтобы получать уведомления о входящих запросах на хранение. Он ведет список наиболее перспективных запросов, которые он может выполнить. Он будет отдавать предпочтение тем запросам, которые имеют высокое вознаграждение и низкий залог. Как только он найдет подходящий запрос, он попытается сначала зарезервировать, а затем заполнить слот, загрузив связанные данные, создав доказательство хранения и разместив его в смарт-контракте. Затем он продолжит отслеживать смарт-контракт, чтобы предоставлять ему доказательства хранения, когда они потребуются.
|
||||
|
||||
Модуль продаж содержит стратегию максимальных усилий для определения того, какие запросы на хранение его интересуют. Со временем мы ожидаем появления более специализированных стратегий для удовлетворения потребностей, например, крупных поставщиков по сравнению с поставщиками, которые запускают узел из дома.
|
||||
|
||||
### Белая книга ###
|
||||
|
||||
Прочитайте [белую книгу Codex](/learn/whitepaper)
|
||||
238
ru/learn/build.md
Normal file
238
ru/learn/build.md
Normal file
@ -0,0 +1,238 @@
|
||||
# Сборка Codex
|
||||
|
||||
## Содержание
|
||||
|
||||
- [Установка инструментов разработчика](#prerequisites)
|
||||
- [Linux](#linux)
|
||||
- [macOS](#macos)
|
||||
- [Windows + MSYS2](#windows-msys2)
|
||||
- [Другие](#other)
|
||||
- [Клонирование и подготовка Git-репозитория](#repository)
|
||||
- [Сборка исполняемого файла](#executable)
|
||||
- [Запуск примера](#example-usage)
|
||||
|
||||
**Дополнительно**
|
||||
- [Запуск тестов](#tests)
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
Для сборки nim-codex необходимо установить и сделать доступными инструменты разработчика в операционной системе.
|
||||
|
||||
Инструкции ниже примерно соответствуют настройкам окружения в [CI workflow](https://github.com/codex-storage/nim-codex/blob/master/.github/workflows/ci.yml) nim-codex и известны как рабочие.
|
||||
|
||||
Другие подходы могут быть жизнеспособны. На macOS некоторые пользователи могут предпочесть [MacPorts](https://www.macports.org/) вместо [Homebrew](https://brew.sh/). На Windows вместо MSYS2 некоторые пользователи могут предпочесть установку инструментов разработчика с помощью [winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/), [Scoop](https://scoop.sh/) или [Chocolatey](https://chocolatey.org/), или загрузку установщиков для, например, Make и CMake, в остальном полагаясь на официальные инструменты разработчика Windows. Приветствуются вклады сообщества в эти документы и нашу систему сборки!
|
||||
|
||||
### Rust
|
||||
|
||||
Текущая реализация схемы доказательств с нулевым разглашением Codex требует установки Rust версии 1.79.0 или выше. Убедитесь, что вы установили его для вашей ОС и добавили в PATH вашего терминала так, чтобы команда `cargo --version` показывала совместимую версию.
|
||||
|
||||
### Linux
|
||||
|
||||
> [!WARNING]
|
||||
> Сборка в Linux в настоящее время требует gcc $\leq$ 13. Если это не вариант в вашей системе, вы можете попробовать [сборку в Docker](#building-within-docker) как обходной путь.
|
||||
|
||||
*Команды менеджера пакетов могут требовать `sudo` в зависимости от настройки ОС.*
|
||||
|
||||
На базовой установке Debian (или дистрибутива, производного от Debian, такого как Ubuntu), выполните
|
||||
|
||||
```shell
|
||||
apt-get update && apt-get install build-essential cmake curl git rustc cargo
|
||||
```
|
||||
|
||||
Не-Debian дистрибутивы имеют разные менеджеры пакетов: `apk`, `dnf`, `pacman`, `rpm`, `yum` и т.д.
|
||||
|
||||
Например, на базовой установке Fedora выполните
|
||||
|
||||
```shell
|
||||
dnf install @development-tools cmake gcc-c++ rust cargo
|
||||
```
|
||||
|
||||
В случае, если ваш дистрибутив не предоставляет требуемую версию Rust, мы можем установить её с помощью [rustup](https://www.rust-lang.org/tools/install)
|
||||
```shell
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain=1.79.0 -y
|
||||
|
||||
. "$HOME/.cargo/env"
|
||||
```
|
||||
|
||||
Обратите внимание, что в настоящее время вы не сможете собрать Codex с gcc 14. Чтобы проверить, что у вас поддерживаемая версия, выполните:
|
||||
|
||||
```shell
|
||||
gcc --version
|
||||
```
|
||||
|
||||
Если вы получите число, начинающееся с 14 (например, `14.2.0`), то вам нужно либо понизить версию, либо попробовать обходной путь, например [сборку в Docker](#building-within-docker).
|
||||
|
||||
### macOS
|
||||
|
||||
Установите [Xcode Command Line Tools](https://mac.install.guide/commandlinetools/index.html), открыв терминал и выполнив
|
||||
```shell
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
Установите [Homebrew (`brew`)](https://brew.sh/) и в новом терминале выполните
|
||||
```shell
|
||||
brew install bash cmake rust
|
||||
```
|
||||
|
||||
Проверьте, что `PATH` настроен правильно
|
||||
```shell
|
||||
which bash cmake
|
||||
|
||||
# /usr/local/bin/bash
|
||||
# /usr/local/bin/cmake
|
||||
```
|
||||
|
||||
### Windows + MSYS2
|
||||
|
||||
*Инструкции ниже предполагают, что ОС - 64-битная Windows и что оборудование или ВМ совместимо с [x86-64](https://en.wikipedia.org/wiki/X86-64).*
|
||||
|
||||
Скачайте и запустите установщик с [msys2.org](https://www.msys2.org/).
|
||||
|
||||
Запустите среду MSYS2 [environment](https://www.msys2.org/docs/environments/). UCRT64 обычно рекомендуется: из меню *Пуск* Windows выберите `MSYS2 MinGW UCRT x64`.
|
||||
|
||||
Предполагая среду UCRT64, в Bash выполните
|
||||
```shell
|
||||
pacman -Suy
|
||||
pacman -S base-devel git unzip mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-rust
|
||||
```
|
||||
|
||||
Нам следует понизить GCC до версии 13 [^gcc-14]
|
||||
```shell
|
||||
pacman -U --noconfirm \
|
||||
https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-13.2.0-6-any.pkg.tar.zst \
|
||||
https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-libs-13.2.0-6-any.pkg.tar.zst
|
||||
```
|
||||
|
||||
#### Опционально: Интеграция с терминалом VSCode
|
||||
|
||||
Вы можете связать терминал MSYS2-UCRT64 с VSCode, изменив файл конфигурации, как показано ниже.
|
||||
Файл: `C:/Users/<username>/AppData/Roaming/Code/User/settings.json`
|
||||
```json
|
||||
{
|
||||
...
|
||||
"terminal.integrated.profiles.windows": {
|
||||
...
|
||||
"MSYS2-UCRT64": {
|
||||
"path": "C:\\msys64\\usr\\bin\\bash.exe",
|
||||
"args": [
|
||||
"--login",
|
||||
"-i"
|
||||
],
|
||||
"env": {
|
||||
"MSYSTEM": "UCRT64",
|
||||
"CHERE_INVOKING": "1",
|
||||
"MSYS2_PATH_TYPE": "inherit"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Другие
|
||||
|
||||
Возможно, что nim-codex может быть собран и запущен на других платформах, поддерживаемых языком [Nim](https://nim-lang.org/): семейство BSD, более старые версии Windows и т.д. Не было достаточного экспериментирования с nim-codex на таких платформах, поэтому инструкции не предоставляются. Приветствуются вклады сообщества в эти документы и нашу систему сборки!
|
||||
|
||||
## Репозиторий
|
||||
|
||||
В Bash выполните
|
||||
```shell
|
||||
git clone https://github.com/codex-storage/nim-codex.git repos/nim-codex && cd repos/nim-codex
|
||||
```
|
||||
|
||||
nim-codex использует [nimbus-build-system](https://github.com/status-im/nimbus-build-system), поэтому затем выполните
|
||||
```shell
|
||||
make update
|
||||
```
|
||||
|
||||
Этот шаг может занять некоторое время для завершения, потому что по умолчанию он собирает [компилятор Nim](https://nim-lang.org/docs/nimc.html).
|
||||
|
||||
Чтобы увидеть больше вывода от `make`, передайте `V=1`. Это работает для всех целей `make` в проектах, использующих nimbus-build-system
|
||||
```shell
|
||||
make V=1 update
|
||||
```
|
||||
|
||||
## Исполняемый файл
|
||||
|
||||
В Bash выполните
|
||||
```shell
|
||||
make
|
||||
```
|
||||
|
||||
Цель `make` по умолчанию создает исполняемый файл `build/codex`.
|
||||
|
||||
## Инструменты
|
||||
|
||||
### Инструмент загрузки схемы
|
||||
|
||||
Чтобы собрать инструмент загрузки схемы, расположенный в `tools/cirdl`, выполните:
|
||||
|
||||
```shell
|
||||
make cirdl
|
||||
```
|
||||
|
||||
## Пример использования
|
||||
|
||||
См. инструкции в [Быстром старте](/learn/quick-start).
|
||||
|
||||
## Тесты
|
||||
|
||||
В Bash выполните
|
||||
```shell
|
||||
make test
|
||||
```
|
||||
|
||||
### testAll
|
||||
|
||||
#### Предварительные требования
|
||||
|
||||
Для запуска интеграционных тестов требуется тестовый узел Ethereum. Следуйте этим инструкциям для его настройки.
|
||||
|
||||
##### Windows (сделайте это перед "Все платформы")
|
||||
|
||||
1. Скачайте и установите Visual Studio 2017 или новее. (Не VSCode!) В обзоре рабочих нагрузок включите `Desktop development with C++`. ( https://visualstudio.microsoft.com )
|
||||
|
||||
##### Все платформы
|
||||
|
||||
1. Установите NodeJS (проверено с v18.14.0), рассмотрите использование NVM как менеджера версий. [Node Version Manager (`nvm`)](https://github.com/nvm-sh/nvm#readme)
|
||||
1. Откройте терминал
|
||||
1. Перейдите в папку vendor/codex-contracts-eth: `cd /<git-root>/vendor/codex-contracts-eth/`
|
||||
1. `npm install` -> Должно завершиться с количеством добавленных пакетов и обзором известных уязвимостей.
|
||||
1. `npm test` -> Должен вывести результаты тестов. Может занять минуту.
|
||||
|
||||
Перед запуском интеграционных тестов вы должны вручную запустить тестовый узел Ethereum.
|
||||
1. Откройте терминал
|
||||
1. Перейдите в папку vendor/codex-contracts-eth: `cd /<git-root>/vendor/codex-contracts-eth/`
|
||||
1. `npm start` -> Это должно запустить Hardhat и вывести ряд ключей и предупреждающее сообщение.
|
||||
|
||||
#### Запуск
|
||||
|
||||
Цель `testAll` запускает те же тесты, что и `make test`, а также запускает тесты для контрактов Ethereum nim-codex, а также базовый набор интеграционных тестов.
|
||||
|
||||
Чтобы запустить `make testAll`.
|
||||
|
||||
Используйте новый терминал для запуска:
|
||||
```shell
|
||||
make testAll
|
||||
```
|
||||
|
||||
## Сборка в Docker
|
||||
|
||||
Для конкретного случая дистрибутивов Linux, которые поставляются с gcc 14
|
||||
и понижение до 13 невозможно/нежелательно, сборка в контейнере Docker
|
||||
и извлечение бинарных файлов путем копирования или монтирования остается
|
||||
вариантом; например:
|
||||
|
||||
```bash=
|
||||
# Клонировать оригинальный репозиторий.
|
||||
git clone https://github.com/codex-storage/nim-codex
|
||||
|
||||
# Собрать внутри docker
|
||||
docker build -t codexstorage/nim-codex:latest -f nim-codex/docker/codex.Dockerfile nim-codex
|
||||
|
||||
# Извлечь исполняемый файл
|
||||
docker create --name=codex-build codexstorage/nim-codex:latest
|
||||
docker cp codex-build:/usr/local/bin/codex ./codex
|
||||
docker cp codex-build:/usr/local/bin/cirdl ./cirdl
|
||||
```
|
||||
|
||||
и вуаля, у вас должны быть бинарные файлы доступны в текущей папке.
|
||||
67
ru/learn/download-flow.md
Normal file
67
ru/learn/download-flow.md
Normal file
@ -0,0 +1,67 @@
|
||||
# Процесс загрузки
|
||||
Последовательность взаимодействий, приводящих к передаче блоков данных через сеть.
|
||||
|
||||
## Локальное хранилище
|
||||
Когда данные доступны в локальном хранилище блоков,
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
actor Alice
|
||||
participant API
|
||||
Alice->>API: Download(CID)
|
||||
API->>+Node/StoreStream: Retrieve(CID)
|
||||
loop Get manifest block, then data blocks
|
||||
Node/StoreStream->>NetworkStore: GetBlock(CID)
|
||||
NetworkStore->>LocalStore: GetBlock(CID)
|
||||
LocalStore->>NetworkStore: Block
|
||||
NetworkStore->>Node/StoreStream: Block
|
||||
end
|
||||
Node/StoreStream->>Node/StoreStream: Handle erasure coding
|
||||
Node/StoreStream->>-API: Data stream
|
||||
API->>Alice: Stream download of block
|
||||
```
|
||||
|
||||
## Сетевое хранилище
|
||||
Когда данные не найдены в локальном хранилище блоков, используется механизм обмена блоками для обнаружения местоположения блока в сети. Устанавливается соединение с узлом(ами), у которых есть блок, и происходит обмен.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
box
|
||||
actor Alice
|
||||
participant API
|
||||
participant Node/StoreStream
|
||||
participant NetworkStore
|
||||
participant Discovery
|
||||
participant Engine
|
||||
end
|
||||
box
|
||||
participant OtherNode
|
||||
end
|
||||
Alice->>API: Download(CID)
|
||||
API->>+Node/StoreStream: Retrieve(CID)
|
||||
Node/StoreStream->>-API: Data stream
|
||||
API->>Alice: Download stream begins
|
||||
loop Get manifest block, then data blocks
|
||||
Node/StoreStream->>NetworkStore: GetBlock(CID)
|
||||
NetworkStore->>Engine: RequestBlock(CID)
|
||||
opt CID not known
|
||||
Engine->>Discovery: Discovery Block
|
||||
Discovery->>Discovery: Locates peers who provide block
|
||||
Discovery->>Engine: Peers
|
||||
Engine->>Engine: Update peers admin
|
||||
end
|
||||
Engine->>Engine: Select optimal peer
|
||||
Engine->>OtherNode: Send WantHave list
|
||||
OtherNode->>Engine: Send BlockPresence
|
||||
Engine->>Engine: Update peers admin
|
||||
Engine->>Engine: Decide to buy block
|
||||
Engine->>OtherNode: Send WantBlock list
|
||||
OtherNode->>Engine: Send Block
|
||||
Engine->>NetworkStore: Block
|
||||
NetworkStore->>NetworkStore: Add to Local store
|
||||
NetworkStore->>Node/StoreStream: Resolve Block
|
||||
Node/StoreStream->>Node/StoreStream: Handle erasure coding
|
||||
Node/StoreStream->>API: Push data to stream
|
||||
end
|
||||
API->>Alice: Download stream finishes
|
||||
```
|
||||
48
ru/learn/installer/install-and-run.md
Normal file
48
ru/learn/installer/install-and-run.md
Normal file
@ -0,0 +1,48 @@
|
||||
# Быстрый старт
|
||||
|
||||
Codex Installer - это инструмент командной строки, который упрощает процесс настройки узла Codex. Он обрабатывает все необходимые шаги для быстрого и эффективного запуска вашего узла.
|
||||
|
||||
> Прежде чем мы начнем, пожалуйста, просмотрите и примите [отказ от ответственности](/codex/installer-disclaimer), так как Codex Installer собирает некоторую информацию о вашем узле для улучшения пользовательского опыта.
|
||||
|
||||
<br/>
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/CcFtQzmzGSg?si=wUHfIgGWggIcyzqT" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||
|
||||
## Требования
|
||||
|
||||
- git
|
||||
- npm
|
||||
|
||||
## Запуск Codex Installer
|
||||
|
||||
Чтобы запустить Codex Installer, просто выполните следующую команду в вашем терминале:
|
||||
|
||||
```bash
|
||||
npx codexstorage
|
||||
```
|
||||
|
||||
## Скачивание и установка Codex
|
||||
|
||||
После выполнения вышеуказанной команды вы увидите интерфейс командной строки с различными опциями, как показано ниже:
|
||||
|
||||

|
||||
|
||||
При выборе опции `Download and install Codex` вам будет предложено согласиться с отказом от ответственности за конфиденциальность и указать путь установки для завершения установки. Если вы не хотите соглашаться с отказом от ответственности за сбор данных, вы можете выбрать опцию `Exit` и следовать инструкциям [Ручной настройки](/learn/quick-start.md) для установки Codex без использования Installer.
|
||||
|
||||
## Запуск узла Codex
|
||||
|
||||
При выборе опции `Run Codex node` вам будет предложено указать порт прослушивания (по умолчанию 8070) и порт обнаружения (по умолчанию 8090). Вы можете дополнительно указать ваш публичный адрес ERC20 для привязки вашего тестового узла к вашему кошельку (Обратите внимание, что Codex пока не обещает никаких стимулов за запуск узла).
|
||||
|
||||

|
||||
|
||||
Держите это окно терминала открытым, так как его закрытие приведет к завершению работы вашего узла.
|
||||
|
||||
## Получение роли *ALTRUISTIC MODE* в Discord Codex
|
||||
|
||||
После этого ваш узел Codex должен быть запущен и работать. Вы можете проверить информацию и статус вашего узла, выбрав третью опцию.
|
||||
|
||||

|
||||
|
||||
Чтобы получить роль *ALTRUISTIC MODE*, присоединитесь к [Discord Codex](https://discord.gg/codex-storage) и перейдите в канал #bot. Выполните команду `/node <NODE_ID>`, где `<NODE_ID>` можно найти в меню Node Information в вашем Installer.
|
||||
|
||||
Чтобы сохранить свою роль, вам потребуется часто взаимодействовать с тестовой сетью Codex, запуская свой узел и/или [загружая/скачивая файлы](/learn/installer/upload-and-download.md) с использованием тестовой сети.
|
||||
23
ru/learn/installer/requirements.md
Normal file
23
ru/learn/installer/requirements.md
Normal file
@ -0,0 +1,23 @@
|
||||
# Требования
|
||||
|
||||
> **Примечание:** Использование установщика Codex рекомендуется только в том случае, если вы согласны предоставить информацию о вашем узле для улучшения работы Codex. Если вы не согласны с отказом от ответственности, пожалуйста, рассмотрите возможность [ручной настройки Codex](/learn/quick-start.md)
|
||||
|
||||
<br />
|
||||
|
||||
Чтобы обеспечить бесперебойную работу вашего узла Codex, необходимо убедиться, что ваша машина соответствует следующим требованиям:
|
||||
|
||||
## Зависимости
|
||||
|
||||
- git
|
||||
- npm
|
||||
|
||||
## Проброс портов
|
||||
|
||||
Для правильной работы Codex требуется, чтобы на вашей машине были открыты два порта. Обратите внимание, что **порты, указанные ниже, настраиваются** в соответствии с вашими предпочтениями:
|
||||
|
||||
| Протокол | Сервис | Порт |
|
||||
| -------- | ---------- | ------ |
|
||||
| UDP | Discovery | По умолчанию: `8090` |
|
||||
| TCP | Transport | По умолчанию: `8070` |
|
||||
|
||||
Если вы не знакомы с пробросом портов, вы можете следовать инструкциям [здесь](https://www.noip.com/support/knowledgebase/general-port-forwarding-guide/).
|
||||
27
ru/learn/installer/upload-and-download.md
Normal file
27
ru/learn/installer/upload-and-download.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Загрузка/Скачивание файлов в тестовой сети
|
||||
|
||||
Вы можете загружать или скачивать файлы, используя опцию Upload / Download в Codex Installer или с помощью приложения Codex GUI (рекомендуется).
|
||||
|
||||
## Codex Vault
|
||||
|
||||
Codex Vault - это веб-приложение с графическим интерфейсом, которое помогает вам взаимодействовать с тестовой сетью Codex путем загрузки и скачивания файлов. После запуска вашего узла Codex с помощью установщика, вы можете получить доступ к Codex Vault, перейдя по адресу https://app.codex.storage
|
||||
|
||||

|
||||
|
||||
Убедитесь, что все необходимые условия отмечены в разделе 'health check' перед попыткой загрузки или скачивания файлов.
|
||||
|
||||
### Загрузка и скачивание файлов
|
||||
|
||||
Чтобы загрузить файл, вы можете либо перетащить файл в область загрузки, либо нажать кнопку 'upload'. После загрузки вы сможете найти уникальный CID для файла.
|
||||
|
||||
Чтобы скачать файл, введите CID файла в разделе 'download' и нажмите кнопку 'download'.
|
||||
|
||||

|
||||
|
||||
## Что дальше?
|
||||
|
||||
Теперь, когда вы знаете, как загружать и скачивать файлы в тестовой сети, вы можете попробовать изучить некоторые экспериментальные функции и создать свои собственные приложения на основе Codex:
|
||||
|
||||
- [Использование REST API Codex](/learn/using)
|
||||
- [Запуск Codex с поддержкой локального маркетплейса](/learn/local-marketplace)
|
||||
- [Создание приложений с использованием библиотеки codex-js](https://github.com/codex-storage/codex-js)
|
||||
662
ru/learn/local-marketplace.md
Normal file
662
ru/learn/local-marketplace.md
Normal file
@ -0,0 +1,662 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
---
|
||||
# Запуск локальной сети Codex с поддержкой маркетплейса
|
||||
|
||||
Это руководство научит вас, как запустить небольшую сеть Codex с включенным
|
||||
_маркетплейсом хранения_; т.е. функциональностью в Codex, которая
|
||||
позволяет участникам предлагать и покупать хранилище на рынке, обеспечивая
|
||||
честное выполнение обязательств поставщиками хранилища с помощью криптографических доказательств.
|
||||
|
||||
В этом руководстве вы:
|
||||
|
||||
1. [Настроите сеть Geth PoA](#_1-set-up-a-geth-poa-network);
|
||||
2. [Настроите маркетплейс](#_2-set-up-the-marketplace);
|
||||
3. [Запустите Codex](#_3-run-codex);
|
||||
4. [Купите и продайте хранилище на маркетплейсе](#_4-buy-and-sell-storage-on-the-marketplace).
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
Для прохождения этого руководства вам понадобится:
|
||||
|
||||
* клиент Ethereum [geth](https://github.com/ethereum/go-ethereum);
|
||||
Вам нужна версия `1.13.x` geth, так как более новые версии больше не поддерживают
|
||||
Proof of Authority (PoA). Это руководство было протестировано с версией geth `1.13.15`.
|
||||
* бинарный файл Codex, который [можно собрать из исходного кода](https://github.com/codex-storage/nim-codex?tab=readme-ov-file#build-and-run).
|
||||
|
||||
Мы также будем использовать синтаксис [bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell))
|
||||
на протяжении всего руководства. Если вы используете другую оболочку, вам может потребоваться адаптировать
|
||||
команды под вашу платформу.
|
||||
|
||||
Для начала создайте новую папку, где мы будем хранить файлы, связанные с руководством,
|
||||
чтобы держать их отдельно от репозитория codex.
|
||||
Предположим, что имя папки будет `marketplace-tutorial`.
|
||||
|
||||
## 1. Настройка сети Geth PoA
|
||||
|
||||
Для этого руководства мы будем использовать простую
|
||||
[Proof-of-Authority](https://github.com/ethereum/EIPs/issues/225) сеть
|
||||
с geth. Первым шагом является создание _учетной записи подписанта_: учетной записи, которая
|
||||
будет использоваться geth для подписи блоков в сети.
|
||||
Любой блок, подписанный подписантом, принимается как действительный.
|
||||
|
||||
### 1.1. Создание учетной записи подписанта
|
||||
|
||||
Чтобы создать учетную запись подписанта, из директории `marketplace-tutorial` выполните:
|
||||
|
||||
```bash
|
||||
geth account new --datadir geth-data
|
||||
```
|
||||
|
||||
Генератор учетных записей попросит вас ввести пароль, который вы можете
|
||||
оставить пустым. Затем он выведет некоторую информацию,
|
||||
включая публичный адрес учетной записи:
|
||||
|
||||
```bash
|
||||
INFO [09-29|16:49:24.244] Maximum peer count ETH=50 total=50
|
||||
Your new account is locked with a password. Please give a password. Do not forget this password.
|
||||
Password:
|
||||
Repeat password:
|
||||
|
||||
Your new key was generated
|
||||
|
||||
Public address of the key: 0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB
|
||||
Path of the secret key file: geth-data/keystore/UTC--2024-09-29T14-49-31.655272000Z--33a904ad57d0e2cb8ffe347d3c0e83c2e875e7db
|
||||
|
||||
- You can share your public address with anyone. Others need it to interact with you.
|
||||
- You must NEVER share the secret key with anyone! The key controls access to your funds!
|
||||
- You must BACKUP your key file! Without the key, it's impossible to access account funds!
|
||||
- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!
|
||||
```
|
||||
|
||||
В этом примере публичный адрес учетной записи подписанта -
|
||||
`0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB`.
|
||||
У вас будет выведен другой адрес. Сохраните его для дальнейшего использования.
|
||||
|
||||
Затем установите переменную окружения для дальнейшего использования:
|
||||
|
||||
```bash
|
||||
export GETH_SIGNER_ADDR="0x0000000000000000000000000000000000000000"
|
||||
echo ${GETH_SIGNER_ADDR} > geth_signer_address.txt
|
||||
```
|
||||
|
||||
> Здесь убедитесь, что вы заменили `0x0000000000000000000000000000000000000000`
|
||||
> на ваш публичный адрес учетной записи подписанта
|
||||
> (`0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB` в нашем примере).
|
||||
|
||||
### 1.2. Настройка сети и создание генезис-блока
|
||||
|
||||
Следующий шаг - указать geth, какую сеть вы хотите запустить.
|
||||
Мы будем запускать [pre-merge](https://ethereum.org/en/roadmap/merge/)
|
||||
сеть с консенсусом Proof-of-Authority.
|
||||
Чтобы это работало, создайте файл `network.json`.
|
||||
|
||||
Если вы установили переменную `GETH_SIGNER_ADDR` выше, вы можете выполнить следующую
|
||||
команду для создания файла `network.json`:
|
||||
|
||||
```bash
|
||||
echo "{\"config\": { \"chainId\": 12345, \"homesteadBlock\": 0, \"eip150Block\": 0, \"eip155Block\": 0, \"eip158Block\": 0, \"byzantiumBlock\": 0, \"constantinopleBlock\": 0, \"petersburgBlock\": 0, \"istanbulBlock\": 0, \"berlinBlock\": 0, \"londonBlock\": 0, \"arrowGlacierBlock\": 0, \"grayGlacierBlock\": 0, \"clique\": { \"period\": 1, \"epoch\": 30000 } }, \"difficulty\": \"1\", \"gasLimit\": \"8000000\", \"extradata\": \"0x0000000000000000000000000000000000000000000000000000000000000000${GETH_SIGNER_ADDR:2}0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"alloc\": { \"${GETH_SIGNER_ADDR}\": { \"balance\": \"10000000000000000000000\"}}}" > network.json
|
||||
```
|
||||
|
||||
Вы также можете создать файл вручную, не забыв обновить его своим
|
||||
публичным адресом подписанта:
|
||||
|
||||
```json
|
||||
{
|
||||
"config": {
|
||||
"chainId": 12345,
|
||||
"homesteadBlock": 0,
|
||||
"eip150Block": 0,
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 0,
|
||||
"petersburgBlock": 0,
|
||||
"istanbulBlock": 0,
|
||||
"berlinBlock": 0,
|
||||
"londonBlock": 0,
|
||||
"arrowGlacierBlock": 0,
|
||||
"grayGlacierBlock": 0,
|
||||
"clique": {
|
||||
"period": 1,
|
||||
"epoch": 30000
|
||||
}
|
||||
},
|
||||
"difficulty": "1",
|
||||
"gasLimit": "8000000",
|
||||
"extradata": "0x000000000000000000000000000000000000000000000000000000000000000033A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"alloc": {
|
||||
"0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB": {
|
||||
"balance": "10000000000000000000000"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Обратите внимание, что адрес учетной записи подписанта встроен в два разных места:
|
||||
* внутри строки `"extradata"`, окруженный нулями и без префикса `0x`;
|
||||
* как ключ записи в секции `alloc`.
|
||||
Убедитесь, что вы заменили этот ID на ID учетной записи, который вы записали в
|
||||
[Шаге 1.1](#_1-1-create-a-signer-account).
|
||||
|
||||
После создания `network.json` вы можете инициализировать сеть с помощью:
|
||||
|
||||
```bash
|
||||
geth init --datadir geth-data network.json
|
||||
```
|
||||
|
||||
В выводе этой команды могут быть предупреждения, например:
|
||||
|
||||
```bash
|
||||
WARN [08-21|14:48:12.305] Unknown config environment variable envvar=GETH_SIGNER_ADDR
|
||||
```
|
||||
|
||||
или даже ошибки при первом запуске команды:
|
||||
|
||||
```bash
|
||||
ERROR[08-21|14:48:12.399] Head block is not reachable
|
||||
```
|
||||
|
||||
Важно, что в конце вы должны увидеть что-то похожее на:
|
||||
|
||||
```bash
|
||||
INFO [08-21|14:48:12.639] Successfully wrote genesis state database=lightchaindata hash=768bf1..42d06a
|
||||
```
|
||||
|
||||
### 1.3. Запуск вашего PoA узла
|
||||
|
||||
Теперь мы готовы запустить нашу $1$-узловую приватную блокчейн-сеть.
|
||||
Чтобы запустить узел подписанта, откройте отдельный терминал в той же рабочей
|
||||
директории и убедитесь, что у вас установлена переменная `GETH_SIGNER_ADDR`.
|
||||
Для удобства используйте `geth_signer_address.txt`:
|
||||
|
||||
```bash
|
||||
export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt)
|
||||
```
|
||||
|
||||
Имея установленную переменную `GETH_SIGNER_ADDR`, выполните:
|
||||
|
||||
```bash
|
||||
geth\
|
||||
--datadir geth-data\
|
||||
--networkid 12345\
|
||||
--unlock ${GETH_SIGNER_ADDR}\
|
||||
--nat extip:127.0.0.1\
|
||||
--netrestrict 127.0.0.0/24\
|
||||
--mine\
|
||||
--miner.etherbase ${GETH_SIGNER_ADDR}\
|
||||
--http\
|
||||
--allow-insecure-unlock
|
||||
```
|
||||
|
||||
Обратите внимание, что учетная запись подписанта, созданная в
|
||||
[Шаге 1.1](#_1-1-create-a-signer-account), снова появляется как в
|
||||
`--unlock`, так и в `--allow-insecure-unlock`.
|
||||
|
||||
Geth попросит вас ввести пароль учетной записи при запуске.
|
||||
После этого он должен запуститься и начать "майнить" блоки.
|
||||
|
||||
Здесь также могут возникнуть ошибки, например:
|
||||
|
||||
```bash
|
||||
ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=c845e51a5e470e44 ip=18.138.108.67
|
||||
ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=f23ac6da7c02f84a ip=3.209.45.79
|
||||
ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=ef2d7ab886910dc8 ip=65.108.70.101
|
||||
ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=6b36f791352f15eb ip=157.90.35.166
|
||||
```
|
||||
|
||||
Их можно безопасно игнорировать.
|
||||
|
||||
Если команда выше завершается с ошибкой:
|
||||
|
||||
```bash
|
||||
Fatal: Failed to register the Ethereum service: only PoS networks are supported, please transition old ones with Geth v1.13.x
|
||||
```
|
||||
|
||||
убедитесь, что вы используете правильную версию Geth
|
||||
(см. раздел [Предварительные требования](#prerequisites))
|
||||
|
||||
## 2. Настройка маркетплейса
|
||||
|
||||
Для этого раздела вам нужно открыть новый терминал, и geth должен быть уже запущен.
|
||||
Настройка маркетплейса Codex включает:
|
||||
|
||||
1. Развертывание контрактов маркетплейса Codex в нашу приватную блокчейн-сеть
|
||||
2. Настройку учетных записей Ethereum, которые мы будем использовать для покупки и продажи хранилища в
|
||||
маркетплейсе Codex
|
||||
3. Обеспечение этих учетных записей необходимыми балансами токенов
|
||||
|
||||
### 2.1. Развертывание контрактов маркетплейса Codex
|
||||
|
||||
Убедитесь, что вы вышли из директории `marketplace-tutorial` и клонируйте
|
||||
`codex-storage/nim-codex.git`:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/codex-storage/nim-codex.git
|
||||
```
|
||||
|
||||
> Если вы хотите просто клонировать репозиторий для прохождения руководства, вы можете
|
||||
> пропустить историю и просто скачать голову ветки master, используя
|
||||
> опцию `--depth 1`: `git clone --depth 1 https://github.com/codex-storage/nim-codex.git`
|
||||
|
||||
Таким образом, структура директорий для целей этого руководства выглядит так:
|
||||
|
||||
```bash
|
||||
|
|
||||
|-- nim-codex
|
||||
└-- marketplace-tutorial
|
||||
```
|
||||
|
||||
> Вы можете клонировать `codex-storage/nim-codex.git` в другое место.
|
||||
|
||||
Теперь из папки `nim-codex` выполните:
|
||||
|
||||
```bash
|
||||
make update && make
|
||||
```
|
||||
|
||||
> Это может занять некоторое время, так как это также соберет компилятор `nim`. Будьте терпеливы.
|
||||
|
||||
Теперь, чтобы запустить локальную сеть Ethereum, выполните:
|
||||
|
||||
```bash
|
||||
cd vendor/codex-contracts-eth
|
||||
npm install
|
||||
```
|
||||
|
||||
> При написании документа мы использовали `node` версии `v20.17.0` и
|
||||
> `npm` версии `10.8.2`.
|
||||
|
||||
Прежде чем продолжить, вы должны **дождаться, пока будет добыто $256$ блоков**
|
||||
**в вашей PoA сети**, иначе развертывание завершится неудачей. Это должно занять около
|
||||
$4$ минут и $30$ секунд. Вы можете проверить, на какой высоте блока вы находитесь,
|
||||
выполнив следующую команду
|
||||
**из папки `marketplace-tutorial`**:
|
||||
|
||||
```bash
|
||||
geth attach --exec web3.eth.blockNumber ./geth-data/geth.ipc
|
||||
```
|
||||
|
||||
как только это превысит $256$, вы готовы к работе.
|
||||
|
||||
Чтобы развернуть контракты, из директории `codex-contracts-eth` выполните:
|
||||
|
||||
```bash
|
||||
export DISTTEST_NETWORK_URL=http://localhost:8545
|
||||
npx hardhat --network codexdisttestnetwork deploy
|
||||
```
|
||||
|
||||
Если команда завершится успешно, вы увидите вывод, похожий на этот:
|
||||
|
||||
```bash
|
||||
Deployed Marketplace with Groth16 Verifier at:
|
||||
0xCf0df6C52B02201F78E8490B6D6fFf5A82fC7BCd
|
||||
```
|
||||
> конечно, ваш адрес будет другим.
|
||||
|
||||
Теперь вы готовы подготовить учетные записи.
|
||||
|
||||
### 2.2. Генерация необходимых учетных записей
|
||||
|
||||
Мы будем запускать $2$ узла Codex: **поставщик хранилища**, который будет продавать хранилище
|
||||
в сети, и **клиент**, который будет покупать и использовать такое хранилище;
|
||||
поэтому нам нужны две действительные учетные записи Ethereum. Мы могли бы создать случайные
|
||||
учетные записи, используя один из многих доступных инструментов, но, поскольку
|
||||
это руководство работает в локальной приватной сети, мы просто предоставим вам
|
||||
две предварительно созданные учетные записи вместе с их приватными ключами,
|
||||
которые вы можете скопировать и вставить:
|
||||
|
||||
Сначала убедитесь, что вы вернулись в папку `marketplace-tutorial` и
|
||||
не находитесь в подпапке `codex-contracts-eth`. Затем установите эти переменные:
|
||||
|
||||
**Хранилище:**
|
||||
```bash
|
||||
export ETH_STORAGE_ADDR=0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37
|
||||
export ETH_STORAGE_PK=0x06c7ac11d4ee1d0ccb53811b71802fa92d40a5a174afad9f2cb44f93498322c3
|
||||
echo $ETH_STORAGE_PK > storage.pkey && chmod 0600 storage.pkey
|
||||
```
|
||||
|
||||
**Клиент:**
|
||||
```bash
|
||||
export ETH_CLIENT_ADDR=0x9F0C62Fe60b22301751d6cDe1175526b9280b965
|
||||
export ETH_CLIENT_PK=0x5538ec03c956cb9d0bee02a25b600b0225f1347da4071d0fd70c521fdc63c2fc
|
||||
echo $ETH_CLIENT_PK > client.pkey && chmod 0600 client.pkey
|
||||
```
|
||||
|
||||
### 2.3. Обеспечение учетных записей токенами
|
||||
|
||||
Теперь нам нужно перевести немного ETH на каждую из учетных записей, а также предоставить
|
||||
им некоторые токены Codex для использования узлом хранилища в качестве залога и
|
||||
для клиентского узла для покупки фактического хранилища.
|
||||
|
||||
Хотя процесс не особенно сложен, я предлагаю вам использовать
|
||||
[скрипт, который мы подготовили](https://github.com/gmega/local-codex-bare/blob/main/scripts/mint-tokens.js)
|
||||
для этого. Этот скрипт, по сути:
|
||||
|
||||
1. читает адрес контракта маркетплейса и его ABI из данных развертывания;
|
||||
2. переводит $1$ ETH с учетной записи подписанта на целевую учетную запись, если целевая
|
||||
учетная запись не имеет баланса ETH;
|
||||
3. чеканит $n$ токенов Codex и добавляет их в баланс целевой учетной записи.
|
||||
|
||||
Чтобы использовать скрипт, просто скачайте его в локальный файл с именем `mint-tokens.js`,
|
||||
например, используя `curl` (убедитесь, что вы находитесь в
|
||||
директории `marketplace-tutorial`):
|
||||
|
||||
```bash
|
||||
# скачать скрипт
|
||||
curl https://raw.githubusercontent.com/gmega/codex-local-bare/main/scripts/mint-tokens.js -o mint-tokens.js
|
||||
```
|
||||
|
||||
Затем выполните:
|
||||
|
||||
```bash
|
||||
# установить расположение файла контракта (мы предполагаем, что вы находитесь в директории marketplace-tutorial)
|
||||
export CONTRACT_DEPLOY_FULL="../nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork"
|
||||
export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt)
|
||||
# Устанавливает Web3-js
|
||||
npm install web3
|
||||
# Предоставляет токены учетной записи хранилища.
|
||||
node ./mint-tokens.js $CONTRACT_DEPLOY_FULL/TestToken.json $GETH_SIGNER_ADDR 0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37 10000000000
|
||||
# Предоставляет токены клиентской учетной записи.
|
||||
node ./mint-tokens.js $CONTRACT_DEPLOY_FULL/TestToken.json $GETH_SIGNER_ADDR 0x9F0C62Fe60b22301751d6cDe1175526b9280b965 10000000000
|
||||
```
|
||||
|
||||
Если вы получите сообщение типа
|
||||
|
||||
```bash
|
||||
Usage: mint-tokens.js <token-hardhat-deploy-json> <signer-account> <receiver-account> <token-ammount>
|
||||
```
|
||||
|
||||
то вам нужно убедиться, что вы предоставили все необходимые аргументы.
|
||||
В частности, вам нужно убедиться, что переменная окружения `GETH_SIGNER_ADDR`
|
||||
содержит адрес подписанта (мы использовали
|
||||
`export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt)` выше, чтобы
|
||||
убедиться, что она установлена).
|
||||
|
||||
## 3. Запуск Codex
|
||||
|
||||
С учетными записями и geth на месте, мы теперь можем запустить узлы Codex.
|
||||
|
||||
### 3.1. Узел хранилища
|
||||
|
||||
Узел хранилища будет тем, который хранит данные и отправляет доказательства
|
||||
хранения в цепочку. Для этого ему нужен доступ к:
|
||||
|
||||
1. адресу контракта маркетплейса, который был развернут в
|
||||
локальном узле geth в [Шаге 2.1](#_2-1-deploy-the-codex-marketplace-contracts);
|
||||
2. образцам файлов церемонии, которые поставляются в репозитории контрактов Codex
|
||||
(`nim-codex/vendor/codex-contracts-eth`).
|
||||
|
||||
**Адрес контракта маркетплейса.** Адрес контракта можно найти
|
||||
внутри файла `nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork/Marketplace.json`.
|
||||
Мы захватили это расположение выше в переменной `CONTRACT_DEPLOY_FULL`, поэтому из
|
||||
папки `marketplace-tutorial` просто выполните:
|
||||
|
||||
```bash
|
||||
grep '"address":' ${CONTRACT_DEPLOY_FULL}/Marketplace.json
|
||||
```
|
||||
|
||||
что должно вывести что-то вроде:
|
||||
```bash
|
||||
"address": "0xCf0df6C52B02201F78E8490B6D6fFf5A82fC7BCd",
|
||||
```
|
||||
|
||||
> Этот адрес должен соответствовать адресу, который мы получили ранее при развертывании
|
||||
> контракта маркетплейса выше.
|
||||
|
||||
Затем выполните следующее с правильным адресом маркетплейса:
|
||||
```bash
|
||||
export MARKETPLACE_ADDRESS="0x0000000000000000000000000000000000000000"
|
||||
echo ${MARKETPLACE_ADDRESS} > marketplace_address.txt
|
||||
```
|
||||
|
||||
где вы заменяете `0x0000000000000000000000000000000000000000` на
|
||||
адрес контракта маркетплейса выше в
|
||||
[Шаге 2.1](#_2-1-deploy-the-codex-marketplace-contracts).
|
||||
|
||||
**Файлы церемонии провайдера.** Файлы церемонии находятся в подкаталоге
|
||||
`nim-codex/vendor/codex-contracts-eth/verifier/networks/codexdisttestnetwork`.
|
||||
Их три: `proof_main.r1cs`, `proof_main.zkey`,
|
||||
и `prooof_main.wasm`. Нам понадобятся все они для запуска узла хранилища Codex.
|
||||
|
||||
**Запуск узла хранилища.** Пусть:
|
||||
|
||||
* `PROVER_ASSETS` содержит директорию, где находятся файлы церемонии провайдера.
|
||||
**Это должен быть абсолютный путь**;
|
||||
* `CODEX_BINARY` содержит расположение вашего бинарного файла Codex;
|
||||
* `MARKETPLACE_ADDRESS` содержит адрес контракта маркетплейса
|
||||
(мы уже установили его выше).
|
||||
|
||||
Установите эти пути в переменные окружения (убедитесь, что вы находитесь в
|
||||
директории `marketplace-tutorial`):
|
||||
|
||||
```bash
|
||||
export CONTRACT_DEPLOY_FULL=$(realpath "../nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork")
|
||||
export PROVER_ASSETS=$(realpath "../nim-codex/vendor/codex-contracts-eth/verifier/networks/codexdisttestnetwork/")
|
||||
export CODEX_BINARY=$(realpath "../nim-codex/build/codex")
|
||||
export MARKETPLACE_ADDRESS=$(cat marketplace_address.txt)
|
||||
```
|
||||
> вы можете заметить, что мы уже установили переменную `CONTRACT_DEPLOY_FULL`
|
||||
> выше. Здесь мы убеждаемся, что это абсолютный путь.
|
||||
|
||||
Чтобы запустить узел хранилища, выполните:
|
||||
|
||||
```bash
|
||||
${CODEX_BINARY}\
|
||||
--data-dir=./codex-storage\
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8080\
|
||||
--api-port=8000\
|
||||
--disc-port=8090\
|
||||
persistence\
|
||||
--eth-provider=http://localhost:8545\
|
||||
--eth-private-key=./storage.pkey\
|
||||
--marketplace-address=${MARKETPLACE_ADDRESS}\
|
||||
--validator\
|
||||
--validator-max-slots=1000\
|
||||
prover\
|
||||
--circom-r1cs=${PROVER_ASSETS}/proof_main.r1cs\
|
||||
--circom-wasm=${PROVER_ASSETS}/proof_main.wasm\
|
||||
--circom-zkey=${PROVER_ASSETS}/proof_main.zkey
|
||||
```
|
||||
|
||||
**Запуск клиентского узла.**
|
||||
|
||||
Клиентский узел запускается аналогично, за исключением того, что:
|
||||
|
||||
* нам нужно передать SPR узла хранилища, чтобы он мог сформировать сеть с ним;
|
||||
* поскольку он не выполняет никаких доказательств, ему не требуются файлы церемонии.
|
||||
|
||||
Мы получаем Signed Peer Record (SPR) узла хранилища, чтобы мы могли загрузить
|
||||
клиентский узел с ним. Чтобы получить SPR, выполните следующий вызов:
|
||||
|
||||
```bash
|
||||
curl -H 'Accept: text/plain' 'http://localhost:8000/api/codex/v1/spr' --write-out '\n'
|
||||
```
|
||||
|
||||
Вы должны получить SPR, начинающийся с `spr:`.
|
||||
|
||||
Прежде чем продолжить, откройте новый терминал и войдите в директорию `marketplace-tutorial`.
|
||||
|
||||
Затем установите эти пути в переменные окружения:
|
||||
|
||||
```bash
|
||||
# установить SPR для узла хранилища
|
||||
export STORAGE_NODE_SPR=$(curl -H 'Accept: text/plain' 'http://localhost:8000/api/codex/v1/spr')
|
||||
# базовые переменные
|
||||
export CONTRACT_DEPLOY_FULL=$(realpath "../nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork")
|
||||
export CODEX_BINARY=$(realpath "../nim-codex/build/codex")
|
||||
export MARKETPLACE_ADDRESS=$(cat marketplace_address.txt)
|
||||
```
|
||||
и затем выполните:
|
||||
|
||||
```bash
|
||||
${CODEX_BINARY}\
|
||||
--data-dir=./codex-client\
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8081\
|
||||
--api-port=8001\
|
||||
--disc-port=8091\
|
||||
--bootstrap-node=${STORAGE_NODE_SPR}\
|
||||
persistence\
|
||||
--eth-provider=http://localhost:8545\
|
||||
```
|
||||
|
||||
## 4. Покупка и продажа хранилища на маркетплейсе
|
||||
|
||||
Любые переговоры о хранилище имеют две стороны: покупатель и продавец.
|
||||
Поэтому, прежде чем мы сможем фактически запросить хранилище, мы должны сначала предложить
|
||||
его на продажу.
|
||||
|
||||
### 4.1 Продажа хранилища
|
||||
|
||||
Следующий запрос заставит узел хранилища выставить $50\text{MB}$
|
||||
хранилища на продажу на $1$ час по цене $1$ токен Codex
|
||||
за слот в секунду, при этом выражая готовность принять максимум
|
||||
$1000$ токенов Codex в качестве штрафа за невыполнение своей части контракта.[^1]
|
||||
|
||||
```bash
|
||||
curl 'http://localhost:8000/api/codex/v1/sales/availability' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"totalSize": "50000000",
|
||||
"duration": "3600",
|
||||
"minPrice": "1",
|
||||
"maxCollateral": "1000"
|
||||
}'
|
||||
```
|
||||
|
||||
Это должно вернуть JSON-ответ, содержащий `id` (например, `"id": "0xb55b3bc7aac2563d5bf08ce8a177a38b5a40254bfa7ee8f9c52debbb176d44b0"`),
|
||||
который идентифицирует это предложение хранилища.
|
||||
|
||||
> Чтобы сделать JSON-ответы более читаемыми, вы можете попробовать
|
||||
> утилиту форматирования JSON [jq](https://jqlang.github.io/jq/)
|
||||
> просто добавив `| jq` после команды.
|
||||
> На macOS вы можете установить с помощью `brew install jq`.
|
||||
|
||||
Чтобы проверить текущие предложения хранилища для этого узла, вы можете выполнить:
|
||||
|
||||
```bash
|
||||
curl 'http://localhost:8000/api/codex/v1/sales/availability'
|
||||
```
|
||||
|
||||
или с `jq`:
|
||||
|
||||
```bash
|
||||
curl 'http://localhost:8000/api/codex/v1/sales/availability' | jq
|
||||
```
|
||||
|
||||
Это должно вывести список предложений, с тем, который вы только что создали, среди
|
||||
них (для нашего руководства, в это время будет возвращено только одно предложение).
|
||||
|
||||
### 4.2. Покупка хранилища
|
||||
|
||||
Прежде чем мы сможем купить хранилище, у нас должны быть некоторые фактические данные для запроса
|
||||
хранилища. Начните с загрузки небольшого файла на ваш клиентский узел.
|
||||
В Linux (или macOS) вы могли бы, например, использовать `dd` для генерации файла размером $1M$:
|
||||
|
||||
```bash
|
||||
dd if=/dev/urandom of=./data.bin bs=1M count=1
|
||||
```
|
||||
|
||||
Предполагая, что ваш файл называется `data.bin`, вы можете загрузить его с помощью:
|
||||
|
||||
```bash
|
||||
curl --request POST http://localhost:8001/api/codex/v1/data --header 'Content-Type: application/octet-stream' --write-out '\n' -T ./data.bin
|
||||
```
|
||||
|
||||
После завершения загрузки вы должны увидеть _Content Identifier_,
|
||||
или _CID_ (например, `zDvZRwzm2mK7tvDzKScRLapqGdgNTLyyEBvx1TQY37J2CdWdS6Sj`)
|
||||
для загруженного файла, выведенный в терминал.
|
||||
Используйте этот CID в запросе на покупку:
|
||||
|
||||
```bash
|
||||
# убедитесь, что заменили CID перед с CID, который вы получили на предыдущем шаге
|
||||
export CID=zDvZRwzm2mK7tvDzKScRLapqGdgNTLyyEBvx1TQY37J2CdWdS6Sj
|
||||
```
|
||||
|
||||
```bash
|
||||
curl "http://localhost:8001/api/codex/v1/storage/request/${CID}" \
|
||||
--header 'Content-Type: application/octet-stream' \
|
||||
--data "{
|
||||
\"duration\": \"600\",
|
||||
\"reward\": \"1\",
|
||||
\"proofProbability\": \"3\",
|
||||
\"expiry\": \"500\",
|
||||
\"nodes\": 3,
|
||||
\"tolerance\": 1,
|
||||
\"collateral\": \"1000\"
|
||||
}" \
|
||||
--write-out '\n'
|
||||
```
|
||||
|
||||
Параметры под `--data` говорят, что:
|
||||
|
||||
1. мы хотим купить хранилище для нашего файла на $5$ минут (`"duration": "600"`);
|
||||
2. мы готовы платить до $1$ токена за слот в секунду (`"reward": "1"`)
|
||||
3. наш файл будет разделен на три части (`"nodes": 3`).
|
||||
Поскольку мы установили `"tolerance": 1`, нам нужно только две части (`nodes - tolerance`)
|
||||
для восстановления файла; т.е. мы можем допустить, что максимум один узел
|
||||
перестанет хранить наши данные; либо из-за сбоя, либо по другим причинам;
|
||||
4. мы требуем `1000` токенов в качестве залога от поставщиков хранилища для каждой части.
|
||||
Поскольку есть $3$ такие части, всего будет `3000` залога,
|
||||
зафиксированного поставщиком(ами) хранилища, как только наш запрос будет начат.
|
||||
5. наконец, `expiry` устанавливает временной лимит для заполнения всех слотов
|
||||
поставщиком(ами) хранилища. Если слоты не заполнены к моменту `expire`,
|
||||
запрос истечет и завершится неудачей.
|
||||
|
||||
### 4.3. Отслеживание ваших запросов на хранилище
|
||||
|
||||
POST-запрос на хранилище сделает его доступным на рынке хранилища,
|
||||
и узел хранилища в конечном итоге подберет его.
|
||||
|
||||
Вы можете опрашивать статус вашего запроса с помощью:
|
||||
```bash
|
||||
export STORAGE_PURCHASE_ID="1d0ec5261e3364f8b9d1cf70324d70af21a9b5dccba380b24eb68b4762249185"
|
||||
curl "http://localhost:8001/api/codex/v1/storage/purchases/${STORAGE_PURCHASE_ID}"
|
||||
```
|
||||
|
||||
Например:
|
||||
|
||||
```bash
|
||||
> curl 'http://localhost:8001/api/codex/v1/storage/purchases/6c698cd0ad71c41982f83097d6fa75beb582924e08a658357a1cd4d7a2a6766d'
|
||||
```
|
||||
|
||||
Это возвращает результат типа:
|
||||
|
||||
```json
|
||||
{
|
||||
"requestId": "0x86501e4677a728c6a8031971d09b921c3baa268af06b9f17f1b745e7dba5d330",
|
||||
"request": {
|
||||
"client": "0x9f0c62fe60b22301751d6cde1175526b9280b965",
|
||||
"ask": {
|
||||
"slots": 3,
|
||||
"slotSize": "262144",
|
||||
"duration": "1000",
|
||||
"proofProbability": "3",
|
||||
"reward": "1",
|
||||
"collateral": "1",
|
||||
"maxSlotLoss": 1
|
||||
},
|
||||
"content": {
|
||||
"cid": "zDvZRwzkyw1E7ABaUSmgtNEDjC7opzhUoHo99Vpvc98cDWeCs47u"
|
||||
},
|
||||
"expiry": "1711992852",
|
||||
"nonce": "0x9f5e651ecd3bf73c914f8ed0b1088869c64095c0d7bd50a38fc92ebf66ff5915",
|
||||
"id": "0x6c698cd0ad71c41982f83097d6fa75beb582924e08a658357a1cd4d7a2a6766d"
|
||||
},
|
||||
"state": "submitted",
|
||||
"error": null
|
||||
}
|
||||
```
|
||||
|
||||
Показывает, что запрос был отправлен, но еще не заполнен.
|
||||
Ваш запрос будет успешным, как только `"state"` покажет `"started"`.
|
||||
Все, что отличается от этого, означает, что запрос еще не полностью
|
||||
обработан, а состояние `"error"` отличное от `null` означает, что он завершился неудачей.
|
||||
|
||||
Ну что, это было довольно долгое путешествие, не так ли? Вы можете поздравить себя с
|
||||
успешным завершением руководства по маркетплейсу codex!
|
||||
|
||||
[^1]: Файлы Codex разделяются на части, называемые "слотами", и распределяются
|
||||
по различным поставщикам хранилища. Залог относится к одному такому слоту,
|
||||
и будет медленно уменьшаться по мере того, как поставщик хранилища не сможет предоставить
|
||||
своевременные доказательства, но фактическая логика [более сложна, чем это](https://github.com/codex-storage/codex-contracts-eth/blob/6c9f797f408608958714024b9055fcc330e3842f/contracts/Marketplace.sol#L209).
|
||||
227
ru/learn/local-two-client-test.md
Normal file
227
ru/learn/local-two-client-test.md
Normal file
@ -0,0 +1,227 @@
|
||||
# Тест с двумя клиентами Codex
|
||||
|
||||
Тест с двумя клиентами - это ручной тест, который вы можете выполнить для проверки вашей настройки и ознакомления с API Codex. Эти шаги проведут вас через запуск и подключение двух узлов, чтобы загрузить файл на один и затем скачать этот файл с другого. Этот тест также включает запуск локального узла блокчейна для обеспечения доступности функциональности Marketplace. Однако запуск локального узла блокчейна не является строго необходимым, и вы можете пропустить шаги, отмеченные как необязательные, если решите не запускать локальный узел блокчейна.
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
Убедитесь, что вы [собрали клиент](/learn/build) или получили [скомпилированный бинарный файл](/learn/quick-start#get-codex-binary).
|
||||
|
||||
## Шаги
|
||||
|
||||
### 0. Настройка узла блокчейна (необязательно)
|
||||
|
||||
Вам необходимо установить NodeJS и npm для запуска локального узла блокчейна.
|
||||
|
||||
Перейдите в директорию `vendor/codex-contracts-eth` и выполните эти две команды:
|
||||
```
|
||||
npm ci
|
||||
npm start
|
||||
```
|
||||
|
||||
Это запустит локальный блокчейн Ganache.
|
||||
|
||||
### 1. Запуск Узла #1
|
||||
|
||||
Откройте терминал и выполните:
|
||||
- Mac/Linux:
|
||||
```shell
|
||||
codex \
|
||||
--data-dir="$(pwd)/Data1" \
|
||||
--api-port=8080 \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs="/ip4/127.0.0.1/tcp/8070"
|
||||
```
|
||||
- Windows:
|
||||
```batch
|
||||
codex.exe ^
|
||||
--data-dir="Data1" ^
|
||||
--api-port=8080 ^
|
||||
--disc-port=8090 ^
|
||||
--listen-addrs="/ip4/127.0.0.1/tcp/8070"
|
||||
```
|
||||
|
||||
Необязательно, если вы хотите использовать функциональность блокчейна Marketplace, вам также нужно включить эти флаги: `--persistence --eth-account=<account>`, где `account` может быть одним из следующих:
|
||||
|
||||
- `0x70997970C51812dc3A010C7d01b50e0d17dc79C8`
|
||||
- `0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC`
|
||||
- `0x90F79bf6EB2c4f870365E785982E1f101E93b906`
|
||||
- `0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65`
|
||||
|
||||
**Для каждого узла используйте разный аккаунт!**
|
||||
|
||||
| Аргумент | Описание |
|
||||
|----------------|-----------------------------------------------------------------------|
|
||||
| `data-dir` | Мы указываем относительный путь, где узел будет хранить свои данные. |
|
||||
| `listen-addrs` | Multiaddress, где узел будет принимать соединения от других узлов. |
|
||||
| `api-port` | Порт на localhost, где узел будет предоставлять свой API. |
|
||||
| `data-dir` | We specify a relative path where the node will store its data. |
|
||||
| `listen-addrs` | Multiaddress where the node will accept connections from other nodes. |
|
||||
| `api-port` | Port on localhost where the node will expose its API. |
|
||||
| `disc-port` | Port the node will use for its discovery service. |
|
||||
| `persistence` | Enables Marketplace functionality. Requires a blockchain connection. |
|
||||
| `eth-account` | Defines which blockchain account the node should use. |
|
||||
|
||||
Codex uses sane defaults for most of its arguments. Here we specify some explicitly for the purpose of this walk-through.
|
||||
|
||||
### 2. Sign of life
|
||||
|
||||
Run the command :
|
||||
|
||||
```bash
|
||||
curl -X GET http://127.0.0.1:8080/api/codex/v1/debug/info
|
||||
```
|
||||
|
||||
This GET request will return the node's debug information. The response will be in JSON and should look like:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "16Uiu2HAmJ3TSfPnrJNedHy2DMsjTqwBiVAQQqPo579DuMgGxmG99",
|
||||
"addrs": [
|
||||
"/ip4/127.0.0.1/tcp/8070"
|
||||
],
|
||||
"repo": "/Users/user/projects/nim-codex/Data1",
|
||||
"spr": "spr:CiUIAhIhA1AL2J7EWfg7x77iOrR9YYBisY6CDtU2nEhuwDaQyjpkEgIDARo8CicAJQgCEiEDUAvYnsRZ-DvHvuI6tH1hgGKxjoIO1TacSG7ANpDKOmQQ2MWasAYaCwoJBH8AAAGRAh-aKkYwRAIgB2ooPfAyzWEJDe8hD2OXKOBnyTOPakc4GzqKqjM2OGoCICraQLPWf0oSEuvmSroFebVQx-3SDtMqDoIyWhjq1XFF",
|
||||
"announceAddresses": [
|
||||
"/ip4/127.0.0.1/tcp/8070"
|
||||
],
|
||||
"table": {
|
||||
"localNode": {
|
||||
"nodeId": "f6e6d48fa7cd171688249a57de0c1aba15e88308c07538c91e1310c9f48c860a",
|
||||
"peerId": "16Uiu2HAmJ3TSfPnrJNedHy2DMsjTqwBiVAQQqPo579DuMgGxmG99",
|
||||
"record": "...",
|
||||
"address": "0.0.0.0:8090",
|
||||
"seen": false
|
||||
},
|
||||
"nodes": []
|
||||
},
|
||||
"codex": {
|
||||
"version": "untagged build",
|
||||
"revision": "b3e626a5"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| Field | Description |
|
||||
| ------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `id` | Id of the node. Also referred to as 'peerId'. |
|
||||
| `addrs` | Multiaddresses currently open to accept connections from other nodes. |
|
||||
| `repo` | Path of this node's data folder. |
|
||||
| `spr` | Signed Peer Record, encoded information about this node and its location in the network. |
|
||||
| `announceAddresses` | Multiaddresses used for annoucning this node |
|
||||
| `table` | Table of nodes present in the node's DHT |
|
||||
| `codex` | Codex version information |
|
||||
|
||||
### 3. Launch Node #2
|
||||
|
||||
We will need the signed peer record (SPR) from the first node that you got in the previous step.
|
||||
|
||||
Replace `<SPR HERE>` in the following command with the SPR returned from the previous command, note that it should include the `spr:` at the beginning.
|
||||
|
||||
Open a new terminal and run:
|
||||
- Mac/Linux:
|
||||
```shell
|
||||
codex \
|
||||
--data-dir="$(pwd)/Data2" \
|
||||
--api-port=8081 \
|
||||
--disc-port=8091 \
|
||||
--listen-addrs=/ip4/127.0.0.1/tcp/8071 \
|
||||
--bootstrap-node=<SPR HERE>
|
||||
```
|
||||
- Windows:
|
||||
```
|
||||
codex.exe ^
|
||||
--data-dir="Data2" ^
|
||||
--api-port=8081 ^
|
||||
--disc-port=8091 ^
|
||||
--listen-addrs=/ip4/127.0.0.1/tcp/8071 ^
|
||||
--bootstrap-node=<SPR HERE>
|
||||
```
|
||||
|
||||
Alternatively on Mac, Linux, or MSYS2 and a recent Codex binary you can run it in one command like:
|
||||
|
||||
```shell
|
||||
codex \
|
||||
--data-dir="$(pwd)/Data2" \
|
||||
--api-port=8081 \
|
||||
--disc-port=8091 \
|
||||
--listen-addrs=/ip4/127.0.0.1/tcp/8071 \
|
||||
--bootstrap-node=$(curl -H "Accept: text/plain" http://127.0.0.1:8080/api/codex/v1/spr)
|
||||
```
|
||||
|
||||
Notice we're using a new data-dir, and we've increased each port number by one. This is needed so that the new node won't try to open ports already in use by the first node.
|
||||
|
||||
We're now also including the `bootstrap-node` argument. This allows us to link the new node to another one, bootstrapping our own little peer-to-peer network. SPR strings always start with `spr:`.
|
||||
|
||||
### 4. Connect The Two
|
||||
|
||||
Normally the two nodes will automatically connect. If they do not automatically connect or you want to manually connect nodes you can use the peerId to connect nodes.
|
||||
|
||||
You can get the first node's peer id by running the following command and finding the `"peerId"` in the results:
|
||||
|
||||
```shell
|
||||
curl -X GET \
|
||||
-H "Accept: text/plain" \
|
||||
http://127.0.0.1:8081/api/codex/v1/peerid
|
||||
```
|
||||
|
||||
Next replace `<PEER ID HERE>` in the following command with the peerId returned from the previous command:
|
||||
|
||||
```shell
|
||||
curl -X GET \
|
||||
http://127.0.0.1:8080/api/codex/v1/connect/<PEER ID HERE>?addrs=/ip4/127.0.0.1/tcp/8071
|
||||
```
|
||||
|
||||
Alternatively on Mac, Linux, or MSYS2 and a recent Codex binary you can run it in one command like:
|
||||
|
||||
```shell
|
||||
curl -X GET \
|
||||
http://127.0.0.1:8080/api/codex/v1/connect/$(curl -X GET -H "Accept: text/plain" http://127.0.0.1:8081/api/codex/v1/peerid)\?addrs=/ip4/127.0.0.1/tcp/8071
|
||||
```
|
||||
|
||||
Notice that we are sending the "`peerId`" and the multiaddress of node 2 to the `/connect` endpoint of node 1. This provides node 1 all the information it needs to communicate with node 2. The response to this request should be `Successfully connected to peer`.
|
||||
|
||||
### 5. Upload The File
|
||||
|
||||
We're now ready to upload a file to the network. In this example we'll use node 1 for uploading and node 2 for downloading. But the reverse also works.
|
||||
|
||||
Next replace `<FILE PATH>` with the path to the file you want to upload in the following command:
|
||||
|
||||
```shell
|
||||
curl -X POST \
|
||||
127.0.0.1:8080/api/codex/v1/data \
|
||||
-H "Content-Type: application/octet-stream" \
|
||||
-H "Expect: 100-continue" \
|
||||
-T "<FILE PATH>"
|
||||
```
|
||||
> [!TIP]
|
||||
> If curl is reluctant to show you the response, add `-o <FILENAME>` to write the result to a file.
|
||||
|
||||
Depending on the file size this may take a moment. Codex is processing the file by cutting it into blocks and generating erasure-recovery data. When the process is finished, the request will return the content-identifier (CID) of the uploaded file. It should look something like `zdj7WVxH8HHHenKtid8Vkgv5Z5eSUbCxxr8xguTUBMCBD8F2S`.
|
||||
|
||||
### 6. Download The File
|
||||
|
||||
Replace `<CID>` with the identifier returned in the previous step. Replace `<OUTPUT FILE>` with the filename where you want to store the downloaded file:
|
||||
|
||||
```bash
|
||||
curl -X GET \
|
||||
127.0.0.1:8081/api/codex/v1/data/<CID>/network \
|
||||
-o <OUTPUT FILE>
|
||||
```
|
||||
|
||||
Notice we are connecting to the second node in order to download the file. The CID we provide contains the information needed to locate the file within the network.
|
||||
|
||||
### 7. Verify The Results
|
||||
|
||||
If your file is downloaded and identical to the file you uploaded, then this manual test has passed. Rejoice! If on the other hand that didn't happen or you were unable to complete any of these steps, please leave us a message detailing your troubles.
|
||||
|
||||
## Notes
|
||||
|
||||
When using the Ganache blockchain, there are some deviations from the expected behavior, mainly linked to how blocks are mined, which affects certain functionalities in the Sales module.
|
||||
Therefore, if you are manually testing processes such as payout collection after a request is finished or proof submissions, you need to mine some blocks manually for it to work correctly. You can do this by using the following curl command:
|
||||
|
||||
```shell
|
||||
curl -X POST \
|
||||
127.0.0.1:8545 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc":"2.0","method":"evm_mine","params":[],"id":67}'
|
||||
```
|
||||
147
ru/learn/quick-start.md
Normal file
147
ru/learn/quick-start.md
Normal file
@ -0,0 +1,147 @@
|
||||
# Быстрый старт
|
||||
|
||||
Чтобы запустить Codex через это руководство, нам нужно выполнить следующие шаги:
|
||||
- [Ознакомиться с отказом от ответственности](/codex/disclaimer)
|
||||
- [Получить бинарный файл Codex](#get-codex-binary)
|
||||
- [Запустить Codex](#run-codex)
|
||||
- [Взаимодействовать с Codex](#interact-with-codex)
|
||||
|
||||
## Получение бинарного файла Codex
|
||||
|
||||
Для быстрого старта мы будем использовать предварительно скомпилированные бинарные файлы со [страницы релизов GitHub](https://github.com/codex-storage/nim-codex/releases). Если вы предпочитаете компилировать из исходного кода, пожалуйста, проверьте [Сборка Codex](/learn/build).
|
||||
|
||||
Пожалуйста, следуйте шагам для вашей ОС из списка:
|
||||
- [Linux/macOS](#linux-macos)
|
||||
- [Windows](#windows)
|
||||
|
||||
### Linux/macOS
|
||||
|
||||
1. Установите последний релиз Codex
|
||||
```shell
|
||||
curl -s https://get.codex.storage/install.sh | bash
|
||||
```
|
||||
|
||||
2. Установите зависимости
|
||||
```shell
|
||||
# Debian-based Linux
|
||||
sudo apt update && sudo apt install libgomp1
|
||||
```
|
||||
|
||||
3. Проверьте результат
|
||||
```shell
|
||||
codex --version
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
1. Установите последний релиз Codex
|
||||
```batch
|
||||
curl -sO https://get.codex.storage/install.cmd && install.cmd
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Антивирусное программное обеспечение Windows и встроенные брандмауэры могут привести к сбою шагов. Мы рассмотрим некоторые возможные ошибки здесь, но всегда учитывайте проверку вашей настройки, если запросы завершаются неудачей - в частности, если временное отключение вашего антивируса исправляет это, то, вероятно, это является причиной.
|
||||
|
||||
Если вы видите ошибку типа:
|
||||
|
||||
```batch
|
||||
curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - The revocation function was unable to check revocation for the certificate.
|
||||
```
|
||||
|
||||
Возможно, вам нужно добавить опцию `--ssl-no-revoke` к вашим вызовам curl, т.е. изменить вызовы выше, чтобы они выглядели так:
|
||||
|
||||
```batch
|
||||
curl -LO --ssl-no-revoke https://...
|
||||
```
|
||||
|
||||
2. Обновите путь, используя вывод консоли
|
||||
- Только для текущей сессии
|
||||
```batch
|
||||
:: Путь установки по умолчанию
|
||||
set "PATH=%PATH%%LOCALAPPDATA%\Codex;"
|
||||
```
|
||||
|
||||
- Обновление PATH постоянно
|
||||
- Панель управления --> Система --> Дополнительные параметры системы --> Переменные среды
|
||||
- Или введите `environment variables` в поле поиска Windows
|
||||
|
||||
3. Проверьте результат
|
||||
```shell
|
||||
codex --version
|
||||
```
|
||||
|
||||
## Запуск Codex
|
||||
|
||||
Мы можем [запустить Codex в разных режимах](/learn/run#run), и для быстрого старта мы запустим [узел Codex](/learn/run#codex-node), чтобы иметь возможность обмениваться файлами в сети.
|
||||
|
||||
1. Запустите Codex
|
||||
|
||||
**Linux/macOS**
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 \
|
||||
--nat=any \
|
||||
--api-cors-origin="*" \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P
|
||||
```
|
||||
|
||||
**Windows**
|
||||
|
||||
> [!WARNING]
|
||||
> Windows на этом этапе может запросить разрешение на доступ в интернет для Codex. Вы должны разрешить это для работы.
|
||||
> Также может потребоваться добавить правила входящего брандмауэра для Codex, и мы можем использовать утилиту `netsh`.
|
||||
|
||||
<details>
|
||||
<summary>добавить правила брандмауэра с помощью netsh</summary>
|
||||
|
||||
```batch
|
||||
:: Добавить правила
|
||||
netsh advfirewall firewall add rule name="Allow Codex (TCP-In)" protocol=TCP dir=in localport=8070 action=allow
|
||||
netsh advfirewall firewall add rule name="Allow Codex (UDP-In)" protocol=UDP dir=in localport=8090 action=allow
|
||||
|
||||
:: Показать правила
|
||||
netsh advfirewall firewall show rule name=all | find /I "Codex"
|
||||
|
||||
:: Удалить правила
|
||||
netsh advfirewall firewall delete rule name="Allow Codex (TCP-In)"
|
||||
netsh advfirewall firewall delete rule name="Allow Codex (UDP-In)"
|
||||
```
|
||||
</details>
|
||||
|
||||
```batch
|
||||
:: Запустить Codex
|
||||
codex ^
|
||||
--data-dir=datadir ^
|
||||
--disc-port=8090 ^
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 ^
|
||||
--nat=any ^
|
||||
--api-cors-origin="*" ^
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> В примере выше мы используем [узлы начальной загрузки тестовой сети Codex](/networks/testnet#bootstrap-nodes) и, таким образом, присоединяемся к тестовой сети. Если вы хотите присоединиться к другой сети, пожалуйста, используйте [соответствующее значение](/networks/networks).
|
||||
|
||||
2. Настройте проброс портов TCP/UDP на вашем интернет-маршрутизаторе
|
||||
| Протокол | Сервис | Порт |
|
||||
| -------- | ---------- | ------ |
|
||||
| UDP | Discovery | `8090` |
|
||||
| TCP | Transport | `8070` |
|
||||
|
||||
Если вы хотите покупать или продавать хранилище, рассмотрите возможность запуска [узла Codex с поддержкой маркетплейса](/learn/run#codex-node-with-marketplace-support) или [узла хранения Codex](/learn/run#codex-storage-node).
|
||||
|
||||
## Взаимодействие с Codex
|
||||
|
||||
Когда ваш узел Codex запущен и работает, вы можете взаимодействовать с ним, используя [Пользовательский интерфейс приложения Codex](https://app.codex.storage) для обмена файлами.
|
||||
|
||||
Также вы можете взаимодействовать с Codex, используя [API Codex](/developers/api), и для ознакомления с API рассмотрите возможность следования руководству [Использование Codex](/learn/using).
|
||||
|
||||
## Оставайтесь на связи
|
||||
|
||||
Хотите быть в курсе или ищете дополнительную помощь? Попробуйте наш [дискорд-сервер](https://discord.gg/codex-storage).
|
||||
|
||||
Готовы исследовать функциональность Codex? Пожалуйста, [Присоединитесь к тестовой сети Codex](/networks/testnet).
|
||||
|
||||
Если вы хотите запустить Codex локально без присоединения к тестовой сети, рассмотрите возможность попробовать [Тест с двумя клиентами Codex](/learn/local-two-client-test) или [Запуск локальной сети Codex с поддержкой маркетплейса](/learn/local-marketplace).
|
||||
534
ru/learn/run.md
Normal file
534
ru/learn/run.md
Normal file
@ -0,0 +1,534 @@
|
||||
---
|
||||
outline: [2, 4]
|
||||
---
|
||||
# Запуск Codex
|
||||
|
||||
На данный момент Codex реализован только на [Nim](https://nim-lang.org) и находится в репозитории [nim-codex](https://github.com/codex-storage/nim-codex).
|
||||
|
||||
Это консольное приложение, которое может быть запущено разными способами:
|
||||
- [Использование бинарного файла](#using-binary)
|
||||
- [Запуск как сервис в Linux](#run-as-a-service-in-linux)
|
||||
- [Запуск как сервис в Windows](#run-as-a-service-in-windows) (пока не поддерживается)
|
||||
- [Использование Docker](#using-docker)
|
||||
- [Использование Docker Compose](#using-docker-compose)
|
||||
- [На Kubernetes](#on-kubernetes)
|
||||
|
||||
При запуске необходимо передать [параметры конфигурации](#configuration) приложению, что можно сделать разными способами.
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Настроить узел Codex можно несколькими способами:
|
||||
1. [Параметры командной строки](#cli-options)
|
||||
2. [Переменные окружения](#environment-variables)
|
||||
3. [Файл конфигурации](#configuration-file)
|
||||
|
||||
Приоритет следующий:
|
||||
[Параметры командной строки](#cli-options) --> [Переменные окружения](#environment-variables) --> [Файл конфигурации](#configuration-file).
|
||||
|
||||
### Общая информация
|
||||
|
||||
#### Единицы измерения
|
||||
|
||||
Для некоторых параметров конфигурации мы можем передавать значения в общепринятых единицах измерения:
|
||||
```shell
|
||||
--cache-size=1m/1M/1mb/1MB
|
||||
--storage-quota=2m/2M/2mb/2MB
|
||||
|
||||
--block-mi=1s/1S/1m/1M/1h/1H/1d/1D/1w/1W
|
||||
--block-ttl=2s/2S/2m/2M/2h/2H/2d/2D/2w/2W
|
||||
```
|
||||
|
||||
#### Логирование
|
||||
|
||||
Codex использует библиотеку логирования [Chronicles](https://github.com/status-im/nim-chronicles), которая обеспечивает большую гибкость в работе с логами.
|
||||
Chronicles использует концепцию тем, которые группируют записи логов по семантическим группам.
|
||||
|
||||
Используя параметр `log-level`, вы можете установить общий уровень логирования, например `--log-level="trace"`, но что более важно,
|
||||
вы можете установить уровни логирования для конкретных тем, например `--log-level="info; trace: marketplace,node; error: blockexchange"`,
|
||||
что устанавливает общий уровень логирования в `info`, а для тем `marketplace` и `node` устанавливает уровень `trace` и так далее.
|
||||
|
||||
### Параметры командной строки
|
||||
|
||||
```shell
|
||||
codex --help
|
||||
|
||||
Использование:
|
||||
|
||||
codex [ПАРАМЕТРЫ]... команда
|
||||
|
||||
Доступны следующие параметры:
|
||||
|
||||
--config-file Загружает конфигурацию из TOML файла [=none].
|
||||
--log-level Устанавливает уровень логирования [=info].
|
||||
--metrics Включает сервер метрик [=false].
|
||||
--metrics-address Адрес прослушивания сервера метрик [=127.0.0.1].
|
||||
--metrics-port HTTP порт прослушивания сервера метрик [=8008].
|
||||
-d, --data-dir Директория, где codex будет хранить конфигурацию и данные
|
||||
[=/root/.cache/codex].
|
||||
-i, --listen-addrs Multi-адреса для прослушивания [=/ip4/0.0.0.0/tcp/0].
|
||||
-a, --nat Метод обхода NAT для определения публичного адреса.
|
||||
Варианты: any, none, upnp, pmp, extip:<IP> [any]
|
||||
-u, --disc-port Порт обнаружения (UDP) [=8090].
|
||||
--net-privkey Источник сетевого (secp256k1) приватного ключа - путь к файлу или имя [=key].
|
||||
-b, --bootstrap-node Указывает один или несколько узлов начальной загрузки для использования при подключении к сети.
|
||||
--max-peers Максимальное количество пиров для подключения [=160].
|
||||
--num-threads Количество рабочих потоков ("0" = использовать столько потоков, сколько доступно ядер CPU).
|
||||
--agent-string Строка агента узла, используемая как идентификатор в сети [=Codex].
|
||||
--api-bindaddr Адрес привязки REST API [=127.0.0.1].
|
||||
-p, --api-port Порт REST API [=8080].
|
||||
--api-cors-origin Разрешенный источник CORS для REST API при загрузке данных. '*' разрешит все
|
||||
источники, '' не разрешит ни одного. [=Запретить все кросс-оригинальные запросы
|
||||
для загрузки данных].
|
||||
--repo-kind Бэкенд для основного хранилища репозитория (fs, sqlite, leveldb) [=fs].
|
||||
-q, --storage-quota Размер общего квота хранилища, выделенного узлу [=$DefaultQuotaBytes].
|
||||
-t, --block-ttl Таймаут блока по умолчанию в секундах - 0 отключает ttl [=$DefaultBlockTtl].
|
||||
--block-mi Интервал времени в секундах - определяет частоту цикла обслуживания блоков: как
|
||||
часто блоки проверяются на истечение срока действия и очищаются
|
||||
[=$DefaultBlockMaintenanceInterval].
|
||||
--block-mn Количество блоков для проверки в каждом цикле обслуживания [=1000].
|
||||
-c, --cache-size Размер кэша блоков, 0 отключает кэш - может помочь на медленных жестких дисках
|
||||
[=0].
|
||||
|
||||
Доступные подкоманды:
|
||||
|
||||
codex persistence [ПАРАМЕТРЫ]... команда
|
||||
|
||||
Доступны следующие параметры:
|
||||
|
||||
--eth-provider URL JSON-RPC API узла Ethereum [=ws://localhost:8545].
|
||||
--eth-account Учетная запись Ethereum, используемая для контрактов хранения.
|
||||
--eth-private-key Файл, содержащий приватный ключ Ethereum для контрактов хранения.
|
||||
--marketplace-address Адрес развернутого контракта Marketplace.
|
||||
--validator Включает валидатор, требует узел Ethereum [=false].
|
||||
--validator-max-slots Максимальное количество слотов, которые мониторит валидатор [=1000].
|
||||
--reward-recipient Адрес для отправки выплат (например, вознаграждений и возвратов).
|
||||
--request-cache-size Максимальное количество StorageRequests, хранящихся в памяти. Уменьшает получение данных StorageRequest из контракта. [=128].
|
||||
|
||||
Доступные подкоманды:
|
||||
|
||||
codex persistence prover [ПАРАМЕТРЫ]...
|
||||
|
||||
Доступны следующие параметры:
|
||||
|
||||
-cd, --circuit-dir Директория, где Codex будет хранить данные схемы доказательств
|
||||
[=/root/.cache/codex/circuits].
|
||||
--circom-r1cs Файл r1cs для схемы хранения
|
||||
[=/root/.cache/codex/circuits/proof_main.r1cs].
|
||||
--circom-wasm Файл wasm для схемы хранения
|
||||
[=/root/.cache/codex/circuits/proof_main.wasm].
|
||||
--circom-zkey Файл zkey для схемы хранения
|
||||
[=/root/.cache/codex/circuits/proof_main.zkey].
|
||||
--circom-no-zkey Игнорировать файл zkey - использовать только для тестирования! [=false].
|
||||
--proof-samples Количество образцов для доказательства [=5].
|
||||
--max-slot-depth Максимальная глубина дерева слотов [=32].
|
||||
--max-dataset-depth Максимальная глубина дерева наборов данных [=8].
|
||||
--max-block-depth Максимальная глубина дерева Меркла сетевых блоков [=5].
|
||||
--max-cell-elements Максимальное количество элементов в ячейке [=67].
|
||||
```
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
Чтобы установить параметр конфигурации с помощью переменных окружения, сначала найдите нужный [параметр командной строки](#cli-options)
|
||||
и затем преобразуйте его следующим образом:
|
||||
|
||||
1. добавьте префикс `CODEX_`
|
||||
2. сделайте его заглавными буквами
|
||||
3. замените `-` на `_`
|
||||
|
||||
Например, чтобы настроить `--log-level`, используйте `CODEX_LOG_LEVEL` как имя переменной окружения.
|
||||
|
||||
> [!WARNING]
|
||||
> Некоторые параметры пока не могут быть настроены через переменные окружения [^multivalue-env-var] [^sub-commands].
|
||||
|
||||
### Файл конфигурации
|
||||
|
||||
Для установки значений конфигурации также можно использовать файл [TOML](https://toml.io/en/). Имена параметров конфигурации и соответствующие значения размещаются в файле, разделенные `=`. Имена параметров конфигурации можно получить из команды [`codex --help`](#cli-options), и они не должны включать префикс `--`. Например, уровень логирования узла (`--log-level`) можно настроить с помощью TOML следующим образом:
|
||||
|
||||
```toml
|
||||
log-level = "trace"
|
||||
```
|
||||
|
||||
Для параметров, таких как `bootstrap-node` и `listen-addrs`, которые принимают несколько значений, мы можем указать данные как массив
|
||||
```toml
|
||||
listen-addrs = [
|
||||
"/ip4/0.0.0.0/tcp/1234",
|
||||
"/ip4/0.0.0.0/tcp/5678"
|
||||
]
|
||||
```
|
||||
|
||||
Узел Codex может затем прочитать конфигурацию из этого файла, используя параметр `--config-file` командной строки:
|
||||
```shell
|
||||
codex --config-file=/path/to/your/config.toml
|
||||
```
|
||||
|
||||
Пожалуйста, проверьте [Запуск как сервис в Linux](#run-as-a-service-in-linux) для полного примера файла конфигурации.
|
||||
|
||||
## Запуск
|
||||
|
||||
В основном, мы можем запустить Codex в трех разных режимах:
|
||||
- [Узел Codex](#codex-node) - полезен для локального тестирования/разработки и базового обмена файлами.
|
||||
- [Узел Codex с поддержкой маркетплейса](#codex-node-with-marketplace-support) - вы можете обмениваться файлами и покупать хранилище, это основной режим и должен использоваться конечными пользователями.
|
||||
- [Узел хранения Codex](#codex-storage-node) - должен использоваться поставщиками хранилища или если вы хотите продавать свое локальное хранилище.
|
||||
|
||||
Мы также кратко рассмотрим [Узел начальной загрузки Codex](#codex-bootstrap-node).
|
||||
|
||||
### Использование бинарного файла
|
||||
|
||||
#### Узел Codex
|
||||
|
||||
Мы можем запустить Codex простым способом:
|
||||
```shell
|
||||
codex
|
||||
```
|
||||
> [!WARNING]
|
||||
> Эта команда может работать некорректно при использовании релизов GitHub [^data-dir].
|
||||
|
||||
Но, она будет использовать значение `data-dir` по умолчанию, и мы можем передать пользовательское:
|
||||
```shell
|
||||
codex --data-dir=datadir
|
||||
```
|
||||
|
||||
Это запустит Codex как изолированный экземпляр, и если мы хотим присоединиться к существующей сети, необходимо передать [узел начальной загрузки](#codex-bootstrap-node). Мы можем передать несколько узлов:
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--bootstrap-node=spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Убедитесь, что вы используете правильное значение для [сети](/networks/networks), к которой хотите присоединиться.
|
||||
|
||||
Также, чтобы сделать ваш узел Codex доступным для других участников сети, необходимо указать публичный IP-адрес, который можно использовать для доступа к вашему узлу:
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--nat=any
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> Мы можем установить публичный IP с помощью curl и сервиса определения IP, например [ip.codex.storage](https://ip.codex.storage).
|
||||
|
||||
После этого узел будет объявлять себя, используя ваш публичный IP, UDP-порт по умолчанию ([обнаружение](https://docs.libp2p.io/concepts/discovery-routing/overview/)) и динамический TCP-порт ([передача данных](https://docs.libp2p.io/concepts/transports/overview/)), которые можно настроить следующим образом:
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--nat=any \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070
|
||||
```
|
||||
|
||||
Таким образом, узел будет объявлять себя, используя указанный [multi-адрес](https://docs.libp2p.io/concepts/fundamentals/addressing/), и мы можем проверить это через [API](https://api.codex.storage/#tag/Debug/operation/getDebugInfo) вызов:
|
||||
```shell
|
||||
curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.announceAddresses'
|
||||
```
|
||||
```json
|
||||
[
|
||||
"/ip4/<ваш публичный IP>/tcp/8070"
|
||||
]
|
||||
```
|
||||
В основном, для P2P-коммуникации мы должны указать и настроить два порта:
|
||||
| # | Протокол | Функция | Параметр командной строки | Пример |
|
||||
| - | -------- | ------------------------------------------------------------------------ | ---------------- | -------------------------------------- |
|
||||
| 1 | UDP | [Обнаружение](https://docs.libp2p.io/concepts/discovery-routing/overview/) | `--disc-port` | `--disc-port=8090` |
|
||||
| 2 | TCP | [Транспорт](https://docs.libp2p.io/concepts/transports/overview/) | `--listen-addrs` | `--listen-addrs=/ip4/0.0.0.0/tcp/8070` |
|
||||
|
||||
Также необходимо настроить [проброс портов](#port-forwarding) на вашем интернет-маршрутизаторе, чтобы сделать ваш узел доступным для участников.
|
||||
|
||||
Итак, полностью рабочая базовая конфигурация будет выглядеть следующим образом:
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--nat=any \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 \
|
||||
--api-cors-origin="*"
|
||||
```
|
||||
|
||||
After node is up and running and port-forwarding configurations was done, we should be able to [Upload a file](/learn/using#upload-a-file)/[Download a file](/learn/using#download-a-file) in the network using [API](/developers/api).
|
||||
|
||||
You also can use [Codex App UI](https://app.codex.storage) for files upload/download.
|
||||
|
||||
And to be able to purchase a storage, we should run [Codex node with marketplace support](#codex-node-with-marketplace-support).
|
||||
|
||||
#### Узел Codex с поддержкой маркетплейса
|
||||
|
||||
Для запуска узла Codex с поддержкой маркетплейса необходимо добавить несколько дополнительных параметров:
|
||||
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--nat=any \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 \
|
||||
--api-cors-origin="*" \
|
||||
--eth-provider=ws://localhost:8545 \
|
||||
--eth-account=0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37 \
|
||||
--eth-private-key=0x06c7ac11d4ee1d0ccb53811b71802fa92d40a5a174afad9f2cb44f93498322c3 \
|
||||
--marketplace-address=0x1234567890123456789012345678901234567890
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Для работы с маркетплейсом необходимо иметь запущенный узел Ethereum и развернутый контракт Marketplace.
|
||||
|
||||
#### Узел хранения Codex
|
||||
|
||||
Узел хранения Codex - это специальный тип узла, который предоставляет хранилище для других участников сети. Для его запуска необходимо добавить параметр `--validator`:
|
||||
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--nat=any \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 \
|
||||
--api-cors-origin="*" \
|
||||
--eth-provider=ws://localhost:8545 \
|
||||
--eth-account=0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37 \
|
||||
--eth-private-key=0x06c7ac11d4ee1d0ccb53811b71802fa92d40a5a174afad9f2cb44f93498322c3 \
|
||||
--marketplace-address=0x1234567890123456789012345678901234567890 \
|
||||
--validator=true \
|
||||
--validator-max-slots=1000 \
|
||||
--reward-recipient=0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Узел хранения требует больше ресурсов, чем обычный узел, так как он должен хранить и обслуживать данные для других участников сети.
|
||||
|
||||
#### Узел начальной загрузки Codex
|
||||
|
||||
Узел начальной загрузки - это специальный узел, который помогает новым узлам присоединиться к сети. Для его запуска необходимо добавить параметр `--bootstrap`:
|
||||
|
||||
```shell
|
||||
codex \
|
||||
--data-dir=datadir \
|
||||
--nat=any \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 \
|
||||
--api-cors-origin="*" \
|
||||
--bootstrap=true
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Узел начальной загрузки должен быть доступен для других участников сети, поэтому важно правильно настроить проброс портов.
|
||||
|
||||
### Запуск как сервис в Linux
|
||||
|
||||
Для запуска Codex как системного сервиса в Linux можно использовать systemd. Создайте файл конфигурации `/etc/systemd/system/codex.service`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Codex Node
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=codex
|
||||
Group=codex
|
||||
WorkingDirectory=/home/codex
|
||||
ExecStart=/usr/local/bin/codex --config-file=/etc/codex/config.toml
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
И файл конфигурации `/etc/codex/config.toml`:
|
||||
|
||||
```toml
|
||||
data-dir = "/home/codex/.codex"
|
||||
bootstrap-node = [
|
||||
"spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P"
|
||||
]
|
||||
nat = "any"
|
||||
disc-port = 8090
|
||||
listen-addrs = ["/ip4/0.0.0.0/tcp/8070"]
|
||||
api-cors-origin = "*"
|
||||
eth-provider = "ws://localhost:8545"
|
||||
eth-account = "0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37"
|
||||
eth-private-key = "0x06c7ac11d4ee1d0ccb53811b71802fa92d40a5a174afad9f2cb44f93498322c3"
|
||||
marketplace-address = "0x1234567890123456789012345678901234567890"
|
||||
validator = true
|
||||
validator-max-slots = 1000
|
||||
reward-recipient = "0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37"
|
||||
```
|
||||
|
||||
Затем выполните следующие команды:
|
||||
|
||||
```shell
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable codex
|
||||
sudo systemctl start codex
|
||||
```
|
||||
|
||||
### Запуск как сервис в Windows
|
||||
|
||||
This functionality is not supported yet :construction:
|
||||
|
||||
### Использование Docker
|
||||
|
||||
Для запуска Codex в Docker можно использовать официальный образ:
|
||||
|
||||
```shell
|
||||
docker run -d \
|
||||
--name codex \
|
||||
-p 8070:8070 \
|
||||
-p 8090:8090/udp \
|
||||
-p 8080:8080 \
|
||||
-v /path/to/data:/root/.codex \
|
||||
codexstorage/codex:latest \
|
||||
--data-dir=/root/.codex \
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P \
|
||||
--nat=any \
|
||||
--disc-port=8090 \
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070 \
|
||||
--api-cors-origin="*"
|
||||
```
|
||||
|
||||
### Использование Docker Compose
|
||||
|
||||
Для более сложных конфигураций можно использовать Docker Compose. Создайте файл `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
codex:
|
||||
image: codexstorage/codex:latest
|
||||
container_name: codex
|
||||
ports:
|
||||
- "8070:8070"
|
||||
- "8090:8090/udp"
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- /path/to/data:/root/.codex
|
||||
command: >
|
||||
--data-dir=/root/.codex
|
||||
--bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P
|
||||
--nat=any
|
||||
--disc-port=8090
|
||||
--listen-addrs=/ip4/0.0.0.0/tcp/8070
|
||||
--api-cors-origin="*"
|
||||
```
|
||||
|
||||
Затем выполните:
|
||||
|
||||
```shell
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### На Kubernetes
|
||||
|
||||
Для запуска Codex в Kubernetes создайте файл `codex-deployment.yaml`:
|
||||
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: codex
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: codex
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: codex
|
||||
spec:
|
||||
containers:
|
||||
- name: codex
|
||||
image: codexstorage/codex:latest
|
||||
ports:
|
||||
- containerPort: 8070
|
||||
name: tcp
|
||||
- containerPort: 8090
|
||||
name: udp
|
||||
protocol: UDP
|
||||
- containerPort: 8080
|
||||
name: api
|
||||
volumeMounts:
|
||||
- name: codex-data
|
||||
mountPath: /root/.codex
|
||||
command:
|
||||
- codex
|
||||
- --data-dir=/root/.codex
|
||||
- --bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P
|
||||
- --nat=any
|
||||
- --disc-port=8090
|
||||
- --listen-addrs=/ip4/0.0.0.0/tcp/8070
|
||||
- --api-cors-origin="*"
|
||||
volumes:
|
||||
- name: codex-data
|
||||
persistentVolumeClaim:
|
||||
claimName: codex-pvc
|
||||
```
|
||||
|
||||
И примените его:
|
||||
|
||||
```shell
|
||||
kubectl apply -f codex-deployment.yaml
|
||||
```
|
||||
|
||||
## How-tos
|
||||
|
||||
### NAT Configuration
|
||||
|
||||
Use the `--nat` CLI flag to specify how your codex node should handle NAT traversal. Below are the available options:
|
||||
|
||||
**any**(default): This option will automatically try to detect your public IP by checking the routing table or using UPnP/PMP NAT traversal techniques. If successful, it will use the detected public IP and port for the announce address.
|
||||
|
||||
**upnp**: This option exclusively uses [UPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) to detect the public IP and create a port mapping entry, if your device supports UPnP.
|
||||
|
||||
**pmp**: This option uses only [NAT-PMP](https://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol) to detect the public IP and create a port mapping entry, if your device supports NAT-PMP.
|
||||
|
||||
**extIP:[Your Public IP]**:Use this option if you want to manually specify an external IP address and port for the announce address. When selecting this option, you'll need to configure **port forwarding** on your router to ensure that incoming traffic is directed to the correct internal IP and port.
|
||||
|
||||
### Port Forwarding
|
||||
|
||||
If you're running on a private network, you'll need to set up port forwarding to ensure seamless communication between the codex node and its peers. It's also recommended to configure appropriate firewall rules for TCP and UDP traffic.
|
||||
While the specific steps required vary based on your router, they can be summarised as follows:
|
||||
1. Find your public IP address by either visiting [ip-codex](https://ip.codex.storage/) or running `curl ip.codex.storage`
|
||||
2. Identify your [private](#determine-your-private-ip) IP address
|
||||
3. Access your router's settings by entering its IP address (typically [http://192.168.1.1](http://192.168.1.1/)) in your web browser
|
||||
4. Sign in with administrator credentials and locate the port forwarding settings
|
||||
5. Set up the discovery port forwarding rule with these settings:
|
||||
- External Port: 8090
|
||||
- Internal Port: 8090
|
||||
- Protocol: UDP
|
||||
- IP Address: Your device's private IP address
|
||||
6. Set up the libp2p port forwarding rule with these settings:
|
||||
- External Port: 8070
|
||||
- Internal Port: 8070
|
||||
- Protocol: TCP
|
||||
- IP Address: Your device's private IP address
|
||||
|
||||
#### Determine your private IP
|
||||
|
||||
To determine your private IP address, run the appropriate command for your OS:
|
||||
|
||||
**Linux**:
|
||||
```shell
|
||||
ip addr show | grep "inet " | grep -v 127.0.0.1
|
||||
```
|
||||
|
||||
**Windows**:
|
||||
```shell
|
||||
ipconfig | findstr /i "IPv4 Address"
|
||||
```
|
||||
|
||||
**MacOs**:
|
||||
```shell
|
||||
ifconfig | grep "inet " | grep -v 127.0.0.1
|
||||
```
|
||||
|
||||
## Known issues
|
||||
|
||||
[^multivalue-env-var]: Environment variables like `CODEX_BOOTSTRAP_NODE` and `CODEX_LISTEN_ADDRS` does not support multiple values. Please check [[Feature request] Support multiple SPR records via environment variable #525](https://github.com/codex-storage/nim-codex/issues/525), for more information.
|
||||
[^sub-commands]: Sub-commands `persistence` and `persistence prover` can't be set via environment variables.
|
||||
[^data-dir]: We should set data-dir explicitly when we use GitHub releases - [[BUG] Change codex default datadir from compile-time to run-time #923](https://github.com/codex-storage/nim-codex/issues/923)
|
||||
[^eth-account]: Please ignore `--eth-account` CLI option - [Drop support for --eth-account #727](https://github.com/codex-storage/nim-codex/issues/727).
|
||||
276
ru/learn/tokenomics-litepaper.md
Normal file
276
ru/learn/tokenomics-litepaper.md
Normal file
@ -0,0 +1,276 @@
|
||||
---
|
||||
outline: [1, 3]
|
||||
---
|
||||
# Лайтбук по токеномике Codex - Версия для тестовой сети
|
||||
|
||||
**Codex: Децентрализованный протокол хранения для долговременной информации**
|
||||
|
||||
# Юридические уведомления
|
||||
|
||||
*Информация, содержащаяся в этом документе, предназначена только для информационных целей и не является проспектом, предложением о покупке, приглашением к покупке или рекомендацией для любого токена или ценной бумаги. Ни этот документ, ни какое-либо его содержание не должны рассматриваться как создание каких-либо ожиданий или формирование основы любого контракта, обязательства или обязательства. Никакая информация здесь не должна рассматриваться как содержащая или полагаться на обещание, представление, гарантию или гарантию, будь то явная или подразумеваемая и будь то в отношении прошлого, настоящего или будущего в отношении проектов и вопросов, описанных здесь. Представленная информация является кратким изложением и не претендует на точность, надежность или полноту. Этот документ находится в постоянном юридическом рассмотрении и может быть изменен или дополнен в любое время без предварительного уведомления. Никакая ответственность не будет нести за точность, надежность или полноту информации, содержащейся здесь. Из-за высокой степени риска и неопределенности, описанных выше, никто не должен полагаться на какие-либо вопросы, описанные в этом документе. Любые токены, упомянутые в этом документе, не были зарегистрированы в соответствии с какими-либо законами о ценных бумагах и не могут быть предложены или проданы в любой юрисдикции, где такое предложение или продажа были бы запрещены.*
|
||||
|
||||
*Этот документ может содержать прогнозные заявления, которые основаны только на текущих ожиданиях, оценках, прогнозах, предположениях и проекциях о технологии, отрасли и рынках в целом. Прогнозные заявления, проекты, содержание и любые другие вопросы, описанные в этом документе, подвержены высокой степени риска и неопределенности. Дорожная карта, результаты, описания проектов, технические детали, функциональность и другие функции могут быть изменены на основе, среди прочего, рыночных условий, технических разработок и нормативной среды. Фактическая разработка и результаты, включая порядок и сроки, могут существенно отличаться от тех, которые ожидаются в этих прогнозных заявлениях.*
|
||||
|
||||
*Информация, содержащаяся в этом документе, не является финансовой, юридической, налоговой, инвестиционной, профессиональной или иной консультацией и не должна рассматриваться как таковая.*
|
||||
|
||||
# Обзор
|
||||
|
||||
## Область применения
|
||||
|
||||
Этот документ описывает токеномику Codex с элементами, отражающими развертывание тестовой сети протокола Codex.
|
||||
|
||||
## Что делает Codex
|
||||
|
||||
Codex - это современная децентрализованная платформа хранения, которая предлагает новое решение, повышающее гарантии долговечности данных для хранения огромных объемов данных, устраняя при этом любую зависимость от централизованных учреждений, которые могут привести к единой точке отказа.
|
||||
|
||||
В то время как централизованные системы хранения, такие как Google Cloud, заявляют о одиннадцати девятках долговечности, долговременное хранение файлов в распределенных системах, обеспечивающих устойчивость к цензуре и конфиденциальность, является жизненно важным предварительным условием для использования, такого как сохранение фактических записей истории в сетевых состояниях.
|
||||
|
||||
Хотя ни одна система не может гарантировать абсолютную защиту от потери данных, благодаря своей технической архитектуре, экономическим стимулам и алгоритмическому кодированию, Codex разработан для обеспечения высоко децентрализованного хранения данных с высокой долговечностью, устойчивостью к сбоям облака и устойчивостью к цензуре.
|
||||
|
||||
## Как работает Codex
|
||||
|
||||
Codex работает как сеть узлов хранения, называемых здесь **Поставщиками Хранения** (SP), которые хранят пользовательские данные в течение срока контракта, заключенного между SP и пользователями хранения, называемыми здесь просто **Клиентами**.
|
||||
|
||||
Контракты на хранение инициируются **Клиентом**, запрашивающим хранение определенного объема данных на определенный срок и по определенной цене за весь контракт. **Поставщики Хранения** берут на себя обязательства по слотам для хранения избыточных фрагментов этих данных.
|
||||
|
||||
Тот факт, что **SP** должны размещать залог (стейкать) для заполнения слота, помогает защититься от атак Сибил, способствуя разнообразию узлов хранения, выполняющих каждый контракт. Кроме того, этот залог действует как экономический стимул для обеспечения того, чтобы **SP** выполняли свои обязательства по периодическому доказательству того, что они все еще владеют рассматриваемыми данными.
|
||||
|
||||
Это достигается путем периодических вызовов **SP** для предоставления криптографических доказательств, демонстрирующих, что данные, которые они обязались хранить, могут быть извлечены. Codex включает Zero Knowledge (ZK) и Data Availability Sampling (DAS) для достижения недорогого, высокоэффективного и надежного обнаружения потери данных.
|
||||
|
||||
**SP** должны отвечать на эти вызовы, отправляя свои доказательства **Валидаторам**, которые проверяют действительность доказательств и публикуют в блокчейне только отсутствие доказательства. Это снижает затраты на проверку доказательств, не влияя на безопасность **Протокола**.
|
||||
|
||||
Если SP не докажут фиксированное количество раз, что они все еще владеют рассматриваемыми данными, или отправят недействительное доказательство, их залог частично сокращается. Штраф за сокращение - это фиксированный процент от общего залога. Это сокращение продолжается до тех пор, пока не будет достигнуто определенное количество сокращений, после чего весь залог сокращается. В этот момент слот SP считается "оставленным". Сокращенный залог используется как стимул для нового **SP** взять на себя неудачный слот через "механизм восстановления слота" (обсуждается далее). Это гарантирует, что залог обеспечивает экономический стимул для обеспечения долговечности данных.
|
||||
|
||||
Таким образом, Codex разработан таким образом, что рациональное поведение для **SP** состоит в хранении данных наиболее эффективным с точки зрения пространства способом для минимизации избыточных затрат на хранение, при этом балансируя необходимость достаточной избыточности для восстановления от возможности потери/повреждения данных штрафом за конфискацию их залога (сокращение).
|
||||
|
||||
Хотя технология Codex максимизирует восстанавливаемость и долговечность в случае частичной потери данных, экономические стимулы Codex координируют рациональных участников для обеспечения стабильной и предсказуемой среды для пользователей хранения данных. В основе этих экономических стимулов лежит утилитарный токен Codex (CDX), который служит залогом для защиты долговечности файлов и облегчения восстановления слотов, а также средством платежа для координации успешных контрактов на хранение.
|
||||
|
||||
# Жизненный цикл контракта
|
||||
|
||||
Рынок координирует сопоставление **Клиентов**, которые хотят платить за хранение файлов, с **Поставщиками Хранения**, которые предлагают пространство для хранения и размещают залог для получения платежей по контракту.
|
||||
|
||||
## Инициация запроса контракта
|
||||
|
||||
Как принцип проектирования, **Клиенты** должны публиковать условия сделки, которые они ищут, а Поставщики Хранения определяют приоритеты, какие сделки соответствуют их критериям и представляют лучшие сделки для принятия.
|
||||
|
||||
Когда создается запрос на контракт, **Клиент** вносит полную цену за длительность контракта на тот момент. Этот депозит действует как механизм предотвращения спама и гарантирует, что время и ресурсы **SP** не тратятся на заполнение слотов для сделок, за которые **Клиент** не завершает оплату.
|
||||
|
||||
## Поставщики Хранения заполняют запросы
|
||||
|
||||
Перед сопоставлением с контрактами на хранение **Поставщики Хранения** указывают свою совокупную доступность для новых контрактов.
|
||||
|
||||
На основе доступности каждого **SP** создается очередь для каждого **SP**, ранжирующая открытые запросы **Клиента** на контрактные сделки с наиболее благоприятными сделками наверху. Со временем эта очередь разрешается путем сопоставления **SP** с контрактами, совместимыми с их доступностью, начиная с сделок с самым высоким рейтингом.
|
||||
|
||||
При запуске **SP** не смогут настраивать алгоритм создания очереди, что означает, что **SP** с одинаковой доступностью будут иметь идентичные очереди (за исключением различий из-за функции случайности, которая увеличивает разнообразие **SP** для каждого контракта). В будущем ожидается, что **SP** смогут настраивать свой алгоритм ранжирования очереди.
|
||||
|
||||
Если **SP** сопоставляется с контрактом на хранение и они имеют право зарезервировать слот в контракте, они резервируют открытый слот, загружают данные слота от **Клиента** или существующих **SP**, чьи данные могут быть использованы для восстановления содержимого слота, создают начальное доказательство хранения и отправляют это доказательство вместе с залогом в **Протокол**.
|
||||
|
||||
Обратите внимание, что слот не считается подтвержденным как заполненный до тех пор, пока **SP** не разместит связанный залог и не создаст доказательство для слота.
|
||||
|
||||
## Контракт истекает до начала
|
||||
|
||||
Если все еще есть пустые слоты, когда истекает таймаут/срок действия запроса на контракт, сделка прекращается.
|
||||
|
||||
**Поставщики Хранения**, которые заполнили слоты, если таковые имеются, получают компенсацию за время, в течение которого они хранили данные слота, по указанной в запросе на контракт цене за ТБ в месяц. Остаток депозита **Клиента** возвращается.
|
||||
|
||||
Поскольку существует высокая вероятность наличия хотя бы нескольких занятых слотов, не должно быть необходимости в дополнительных штрафах для **Клиента** для предотвращения спам-запросов и стимулирования **Клиентов** к подаче привлекательных сделок.
|
||||
|
||||
## Контракт начинается
|
||||
|
||||
Контракт начинается, если *все* слоты заняты, то есть **SP** загрузили данные, разместили залог и опубликовали доказательства до достижения таймаута/срока действия запроса на контракт.
|
||||
|
||||
В этот момент применяется *комиссия протокола* к депозиту пользователя. Поступления сжигаются.
|
||||
|
||||
Остаток депозита клиента удерживается протоколом и будет использоваться для оплаты **SP** в конце контракта.
|
||||
|
||||
## Контракт выполняется
|
||||
|
||||
**Поставщики Хранения** должны отправлять доказательства **Валидаторам** в соответствии с частотой доказательств запроса на хранение, параметром, установленным Клиентом в запросе.
|
||||
|
||||
### Отсутствующие доказательства
|
||||
|
||||
Если **SP** не отправляет доказательства в течение последних периодов, они частично сокращаются. Штраф - это фиксированный процент от залога. После предоставления доказательства после частичного сокращения SP должен пополнить недостающий залог.
|
||||
|
||||
Если SP будет сокращен достаточное количество раз, весь их залог будет сокращен и конфискован, и SP считается оставившим свой слот. Предоставление правильного доказательства в этот момент не отменит начало механизма восстановления слота.
|
||||
|
||||
## Слот в контракте оставлен
|
||||
|
||||
Когда **SP** не отправляет достаточное количество доказательств, так что они сокращаются достаточное количество раз, их слот считается оставленным. Для стимулирования нового **SP** прийти и взять на себя оставленный слот (восстановление слота), 50% залога, конфискованного у **SP**, который оставил слот, используется как стимул для нового **SP**. Оставшийся конфискованный залог сжигается.
|
||||
|
||||
Это помогает согласовать экономический стимул для **SP** взять на себя оставленные слоты перед заполнением новых сделок, поскольку они могут эффективно заработать конфискованный залог за взятие на себя и выполнение оставленных слотов.
|
||||
|
||||
## Контракт не выполняется
|
||||
|
||||
Если в любой момент в течение срока действия контракта на хранение количество слотов, находящихся в оставленном состоянии (еще не восстановленных), достигает или превышает максимальное количество слотов хранения, которые могут быть потеряны до того, как данные станут невосстановимыми, то вся сделка хранения считается находящейся в состоянии *сбоя*.
|
||||
|
||||
Каждый залог, размещенный **Поставщиками Хранения**, сжигается. Это стимулирует **SP** не допускать, чтобы сделки хранения подвергались риску невыполнения обязательств. **SP** стимулируются *проактивно* избегать этого путем диверсификации своей инфраструктуры и контрактов на хранение, в которые они вступают, и *реактивно* путем резервного копирования своих собственных данных слота или даже резервного копирования данных из других слотов, чтобы они могли лучше помочь восстановлению слота, когда сделка приближается к состоянию сбоя.
|
||||
|
||||
Клиенты также получают обратно любой остаток от их первоначального платежа.
|
||||
|
||||
## Контракт завершает свой полный срок
|
||||
|
||||
Когда начатый контракт достигает своего предварительно указанного срока без предварительного невыполнения обязательств, контракт завершается.
|
||||
|
||||
Весь залог возвращается **SP**, которые в настоящее время заполняют слоты (обратите внимание, что из-за восстановления слота это не обязательно те же **SP**, которые заполняли слоты при начале контракта), и весь оставшийся платеж возвращается клиенту.
|
||||
|
||||
Сделки не могут быть автоматически продлены или продлены. Если **Клиент** желает продолжить сделку, он должен создать новый запрос на контракт хранения. В противном случае Клиенты могут получить свои данные.
|
||||
|
||||
# Токеномика CDX в тестовой сети
|
||||
|
||||
Токен CDX не существует в фазе тестовой сети. Описание ниже относится к механике тестового токена, а не к самому CDX, и для этой цели будет называться *CDX (тестовый токен)*.
|
||||
|
||||
Для избежания сомнений, *CDX (тестовый токен)* являются виртуальными предметами без какой-либо ценности и не конвертируются в какую-либо другую валюту, токен или любую другую форму собственности. Они предназначены исключительно для использования в целях включения токеномики и облегчения различных ролей в этой фазе тестовой сети.
|
||||
|
||||
## Роли
|
||||
|
||||
Протокол Codex имеет две основные роли, выполняемые участниками сети.
|
||||
|
||||
- **Клиенты**: платят Поставщикам Хранения в *CDX (тестовый токен)* за безопасное хранение своих данных в сети Codex на согласованный срок.
|
||||
- **Поставщики Хранения**: размещают залог в *CDX (тестовый токен)* для вступления в контракты на хранение с Клиентами в обмен на платеж, номинированный в *CDX (тестовый токен)*.
|
||||
- **Валидаторы**: размещают залог в *CDX (тестовый токен)* для проверки доказательств хранения в обмен на платеж, номинированный в *CDX (тестовый токен)*.
|
||||
|
||||
## Утилита токена
|
||||
|
||||
*CDX (тестовый токен)* используется как форма размещенного залога и средство платежа для защиты сети и доступа к ее услугам.
|
||||
|
||||
Залог в основном используется как механизм предотвращения спама и атак Сибил, страхование ответственности (например, компенсация Клиентам в случае катастрофической потери данных) и для обеспечения рационального поведения.
|
||||
|
||||
Платежи производятся Клиентами Поставщикам за оказанные услуги, такие как хранение данных в течение определенного времени или извлечение данных. Это реализуется через контракт Marketplace, который служит эскроу. Данные в контракте хранения распределяются по слотам, где каждый, в идеале, размещается на разных Поставщиках Хранения.
|
||||
|
||||
### **Для Клиентов**
|
||||
|
||||
- Оплата затрат на хранение и комиссий в *CDX (тестовый токен)* за хранение файлов.
|
||||
|
||||
### **Для Поставщиков Хранения**
|
||||
|
||||
- Размещение залога в *CDX (тестовый токен)* при принятии обязательств по новым контрактам хранения. Этот залог сокращается, если они не выполняют свои согласованные услуги.
|
||||
- Заработок *CDX (тестовый токен)* от залога сокращенных Поставщиков Хранения путем участия в механизме восстановления слота.
|
||||
- Заработок *CDX (тестовый токен)* от Клиентов при успешном завершении услуги хранения.
|
||||
|
||||
### Для Валидаторов
|
||||
|
||||
- Размещение залога в *CDX (тестовый токен)* для работы службы валидации. Этот залог сокращается, если они не отмечают доказательство как отсутствующее в течение предопределенного периода.
|
||||
- Заработок *CDX (тестовый токен)* от залога сокращенных Поставщиков Хранения путем отметки доказательств как пропущенных
|
||||
|
||||
На рисунке ниже показан поток *CDX (тестовый токен)* в системе.
|
||||
|
||||

|
||||
|
||||
## Механизмы захвата и накопления стоимости
|
||||
|
||||
Codex создает *ценность* для участников:
|
||||
|
||||
- Клиенты могут получить выгоду от хранения данных с сильными гарантиями долговечности;
|
||||
- Поставщики Хранения могут получать доход от своих свободных ресурсов или капитала, предоставляя услугу.
|
||||
- Валидаторы получают выплаты за отметку доказательств как отсутствующих.
|
||||
|
||||
Клиентам нужны токены *CDX (тестовый токен)* для запроса сделок хранения. *CDX (тестовый токен)* захватывает ценность, созданную для Клиентов, будучи для них *Токеном Передачи Ценности*.
|
||||
|
||||
Поставщики Хранения и Валидаторы вознаграждаются токеном *CDX (тестовый токен)* и также нуждаются в нем как в доказательстве приверженности Протоколу. Они рискуют быть сокращенными в обмен на вознаграждения. *CDX (тестовый токен)* захватывает ценность, созданную для Поставщиков, будучи для них *Токеном Работы*.
|
||||
|
||||
Следующие механизмы описывают, как ценность накапливается в токене *CDX (тестовый токен)*.
|
||||
|
||||
### Комиссия протокола за контракты
|
||||
|
||||
Если контракт отменяется до его начала, с депонированной суммы Клиента взимается небольшой штраф и возвращается, что помогает предотвратить запросы сделок низкого качества спама.
|
||||
|
||||
Если контракт успешно инициируется, протокол взимает комиссию за облегчение транзакции. Оставшаяся сумма становится доступной для платежей Поставщикам Хранения.
|
||||
|
||||
Собранные комиссии сжигаются в обоих случаях. Это создает небольшую, но постоянную дефляционную силу на предложение токена, которая пропорциональна спросу на продукт.
|
||||
|
||||
## Поведение и мотивации
|
||||
|
||||
### Клиенты
|
||||
|
||||
Клиенты имеют следующее рациональное поведение:
|
||||
|
||||
- Запрос хранения от сети с комиссией по справедливым рыночным ставкам
|
||||
- Предоставление данных узлам хранения, которые соответствуют их критериям
|
||||
|
||||
Они также могут демонстрировать следующее враждебное поведение, будь то по мотивам прибыли, злонамеренности или цензуры:
|
||||
|
||||
- Запрос хранения от сети, но никогда не предоставление данных доступными для любых или всех слотов
|
||||
- Запрос хранения от сети, но не предоставление данных в течение требуемого периода времени для успешного начала контракта
|
||||
- Запрос хранения от сети, но не предоставление данных конкретным Поставщикам
|
||||
- Атака на SP, которые размещают их данные, чтобы попытаться освободить свои платежные обязательства в конце контракта.
|
||||
|
||||
### **Поставщики Хранения**
|
||||
|
||||
Поставщики Хранения имеют следующее рациональное поведение:
|
||||
|
||||
- Принятие обязательств по слотам контрактов хранения для получения комиссии.
|
||||
- Предоставление доказательств хранения для их обязательных слотов для избежания штрафов за сокращение залога.
|
||||
- Предоставление данных любому, кто их запрашивает.
|
||||
- Принятие обязательств по неудачным слотам контрактов хранения для поддержания целостности данных
|
||||
|
||||
Они также могут демонстрировать следующее враждебное поведение, будь то по мотивам прибыли, злонамеренности или цензуры:
|
||||
|
||||
- Резервирование слота контракта, но никогда его заполнение (попытка предотвратить начало контракта)
|
||||
- Прекращение предоставления доказательств в середине срока действия контракта
|
||||
- Создание доказательств, но не предоставление данных доступными для других узлов для извлечения
|
||||
|
||||
### Валидаторы
|
||||
|
||||
Валидаторы имеют следующее рациональное поведение:
|
||||
|
||||
- Отметка доказательства как отсутствующего для получения комиссии
|
||||
- Отслеживание истории пропущенных доказательств **SP**
|
||||
- Запуск механизма восстановления слота, когда **SP** достигает максимально допустимого количества пропущенных доказательств
|
||||
|
||||
Они также могут демонстрировать следующее враждебное поведение, будь то по мотивам прибыли, злонамеренности или цензуры:
|
||||
|
||||
- Сговор с SP для игнорирования пропущенных доказательств
|
||||
- Наблюдение пропущенного доказательства, но не публикация его в блокчейне
|
||||
|
||||
## Механизмы стимулирования
|
||||
|
||||
Следующие механизмы помогают стимулировать ожидаемое поведение каждой роли и смягчать вредные.
|
||||
|
||||
### Клиенты предоставляют полную оплату заранее
|
||||
|
||||
Клиенты должны внести полную сумму в *CDX (тестовый токен)*, которая покрывает весь срок действия контракта хранения заранее. Это указывает на их обязательство заплатить определенную сумму за контракт хранения, хотя контракт начинается только тогда и если все слоты данных заполнены Поставщиками Хранения.
|
||||
|
||||
### Отложенный платеж Поставщикам Хранения
|
||||
|
||||
Поставщики Хранения получают платеж, связанный с предоставлением услуг, только в конце срока действия контракта.
|
||||
|
||||
### Требование залога
|
||||
|
||||
Для заполнения слота данных Поставщики Хранения сначала размещают и обязуются предоставить требуемый залог в форме *CDX (тестовый токен)* для этого слота, который затем подлежит сокращению, если они не публикуют доказательство для подтверждения слота.
|
||||
|
||||
Валидаторы также должны размещать залог для участия в службе валидации.
|
||||
|
||||
### Доказательство хранения
|
||||
|
||||
Контракты начинаются только тогда, когда все слоты данных заполнены. Слоты считаются заполненными только после того, как Поставщик Хранения разместил залог и связанное с ним доказательство для своего слота.
|
||||
|
||||
После начала контракта Поставщики Хранения регулярно предоставляют доказательство хранения.
|
||||
|
||||
### **Сокращение за пропущенные доказательства хранения**
|
||||
|
||||
В любой момент в течение срока действия контракта на хранение поставщик хранения сокращается, если он не предоставляет определенное количество доказательств хранения подряд. Если SP возобновляет предоставление доказательств хранения, он должен пополнить сокращенный залог. Штраф представляет собой фиксированный процент от общего залога.
|
||||
|
||||
### Механизм восстановления слота
|
||||
|
||||
Если поставщик хранения не отправляет требуемые доказательства хранения, когда это необходимо, после определенного количества сокращений весь его залог будет конфискован. Часть конфискованного залога используется как стимул для нового поставщика хранения, который восстанавливает и начинает обслуживать оставленный слот. Оставшаяся часть конфискованного залога в *CDX (тестовый токен)* сжигается.
|
||||
|
||||
### Сокращение невыполненного контракта
|
||||
|
||||
Если в любой момент в течение срока действия контракта на хранение количество оставленных (и еще не восстановленных) слотов данных достигает или превышает максимально допустимое количество потерянных слотов (что означает, что данные становятся невосстанавливаемыми), то весь контракт на хранение считается *невыполненным*.
|
||||
|
||||
На этом этапе залоги всех поставщиков хранения, обслуживающих слоты данных в контракте, полностью сокращаются.
|
||||
|
||||
### Возмещение клиентам
|
||||
|
||||
Если в любой момент в течение контракта достаточное количество слотов оставлено, так что данные не могут быть полностью восстановлены, клиенты получают обратно любой остаток от их первоначального платежа.
|
||||
|
||||
## Жизненный цикл токена
|
||||
|
||||
### Сжигание
|
||||
|
||||
*CDX (тестовый токен)* сжигаются в следующих случаях:
|
||||
|
||||
- Когда контракт на хранение не может быть инициирован, небольшая часть платежа клиента за сделку хранения сжигается. Это служит в первую очередь механизмом для предотвращения спама и обеспечения того, чтобы запросы сделок подавались по рыночным ценам для хранения.
|
||||
- Когда контракт на хранение успешно инициируется, протокол взимает комиссию за облегчение транзакции.
|
||||
- Когда поставщик хранения пропускает определенное количество доказательств хранения, часть залога сокращается и сжигается.
|
||||
- После разрешения механизма восстановления слота оставшаяся часть залога оставившего поставщика хранения сжигается.
|
||||
30
ru/learn/troubleshoot.md
Normal file
30
ru/learn/troubleshoot.md
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
---
|
||||
# Устранение неполадок
|
||||
|
||||
Проблемы с подключением вашего узла Codex к тестовой сети? Вот список распространенных проблем подключения Codex и шаги для их диагностики и решения. Если ваши проблемы не рассматриваются здесь, проверьте наши открытые проблемы на Github или свяжитесь с нами через наш Discord-сервер.
|
||||
|
||||
## Основы
|
||||
|
||||
Вы, вероятно, уже рассмотрели это. Но на всякий случай:
|
||||
|
||||
1. Используете ли вы VPN? Убедитесь, что он правильно настроен для переадресации нужных портов, и убедитесь, что вы объявляете свой узел по публичному IP-адресу, по которому к вам можно обратиться.
|
||||
1. Используете ли вы брандмауэр или другое программное обеспечение безопасности? Убедитесь, что он настроен на разрешение входящих подключений к портам обнаружения и одноранговой сети Codex.
|
||||
|
||||
## Проверьте ваш объявляемый адрес
|
||||
|
||||
Ваш узел объявляет ваш публичный адрес в сети, чтобы другие узлы могли подключиться к вам. Распространенной проблемой является сбой подключения из-за неправильных объявляемых адресов. Следуйте этим шагам, чтобы проверить ваш объявляемый адрес.
|
||||
|
||||
1. Перейдите на сайт whats-my-ip или `ip.codex.storage` и запишите IP-адрес.
|
||||
1. Перейдите в настройки WAN вашего маршрутизатора/модема и найдите публичный IP-адрес.
|
||||
1. Эти два адреса должны совпадать.
|
||||
1. Если они не совпадают, возможно, что A) вы находитесь за VPN. В этом случае вам нужно отключить VPN или убедиться, что вся переадресация настроена правильно. или B) Ваш интернет-провайдер поместил ваше восходящее соединение за вторичным NAT. Интернет-провайдеры делают это для экономии публичных IP-адресов. Адрес, назначенный вашему маршрутизатору/модему, не является "истинным" публичным интернет-адресом. Обычно эту проблему может решить ваш интернет-провайдер. Свяжитесь со службой поддержки и попросите их предоставить вам публичный адрес (иногда также называемый динамическим IP-адресом).
|
||||
1. Вызовите конечную точку отладки/информации Codex. Смотрите [Использование Codex](/learn/using) для подробностей.
|
||||
1. В JSON-ответе вы найдете "announceAddresses".
|
||||
1. IP-адрес, указанный там, должен соответствовать вашему публичному IP.
|
||||
1. Если объявляемый адрес в JSON неверен, вы можете настроить его вручную, изменив аргумент командной строки Codex `--nat` или установив переменную окружения `CODEX_NAT`. После того, как вы изменили свой объявляемый адрес и перезапустили узел, пожалуйста, дайте некоторое время (20-30 минут) для распространения обновленного адреса в сети.
|
||||
|
||||
Если вы выполнили эти шаги и не нашли никаких проблем, ваш объявляемый адрес, вероятно, не является проблемой.
|
||||
|
||||
|
||||
275
ru/learn/using.md
Normal file
275
ru/learn/using.md
Normal file
@ -0,0 +1,275 @@
|
||||
---
|
||||
outline: [2, 3]
|
||||
---
|
||||
# Использование Codex
|
||||
|
||||
Мы можем взаимодействовать с Codex, используя [REST API](/developers/api). В этом документе показаны несколько полезных примеров.
|
||||
|
||||
Также мы можем использовать [Пользовательский интерфейс приложения Codex](https://app.codex.storage).
|
||||
|
||||
Интерпретатор командной строки работает немного по-разному на [Linux/macOS](#linux-macos) и [Windows](#windows), поэтому используйте инструкции для вашей ОС.
|
||||
|
||||
## Linux/macOS
|
||||
|
||||
### Обзор
|
||||
1. [Отладка](#debug)
|
||||
2. [Загрузка файла](#upload-a-file)
|
||||
3. [Скачивание файла](#download-a-file)
|
||||
4. [Локальные данные](#local-data)
|
||||
5. [Создание доступности хранилища](#create-storage-availability)
|
||||
6. [Покупка хранилища](#purchase-storage)
|
||||
7. [Просмотр статуса покупки](#view-purchase-status)
|
||||
|
||||
### Отладка
|
||||
Простой способ проверить, что ваш узел запущен и работает:
|
||||
|
||||
```shell
|
||||
curl http://localhost:8080/api/codex/v1/debug/info \
|
||||
-w '\n'
|
||||
```
|
||||
|
||||
Это вернет JSON-структуру с множеством информации о вашем локальном узле. Она содержит информацию о пирах, которая может быть полезна при устранении проблем с подключением.
|
||||
|
||||
### Загрузка файла
|
||||
> [!Warning]
|
||||
> После загрузки файла в Codex другие узлы в сети могут его скачать. Пожалуйста, не загружайте ничего, что вы не хотите, чтобы другие видели, или правильно зашифруйте ваши данные *перед загрузкой*.
|
||||
|
||||
```shell
|
||||
curl -X POST \
|
||||
http://localhost:8080/api/codex/v1/data \
|
||||
-H 'Content-Type: application/octet-stream' \
|
||||
-w '\n' \
|
||||
-T <FILE>
|
||||
```
|
||||
|
||||
При успешной загрузке вы получите CID. Его можно использовать для скачивания файла с любого узла в сети.
|
||||
|
||||
> [!TIP]
|
||||
> Вы на [сервере Discord Codex](https://discord.gg/codex-storage)? Опубликуйте ваш CID в канале [# :wireless: | share-cids](https://discord.com/channels/895609329053474826/1278383098102284369), посмотрите, смогут ли другие его скачать. Codex пока не предоставляет метаданные файлов, поэтому если вы хотите, чтобы другие могли открыть ваш файл, скажите им, какое расширение ему дать.
|
||||
|
||||
### Скачивание файла
|
||||
Когда у вас есть CID данных, которые вы хотите скачать, вы можете использовать следующие команды:
|
||||
|
||||
```shell
|
||||
# вставьте ваш CID из предыдущего шага между кавычками
|
||||
CID="..."
|
||||
```
|
||||
|
||||
```shell
|
||||
curl "http://localhost:8080/api/codex/v1/data/${CID}/network/stream" \
|
||||
-o "${CID}.png"
|
||||
```
|
||||
|
||||
Пожалуйста, используйте правильное расширение для скачанного файла, потому что Codex пока не хранит информацию о типе содержимого или расширении.
|
||||
|
||||
### Локальные данные
|
||||
Вы можете просмотреть, какие наборы данных в настоящее время хранятся вашим узлом:
|
||||
|
||||
```shell
|
||||
curl http://localhost:8080/api/codex/v1/data \
|
||||
-w '\n'
|
||||
```
|
||||
|
||||
### Создание доступности хранилища
|
||||
> [!WARNING]
|
||||
> Этот шаг требует, чтобы Codex был запущен с опцией [`prover`](/learn/run#codex-storage-node).
|
||||
|
||||
Чтобы начать продавать пространство для хранения в сети, вы должны настроить ваш узел с помощью следующей команды. После настройки узел будет отслеживать запросы на хранение в блокчейне и автоматически вступать в контракты, соответствующие этим спецификациям. Для вступления и поддержания контрактов на хранение ваш узел должен предоставлять доказательства хранения с нулевым разглашением. Расчет этих доказательств увеличит использование CPU и RAM Codex.
|
||||
|
||||
```shell
|
||||
curl -X POST \
|
||||
http://localhost:8080/api/codex/v1/sales/availability \
|
||||
-H 'Content-Type: application/json' \
|
||||
-w '\n' \
|
||||
-d '{
|
||||
"totalSize": "8000000",
|
||||
"duration": "7200",
|
||||
"minPricePerBytePerSecond": "1000",
|
||||
"totalCollateral": "80000000"
|
||||
}'
|
||||
```
|
||||
|
||||
Для описания каждого параметра, пожалуйста, просмотрите [спецификацию](https://api.codex.storage/#tag/Marketplace/operation/offerStorage).
|
||||
|
||||
### Покупка хранилища
|
||||
Чтобы купить пространство для хранения в сети, сначала вы должны загрузить ваши данные. После получения CID используйте следующее для создания запроса на хранение.
|
||||
|
||||
Установите ваш CID:
|
||||
|
||||
```shell
|
||||
# вставьте ваш CID из предыдущего шага между кавычками
|
||||
CID="..."
|
||||
echo "CID: ${CID}"
|
||||
```
|
||||
|
||||
Затем вы можете выполнить:
|
||||
|
||||
```shell
|
||||
curl -X POST \
|
||||
"http://localhost:8080/api/codex/v1/storage/request/${CID}" \
|
||||
-w '\n' \
|
||||
-d '{
|
||||
"duration": "3600",
|
||||
"pricePerBytePerSecond": "2000",
|
||||
"proofProbability": "5",
|
||||
"expiry": "1200",
|
||||
"nodes": 5,
|
||||
"tolerance": 2,
|
||||
"collateralPerByte": "1"
|
||||
}'
|
||||
```
|
||||
|
||||
Для описания каждого параметра, пожалуйста, просмотрите [спецификацию](https://api.codex.storage/#tag/Marketplace/operation/createStorageRequest).
|
||||
|
||||
При успешном выполнении этот запрос вернет Purchase-ID.
|
||||
|
||||
### Просмотр статуса покупки
|
||||
Используя Purchase-ID, вы можете проверить статус вашего контракта на хранение:
|
||||
|
||||
```shell
|
||||
# вставьте ваш PURCHASE_ID из предыдущего шага между кавычками
|
||||
PURCHASE_ID="..."
|
||||
```
|
||||
|
||||
Затем:
|
||||
|
||||
```shell
|
||||
curl "http://localhost:8080/api/codex/v1/storage/purchases/${PURCHASE_ID}" \
|
||||
-w '\n'
|
||||
```
|
||||
|
||||
Это отобразит информацию о состоянии и ошибках для вашей покупки.
|
||||
| Состояние | Описание |
|
||||
|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Pending | Запрос ожидает подтверждения в блокчейне. |
|
||||
| Submitted | Запрос находится в блокчейне. Хосты теперь могут попытаться скачать данные. |
|
||||
| Started | Хосты скачали данные и предоставили доказательство хранения. |
|
||||
| Failed | Запрос был начат, но (слишком много) хостов не смогли предоставить доказательство хранения вовремя. Хотя данные все еще могут быть доступны в сети, для целей покупки они считаются утерянными. |
|
||||
| Finished | Запрос был успешно начат, и срок действия истек. |
|
||||
| Expired | (Недостаточно) хостов предоставили доказательство хранения до истечения срока действия запроса. |
|
||||
| Errored | Неудачное состояние. Поле 'error' должно рассказать больше. |
|
||||
|
||||
## Windows
|
||||
|
||||
### Обзор {#overview-windows}
|
||||
1. [Отладка](#debug-windows)
|
||||
2. [Загрузка файла](#upload-a-file-windows)
|
||||
3. [Скачивание файла](#download-a-file-windows)
|
||||
4. [Локальные данные](#local-data-windows)
|
||||
5. [Создание доступности хранилища](#create-storage-availability-windows)
|
||||
6. [Покупка хранилища](#purchase-storage-windows)
|
||||
7. [Просмотр статуса покупки](#view-purchase-status-windows)
|
||||
|
||||
### Отладка {#debug-windows}
|
||||
Простой способ проверить, что ваш узел запущен и работает:
|
||||
|
||||
```batch
|
||||
curl http://localhost:8080/api/codex/v1/debug/info
|
||||
```
|
||||
|
||||
Это вернет JSON-структуру с множеством информации о вашем локальном узле. Она содержит информацию о пирах, которая может быть полезна при устранении проблем с подключением.
|
||||
|
||||
### Загрузка файла {#upload-a-file-windows}
|
||||
> [!Warning]
|
||||
> После загрузки файла в Codex другие узлы в сети могут его скачать. Пожалуйста, не загружайте ничего, что вы не хотите, чтобы другие видели, или правильно зашифруйте ваши данные *перед загрузкой*.
|
||||
|
||||
```batch
|
||||
curl -X POST ^
|
||||
http://localhost:8080/api/codex/v1/data ^
|
||||
-H "Content-Type: application/octet-stream" ^
|
||||
-T <FILE>
|
||||
```
|
||||
|
||||
При успешной загрузке вы получите CID. Его можно использовать для скачивания файла с любого узла в сети.
|
||||
|
||||
> [!TIP]
|
||||
> Вы на [сервере Discord Codex](https://discord.gg/codex-storage)? Опубликуйте ваш CID в канале [# :wireless: | share-cids](https://discord.com/channels/895609329053474826/1278383098102284369), посмотрите, смогут ли другие его скачать. Codex пока не предоставляет метаданные файлов, поэтому если вы хотите, чтобы другие могли открыть ваш файл, скажите им, какое расширение ему дать.
|
||||
|
||||
### Скачивание файла {#download-a-file-windows}
|
||||
Когда у вас есть CID данных, которые вы хотите скачать, вы можете использовать следующие команды:
|
||||
|
||||
```batch
|
||||
:: вставьте ваш CID из предыдущего шага между кавычками
|
||||
set CID="..."
|
||||
```
|
||||
|
||||
```batch
|
||||
curl "http://localhost:8080/api/codex/v1/data/%CID%/network/stream" ^
|
||||
-o "%CID%.png"
|
||||
```
|
||||
|
||||
Пожалуйста, используйте правильное расширение для скачанного файла, потому что Codex пока не хранит информацию о типе содержимого или расширении.
|
||||
|
||||
### Локальные данные {#local-data-windows}
|
||||
Вы можете просмотреть, какие наборы данных в настоящее время хранятся вашим узлом:
|
||||
|
||||
```batch
|
||||
curl http://localhost:8080/api/codex/v1/data
|
||||
```
|
||||
|
||||
### Создание доступности хранилища {#create-storage-availability-windows}
|
||||
> [!WARNING]
|
||||
> Этот шаг требует, чтобы Codex был запущен с опцией [`prover`](/learn/run#codex-storage-node).
|
||||
|
||||
Чтобы начать продавать пространство для хранения в сети, вы должны настроить ваш узел с помощью следующей команды. После настройки узел будет отслеживать запросы на хранение в блокчейне и автоматически вступать в контракты, соответствующие этим спецификациям. Для вступления и поддержания контрактов на хранение ваш узел должен предоставлять доказательства хранения с нулевым разглашением. Расчет этих доказательств увеличит использование CPU и RAM Codex.
|
||||
|
||||
```batch
|
||||
curl -X POST ^
|
||||
http://localhost:8080/api/codex/v1/sales/availability ^
|
||||
-H "Content-Type: application/json" ^
|
||||
-d "{""totalSize"": ""8000000"", ""duration"": ""7200"", ""minPricePerBytePerSecond"": ""1000"", ""totalCollateral"": ""80000000""}"
|
||||
```
|
||||
|
||||
Для описания каждого параметра, пожалуйста, просмотрите [спецификацию](https://api.codex.storage/#tag/Marketplace/operation/offerStorage).
|
||||
|
||||
### Покупка хранилища {#purchase-storage-windows}
|
||||
Чтобы купить пространство для хранения в сети, сначала вы должны загрузить ваши данные. После получения CID используйте следующее для создания запроса на хранение.
|
||||
|
||||
Установите ваш CID:
|
||||
|
||||
```batch
|
||||
:: вставьте ваш CID из предыдущего шага между кавычками
|
||||
set CID="..."
|
||||
echo CID: %CID%
|
||||
```
|
||||
|
||||
Затем вы можете выполнить:
|
||||
|
||||
```batch
|
||||
curl -X POST ^
|
||||
"http://localhost:8080/api/codex/v1/storage/request/%CID%" ^
|
||||
-H "Content-Type: application/json" ^
|
||||
-d "{""duration"": ""3600"",""pricePerBytePerSecond"": ""2000"", ""proofProbability"": ""5"", ""expiry"": ""1200"", ""nodes"": 5, ""tolerance"": 2, ""**collateralPerByte**"": ""1""}"
|
||||
```
|
||||
|
||||
Для описания каждого параметра, пожалуйста, просмотрите [спецификацию](https://api.codex.storage/#tag/Marketplace/operation/createStorageRequest).
|
||||
|
||||
При успешном выполнении этот запрос вернет Purchase-ID.
|
||||
|
||||
### Просмотр статуса покупки {#view-purchase-status-windows}
|
||||
Используя Purchase-ID, вы можете проверить статус вашего контракта на хранение:
|
||||
|
||||
```batch
|
||||
:: вставьте ваш PURCHASE_ID из предыдущего шага между кавычками
|
||||
set PURCHASE_ID="..."
|
||||
```
|
||||
|
||||
Затем:
|
||||
|
||||
```batch
|
||||
curl "http://localhost:8080/api/codex/v1/storage/purchases/%PURCHASE_ID%"
|
||||
```
|
||||
|
||||
Это отобразит информацию о состоянии и ошибках для вашей покупки.
|
||||
| Состояние | Описание |
|
||||
|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Pending | Запрос ожидает подтверждения в блокчейне. |
|
||||
| Submitted | Запрос находится в блокчейне. Хосты теперь могут попытаться скачать данные. |
|
||||
| Started | Хосты скачали данные и предоставили доказательство хранения. |
|
||||
| Failed | Запрос был начат, но (слишком много) хостов не смогли предоставить доказательство хранения вовремя. Хотя данные все еще могут быть доступны в сети, для целей покупки они считаются утерянными. |
|
||||
| Finished | Запрос был успешно начат, и срок действия истек. |
|
||||
| Expired | (Недостаточно) хостов предоставили доказательство хранения до истечения срока действия запроса. |
|
||||
| Errored | Неудачное состояние. Поле 'error' должно рассказать больше. |
|
||||
|
||||
## Known issues
|
||||
1. We add a new line to the API calls to get more readable output, please check [[rest] Add line ending on responses #771](https://github.com/codex-storage/nim-codex/issues/771) for more details.
|
||||
39
ru/learn/what-is-codex.md
Normal file
39
ru/learn/what-is-codex.md
Normal file
@ -0,0 +1,39 @@
|
||||
# Что такое Codex?
|
||||
|
||||
Codex - это децентрализованный протокол хранения данных. Его основные особенности - сильная устойчивость к цензуре и гарантии долговечности. Он имеет эталонную реализацию с тем же названием, написанную на nim. Он служит слоем хранения в стеке технологий [Logos](https://logos.co/). Наряду с уровнем бездоверительных соглашений [Nomos](http://nomos.tech) и уровнем коммуникаций [Waku](http://waku.org), он является одним из фундаментальных проектов Logos Collective.
|
||||
|
||||
<br/>
|
||||
|
||||
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/XH-R2oJO7P4" title="" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowFullScreen><br>Powered by <a href="https://youtubeembedcode.com">youtube embed code</a> and <a href="https://snabblan.io/">snabblån utan uc</a></iframe></p>
|
||||
|
||||
### Мотивация
|
||||
|
||||
Ландшафт удаленного хранения данных доминируется все меньшим числом интернет-гигантов - Google, Microsoft, Amazon и т.д. Хотя эти сервисы получают высокие оценки с точки зрения пользовательского опыта и удобства, централизованное облачное хранение данных страдает от следующих недостатков:
|
||||
|
||||
- Цензура
|
||||
|
||||
- Отсутствие владения данными
|
||||
|
||||
- Утечки и простои
|
||||
|
||||
- Высокая стоимость
|
||||
|
||||
Централизованные провайдеры облачного хранения имеют устоявшуюся историю цензурирования данных и, как де-факто владельцы этих данных, имеют право делать это согласно своим собственным стандартам. Более того, централизованные платформы неоднократно становились жертвами крупных утечек данных и простоев сервисов.
|
||||
|
||||
Такие инциденты создали пробел на рынке для децентрализованной, устойчивой к цензуре альтернативы. Существующие одноранговые сети хранения и обмена файлами решают некоторые из этих проблем - такие как устойчивость к сбоям сети и желаемая устойчивость к цензуре. Однако без адекватных стимулов и сильных гарантий долговечности данных они не подходят в качестве основы для создания действительно неостановимых приложений.
|
||||
|
||||
Существующие децентрализованные решения для хранения данных претендуют на улучшение ранних P2P-платформ обмена файлами, таких как eDonkey и Gnutella. Однако рынку все еще не хватает децентрализованного решения для хранения, которое было бы эффективным с точки зрения использования хранилища и пропускной способности, при этом предлагая гарантии производительности и долговечности, сопоставимые с существующими решениями.
|
||||
|
||||
<br/>
|
||||
|
||||
### Децентрализация хранения данных
|
||||
|
||||
Codex был создан в 2021 году для удовлетворения потребности в долговечном, децентрализованном уровне хранения для стека технологий web3.
|
||||
|
||||
Название "Codex" отсылает к древней форме книги - намек на чрезвычайно надежные - 99,99% - гарантии долговечности механизма хранения данных.
|
||||
|
||||
Codex был объявлен как основной протокол Logos Collective в июне 2023 года.
|
||||
|
||||
### Тестовая сеть
|
||||
|
||||
Codex в настоящее время находится в фазе тестовой сети. Клиентская реализация является свободным и открытым программным обеспечением. Если вы заинтересованы, мы призываем вас попробовать Codex, подключиться к тестовой сети и поэкспериментировать с его функциями. [Начните здесь](./quick-start.md)
|
||||
236
ru/learn/whitepaper.md
Normal file
236
ru/learn/whitepaper.md
Normal file
@ -0,0 +1,236 @@
|
||||
<center>
|
||||
|
||||
**Аннотация**
|
||||
</center>
|
||||
|
||||
<div style="display: flex; justify-content: center; align-items: center;">
|
||||
<div style="text-align: justify; width: 80%">
|
||||
Интернет становится все более централизованным. По мере того как компании и частные лица все больше полагаются на централизованных облачных провайдеров для хранения данных, возрастает озабоченность по поводу конфиденциальности, цензуры и контроля пользователей, а также концентрации экономической власти в руках небольшого числа субъектов.
|
||||
|
||||
Хотя было несколько попыток предоставить альтернативы, современные децентрализованные сети хранения данных (DSN) часто не соответствуют базовым аспектам, таким как наличие надежных гарантий долговечности, эффективность работы или возможность масштабируемых доказательств хранения. Это, в свою очередь, приводит к решениям, которые либо: _i)_ бесполезны, так как могут потерять данные; _ii)_ не дружелюбны к децентрализации, так как требуют специализированного или дорогого оборудования, либо; _iii)_ экономически нецелесообразны, так как обременяют провайдеров слишком большими затратами помимо затрат на само оборудование для хранения.
|
||||
|
||||
В этой статье мы представляем Codex, новую децентрализованную сеть хранения данных с кодированием стирания, которая пытается решить эти проблемы. Codex использует кодирование стирания как часть механизмов избыточности и доказательств хранения, сочетая его с доказательствами с нулевым разглашением и ленивым восстановлением для достижения настраиваемых гарантий долговечности при скромных требованиях к оборудованию и энергии. Центральным элементом Codex является концепция Движка Децентрализованной Долговечности (DDE), формализованная нами структура для систематического решения вопросов избыточности данных, удаленного аудита, восстановления, стимулов и распределения данных в децентрализованных системах хранения.
|
||||
|
||||
Мы описываем архитектуру и механизмы Codex, включая его маркетплейс и системы доказательств, и предоставляем предварительный анализ надежности с использованием модели Непрерывной Временной Цепи Маркова (CTMC) для оценки гарантий долговечности. Codex представляет собой шаг к созданию децентрализованного, устойчивого и экономически жизнеспособного уровня хранения, критически важного для более широкой децентрализованной экосистемы.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## 1. Введение
|
||||
Производство данных растет ошеломляющими темпами, что имеет значительные последствия. Данные являются критическим активом для бизнеса, стимулируя принятие решений, стратегическое планирование и инновации. Люди все больше переплетают свою физическую жизнь с цифровым миром, тщательно документируя каждый аспект своей жизни, делая фотографии и видео, делясь своими взглядами и перспективами на текущие события, используя цифровые средства для общения и художественного самовыражения и т.д. Цифровые личности стали такими же важными, как и их физические аналоги, и эта тенденция только усиливается.
|
||||
|
||||
Однако текущая тенденция к централизации в интернете привела к ситуации, когда пользователи имеют мало или вообще не имеют контроля над своими личными данными и тем, как они используются. Крупные корпорации собирают, анализируют и монетизируют пользовательские данные, часто без согласия или прозрачности. Этот недостаток конфиденциальности оставляет людей уязвимыми для целевой рекламы, профилирования, слежки и потенциального неправомерного использования их личной информации.
|
||||
|
||||
Более того, концентрация данных и власти в руках нескольких централизованных субъектов создает значительный риск цензуры: платформы могут в одностороннем порядке решить удалить, изменить или подавить контент, который они считают нежелательным, эффективно ограничивая свободу выражения мнений пользователей и доступ к информации. Этот дисбаланс власти подрывает открытую и демократическую природу интернета, создавая эхо-камеры и ограничивая свободный обмен идеями.
|
||||
|
||||
Еще одним нежелательным аспектом централизации является экономический: по мере того как доминирование крупных технологических компаний в этой сфере превращается в олигополию, все доходы попадают в руки избранных немногих, в то время как барьер для входа становится все выше и выше.
|
||||
|
||||
Для решения этих проблем существует растущая потребность в децентрализованных технологиях. Децентрализованные технологии позволяют пользователям: _i)_ владеть и контролировать свои данные, предоставляя безопасные и прозрачные механизмы для хранения и обмена данными, и _ii)_ участвовать в экономике хранения в качестве провайдеров, позволяя частным лицам и организациям получать свою долю доходов. Пользователи могут выборочно делиться своими данными с доверенными сторонами, сохранять возможность отзывать доступ при необходимости и монетизировать свои данные и свое оборудование, если они того пожелают. Этот сдвиг парадигмы в сторону пользовательского контроля над данными и инфраструктурой имеет потенциал для создания более справедливой и прозрачной цифровой экосистемы.
|
||||
|
||||
Несмотря на их потенциальные преимущества, однако, отсутствие эффективного и надежного децентрализованного хранения оставляет ключевой пробел, который необходимо устранить, прежде чем можно будет серьезно рассматривать любую концепцию децентрализованного технологического стека.
|
||||
|
||||
В ответ на эти вызовы мы представляем Codex: новую децентрализованную сеть хранения данных с кодированием стирания, которая использует кодирование стирания для избыточности и эффективных доказательств хранения. Этот метод обеспечивает беспрецедентную надежность и позволяет хранить большие наборы данных, превышающие размер любого отдельного узла в сети, в долговечной и безопасной форме. Наши компактные и эффективные доказательства хранения могут обнаруживать и предотвращать катастрофическую потерю данных с высокой точностью, при этом требуя относительно скромных требований к оборудованию и электроэнергии - два предварительных условия для достижения истинной децентрализации. Кроме того, мы вводим и формализуем в этой статье понятие долговечности в децентрализованных сетях хранения через новую концепцию, которую мы называем _Движком Децентрализованной Долговечности_ (DDE).
|
||||
|
||||
Остальная часть статьи организована следующим образом. Сначала мы обсуждаем контекст, на котором построен Codex (Раздел 2), расширяя проблемы централизованного облачного хранения и предоставляя информацию о предыдущих подходах к децентрализованным альтернативам - а именно, p2p-сетям, блокчейнам и DSN. Затем мы представляем концептуальную структуру, лежащую в основе Codex в Разделе 3 - Движок Децентрализованной Долговечности (DDE) - за которым следует более подробное описание механизмов Codex и того, как он материализуется как DDE в Разделе 4. Раздел 5 затем представляет предварительный анализ надежности, который помещает параметры хранения Codex рядом с более формальными гарантиями долговечности. Наконец, Раздел 6 предоставляет выводы и текущую работу.
|
||||
|
||||
## 2. Предыстория и контекст
|
||||
В этом разделе мы обсуждаем контекст, на котором построен Codex. Мы начинаем с обсуждения проблем централизованного облачного хранения, а затем переходим к обзору предыдущих подходов к децентрализованным альтернативам - а именно, p2p-сетям, блокчейнам и DSN.
|
||||
|
||||
### 2.1 Проблемы централизованного облачного хранения
|
||||
Централизованное облачное хранение стало доминирующей моделью для хранения данных в интернете. Крупные технологические компании, такие как Amazon, Google и Microsoft, предоставляют услуги облачного хранения, которые позволяют пользователям хранить и получать доступ к своим данным из любого места. Хотя эти услуги удобны и надежны, они также создают несколько проблем:
|
||||
|
||||
1. **Конфиденциальность**: Централизованные провайдеры облачного хранения имеют доступ к данным пользователей и могут использовать их для таргетированной рекламы, профилирования и других целей. Это создает значительные риски для конфиденциальности пользователей.
|
||||
|
||||
2. **Цензура**: Централизованные провайдеры могут в одностороннем порядке решить удалить или изменить контент, который они считают нежелательным. Это может привести к цензуре и ограничению свободы выражения мнений.
|
||||
|
||||
3. **Экономическая концентрация**: Доминирование нескольких крупных технологических компаний в сфере облачного хранения создает олигополию, где все доходы попадают в руки избранных немногих. Это создает высокий барьер для входа и ограничивает конкуренцию.
|
||||
|
||||
4. **Уязвимость к атакам**: Централизованные системы хранения являются привлекательными целями для хакеров и других злоумышленников. Одна успешная атака может привести к компрометации большого количества данных.
|
||||
|
||||
### 2.2 Предыдущие подходы к децентрализованному хранению
|
||||
Было несколько попыток предоставить альтернативы централизованному облачному хранению. Вот некоторые из основных подходов:
|
||||
|
||||
1. **P2P-сети**: P2P-сети, такие как BitTorrent, позволяют пользователям обмениваться файлами напрямую, без необходимости в центральном сервере. Хотя это обеспечивает некоторую децентрализацию, P2P-сети часто не предоставляют надежных гарантий долговечности и могут быть уязвимы к атакам сибил.
|
||||
|
||||
2. **Блокчейны**: Блокчейны, такие как Ethereum, предоставляют децентрализованную платформу для хранения данных. Однако, из-за высокой стоимости хранения данных в блокчейне, этот подход не подходит для хранения больших объемов данных.
|
||||
|
||||
3. **Децентрализованные сети хранения (DSN)**: DSN, такие как IPFS и Filecoin, пытаются предоставить децентрализованное решение для хранения данных. Однако, многие из этих систем либо не предоставляют надежных гарантий долговечности, либо требуют специализированного оборудования, либо экономически нецелесообразны.
|
||||
|
||||
Codex пытается решить эти проблемы, предоставляя децентрализованную сеть хранения данных с кодированием стирания, которая сочетает в себе надежность, эффективность и экономическую целесообразность.
|
||||
|
||||
## 3. Движки Децентрализованной Долговечности (DDE)
|
||||
В этом разделе мы представляем концепцию Движка Децентрализованной Долговечности (DDE) - структуру, которую мы разработали для систематического решения вопросов долговечности в децентрализованных системах хранения. DDE представляет собой набор механизмов, которые работают вместе для обеспечения надежного хранения данных в децентрализованной среде.
|
||||
|
||||
### 3.1 Определение DDE
|
||||
Движок Децентрализованной Долговечности (DDE) - это система, которая обеспечивает надежное хранение данных в децентрализованной сети. DDE состоит из следующих ключевых компонентов:
|
||||
|
||||
1. **Механизмы избыточности**: DDE использует кодирование стирания для создания избыточности данных. Это позволяет системе восстанавливать данные даже при потере некоторых фрагментов.
|
||||
|
||||
2. **Механизмы удаленного аудита**: DDE включает в себя протоколы для проверки того, что провайдеры хранения действительно хранят данные, которые они обещали хранить. Это достигается с помощью доказательств с нулевым разглашением.
|
||||
|
||||
3. **Механизмы восстановления**: DDE включает в себя протоколы для восстановления данных в случае их потери. Это может включать в себя ленивое восстановление, где восстановление происходит только при необходимости.
|
||||
|
||||
4. **Механизмы стимулов**: DDE использует криптоэкономические механизмы для стимулирования провайдеров хранения к правильному поведению. Это включает в себя награды за правильное хранение данных и штрафы за неправильное поведение.
|
||||
|
||||
5. **Механизмы распределения данных**: DDE включает в себя стратегии для распределения данных по сети, чтобы минимизировать риск потери данных и максимизировать доступность.
|
||||
|
||||
### 3.2 Преимущества DDE
|
||||
DDE предлагает несколько преимуществ по сравнению с традиционными подходами к децентрализованному хранению:
|
||||
|
||||
1. **Настраиваемые гарантии долговечности**: DDE позволяет настраивать уровень избыточности и другие параметры для достижения желаемых гарантий долговечности.
|
||||
|
||||
2. **Эффективность**: DDE использует эффективные алгоритмы для кодирования стирания и доказательств хранения, что позволяет минимизировать требования к оборудованию и энергии.
|
||||
|
||||
3. **Экономическая целесообразность**: DDE использует криптоэкономические механизмы для создания устойчивой экономики хранения, где провайдеры могут получать доход от предоставления услуг хранения.
|
||||
|
||||
4. **Масштабируемость**: DDE может масштабироваться для хранения больших объемов данных, превышающих размер любого отдельного узла в сети.
|
||||
|
||||
### 3.3 Реализация DDE в Codex
|
||||
Codex реализует DDE через следующие механизмы:
|
||||
|
||||
1. **Кодирование стирания**: Codex использует кодирование стирания для создания избыточности данных. Это позволяет системе восстанавливать данные даже при потере некоторых фрагментов.
|
||||
|
||||
2. **Доказательства хранения**: Codex использует доказательства с нулевым разглашением для проверки того, что провайдеры хранения действительно хранят данные.
|
||||
|
||||
3. **Ленивое восстановление**: Codex использует ленивое восстановление для минимизации накладных расходов на восстановление данных.
|
||||
|
||||
4. **Маркетплейс**: Codex включает в себя маркетплейс для сопоставления провайдеров хранения с клиентами и управления экономикой хранения.
|
||||
|
||||
5. **Распределение данных**: Codex использует стратегии для распределения данных по сети, чтобы минимизировать риск потери данных и максимизировать доступность.
|
||||
|
||||
## 4. Codex: Движок Децентрализованной Долговечности
|
||||
В этом разделе мы описываем, как Codex реализует концепцию DDE, представленную в предыдущем разделе. Мы начинаем с обзора архитектуры Codex, а затем переходим к более подробному описанию его механизмов.
|
||||
|
||||
### 4.1 Архитектура Codex
|
||||
Codex состоит из следующих основных компонентов:
|
||||
|
||||
1. **Узлы хранения**: Узлы хранения отвечают за хранение данных и предоставление доказательств хранения. Они участвуют в маркетплейсе, предлагая свои услуги хранения клиентам.
|
||||
|
||||
2. **Клиентские узлы**: Клиентские узлы взаимодействуют с узлами хранения для загрузки и скачивания данных. Они также участвуют в маркетплейсе, запрашивая услуги хранения.
|
||||
|
||||
3. **Маркетплейс**: Маркетплейс - это смарт-контракт, который сопоставляет провайдеров хранения с клиентами и управляет экономикой хранения.
|
||||
|
||||
4. **Сеть P2P**: Сеть P2P обеспечивает связь между узлами и обмен данными.
|
||||
|
||||
### 4.2 Механизмы Codex
|
||||
Codex реализует следующие механизмы для обеспечения надежного хранения данных:
|
||||
|
||||
1. **Кодирование стирания**: Codex использует кодирование стирания для создания избыточности данных. Это позволяет системе восстанавливать данные даже при потере некоторых фрагментов.
|
||||
|
||||
2. **Доказательства хранения**: Codex использует доказательства с нулевым разглашением для проверки того, что провайдеры хранения действительно хранят данные. Это включает в себя:
|
||||
- **Доказательства извлекаемости**: Доказательства того, что данные могут быть извлечены из хранилища.
|
||||
- **Доказательства хранения**: Доказательства того, что данные действительно хранятся в хранилище.
|
||||
|
||||
3. **Ленивое восстановление**: Codex использует ленивое восстановление для минимизации накладных расходов на восстановление данных. Восстановление происходит только при необходимости, когда данные находятся под угрозой потери.
|
||||
|
||||
4. **Маркетплейс**: Маркетплейс Codex включает в себя следующие компоненты:
|
||||
- **Запросы на хранение**: Клиенты могут создавать запросы на хранение, указывая параметры, такие как размер данных, продолжительность хранения и награда.
|
||||
- **Предложения хранения**: Провайдеры хранения могут создавать предложения, указывая параметры, такие как доступное пространство, цена и условия.
|
||||
- **Сопоставление**: Маркетплейс сопоставляет запросы с предложениями на основе параметров и условий.
|
||||
- **Управление**: Маркетплейс управляет жизненным циклом запросов и предложений, включая создание, выполнение и завершение.
|
||||
|
||||
5. **Распределение данных**: Codex использует стратегии для распределения данных по сети, чтобы минимизировать риск потери данных и максимизировать доступность. Это включает в себя:
|
||||
- **Распределение фрагментов**: Фрагменты данных распределяются по узлам хранения для минимизации корреляции отказов.
|
||||
- **Балансировка нагрузки**: Нагрузка распределяется по узлам хранения для предотвращения перегрузки.
|
||||
|
||||
### 4.3 Гарантии долговечности
|
||||
Codex предоставляет следующие гарантии долговечности:
|
||||
|
||||
1. **Настраиваемые гарантии**: Пользователи могут настраивать параметры хранения, такие как уровень избыточности и продолжительность хранения, для достижения желаемых гарантий долговечности.
|
||||
|
||||
2. **Формальные гарантии**: Codex предоставляет формальные гарантии долговечности через анализ надежности, который учитывает параметры системы и вероятность отказов.
|
||||
|
||||
3. **Экономические гарантии**: Codex использует криптоэкономические механизмы для обеспечения того, что провайдеры хранения имеют стимулы для правильного поведения и поддержания данных.
|
||||
|
||||
## 5. Анализ надежности
|
||||
В этом разделе мы представляем предварительный анализ надежности Codex, используя модель Непрерывной Временной Цепи Маркова (CTMC) для оценки гарантий долговечности. Мы начинаем с описания модели, а затем переходим к результатам анализа.
|
||||
|
||||
### 5.1 Модель надежности
|
||||
Мы моделируем надежность Codex с помощью CTMC, где состояния представляют собой различные конфигурации системы, а переходы между состояниями представляют собой события, такие как отказы узлов и восстановление данных. Модель учитывает следующие параметры:
|
||||
|
||||
1. **Параметры узлов**:
|
||||
- $\lambda$: Интенсивность отказов узлов (количество отказов в единицу времени).
|
||||
- $\mu$: Интенсивность восстановления узлов (количество восстановлений в единицу времени).
|
||||
|
||||
2. **Параметры данных**:
|
||||
- $k$: Количество исходных фрагментов данных.
|
||||
- $n$: Общее количество фрагментов после кодирования стирания.
|
||||
- $m$: Минимальное количество фрагментов, необходимых для восстановления данных.
|
||||
|
||||
3. **Параметры сети**:
|
||||
- $N$: Общее количество узлов в сети.
|
||||
- $S$: Количество узлов хранения.
|
||||
|
||||
### 5.2 Результаты анализа
|
||||
Наш анализ показывает, что Codex может обеспечить высокие гарантии долговечности при разумных параметрах системы. Вот некоторые из ключевых результатов:
|
||||
|
||||
1. **Вероятность потери данных**: Вероятность потери данных уменьшается с увеличением уровня избыточности ($n/k$) и количества узлов хранения ($S$).
|
||||
|
||||
2. **Время до потери данных**: Среднее время до потери данных увеличивается с увеличением уровня избыточности и количества узлов хранения.
|
||||
|
||||
3. **Влияние параметров**: На надежность системы влияют следующие параметры:
|
||||
- **Уровень избыточности**: Более высокий уровень избыточности приводит к более высокой надежности.
|
||||
- **Количество узлов хранения**: Большее количество узлов хранения приводит к более высокой надежности.
|
||||
- **Интенсивность отказов**: Более низкая интенсивность отказов приводит к более высокой надежности.
|
||||
- **Интенсивность восстановления**: Более высокая интенсивность восстановления приводит к более высокой надежности.
|
||||
|
||||
### 5.3 Практические последствия
|
||||
Наш анализ имеет следующие практические последствия для проектирования и эксплуатации систем на основе Codex:
|
||||
|
||||
1. **Выбор параметров**: Пользователи могут выбирать параметры системы, такие как уровень избыточности и количество узлов хранения, для достижения желаемых гарантий долговечности.
|
||||
|
||||
2. **Мониторинг и обслуживание**: Системы на основе Codex должны регулярно контролироваться и обслуживаться для поддержания надежности.
|
||||
|
||||
3. **Масштабирование**: Системы на основе Codex могут масштабироваться для хранения больших объемов данных при сохранении высоких гарантий долговечности.
|
||||
|
||||
## 6. Выводы и будущая работа
|
||||
В этой статье мы представили Codex, новую децентрализованную сеть хранения данных с кодированием стирания, которая пытается решить проблемы централизованного облачного хранения. Мы ввели концепцию Движка Децентрализованной Долговечности (DDE) как структуру для систематического решения вопросов долговечности в децентрализованных системах хранения.
|
||||
|
||||
### 6.1 Основные выводы
|
||||
Наши основные выводы включают:
|
||||
|
||||
1. **DDE как структура**: DDE предоставляет полезную структуру для проектирования и анализа децентрализованных систем хранения, систематически решая вопросы избыточности, удаленного аудита, восстановления, стимулов и распределения данных.
|
||||
|
||||
2. **Эффективность Codex**: Codex демонстрирует, что можно достичь высоких гарантий долговечности при разумных требованиях к оборудованию и энергии, используя кодирование стирания, доказательства с нулевым разглашением и ленивое восстановление.
|
||||
|
||||
3. **Экономическая целесообразность**: Codex показывает, что можно создать устойчивую экономику хранения, где провайдеры могут получать доход от предоставления услуг хранения, а клиенты могут получать надежные услуги хранения по конкурентоспособным ценам.
|
||||
|
||||
### 6.2 Будущая работа
|
||||
Наша будущая работа будет сосредоточена на следующих направлениях:
|
||||
|
||||
1. **Формальная верификация**: Мы планируем разработать формальную верификацию механизмов Codex, включая доказательства хранения и протоколы восстановления.
|
||||
|
||||
2. **Оптимизация производительности**: Мы планируем исследовать способы оптимизации производительности Codex, включая улучшение алгоритмов кодирования стирания и доказательств хранения.
|
||||
|
||||
3. **Расширение функциональности**: Мы планируем расширить функциональность Codex, включая поддержку дополнительных типов данных и приложений.
|
||||
|
||||
4. **Интеграция с другими системами**: Мы планируем исследовать способы интеграции Codex с другими децентрализованными системами, такими как блокчейны и p2p-сети.
|
||||
|
||||
### 6.3 Заключение
|
||||
Codex представляет собой шаг к созданию децентрализованного, устойчивого и экономически жизнеспособного уровня хранения, критически важного для более широкой децентрализованной экосистемы. Мы надеемся, что наша работа вдохновит дальнейшие исследования и разработки в области децентрализованного хранения данных.
|
||||
|
||||
## Ссылки
|
||||
[^zippia_cloud_report]: Zippia. "Cloud Computing Statistics 2023". Доступно по адресу: https://www.zippia.com/advice/cloud-computing-statistics/
|
||||
|
||||
[^s3_reinvent_19]: Amazon Web Services. "AWS re:Invent 2019: Amazon S3: A Deep Dive into Durability and Availability". Доступно по адресу: https://www.youtube.com/watch?v=H0g9Qw0vH9c
|
||||
|
||||
[^liu_19]: Liu, J., et al. "Understanding the Impact of Government Censorship on the Internet". ACM SIGCOMM Computer Communication Review, 2019.
|
||||
|
||||
[^multicloud]: Flexera. "State of the Cloud Report 2023". Доступно по адресу: https://www.flexera.com/about-us/press-center/flexera-releases-2023-state-of-the-cloud-report.html
|
||||
|
||||
[^feng_14]: Feng, X., et al. "Market Power and Pricing in Cloud Computing". Journal of Cloud Computing, 2014.
|
||||
|
||||
[^cohen_01]: Cohen, B. "Incentives Build Robustness in BitTorrent". Workshop on Economics of Peer-to-Peer Systems, 2003.
|
||||
|
||||
[^ipfs_website]: Protocol Labs. "IPFS - The InterPlanetary File System". Доступно по адресу: https://ipfs.io/
|
||||
|
||||
[^nakamoto_08]: Nakamoto, S. "Bitcoin: A Peer-to-Peer Electronic Cash System". 2008.
|
||||
|
||||
[^buterin_13]: Buterin, V. "Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform". 2013.
|
||||
|
||||
[^kostamis_24]: Kostamis, D., et al. "On the Cost of Storing Data on Ethereum". IEEE Blockchain Technical Briefs, 2024.
|
||||
|
||||
[^chaudhry_24]: Chaudhry, N., et al. "Cryptoeconomic Security: A Survey". IEEE Access, 2024.
|
||||
|
||||
[^protocol_17]: Protocol Labs. "Filecoin: A Decentralized Storage Network". 2017.
|
||||
|
||||
[^bassam_18]: Bassam, S., et al. "On the Impossibility of Proving Availability in Decentralized Storage Networks". IEEE Security & Privacy, 2018.
|
||||
19
ru/networks/networks.md
Normal file
19
ru/networks/networks.md
Normal file
@ -0,0 +1,19 @@
|
||||
# Сети Codex
|
||||
|
||||
В Codex мы запускаем несколько сетей, которые используются для разных целей
|
||||
| Сеть | Статус | Блокчейн | Назначение |
|
||||
| ----------------- | ----------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------- |
|
||||
| Devnet | :building_construction: | [Geth PoA](https://geth.ethereum.org/docs/fundamentals/private-network) | Предназначена для целей разработки и следует последним сборкам `master` |
|
||||
| [Testnet](testnet) | :white_check_mark: | [Geth PoA](https://geth.ethereum.org/docs/fundamentals/private-network) | Публичная сеть для тестирования, следует последним релизам |
|
||||
| Mainnet | :construction: | :construction: | Основная публичная сеть |
|
||||
|
||||
Основные различия между сетями следующие:
|
||||
- Назначение сети
|
||||
- Bootstrap-узлы
|
||||
- Количество узлов хранения
|
||||
- Доступный объем хранения
|
||||
- Сеть блокчейна
|
||||
- Версия контракта маркетплейса
|
||||
- Набор файлов схем для верификации доказательств
|
||||
|
||||
Самый простой способ начать использовать Codex - это [Присоединиться к Testnet](testnet).
|
||||
203
ru/networks/testnet.md
Normal file
203
ru/networks/testnet.md
Normal file
@ -0,0 +1,203 @@
|
||||
---
|
||||
outline: [2, 4]
|
||||
---
|
||||
# Codex Testnet
|
||||
|
||||
Codex Testnet запущен и готов к использованию для тестирования.
|
||||
|
||||
Ваше участие в Codex Testnet регулируется [Условиями использования Codex Testnet](https://github.com/codex-storage/codex-testnet-starter/blob/master/Codex%20Testnet%20Terms%20and%20Conditions.pdf) и [Политикой конфиденциальности Codex Testnet](https://github.com/codex-storage/codex-testnet-starter/blob/master/Codex%20Testnet%20Privacy%20Policy.pdf).
|
||||
|
||||
**Руководства.** У нас есть базовые руководства по настройке Storage Client, который можно использовать для загрузки и хранения файлов путем покупки хранилища в сети Codex. Мы рекомендуем начать с них.
|
||||
|
||||
Запуск Storage Provider требует больше усилий и рассматривается в отдельном руководстве, которое демонстрирует сторону продажи хранилища, а также как запустить Codex с собственным локальным клиентом выполнения Ethereum.
|
||||
|
||||
Руководства доступны либо в Discord в виде пошаговых интерактивных руководств, либо здесь в виде простых инструкций, которым вы можете следовать:
|
||||
|
||||
- **Базовое: запуск storage client.** [[Discord](#sc-guide-discord) | [web](#sc-guide-web)]
|
||||
- **Продвинутое: Запуск storage provider.** [[web](#sp-guide-web)]
|
||||
|
||||
Руководства были протестированы на следующих операционных системах:
|
||||
|
||||
- Linux: Ubuntu 24.04, Debian 12, Fedora 40
|
||||
- macOS: 15
|
||||
- Windows: 11, Server 2022
|
||||
|
||||
## Запуск Storage Client (версия Discord) {#sc-guide-discord}
|
||||
|
||||
Вы можете присоединиться к [серверу Codex Discord](https://discord.gg/codex-storage) и перейти в канал [#:tv:|join-testnet](https://discord.com/channels/895609329053474826/1289923125928001702).
|
||||
|
||||
Это в основном то же самое, что и [Веб-руководство](#sc-guide-web), но использует возможности Discord, чтобы вы могли иметь интерактивное пошаговое руководство, а также получить поддержку в канале [#:sos:|node-help](https://discord.com/channels/895609329053474826/1286205545837105224).
|
||||
|
||||
## Запуск Storage Client (Веб-версия) {#sc-guide-web}
|
||||
|
||||
**Предварительные требования**
|
||||
|
||||
- Доступ к вашему интернет-маршрутизатору для [настройки проброса портов](#basic-common)
|
||||
|
||||
Шаги для [Linux/macOS](#basic-linux-macos) и [Windows](#basic-windows) немного отличаются, поэтому используйте те, которые подходят для вашей ОС.
|
||||
|
||||
<hr>
|
||||
|
||||
### Linux/macOS {#basic-linux-macos}
|
||||
|
||||
1. Скачайте мастер-архив из репозитория Codex testnet starter и распакуйте его содержимое:
|
||||
```shell
|
||||
curl -LO https://github.com/codex-storage/codex-testnet-starter/archive/master.tar.gz
|
||||
tar xzvf master.tar.gz
|
||||
rm master.tar.gz
|
||||
```
|
||||
|
||||
2. Перейдите в папку со скриптами:
|
||||
```shell
|
||||
cd codex-testnet-starter-master/scripts
|
||||
```
|
||||
|
||||
3. Установите зависимости при необходимости:
|
||||
```shell
|
||||
# Debian-based Linux
|
||||
sudo apt update && sudo apt install libgomp1
|
||||
```
|
||||
|
||||
4. Скачайте бинарные файлы Codex из релизов GitHub:
|
||||
```shell
|
||||
./download_online.sh
|
||||
```
|
||||
|
||||
5. Сгенерируйте пару ключей ethereum:
|
||||
```shell
|
||||
./generate.sh
|
||||
```
|
||||
Ваш приватный ключ будет сохранен в файле `eth.key`, а адрес - в файле `eth.address`.
|
||||
|
||||
6. Пополните ваш адрес, показанный на экране, токенами:
|
||||
- Используйте веб-краны для получения [ETH](https://faucet-eth.testnet.codex.storage) и [TST](https://faucet-tst.testnet.codex.storage) токенов.
|
||||
- Мы также можем сделать это с помощью канала Discord [# bot](https://discord.com/channels/895609329053474826/1230785221553819669)
|
||||
- Используйте команду `/set ethaddress` для ввода вашего сгенерированного адреса
|
||||
- Используйте команду `/mint` для получения ETH и TST токенов
|
||||
- Используйте команду `/balance` для проверки успешного получения тестовых токенов
|
||||
|
||||
7. Запустите узел Codex:
|
||||
```shell
|
||||
./run_client.sh
|
||||
```
|
||||
|
||||
8. Настройте [проброс портов](#basic-common), и мы готовы к работе.
|
||||
|
||||
### Windows {#basic-windows}
|
||||
|
||||
1. Скачайте мастер-архив из репозитория Codex testnet starter и распакуйте его содержимое:
|
||||
> [!WARNING]
|
||||
> Антивирусное ПО Windows и встроенные брандмауэры могут вызвать сбой шагов. Мы рассмотрим некоторые возможные ошибки здесь, но всегда учитывайте проверку вашей настройки, если запросы не выполняются - в частности, если временное отключение антивируса решает проблему, то, вероятно, он является причиной.
|
||||
|
||||
```batch
|
||||
curl -LO https://github.com/codex-storage/codex-testnet-starter/archive/master.tar.gz
|
||||
```
|
||||
|
||||
Если вы видите ошибку:
|
||||
|
||||
```batch
|
||||
curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - The revocation function was unable to check revocation for the certificate.
|
||||
```
|
||||
|
||||
Возможно, вам нужно добавить опцию `--ssl-no-revoke` к вашему вызову curl, например:
|
||||
|
||||
```batch
|
||||
curl -LO --ssl-no-revoke https://github.com/codex-storage/codex-testnet-starter/archive/master.tar.gz
|
||||
```
|
||||
|
||||
1. Распакуйте содержимое tar-файла и затем удалите его:
|
||||
```batch
|
||||
tar xzvf master.tar.gz
|
||||
del master.tar.gz
|
||||
```
|
||||
|
||||
2. Перейдите в папку со скриптами:
|
||||
```batch
|
||||
cd codex-testnet-starter-master\scripts\windows
|
||||
```
|
||||
|
||||
3. Скачайте бинарные файлы Codex из релизов GitHub:
|
||||
```batch
|
||||
download-online.bat
|
||||
```
|
||||
|
||||
4. Сгенерируйте пару ключей ethereum:
|
||||
```batch
|
||||
generate.bat
|
||||
```
|
||||
Ваш приватный ключ будет сохранен в файле `eth.key`, а адрес - в файле `eth.address`.
|
||||
|
||||
5. Пополните ваш адрес, показанный на экране, токенами:
|
||||
- Используйте веб-краны для получения [ETH](https://faucet-eth.testnet.codex.storage) и [TST](https://faucet-tst.testnet.codex.storage) токенов.
|
||||
- Мы также можем сделать это с помощью канала Discord [# bot](https://discord.com/channels/895609329053474826/1230785221553819669)
|
||||
- Используйте команду `/set ethaddress` для ввода вашего сгенерированного адреса
|
||||
- Используйте команду `/mint` для получения ETH и TST токенов
|
||||
- Используйте команду `/balance` для проверки успешного получения тестовых токенов
|
||||
|
||||
6. Запустите узел Codex:
|
||||
```batch
|
||||
run-client.bat
|
||||
```
|
||||
|
||||
7. Настройте [проброс портов](#basic-common), и мы готовы к работе.
|
||||
|
||||
### Все ОС {#basic-common}
|
||||
|
||||
Настройте [проброс портов](https://en.wikipedia.org/wiki/Port_forwarding) на вашем интернет-маршрутизаторе
|
||||
| # | Протокол | Порт | Описание |
|
||||
| - | -------- | ------ | -------------- |
|
||||
| 1 | `UDP` | `8090` | `Codex Discovery` |
|
||||
| 2 | `TCP` | `8070` | `Codex Transport` |
|
||||
|
||||
После того как ваш узел запущен и работает, вы можете использовать [Codex API](/developers/api) для взаимодействия с вашим узлом Codex, пожалуйста, ознакомьтесь с нашим [пошаговым руководством по API](/learn/using) для получения более подробной информации.
|
||||
|
||||
Вы также можете использовать [Codex App UI](https://app.codex.storage) для взаимодействия с вашим локальным узлом Codex.
|
||||
|
||||
Нужна помощь? Обратитесь к нам в канале [#:sos:|node-help](https://discord.com/channels/895609329053474826/1286205545837105224) или проверьте [руководство по устранению неполадок](/learn/troubleshoot.md).
|
||||
|
||||
## Запуск Storage Provider (Веб-версия) {#sp-guide-web}
|
||||
|
||||
В процессе разработки :construction:
|
||||
|
||||
## Данные Testnet
|
||||
|
||||
### Bootstrap-узлы
|
||||
**Codex**
|
||||
```shell
|
||||
spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P
|
||||
spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3
|
||||
spr:CiUIAhIhAlNJ7ary8eOK5GcwQ6q4U8brR7iWjwhMwzHb8BzzmCEDEgIDARpJCicAJQgCEiECU0ntqvLx44rkZzBDqrhTxutHuJaPCEzDMdvwHPOYIQMQsZ67vgYaCwoJBK6Kf1-RAnVEGgsKCQSuin9fkQJ1RCpGMEQCIDxd6lXDvj1PcHgQYnNpHGfgCO5a7fejg3WhSjh2wTimAiB7YHsL1WZYU_zkHcNDWhRgMbkb3C5yRuvUhjBjGOYJYQ
|
||||
spr:CiUIAhIhA7E4DEMer8nUOIUSaNPA4z6x0n9Xaknd28Cfw9S2-cCeEgIDARo8CicAJQgCEiEDsTgMQx6vydQ4hRJo08DjPrHSf1dqSd3bwJ_D1Lb5wJ4Qt_CesAYaCwoJBEDhWZORAnVYKkYwRAIgFNzhnftocLlVHJl1onuhbSUM7MysXPV6dawHAA0DZNsCIDRVu9gnPTH5UkcRXLtt7MLHCo4-DL-RCMyTcMxYBXL0
|
||||
spr:CiUIAhIhAzZn3JmJab46BNjadVnLNQKbhnN3eYxwqpteKYY32SbOEgIDARo8CicAJQgCEiEDNmfcmYlpvjoE2Np1Wcs1ApuGc3d5jHCqm14phjfZJs4QrvWesAYaCwoJBKpA-TaRAnViKkcwRQIhANuMmZDD2c25xzTbKSirEpkZYoxbq-FU_lpI0K0e4mIVAiBfQX4yR47h1LCnHznXgDs6xx5DLO5q3lUcicqUeaqGeg
|
||||
spr:CiUIAhIhAuN-P1D0HrJdwBmrRlZZzg6dqllRNNcQyMDUMuRtg3paEgIDARpJCicAJQgCEiEC434_UPQesl3AGatGVlnODp2qWVE01xDIwNQy5G2DeloQm_L2vQYaCwoJBI_0zSiRAnVsGgsKCQSP9M0okQJ1bCpHMEUCIQDgEVjUp1RJGb59eRPs7RPYMSGAI_fo1yv70iBtnTqefQIgVoXszc87EGFVO3aaqorEYZ21OGRko5ho_Pybdyqa6AI
|
||||
spr:CiUIAhIhAsi_hgxFppWjHiKRwnYPX_qkB28dLtwK9c7apnlBanFuEgIDARpJCicAJQgCEiECyL-GDEWmlaMeIpHCdg9f-qQHbx0u3Ar1ztqmeUFqcW4Q2O32vQYaCwoJBNEmoCiRAnV2GgsKCQTRJqAokQJ1dipHMEUCIQDpC1isFfdRqNmZBfz9IGoEq7etlypB6N1-9Z5zhvmRMAIgIOsleOPr5Ra_Nk7BXmXGhe-YlLosH9jo83JtfWCy3-o
|
||||
```
|
||||
|
||||
**Geth**
|
||||
```shell
|
||||
enode://cff0c44c62ecd6e00d72131f336bb4e4968f2c1c1abeca7d4be2d35f818608b6d8688b6b65a18f1d57796eaca32fd9d08f15908a88afe18c1748997235ea6fe7@159.223.243.50:40010
|
||||
enode://ea331eaa8c5150a45b793b3d7c17db138b09f7c9dd7d881a1e2e17a053e0d2600e0a8419899188a87e6b91928d14267949a7e6ec18bfe972f3a14c5c2fe9aecb@68.183.245.13:40030
|
||||
enode://4a7303b8a72db91c7c80c8fb69df0ffb06370d7f5fe951bcdc19107a686ba61432dc5397d073571433e8fc1f8295127cabbcbfd9d8464b242b7ad0dcd35e67fc@174.138.127.95:40020
|
||||
enode://36f25e91385206300d04b95a2f8df7d7a792db0a76bd68f897ec7749241b5fdb549a4eecfab4a03c36955d1242b0316b47548b87ad8291794ab6d3fecda3e85b@64.225.89.147:40040
|
||||
enode://2e14e4a8092b67db76c90b0a02d97d88fc2bb9df0e85df1e0a96472cdfa06b83d970ea503a9bc569c4112c4c447dbd1e1f03cf68471668ba31920ac1d05f85e3@170.64.249.54:40050
|
||||
enode://6eeb3b3af8bef5634b47b573a17477ea2c4129ab3964210afe3b93774ce57da832eb110f90fbfcfa5f7adf18e55faaf2393d2e94710882d09d0204a9d7bc6dd2@143.244.205.40:40060
|
||||
enode://6ba0e8b5d968ca8eb2650dd984cdcf50acc01e4ea182350e990191aadd79897801b79455a1186060aa3818a6bc4496af07f0912f7af53995a5ddb1e53d6f31b5@209.38.160.40:40070
|
||||
```
|
||||
|
||||
### Смарт-контракты
|
||||
|
||||
| Контракт | Адрес |
|
||||
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Токен | [`0x34a22f3911De437307c6f4485931779670f78764`](https://explorer.testnet.codex.storage/address/0x34a22f3911De437307c6f4485931779670f78764) |
|
||||
| Верификатор | [`0x02dd582726F7507D7d0F8bD8bf8053d3006F9092`](https://explorer.testnet.codex.storage/address/0x02dd582726F7507D7d0F8bD8bf8053d3006F9092) |
|
||||
| Маркетплейс | [`0xfFaF679D5Cbfdd5Dbc9Be61C616ed115DFb597ed`](https://explorer.testnet.codex.storage/address/0xfFaF679D5Cbfdd5Dbc9Be61C616ed115DFb597ed) |
|
||||
|
||||
### Эндпоинты
|
||||
|
||||
| # | Сервис | URL |
|
||||
| - | -------------- | ---------------------------------------------------------------------------- |
|
||||
| 1 | Geth Public RPC | [rpc.testnet.codex.storage](https://rpc.testnet.codex.storage) |
|
||||
| 2 | Обозреватель блоков | [explorer.testnet.codex.storage](https://explorer.testnet.codex.storage) |
|
||||
| 3 | Кран ETH | [faucet-eth.testnet.codex.storage](https://faucet-eth.testnet.codex.storage) |
|
||||
| 4 | Кран TST | [faucet-tst.testnet.codex.storage](https://faucet-tst.testnet.codex.storage) |
|
||||
| 5 | Страница статуса | [status.testnet.codex.storage](https://status.testnet.codex.storage) |
|
||||
Loading…
x
Reference in New Issue
Block a user