From 9248e00f935bab65e808a7e0dc54df125f953a82 Mon Sep 17 00:00:00 2001 From: David Leal Date: Fri, 19 May 2023 14:51:04 +0000 Subject: [PATCH] docs: add Spanish translation A few categories/folders seem to be out-of-sync with the original documentation/English files. I'm not sure if that's intended or need to be updated (a template for translating would be great, IMO). --- docusaurus.config.js | 5 +- i18n/es/code.json | 198 +++++++++ .../options.json | 14 + .../current.json | 54 +++ .../current/Introduction/_category_.json | 4 + .../current/Introduction/creatortoken.md | 45 +++ .../current/Introduction/dev-ecosystem.md | 63 +++ .../current/Introduction/devtoken.md | 78 ++++ .../current/Introduction/introduction.md | 32 ++ .../Introduction/what-is-devprotocol.md | 29 ++ .../current/developers/_category_.json | 4 + .../current/developers/dev-faucet.md | 6 + .../current/developers/developers.md | 3 + .../current/developers/ecosystem-addresses.md | 11 + .../developers/modules/_category_.json | 4 + .../current/developers/modules/overview.md | 17 + .../developers/modules/v1/_category_.json | 4 + .../current/developers/modules/v1/dev.md | 64 +++ .../current/developers/modules/v1/market.md | 247 ++++++++++++ .../current/developers/modules/v1/property.md | 52 +++ .../developers/modules/v1/s-token-manager.md | 137 +++++++ .../developers/modules/v2/_category_.json | 4 + .../developers/modules/v2/s-token-manager.md | 136 +++++++ .../current/developers/tools/_category_.json | 4 + .../current/developers/tools/data-viewer.md | 19 + .../current/developers/tools/dev-kit.md | 123 ++++++ .../current/developers/tools/interfaces.md | 44 ++ .../current/developers/tools/khaos-core.md | 29 ++ .../current/developers/tools/khaos-kit.md | 33 ++ .../developers/tools/khaos-starter-kit.md | 28 ++ .../developers/tools/util-contracts.md | 27 ++ .../current/developers/tools/util-ts.md | 27 ++ .../current/intro.md | 13 + .../current/khaos/_category_.json | 4 + .../khaos/authentication-and-oraclization.md | 64 +++ .../current/khaos/index.md | 23 ++ .../current/learning/Hands-on/guide.md | 37 ++ .../current/learning/Hands-on/hands-on 1.md | 210 ++++++++++ .../current/learning/Hands-on/hands-on 2.md | 209 ++++++++++ .../current/learning/Hands-on/hands-on 3.md | 188 +++++++++ .../current/learning/_category_.json | 4 + .../current/learning/ethereum.md | 70 ++++ .../current/learning/token.md | 47 +++ .../current/protocol/_category_.json | 4 + .../protocol/governance/_category_.json | 3 + .../current/protocol/governance/dips.md | 15 + .../current/protocol/governance/governance.md | 27 ++ .../governance/upgrading-core-modules.md | 53 +++ .../upgrading-predefined-variables.md | 110 +++++ .../current/protocol/whitepaper.md | 376 ++++++++++++++++++ .../current/stakes-social/_category_.json | 4 + .../stakes-social/how-to-attach-image.md | 19 + .../current/stakes-social/how-to-buy-dev.md | 123 ++++++ .../stakes-social/how-to-move-funds.md | 39 ++ .../stakes-social/how-to-onboard-arbitrum.md | 74 ++++ .../stakes-social/how-to-onboard-polygon.md | 67 ++++ .../current/stakes-social/how-to-stake.md | 65 +++ .../current/stakes-social/onboard-guide.md | 119 ++++++ .../current/stakes-social/stakes-social.md | 50 +++ .../version-0.1.0.json | 54 +++ i18n/es/docusaurus-theme-classic/footer.json | 94 +++++ i18n/es/docusaurus-theme-classic/navbar.json | 46 +++ 62 files changed, 3755 insertions(+), 1 deletion(-) create mode 100644 i18n/es/code.json create mode 100644 i18n/es/docusaurus-plugin-content-blog/options.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Introduction/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Introduction/creatortoken.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Introduction/dev-ecosystem.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Introduction/devtoken.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Introduction/introduction.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/Introduction/what-is-devprotocol.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/dev-faucet.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/developers.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/ecosystem-addresses.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/overview.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/dev.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/market.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/property.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/s-token-manager.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/s-token-manager.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/data-viewer.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/dev-kit.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/interfaces.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-core.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-kit.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-starter-kit.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-contracts.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-ts.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/intro.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/khaos/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/khaos/authentication-and-oraclization.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/khaos/index.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/guide.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 1.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 2.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 3.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/ethereum.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/learning/token.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/dips.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/governance.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-core-modules.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-predefined-variables.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/protocol/whitepaper.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/_category_.json create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-attach-image.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-buy-dev.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-move-funds.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-arbitrum.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-polygon.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-stake.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/onboard-guide.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/current/stakes-social/stakes-social.md create mode 100644 i18n/es/docusaurus-plugin-content-docs/version-0.1.0.json create mode 100644 i18n/es/docusaurus-theme-classic/footer.json create mode 100644 i18n/es/docusaurus-theme-classic/navbar.json diff --git a/docusaurus.config.js b/docusaurus.config.js index 20decb6fed..76506cdfc2 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -35,7 +35,7 @@ const config = { ], i18n: { defaultLocale: 'en', - locales: ['en', 'ja', 'pt'], + locales: ['en', 'es', 'ja', 'pt'], localeConfigs: { en: { label: 'English', @@ -46,6 +46,9 @@ const config = { pt: { label: 'Português', }, + es: { + label: 'Español', + }, }, }, themeConfig: { diff --git a/i18n/es/code.json b/i18n/es/code.json new file mode 100644 index 0000000000..cad8cac2cf --- /dev/null +++ b/i18n/es/code.json @@ -0,0 +1,198 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Esta página se ha trabado.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "Intente de nuevo", + "description": "The label of the button to try again when the page crashed" + }, + "theme.NotFound.title": { + "message": "Página no encontrada", + "description": "The title of the 404 page" + }, + "theme.NotFound.p1": { + "message": "No pudimos encontrar lo que esta buscando.", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "Por favor contacte al dueño de la página que esta vinculado a la URL original y hazles saber que el link no funciona.", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "Cerrar", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "De vuelta a arriba", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Archivo", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archivo", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Navegación por la página del blog", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Contenido más reciente", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Contenido más antiguo", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.readingTime.plurals": { + "message": "Lectura de un minuto|Lectura de {readingTime} minuto(s)", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.post.readMore": { + "message": "Leer más", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Navegación por las páginas del blog", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Publicación más reciente", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Publicación anterior", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "Navegación de recientes publicaciones en el blog", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.blog.post.plurals": { + "message": "Una publicación|{count} publicaciones", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} marcadas com \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Ver todos los marcadores", + "description": "The label of the link targeting the tag list page" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "Copiar código para la área de transferencia", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copied": { + "message": "Copiado", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copy": { + "message": "Copiar", + "description": "The copy button label on code blocks" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "Expandir panel lateral", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "Expandir panel lateral", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "Navegación por las páginas de documentación.", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "Anterior", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "Próxima", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "Fechar panel lateral", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "Fechar panel lateral", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { + "message": "Activa la barra lateral plegable de la categoria '{label}'", + "description": "The ARIA label to toggle the collapsible sidebar category" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "Un documento seleccionado|{count} documentos seleccionados", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged} con \"{tagName}\"", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "Se trata de documentación inédita para {siteTitle} {versionLabel}.", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "Esta es la documentación para {siteTitle} {versionLabel}, que ya no se mantiene activamente.", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "Para consultar la documentación actualizada, véase: {latestVersionLink} ({versionLabel}).", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "Última versión", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.editThisPage": { + "message": "Editar esta página", + "description": "The link label to edit the current page" + }, + "theme.common.headingLinkTitle": { + "message": "Enlace directo al título", + "description": "Title for link to heading" + }, + "theme.lastUpdated.atDate": { + "message": " en {date}", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " por {user}", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "Última actualización {atDate}{byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← Volver al menu principal", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "Versions", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.common.skipToMainContent": { + "message": "Ir al contenido principal", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "En esta página", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.tags.tagsListLabel": { + "message": "Marcadores:", + "description": "The label alongside a tag list" + }, + "theme.tags.tagsPageTitle": { + "message": "Marcadores", + "description": "The title of the tag list page" + } +} diff --git a/i18n/es/docusaurus-plugin-content-blog/options.json b/i18n/es/docusaurus-plugin-content-blog/options.json new file mode 100644 index 0000000000..fa65b0ffcd --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "Blog", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "Blog", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "Publicaciones recientes", + "description": "The label for the left sidebar" + } +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current.json b/i18n/es/docusaurus-plugin-content-docs/current.json new file mode 100644 index 0000000000..5ceedee379 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,54 @@ +{ + "version.label": { + "message": "Siguiente", + "description": "The label for version current" + }, + "sidebar.tutorialSidebar.category.Introduction": { + "message": "Introducción", + "description": "The label for category Introduction in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.The Protocol": { + "message": "El Protocolo", + "description": "The label for category The Protocol in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Governance": { + "message": "Gobierno", + "description": "The label for category Governance in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Khaos": { + "message": "Khaos", + "description": "The label for category Khaos in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Stakes Social": { + "message": "Stakes Social", + "description": "The label for category Stakes Social in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Developers": { + "message": "Desarrolladores", + "description": "The label for category Developers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Modules": { + "message": "Modulos", + "description": "The label for category Modules in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.V1": { + "message": "V1", + "description": "The label for category V1 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.V2": { + "message": "V2", + "description": "The label for category V2 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Tools": { + "message": "Herramientas", + "description": "The label for category Tools in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Learning": { + "message": "Aprendizaje", + "description": "The label for category Learning in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Hands-on": { + "message": "Manos a la obra", + "description": "The label for category Hands-on in sidebar tutorialSidebar" + } +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Introduction/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/_category_.json new file mode 100644 index 0000000000..5672045964 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Introduction", + "position": 1 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Introduction/creatortoken.md b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/creatortoken.md new file mode 100644 index 0000000000..1abad0d086 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/creatortoken.md @@ -0,0 +1,45 @@ +--- +title: Creator Token Overview +sidebar_position: 3 +--- + +## What is Creator token? + +Creators can issue their own creator tokens by tokenizing their creations. + +Once you have issued your creator token, you will be able to access the following features: + +- Manage OSS ownership and build your community DAO +- Sustainable funding and splitting creators’ rewards to its holders + +## How to issue your creator tokens? + +Creator tokens can be easily issued without any knowledge of blockchain. The three steps are as follows: + +- **Put the ownership information of your assets in an Dapp such as Stakes.social** + +:::info + +You can find all the details about [onboard guide](https://docs.devprotocol.xyz/stakes-social/onboard-guide/) on stakes.social section. + +::: + +- **Share Creator tokens with your team** + +10 million creator tokens (fixed supply) will be issued. Of these, 5% will be sent to the Treasury which will be used for whole ecosystem, and the other 95% can be freely allocated by owners. + +- **Collect staking** + +Both creators and supporters get rewards when your creation is getting supported. This is the first scheme that can raise funds on a sustainable basis rather than a limited number of times, unlike traditional donations or crowdfunding. + +## Behind tokenization process with Khaos + +Dev Protocol has unique built-in oracle "Khaos" that securely connects to all web platforms such as GitHub, YouTube, Spotify and STEAM. + +- First, issue your creator token on a Dapp such as Stakes.social +- Generate a hash to conceal an API access token for web platforms +- Proof of ownership" and activities outside the blockchain. + +To provide completely unique "proof of ownership", your assets will never be illicitly copied by anyone. + +![](/img/introduction/how-Khaos-works.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Introduction/dev-ecosystem.md b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/dev-ecosystem.md new file mode 100644 index 0000000000..14ff833a4b --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/dev-ecosystem.md @@ -0,0 +1,63 @@ +--- +title: DEV's ecosystem +sidebar_position: 4 +--- + +DEV token is a crypto asset designed to support the next generation of creators, such as Open source developers. + +Dev Protocol was created with the use of blockchain technology as a system to realize continuous support for all creators. DEV token is a crypto asset issued by Dev Protocol. +Staking is like depositing your money to banks. As you may know, you’ll get interest for your deposited money. For DEV, if you deposit DEV token (money) to OSS (banks), you’ll get interest. The interest will be shared with developers, which means, interest for developers (reward) will be a donation for developers. + +
+ +![](/img/stakes.social/dev-token-guide/guide01.jpg) + +## A system for continuous support + +Staked DEV token is in the condition of being deposited. It doesn’t neither decrease or diminish because it’s deposited. You can also withdraw it whenever you want to. While DEV token is deposited, both supporters and developers get interest. In other words, you’ll get more benefit from depositing it rather than owning it. +Once you withdraw your DEV token, the increase of interest stops. Therefore, for supporters, they get more profit by depositing instead of withdrawing. In addition, the interest will be added for developers, which result in a donation for them. Dev Protocol realizes continuous support for developers with this system. + +## A system that rewards developers + +The mechanism for earning interest on supporter and developer tokens is realized by dividing the interest earned from the supporter’s staking between the developer and the supporter. In other words, if both the supporter and the developer have an annual rate of 30%, the supporter’s staking will generate 60% interest, which will be divided between the developer, and the supporter equally (which in this case equates to a rate of 30% each). + +## Interest rate + +Interest for supporters will be given at the interest rate of approximately 30% per year (as of June 12th, 2021)†1. Reward for creators is donated at the interest rate of about 30% per year (as of June 12th, 2021)†2. + +You can see how high DEV’s interest rate is compared with that of banks. + +## How to stake + +When you start to stake, you need to find projects that you want to support at Stakes.social. Find projects that you want to support from Project List Page. + +To find your favorite projects, you can just search with key words of OSS names, or check the profiles of OSS at OSS introduction page (In this page, you can also find a link to Github, and it might be a great idea if you read README file there.) + +
+ +![](/img/stakes.social/dev-token-guide/guide02.jpg) + +When you find a project that you want to support, press “Stake” button, and then a screen of staking is displayed. You can find an application form to input the amount of staking in the modal, so please input the number of DEV for staking. After you’ve completed to input and double-checked the amount, please click “Stake” button. +If you press “Stake” button, your wallet will be activated to check the status of transaction and gas fee to process transaction. +
+ +![](/img/stakes.social/dev-token-guide/guide04.jpg) + +At the platform on Ethereum, you’ll need a commission for transaction (gas fee) to complete it. Since Dev Protocol is designed on the platform of Ethereum, you’ll need a commission. Please prepare the fee for it beforehand. + +After the transaction is done and your staking is completed, you can see a message, “success staking!”. +
+ +![](/img/stakes.social/dev-token-guide/guide03.jpg) + +This message means that your DEV is deposited to the OSS project that you want to support. +Deposited DEV receive interest at the interest rate of around 30% per year (as of June 12th, 2021)†1, and Developers receive DEV token at the interest rate of approximately 30% (as of June 12th, 2021)†2. + +The longer you continue staking, the longer developers with your support can devote themselves to their development much more than before, which results in your profit as one of their supporters and in continuous support for developers. We’d highly recommend you to stake as long time as possible for their continuous development. + +:::info + +Since the interest for supporters and creators always fluctuate, please check STAKER APY and CREATOR APY at the following website if you want to know the current rate per year. +https://stakes.social/stats + +::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Introduction/devtoken.md b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/devtoken.md new file mode 100644 index 0000000000..2d23cd3480 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/devtoken.md @@ -0,0 +1,78 @@ +--- +title: Token Overview +sidebar_position: 2 +--- + +## What is DEV token? + +The DEV Protocol shall allow monetization of program development work for Open Source Software(OSS). The monetization of OSS itself brings more sustainable funding and incentive models for the first time. + +Contract adress: https://etherscan.io/token/0x5caf454ba92e6f2c929df14667ee360ed9fd5b26 + +- DEV token is an Ethereum based ERC20 token. +- DEVs are inflationary, meaning that every year 3.15% new DEVs are minted. The newly minted DEVs are allocated to creators and stakers. +- DEVs can be used for staking and to vote on certain things such as inflation rate and limit on how many tokens can be staked by a single token holder. + +## DEV token's Value + +### Support creators and earn a yield + +By staking DEV for creators, stakers are eligible to receive a yield in the form of inflationary rewards. Inflation also promotes active staking of the token as an inflationary hedge. + +### Governance + +Users that stake DEV holds certain governance rights over the protocol, such as having a voice in deciding tokenomics as well as proposing different ideas. + +### Creator Tokens + +DEV stakers will be able to obtain Creators Tokens efficiently in the future. + +### Authentication fees + +Creators burn DEV as an authentication fee when onboarding assets to the platform + +### Market creation fees + +Enterprise users may ask for new markets where they look for certain types of assets. DEV will be burned as a transaction fee (per request). Actual creation of market requires governance. + +## DEV's Tokenomics + +### Dynamic inflation + +- More tokens staked = exponential decrease in inflation +- More assets available = linear increase in inflation + +### Vesting for creators + +- Creators have a DEV cap for withdrawable rewards. +- Better dispersion of staking among creators = higher rewards cap +- Higher DEV price = Lower withdrawal cap + +### DEV total supply is inflationary + +DEV supply isn’t capped, with governance supply controlled as necessary via on-chain governance + +### How does it work? + +The total reward for a per block called rewards is determined as follows: + +- More lockups, less rewards. +- More assets, more rewards. + +Designed to increase in value as the number of tokens deposited by sponsors increases and the total number of tokens issued decreases. + +![tokenomics](/img/token/staking-ratio-vs-mint-amount.svg) + +- As Sponsors side: There is incentive to staking after the purchase of Dev tokens as the value increases with deposit +- As Creators side: The more assets are tokenised, the more issued, and the easier it is for creators to attract sponsors. + +The following formula illustrates the basic concept: +
+ +![tokenomics](/img/token/formura.png) + +
+ +> **Detailed explanation** +> +> As lockups increase, rewards decrease, and inflation rates decrease. As assets increase, rewards increase, and inflation rates increase. The deflationary trend makes it more rapidly by lockup increases. Ideally, an increase in assets should be accompanied by lockups, so an increase in assets should be a factor in increasing the inflation rate. But as lockups increase, the less impact the increase in assets will have. The maximum value is 0.00012 per block and an asset. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Introduction/introduction.md b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/introduction.md new file mode 100644 index 0000000000..ff0018aad4 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/introduction.md @@ -0,0 +1,32 @@ +--- +title: Introduction +--- + +Dev Protocol is on-chain middleware created for a whole new ecosystem designed for Open Source Software (OSS). With Dev Protocol, anyone can start to monetise your creations without changing licenses, codes, and support. You can use the feature set in Stakes.social, the first official application of the Dev Protocol + +### What is an ecosystem for OSS? + +Socially useful assets can be monetised while keeping Decentralization there. It is a new economy designed to allow open assets to be economically valuable, as opposed to the current world where closed assets are paid for. Dev Protocol will be expanded in the future to cover not only OSS, but also research papers and all intellectual assets. + +### What Benefits does Dev Protocol Offer? + +Dev Protocol provides benefits to maximize the creativity of creators. + +- Monetise open assets while remaining open. + +:::note + +No donation or licence change required + +::: + +- Sustainable incentive model between creators and supporters +- Share ownership and build community DAO +- Focus and keep developing your creative work + +
+ +> What is the beginning of Dev Protocol? +> +> The inspiration for Dev Protocol came not from OSS, but from the Japanese traditional sector. In 2014, Founder found that traditional artisans, dealing with Japanese national treasures artifacts/architecture were economically undervalued, make only tenth of the revenue of an online game company, which led to us starting the challenge of Dev Protocol. +> In the existing economy, highly social activities are not paid for its true value. We believe in a world where creators' creativity is maximized. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Introduction/what-is-devprotocol.md b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/what-is-devprotocol.md new file mode 100644 index 0000000000..647a239491 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/Introduction/what-is-devprotocol.md @@ -0,0 +1,29 @@ +--- +title: What is Dev Protocol? +sidebar_position: 1 +--- + +### Protocol, Creator tokens, Oracle + +To begin with, let's clarify the key factors in each area of "Dev Protocol". + +- **Dev Protocol**: Dev Protocol was designed as a unique protocol to fairly evaluate OSS, which has been economically undervalued for decades. It is built on the [Ethereum](https://ethereum.org/en/) blockchain and brings economic value to all open source activities. +- **DEV tokens**: The DEV token is a unique currency specialized for use with the Dev Protocol. It works as a common incentive on its ecosystem. +- **Property tokens(a.k.a. Creator tokens)**: Creator tokens are issued by creators to build their own economies. It provides sustainable funding and distributes creator rewards to its holders. +- **Khaos Oracle**: Khaos Oracle is a proprietary oracle built into Dev Protocol that allows creators can verify "Proof of ownership" for their own assets. + +### Dev Protocol as middleware + +Dev Protocol is not a single platform, it's middleware. Dev Protocol is completely decentralized and is a middleware protocol for on-chain governance, anyone can join the ecosystem by developing various applications (Dapps). It allows anyone to develop decentralised applications(Dapps) with incentives for staking and extend their authorisable assets through the market. The Dev Protocol is not closed to OSS, but can bring value to all open assets such as researchers' papers, YouTube videos, and Spotify music. Dev Protocol integrates with these markets so that projects or creators can authenticate and tokenize their work. It is a whole new creator economy evolving from open creators assets. + +### The value of the Dev Protocol + +The positive cycle created by OSS and open assets being sustainable and able to collaborate with more stakeholders is the greatest value of all. But the Dev Protocol is more than just a way for creators to monetize; it serves as the core for creators to easily expand and manage their own ecosystem. At the core of this are creator tokens and staking. The UI for these to work is only partially complete, but the community's goal is to fully build these creator ecosystem extensions so that they become the first choice of creators when they decide to create something. + +A creator token divides the ownership of a project. There are various use cases where the owner can extend the project, such as for project governance or for incentivizing collaborators. It would also be easy to create a liquidity pool paired with DEV. Dev staking's split rewards would be distributed to creators based on their share of creator tokens so that creators could provide a built-in incentive model for creator token holders. + +:::note + +The staking ratio is higher than the annual inflation rate and that the [DIP-55](https://github.com/dev-protocol/DIPs/blob/main/DIPS/dip-55.md) gives creators an incentive to re-stake their creator rewards. + +::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/developers/_category_.json new file mode 100644 index 0000000000..1d7f3c04f2 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Developers", + "position": 5 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/dev-faucet.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/dev-faucet.md new file mode 100644 index 0000000000..254c6847bf --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/dev-faucet.md @@ -0,0 +1,6 @@ +--- +title: DEV faucet +sidebar_position: 2 +--- + +You need DEV tokens if you try to test your Dapps on testnets. There is no DEV faucet at this moment. Please contact us on [Discord](https://discord.com/invite/VwJp4KM) if you need DEV Tokens for testnest. You can reach us on the general-chat channel of Discord. Please write your wallet address and the amount of DEV tokens that you need. We will send you DEV tokens as soon as possible. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/developers.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/developers.md new file mode 100644 index 0000000000..bd1b557c39 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/developers.md @@ -0,0 +1,3 @@ +--- +title: Developers +--- diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/ecosystem-addresses.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/ecosystem-addresses.md new file mode 100644 index 0000000000..0229aa26aa --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/ecosystem-addresses.md @@ -0,0 +1,11 @@ +--- +title: Ecosystem Addresses +sidebar_position: 1 +--- + +| | Mainnet | Ropsten | Rinkeby | +| :------------------ | :----------------------------------------- | :----------------------------------------- | :----------------------------------------- | +| DEV
ERC20 | 0x5caf454ba92e6f2c929df14667ee360ed9fd5b26 | | | +| Address
Config | 0x1D415aa39D647834786EB9B5a333A50e9935b796 | 0xD6D07f1c048bDF2B3d5d9B6c25eD1FC5348D0A70 | | +| Arbitrum
DEV | 0x91F5dC90979b058eBA3be6B7B7e523df7e84e137 | | 0x53a8fc7d1663807eac3daafa81b5b3c81f028479 | +| WDEV (Wrapped DEV) | 0xcc069f8323858537158Dc47F6c208C8174038aF9 | | 0xb970C9AB82C9b5110d734bA413AA3527ddd9eB6F | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/_category_.json new file mode 100644 index 0000000000..4a4420ef7f --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Modules", + "position": 3 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/overview.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/overview.md new file mode 100644 index 0000000000..f13fb7d13c --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/overview.md @@ -0,0 +1,17 @@ +--- +title: Contracts +--- + +This section is an introduction to the contracts available in DEV Protocol. + +:::note + +The interface between V1 and V2 may be different. + +::: + +:::info + +V1 is running on Ethereum mainrnet and Ropsten, V2 is running on Arbitrum One and Arbitrum testnet (rinkeby). + +::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/_category_.json new file mode 100644 index 0000000000..04a2c20e42 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "V1", + "position": 0 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/dev.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/dev.md new file mode 100644 index 0000000000..42678970a0 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/dev.md @@ -0,0 +1,64 @@ +--- +title: Dev +sidebar_position: 0 +--- + +## Summary + +Dev Contract manages DEV tokens. Dev Protocol manages the supply amount of DEV token. It conforms to ERC-20 and is Dev Protocol's key token. + +DEV tokens are minted by Lockup Contract or Withdraw Contract, and is burned by Market Contract. + +In Dev Protocol, DEV tokens have a function to gain staking rewards by staking Property tokens. Since it conforms to ERC-20, there is no limitation for its usage. When users stake DEV tokens, they can get the following side effects: + +- Allocation of creator rewards for Property token holders. +- Acquisition of right to vote for the governance. + +## Interface + +`function deposit(address _to, uint256 _amount) external returns (bool)` + +- `_to`: The address of the staking destination +- `_amount`: The number of the staking amount + +Stakes DEV tokens to the address specified by `_to`, with the amount specified by `_amount`. + +`function depositFrom(address _from, address _to, uint256 _amount) external returns (bool)` + +- `_from`: The address of the spender +- `_to`: The address of the staking destination +- `_amount`: The number of the staking amount + +Stakes DEV tokens from the address specified by `_from` to the address specified by `_to`, with the amount specified by `_amount`. + +Before calling the method, the spender must grant sufficient allowances. If the allowance is insufficient, the allowance needs to be added by calling the approve method. + +`function totalSupply() external view returns (uint256)` + +Returns the latest total supply of DEV tokens. + +`function balanceOf(address account) external view returns (uint256)` + +Returns the balance of the address specified by `account`. + +`function transfer(address recipient, uint256 amount) external returns (bool)` + +Transfers DEV tokens to the address specified by `recipient`, with the amount specified by `amount`. + +`function transferFrom(address sender, address recipient, uint256 amount) external returns (bool)` + +`function allowance(address owner, address spender) external view returns (uint256)` + +`function approve(address spender, uint256 amount) external returns (bool)` + +`function name() public view returns (string memory)` + +Returns the token name `Dev` + +`function symbol() public view returns (string memory)` + +Returns the token symbol `DEV` + +`function decimals() public view returns (uint8)` + +Returns the token decimals `18` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/market.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/market.md new file mode 100644 index 0000000000..3b63278d00 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/market.md @@ -0,0 +1,247 @@ +--- +title: Market +sidebar_position: 2 +--- + +## Summary + +Market is a contract to define tokenization scheme in Dev Protocol, and is defined on the basis of users’ suggestions. + +Developers of Market can develop or deploy smart contracts based on MarketBehavior interface, and add Markets at vote queue through MarketFactory contracts. Voting becomes open to staking users by [govern.devprotocol.xyz](//govern.devprotocol.xyz). Once voting is approved, Market is activated by DAO maintainer or keepers. + +Market has two functions: + +- Authentication: Based on the arguments given by users, Market verifies whether the users are appropriate certificate holders. +- Deauthentication: Based on users’ request, authenticated information is deleted. + +Developers of Market can only define the process of authentication in these functions. + +Market defines types of activities that can be expressed by Property tokens The following figure shows the relation between Market and Property tokens. + +![Markets and Property](/img/developers/modules/market/markets-and-property.png) + +## Activation of Market + +### Development + +Developers of Market need to develop smart contracts in accordance with MarketBehavior interface. + +### Deploy + +Developers deploy Market contract that they developed. Smart contracts to deploy are the contracts that succeeded MarketBehavior interface and their dependence. + +### MarketFactory + +After developers call `MarketFactory.create`, MarketFactory automatically generates Market contract that incorporates Market developed by users. + +### Vote + +Developers request Dev Protocol DAO to judge whether automatically generated Market contracts should be activated. + +:::info + +In the future, we're hoping that voting contract would be deployed at the same time of executing `MarketFactory.create`, although users need to create voting contracts currently. Voting contracts can be created with VoteFactory contracts. + +::: + +
+ +**Contract:** https://github.com/dev-protocol/vote-governance/blob/main/contracts/VoteFactory.sol +**Mainnet:** https://etherscan.io/address/0x36199cb1e12c5b9d5a203f9dcb53b37e3ca6a30f +**Sample tx:** Ethereum Transaction Hash (Txhash) Details | Etherscan + +### Activation + +After the vote is approved, automatically generated Market contracts are activated by DAO maintainers or keepers. + +In the future, we're hoping that this process would be automated by keepers, although it is activated by multisig of several DAO members. + +## Interface + +Developers of Market need to develop smart contracts in accordance with MarketBehavior interface. + +Interface is as follows: + +https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IMarketBehavior.sol + +```solidity +interface IMarketBehavior { + function authenticate( + address _prop, + string calldata _args1, + string calldata _args2, + string calldata _args3, + string calldata _args4, + string calldata _args5, + address market, + address account + ) external returns (bool); + + function schema() external view returns (string memory); + + function getId(address _metrics) external view returns (string memory); + + function getMetrics(string calldata _id) external view returns (address); +} +``` + +Smart contracts developed with a basis of MarketBehavior will be called by Market contracts generated through `MarketFactory.create`. + +## Authentication + +When end users call `Market.authenticate`, `MarketBehavior.authenticate` will be called. Only when `Market.authenticate` executes the validations below and pass them all, it calls `MarketBehavior.authenticate`. Therefore, the following validations are unnecessary for the implementation of `MarketBehvaior.authenticate`. + +- The caller is an author of the first argument Property. +- The second argument is not empty. + +The interface of `Market.authenticate` is as follows: + +```solidity +function authenticate( + address _prop, + string calldata _args1, + string calldata _args2, + string calldata _args3, + string calldata _args4, + string calldata _args5 +) external returns (bool); +``` + +The interface of `MarketBehavior.authenticate` is as follows: + +```solidity +function authenticate( + address _prop, + string calldata _args1, + string calldata _args2, + string calldata _args3, + string calldata _args4, + string calldata _args5, + address market, + address account +) external returns (bool); +``` + +- `_prop`: address of Property tokens that are targets for authentication. +- `_args1`: asset ID to authenticate. +- `_args2` ~ `5`: additional information to be used for authentication. +- `market`: Market address that called MarketBehavior. +- `account`: caller's address at Market. + +Basically, MarketBehavior executes authentication based on the free information from `_args1` to `_args5`, and then it defines what MarketBehavior is expecting to get for the arguments at `MarketBehavior.schema`. + +Here's an example for `MarketBehavior.schema`: + +```json +["GitHub Repository (e.g, your/awesome-repos)", "Khaos Public Signature"] +``` + +This schema shows us that `_args1` is GitHub repository name, `_args2` is [Khaos Public Signature](https://initto.devprotocol.xyz/en/deep-dive-khaos/), and the rest is empty. + +Authentication logic of MarketBehavior depends on developers. They need to call `Market.authenticateCallback` to show the success of authentication. Market address as callee will be the address of argument `market`. + +The interface of `Market.authenticatedCallback` is as follows: + +```solidity +function authenticatedCallback(address _property, bytes32 _idHash) + external + returns (address); +``` + +For the first argument, you'll pass through the first argument of `MarketBehavior.authenticate`. For the second argument, you'll use hashed value of the first argument of `MarketBehavior.authenticate`. + +In the case where authentication logic of MarketBehavior is only synchronous processing, it's easy to pass through arguments, although in many cases, we need asynchronous processing. In the case of authentication logic with asynchronous processing, we suggest you temporarily save the value at local variables of MarketBehavior as shown below. + +```solidity +contract GitHubMarket is IMarketBehavior { + address private khaos; + mapping(address => string) private repositories; + mapping(bytes32 => address) private metrics; + mapping(bytes32 => address) private properties; + mapping(bytes32 => address) private markets; + mapping(bytes32 => bool) private pendingAuthentication; + mapping(string => bool) private publicSignatures; + + constructor(address _khaos) public { + khaos = _khaos; + } + + function authenticate( + address _prop, + string memory _githubRepository, + string memory _publicSignature, + string memory, + string memory, + string memory, + address _dest, + address account + ) external override whenNotPaused returns (bool) { + bytes32 key = createKey(_githubRepository); + properties[key] = _prop; + markets[key] = _dest; + pendingAuthentication[key] = true; + return true; + } + + function khaosCallback( + string memory _githubRepository, + uint256 _status, + string memory _message + ) external whenNotPaused { + require(msg.sender == khaos, "illegal access"); + require(_status == 0, _message); + bytes32 key = createKey(_githubRepository); + require(pendingAuthentication[key], "not while pending"); + register(key, _githubRepository, markets[key], properties[key]); + } + + function register( + bytes32 _key, + string memory _repository, + address _market, + address _property + ) private { + address _metrics = IMarket(_market).authenticatedCallback( + _property, + _key + ); + repositories[_metrics] = _repository; + metrics[_key] = _metrics; + } + + function createKey(string memory _repository) + private + pure + returns (bytes32) + { + return keccak256(abi.encodePacked(_repository)); + } + + function schema() external override view returns (string memory) { + return + '["GitHub Repository (e.g, your/awesome-repos)", "Khaos Public Signature"]'; + } + + function getId(address _metrics) + external + override + view + returns (string memory) + { + return repositories[_metrics]; + } + + function getMetrics(string memory _repository) + external + override + view + returns (address) + { + return metrics[createKey(_repository)]; + } +} +``` + +## Deauthentication + +When users call `Market.deauthenticate`, information for authentication designated by users will be deleted. Since the implementation of `Market.deauthenticate` doesn't depend on MarketBehavior, developers of Market doesn’t need to implement it. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/property.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/property.md new file mode 100644 index 0000000000..4af8343823 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/property.md @@ -0,0 +1,52 @@ +--- +title: Property +sidebar_position: 1 +--- + +## Summary + +Property Contract manages Property tokens. Property tokens are issued by Dev Protocol, conforming to ERC-20. Property tokens can be freely issued by anyone without any limitations. + +Property tokens hold various authentication result of the users. Authentication is done by Market. + +In order to activate the staking of Property tokens, issuers of them need to authenticate their tokens at any one of Markets. + +In Dev Protocol, Property tokens have a function to get reward by staking DEV tokens, although there is no limitations on its use as they conform to ERC-20. + +Property tokens are often optimized in the context, and are also called Creator tokens, Project tokens and Social tokens. + +## Authentication of Property tokens + +You can associate several activities with Property tokens by authenticating them at Market. Accounts to execute authentication are limited to the accounts with `author` address of Property tokens. + +![Alice's Property tokens](/img/developers/modules/property/property-tokens.png) + +Since Property tokens can be created freely, they can be combined with authentication freely as well. For example, you can authenticate 5 activities with one Property token, or you can also authenticate 5 activities with 5 Property tokens. + +Although the mechanism of authentication differs Market by Market, its interface is `Market.authentification` in common. + +## Deauthentication + +Authors of Property tokens can nullify the results that were once authenticated. Its interface is `Market.deauthenticate`. + +## Reward allocation function for Property tokens + +Holders of Property tokens obtain their creator reward of DEV tokens in proportion to their ownership ratio. + +For example, there is a Property token that has collected staking from users and has creator reward of 4,000 DEV. + +![Reward splitting](/img/developers/modules/property/reward-splitting.png) + +## Transfer Property tokens + +For `transfer` function of Property tokens and `transferFrom` function, you need to pay your reward off before transferring Property tokens. + +Payers of Property tokens don’t receive reward after the transfer, although receivers get reward after the transmission. + +![Transfer Property](/img/developers/modules/property/transfer-property.png) + +In this example, Alice is a 100% holder in Day 1, and transfers 30% to Bob in Day 2. The reward that Alice can get is 100% reward of Day 1 and 70% reward of Day 2. The reward that Bob can get is 0% reward of Day 1 and 30% reward of Day 2. + +Since the share of reward changes before and after the transfer of Property tokens, Alice and Bob need to pay off the reward that hasn't been withdrawn before transferring Property tokens. + +For `transfer` function of Property tokens and `transferFrom` function, payoff is done automatically. Gas fees for the transfer of Property tokens would be more expensive, because they require more process compared to general ERC-20 tokens. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/s-token-manager.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/s-token-manager.md new file mode 100644 index 0000000000..27caf9173c --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v1/s-token-manager.md @@ -0,0 +1,137 @@ +--- +title: STokenManager +sidebar_position: 3 +--- + +## Summary + +The STokenManager contract is a contract for managing SToken tokens. +This contract is an ERC-721 compliant contract. + +## API + +#### tokenURI( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: String + +- detail +   Return the URI corresponding to `_tokenId`. + +#### setTokenURIImage( uint256 \_tokenId, string \_data ) + +- argument: + + - `{number} _tokenId` + - `{string} _data` + +- return: none + +- detail +   Change the URI corresponding to `_tokenId`. + +#### freezeTokenURI( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: none + +- detail + Fix the uri associated with `_tokenId`. Only the author of the property associated with `_tokenId` can be executed. + +#### meltTokenURI( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: none + +- detail + Unfix the uri associated with `_tokenId`. Only the author of the property associated with `_tokenId` can be executed. + +#### positions( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: + + - `{address} _property` + - `{number} _amount` + - `{number} _price` + - `{number} _cumulativeReward` + - `{number} _pendingReward` + +- detail + Get the position information associated with `_tokenId`. + \_positions:The address of the Property as the staking destination + \_amount:The amount of the new staking position + \_price:The latest unit price of the cumulative staking reward + \_cumulativeReward:The cumulative withdrawn reward amount + \_pendingReward: The pending withdrawal reward amount amount + +#### descriptors( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: + + - `{boolean} _isFreezed` + - `{address} _freezingUser` + - `{string} _descriptor` + +- detail + Get customized URI information associated with `_tokenId`. + \_isFreezed:Whether the descriptor can be changed or not + \_freezingUser:Authors who have done the Freeze process + \_descriptor:Customized URI information + +#### rewards( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: + + - `{number} _entireReward` + - `{number} _cumulativeReward` + - `{number} _withdrawableReward` + +- detail + Get the reward information associated with `_tokenId`. + \_entireReward:The reward amount of adding the cumulative withdrawn amount + to the withdrawable amount + \_cumulativeReward:The cumulative withdrawn reward amount + \_withdrawableReward:The withdrawable reward amount + +#### positionsOfProperty( address \_property ) + +- argument: + + - `{address} _property` + +- return: number[] + +- detail + Get the tokenId associated with `_property`. + +#### positionsOfOwner( address \_owner ) + +- argument: + + - `{address} _owner` + +- return: number[] + +- detail + Get the tokenId owned by `_owner`. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/_category_.json new file mode 100644 index 0000000000..583ded0a7e --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "V2", + "position": 1 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/s-token-manager.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/s-token-manager.md new file mode 100644 index 0000000000..0d94b68b77 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/modules/v2/s-token-manager.md @@ -0,0 +1,136 @@ +--- +title: STokenManager +--- + +## Summary + +The STokenManager contract is a contract for managing SToken tokens. +This contract is an ERC-721 compliant contract. + +## API + +#### tokenURI( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: String + +- detail +   Return the URI corresponding to `_tokenId`. + +#### setTokenURIImage( uint256 \_tokenId, string \_data ) + +- argument: + + - `{number} _tokenId` + - `{string} _data` + +- return: none + +- detail +   Change the URI corresponding to `_tokenId`. + +#### freezeTokenURI( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: none + +- detail + Fix the uri associated with `_tokenId`. Only the author of the property associated with `_tokenId` can be executed. + +#### meltTokenURI( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: none + +- detail + Unfix the uri associated with `_tokenId`. Only the author of the property associated with `_tokenId` can be executed. + +#### positions( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: + + - `{address} _property` + - `{number} _amount` + - `{number} _price` + - `{number} _cumulativeReward` + - `{number} _pendingReward` + +- detail + Get the position information associated with `_tokenId`. + \_positions:The address of the Property as the staking destination + \_amount:The amount of the new staking position + \_price:The latest unit price of the cumulative staking reward + \_cumulativeReward:The cumulative withdrawn reward amount + \_pendingReward: The pending withdrawal reward amount amount + +#### descriptors( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: + + - `{boolean} _isFreezed` + - `{address} _freezingUser` + - `{string} _descriptor` + +- detail + Get customized URI information associated with `_tokenId`. + \_isFreezed:Whether the descriptor can be changed or not + \_freezingUser:Authors who have done the Freeze process + \_descriptor:Customized URI information + +#### rewards( uint256 \_tokenId ) + +- argument: + + - `{number} _tokenId` + +- return: + + - `{number} _entireReward` + - `{number} _cumulativeReward` + - `{number} _withdrawableReward` + +- detail + Get the reward information associated with `_tokenId`. + \_entireReward:The reward amount of adding the cumulative withdrawn amount + to the withdrawable amount + \_cumulativeReward:The cumulative withdrawn reward amount + \_withdrawableReward:The withdrawable reward amount + +#### positionsOfProperty( address \_property ) + +- argument: + + - `{address} _property` + +- return: number[] + +- detail + Get the tokenId associated with `_property`. + +#### positionsOfOwner( address \_owner ) + +- argument: + + - `{address} _owner` + +- return: number[] + +- detail + Get the tokenId owned by `_owner`. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/_category_.json new file mode 100644 index 0000000000..1c7126e196 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Tools", + "position": 4 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/data-viewer.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/data-viewer.md new file mode 100644 index 0000000000..124df5f81f --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/data-viewer.md @@ -0,0 +1,19 @@ +--- +title: Dev Protocol Data Viewer +sidebar_position: 2 +--- + +## What is Data Viewer? + +Provides various states in Dev Protocol as GraphQL queries. + +| | Source | +| --------------------- | -------------------------------------------- | +| GraphQL endpoint | https://api.devprotocol.xyz/v1/graphql | +| Query builder | https://explorer.graphql.devprotocol.xyz | +| GitHub (GraphQL) | https://github.com/dev-protocol/event-viewer | +| GitHub (data updater) | https://github.com/dev-protocol/event-saver | + +Data viewer using Hasura as the GraphQL engine. Therefore, many Harura built-in queries are available. + +https://hasura.io/docs/latest/graphql/core/databases/postgres/queries/ diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/dev-kit.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/dev-kit.md new file mode 100644 index 0000000000..ff51883f57 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/dev-kit.md @@ -0,0 +1,123 @@ +--- +title: Dev Kit +sidebar_position: 1 +--- + +## What is Dev Kit? + +Provides a toolset for calling Dev Protocol interfaces in JavaScript/TypeScript. + +| | Source | +| ------ | -------------------------------------------------- | +| npm | https://www.npmjs.com/package/@devprotocol/dev-kit | +| GitHub | https://github.com/dev-protocol/dev-kit-js | + +## Usage + +Install from npm. + +```bash +npm i @devprotocol/dev-kit +``` + +Or, use yarn. + +```bash +yarn add @devprotocol/dev-kit +``` + +Dev Kit depends on [ethers.js](https://docs.ethers.io/). +ethers.js is not installed automatically because it is specified in peer dependencies. Install ethers.js in your project. + +```bash +npm i ethers +``` + +Or, use yarn. + +```bash +yarn add ethers +``` + +## Examples + +### Example of Retrieving and displaying information about sTokens + +`index.js` + +```js +import { ethers } from 'ethers' +import { contractFactory, addresses } from '@devprotocol/dev-kit' + +// use main net +const registryContractAddress = addresses.eth.main.registry +const provider = new ethers.providers.JsonRpcProvider( + process.env.WEB3_PROVIDER_URL +) +const contract = contractFactory(provider) +const lockupContractAddress = await contract + .registry(registryContractAddress) + .lockup() + +// the address of the target property +const propertyAddress = '0xac1AC9d00314aE7B4a7d6DbEE4860bECedF92309' + +// get property's staking amount +const propertyStakingAmount = await contract + .lockup(lockupContractAddress) + .getPropertyValue(propertyAddress) +const stakingAmount = ethers.BigNumber.from(propertyStakingAmount).div( + new ethers.BigNumber.from(10).pow(18) +) +console.log( + `${propertyAddress}'s staking amount is ${stakingAmount.toBigInt()} DEV` +) + +// get property's rewards +const propertyRewards = await contract + .lockup(lockupContractAddress) + .calculateRewardAmount(propertyAddress) +const reward = ethers.BigNumber.from(propertyRewards[0]).div( + new ethers.BigNumber.from(10).pow(36) +) +console.log(`${propertyAddress}'s rewards is ${reward.toBigInt()} DEV`) +``` + +`package.json` + +```json +{ + "name": "devkit-example", + "version": "0.0.1", + "type": "module", + "license": "MIT", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "@devprotocol/dev-kit": "^5.8.1", + "ethers": "^5.5.2" + } +} +``` + +run example script (with local ethereum node. like this `http://localhost:8545`): + +```shell-session +$ yarn start +yarn run v1.22.17 +$ node index.js +0xac1AC9d00314aE7B4a7d6DbEE4860bECedF92309's staking amount is 27219 DEV +0xac1AC9d00314aE7B4a7d6DbEE4860bECedF92309's rewards is 15848 DEV +✨ Done in 0.60s. +``` + +run example script (with infura) + +```shell-session +$ WEB3_PROVIDER_URL=https://mainnet.infura.io/v3/xxxx yarn start +``` + +### Other examples + +There are other [example codes in the Dev Kit GitHub repository](https://github.com/dev-protocol/dev-kit-js/tree/main/examples) for your reference. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/interfaces.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/interfaces.md new file mode 100644 index 0000000000..0104353012 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/interfaces.md @@ -0,0 +1,44 @@ +--- +title: Interfaces +sidebar_position: 0 +--- + +## What is Interfaces? + +Provides interfaces for the main Dev Protocol contracts in Solidity. + +| | Source | +| ------ | --------------------------------------------------- | +| npm | https://www.npmjs.com/package/@devprotocol/protocol | +| GitHub | https://github.com/dev-protocol/protocol | + +## Usage + +You can install it with npm or yarn and import it within your project. + +Install from npm. + +```bash +npm i @devprotocol/protocol +``` + +Or, use yarn. + +```bash +yarn add @devprotocol/protocol +``` + +## Example + +```solidity +import {IAddressConfig} from "@devprotocol/protocol/contracts/interface/IAddressConfig.sol"; +import {IPropertyGroup} from "@devprotocol/protocol/contracts/interface/IPropertyGroup.sol"; + +contract Demo { + function validatePropertyAddress(address _property) external view returns(bool) { + IAddressConfig addressConfig = IAddressConfig(0x1D415aa39D647834786EB9B5a333A50e9935b796); + IPropertyGroup propertyGroup = IPropertyGroup(addressConfig.propertyGroup()); + retrurn propertyGroup.isGroup(_property); + } +} +``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-core.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-core.md new file mode 100644 index 0000000000..92e914954d --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-core.md @@ -0,0 +1,29 @@ +--- +title: Khaos Core +sidebar_position: 4 +--- + +## What is Khaos Starter Kit? + +Provides generation and recovery of Public Signatures used in Khaos. + +Developers can calculate Public Signatures with exactly the same logic as Khaos, or recover existing Public Signatures for various validations. + +| | Source | +| ------ | ----------------------------------------------------- | +| npm | https://www.npmjs.com/package/@devprotocol/khaos-core | +| GitHub | https://github.com/dev-protocol/khaos-core | + +## Usage + +Install from npm. + +```bash +npm i @devprotocol/khaos-core +``` + +Or, use yarn. + +```bash +yarn add @devprotocol/khaos-core +``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-kit.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-kit.md new file mode 100644 index 0000000000..223f855818 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-kit.md @@ -0,0 +1,33 @@ +--- +title: Khaos Kit +sidebar_position: 3 +--- + +## What is Khaos Kit? + +Provides Khaos Public Signature generation and an oracle dry run in JavaScript/TypeScript. + +| | Source | +| ------ | ---------------------------------------------------- | +| npm | https://www.npmjs.com/package/@devprotocol/khaos-kit | +| GitHub | https://github.com/dev-protocol/khaos-kit-js | + +## Usage + +Install from npm. + +```bash +npm i @devprotocol/khaos-kit +``` + +Or, use yarn. + +```bash +yarn add @devprotocol/khaos-kit +``` + +### Referencies + +The following guide describes a comprehensive way to build your own oracle with Khaos. In the Khaos Kit section, you can learn how to use the Khaos Kit specifically. + +https://initto.devprotocol.xyz/en/deep-dive-khaos/ diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-starter-kit.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-starter-kit.md new file mode 100644 index 0000000000..ce08b8a520 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/khaos-starter-kit.md @@ -0,0 +1,28 @@ +--- +title: Khaos Starter Kit +sidebar_position: 4 +--- + +## What is Khaos Starter Kit? + +Provides a template for building a developer-owned oracle called Khaos Functions using Khaos. + +| | Source | +| ------ | ------------------------------------------------- | +| GitHub | https://github.com/dev-protocol/khaos-starter-kit | + +## Usage + +Clone and install dependencies. + +```bash +git clone git@github.com:YOUR/khaos-starter-kit.git +cd khaos-starter-kit +yarn +``` + +### Referencies + +The following guide describes a comprehensive way to build your own oracle with Khaos. In the Khaos Starter Kit section, you can learn how to use the Khaos Starter Kit specifically. + +https://initto.devprotocol.xyz/en/deep-dive-khaos/ diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-contracts.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-contracts.md new file mode 100644 index 0000000000..d3be5934f2 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-contracts.md @@ -0,0 +1,27 @@ +--- +title: util-contracts +sidebar_position: 5 +--- + +## What is util-contracts? + +Provides general-purpose smart contracts in Solidity. + +| | Source | +| ------ | --------------------------------------------------------- | +| npm | https://www.npmjs.com/package/@devprotocol/util-contracts | +| GitHub | https://github.com/dev-protocol/util-contracts | + +## Usage + +Install from npm. + +```bash +npm i @devprotocol/util-contracts +``` + +Or, use yarn. + +```bash +yarn add @devprotocol/util-contracts +``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-ts.md b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-ts.md new file mode 100644 index 0000000000..ff14868e7b --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/developers/tools/util-ts.md @@ -0,0 +1,27 @@ +--- +title: util-ts +sidebar_position: 6 +--- + +## What is util-ts? + +Provide utility functions for functional programming in TypeScript (or JavaScript). + +| | Source | +| ------ | -------------------------------------------------- | +| npm | https://www.npmjs.com/package/@devprotocol/util-ts | +| GitHub | https://github.com/dev-protocol/util-ts | + +## Usage + +Install from npm. + +```bash +npm i @devprotocol/util-ts +``` + +Or, use yarn. + +```bash +yarn add @devprotocol/util-ts +``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/intro.md b/i18n/es/docusaurus-plugin-content-docs/current/intro.md new file mode 100644 index 0000000000..0787ec3209 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/intro.md @@ -0,0 +1,13 @@ +--- +slug: / +title: Getting Started +sidebar_position: 0 +--- + +## 🧑‍💻👩‍💻 ¡Bienvenido a la documentación de Dev Protocol!📚 + +![Dev Protocol](/img/devprotocol-logo.png) + +Aquí puedes aprender sobre Dev Protocol, como desarrollar con Dev Protocol. +Las páginas que siguen documentan exhaustivamente el ecosistema DEV. +Si eres nuevo a DEV, tal vez quieras leer "[¿Que es Dev Protocol?](./concepts/what-is-devprotocol.md)" and "[¿Que son los DEV tokens?](./concepts/devtoken.md)" primero. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/khaos/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/khaos/_category_.json new file mode 100644 index 0000000000..d8e55ef78c --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/khaos/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Khaos", + "position": 3 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/khaos/authentication-and-oraclization.md b/i18n/es/docusaurus-plugin-content-docs/current/khaos/authentication-and-oraclization.md new file mode 100644 index 0000000000..5d5bf17da8 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/khaos/authentication-and-oraclization.md @@ -0,0 +1,64 @@ +--- +title: Authentication and Oraclization +--- + +## Crear una signatura publica + +Una firma pública es una cadena de firma que no supone un riesgo de seguridad cuando se publica. Una firma pública es una "cadena que quieres probar (por ejemplo, ID de usuario)" y un "espacio de nombres de método de autenticación (definido por un usuario)" firmado con la dirección de tu cuenta de Ethereum. Es decir, cualquiera puede descifrar con la dirección de la cuenta de Ethereum. + +Para generar una firma nueva, pasa la firma generada por el usuario a la cartera de Ethereum y el mensaje usado para firmarlo, un mensaje secreto (e.j. un token de acceso), y el metodo de autenticación al API RESTful de Khaos. + +Puedes fácilmente solicitarlo usando el [Kit de Khaos publicado en NPM](https://www.npmjs.com/package/@devprotocol/khaos-kit). A continuación se explica cómo crear una firma pública utilizada en el Contrato de Mercado GitHub del Protocolo Dev. + +```ts +import { sign } from '@devprotocol/khaos-kit' + +sign( + 'github-market', + 'mainnet' +)({ + message: 'dev-protocol/protocol', + signature: 'SIGNATURE', + secret: 'SECRET', +}).then((res) => { + console.log(res.publicSignature) // => Firma publica generada + console.log(res.address) // => Dirección firmada +}) +``` + +## Emitir evento en cadena + +Emitir eventos de contratos inteligentes. Khaos monitoriza los eventos regularmente y comienza a oraclizar tan pronto como detecta un nuevo evento. Una función de Khaos definida por el usuario declara la dirección del contrato inteligente a ser monitoreada. Si los datos del evento tienen una firma pública con la clave `publicSignature`, Khaos pasará la información secreta almacenada al método oraclize. Una función Khaos definida por el usuario declara el método oraclize. + +> Puedes rápidamente desarrollar funciones de Khaos definidas por el usuario con el [Kit de principiantes de Khaos](https://github.com/dev-protocol/khaos-starter-kit). + +El nombre del evento y los datos del evento se pueden cambiar a como lo deseé con funciones definidas por el usuario de Khaos. Un ejemplo es mostrado a continuación. + +```solidity +event Query(string foo, string publicSignature, address user); + +function query(string calldata _foo, string calldata _publicSignature) external { + emit Query(_foo, _publicSignature, msg.sender); +} +``` + +Cuando Khaos completa la oraclización, Khaos ejecuta una función. La dirección del contrato inteligente al cual la devolución de llamada es llamada es considerada lo mismo que la dirección que el evento emitio. + +Puedes cambiar el nombre de la función y argumentos como lo deseé con funciones De Khaos definidas por el usuario. Un ejemplo se muestra a continuación. + +:::tip + +Le recomendamos que verifique que quien llama a la función de devolución de llamada es Khaos, por ejemplo, verificando la dirección de quien llama o una clave única que sólo Khaos conozca como argumento. + +::: + +```solidity +function callback(bool _result) external { + require(msg.sender == khaos, "el remitente no es Khaos"); + // Procesamiento que depende de Oracle... +} +``` + +## Esperar a la devolución de llamada + +¡Todo lo que tienes que hacer es esperar la devolución de llamada de Khaos! 🎉 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/khaos/index.md b/i18n/es/docusaurus-plugin-content-docs/current/khaos/index.md new file mode 100644 index 0000000000..35f4452aff --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/khaos/index.md @@ -0,0 +1,23 @@ +--- +title: Khaos +--- + +## ¿Que es Khaos? + +Khaos es un servicio de Oracle diseñado para llevar los datos de Internet a blockchains mientras se mantiene la información secreta, como los tokens secretos, en secreto. Inicialmente, solo admitiremos Dev Protocol, pero tenemos previsto abrirlo en el futuro. + +## ¿Como funciona? + +Khaos tiene dos interfaces, Autenticación y Oraclizar. La interfaz de autenticación autentifica que el usuario es titular de una credencial y devuelve una clave pública única. La interfaz de oraclize lleva los datos a través de Internet a la blockchain al tiempo que oculta la información secreta mediante claves públicas. + +## Como funciona la interfaz de la autenticación de Khaos + +Cuando Khaos recibe una solicitud de autenticación de un usuario, ejecuta un método de autenticación. La solicitud de autenticación contiene información secreta para la autenticación (normalmente un token secreto) y un mensaje (como un identificador de usuario) que espera ser autenticado por esa información secreta. Si el método de autenticación es aprobado, Khaos devuelve la clave pública emparejada con la información secreta. Al recuperar el mensaje con su clave pública, garantiza la autenticidad del mensaje al tiempo que oculta la información secreta. Un método de autenticación ejecutado por una solicitud de autenticación es libremente ampliable por el usuario. + +![Cómo almacena Khaos la confidencialidad.](/img/khaos/how-khaos-stores-confidentials.png) + +## Como funciona la interfaz de Khaos de oraclize + +Khaos monitoriza algunos eventos contractuales por lotes. El objetivo del monitoreo puede ser cualquier dirección en la que se despliegue un usuario. El contrato desplegado por el usuario hace una solicitud de oraclize a Khaos emitiendo un evento de acuerdo con la interfaz; cuando Khaos recibe la solicitud de oraclize, obtiene algunos datos de Internet de los mensajes de eventos. Los datos se introducen en las cadenas de bloques llamando al método de llamada de retorno del contrato de acuerdo con las funciones definidas por el usuario. El método de obtención de datos ejecutado por la petición oraclize es libremente ampliable por el usuario. El método de autenticación ejecutado por una solicitud de autenticación es libremente ampliable por el usuario. + +![Cómo oracliza Khaos](/img/khaos/how-khaos-oraclizes.png) diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/guide.md b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/guide.md new file mode 100644 index 0000000000..97d8e4ea54 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/guide.md @@ -0,0 +1,37 @@ +--- +title: Building Decentralized applications with DEV Integration +sidebar_position: 0 +--- + +The following guide and hands-on will help you to integrate DEV to your web application. In this hands-on, you don't need to worry about the gas fee in Ropsten Network. First is, we will follow the guide below before going to hands-on. + +### MetaMask Installation Guide + +This hands-on uses Metamask. If you do not have metamask in your browser add-on, please install metamask for your browser from [here](https://metamask.io/). + +### Creating a wallet address for the Ropsten environment + +After installing Metamask, specify the Ropsten environment and create a wallet. + +### Get ETH from faucet + +Since gas fee is required for hands-on, please use the following site to obtain about 1 ETH. Please request 1 ETH from [here](https://faucet.metamask.io/). + +### Get DEV token of Ropsten + +1. Create a wallet the wallet in a Ropsten environment +2. Add the address of the DEV token to your wallet `0x5312f4968901ec9d4fc43d2b0e437041614b14a2`. +3. Tell the team the amount of DEV you want on [discord server](https://discord.gg/VwJp4KM) +4. Dev Protocol staff will send you a DEV in the Ropsten environment + +:::note + +Ropsten environment is using a different address, this will use for the test environment. Follow the step at the top + +::: + +### Getting Started + +This hands-on uses a playground called CodeSandbox. Playground is an online web development environment, and it is a web service that allows you to code without preparing a development environment on your computer. + +Now, let's get into the first hands-on. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 1.md b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 1.md new file mode 100644 index 0000000000..c75abc0633 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 1.md @@ -0,0 +1,210 @@ +--- +title: Connect to Metamask to authenticate and display the user's wallet address and possessed DEV +sidebar_position: 1 +--- + +First, I will introduce the finished product to be created this time. Please access it [here](https://27v7x.csb.app/) + +This application is an application that connects to Metamask, authenticates, and displays the user's wallet address and possessed DEV. + +### Explanation of operation + +Please access the following [CodeSandbox](https://codesandbox.io/s/login-with-wallet-build-27v7x) + +Select `src/index.ts` from Explore on the left to display the source code. + +If you scroll to the bottom, you will find ①. +From now on, I will code from ① to ⑨. + +①: Here, the link between the click event of the button and the `clickLoginButton` method, and the code of the processing when the button is pressed are written. +(2): The `clickLoginButton` method accesses Metamask, performs authentication processing, and displays the user's wallet address and possessed DEV. It is a method that does up to. +③: From ③ to ⑦, judge the status of Metamask to determine if you are logged in. The following is defined as the state of Metamask + +| Login judgment | MetaMask state | Explanation | +| -------------- | :--------------------------------------- | :------------------------------------------------------------------------------------------------ | +| Not logged in | Metamask not installed | The browser does not have Metamask installed | +| Not logged in | Not connected to Metamask | Website is not allowed to connect with Metamask | +| Not logged in | Not logged in with Metamask | Not logged in on Metamask | +| Not logged in | Metamask connection network is different | The network to which Metamask connects is different from the network your website expects | +| Login | Not applicable to the above conditions | You can get the wallet address from Metamask and connect to the network that the website expects. | + +In ③, it is judged that "Metamask is not installed". Scroll to find the `isMetamask` function. Code the `isMetamask` function as follows: + +```tsx +function isMetamask(): boolean { + return !!window.ethereum && !!window.ethereum.isMetaMask +} +``` + +When metamask is installed in your browser, `ethereum` will be added to the` window` object. Using this as a judgment material, it returns whether "Metamask is not installed". + +④: Next, determine "Not connected to Metamask". Scroll down to find the `connectMetaMask` function. Code the `connectMetaMask` function as follows: + +```tsx +async function connectMetaMask(): Promise { + try { + await window.ethereum.request({ method: 'eth_requestAccounts' }) + } catch (e) { + if (e.code === 4001) { + return false + } + } + return true +} +``` + +To determine "not connected to Metamask", query the address of Ethereum from Metamask. At that time, if the connection between the website and Metamask cannot be established, such as when the user refuses to connect with Metamask, a 4001 code error will be returned, so this is used for judgment. +refer to: https://docs.metamask.io/guide/rpc-api.html#permissions + +⑤: Next, determine "not logged in with Metamask". Scroll down to find the `isMetaMaskLogin` function. Code the `isMetaMaskLogin` function as follows: + +```tsx +async function isMetaMaskLogin(): Promise { + return !!(await getAccount()) +} +``` + +The `isMetaMaskLogin` function calls the` getAccount` function. The `getAccount` function gets the wallet address from Metamask and returns it. +Code the `getAccount` function as follows: + +```tsx +async function getAccount() { + const accounts = (await window.ethereum.request({ + method: 'eth_accounts', + })) as string[] + + return accounts[0] +} +``` + +⑥: Next, determine "the state where the connection network of Metamask is different". Scroll down to find the `isMainNet` function. Code the `isRopsten` function as follows: + +```tsx +function isRopsten() { + return parseInt(window.ethereum.chainId) === 3 +} +``` + +`window.ethereum.childId` returns the following` CHAIN_ID` depending on the network you are connecting to + +| Network | CHAIN_ID | Explanation | +| :------ | -------: | :-------------------------------------- | +| Mainnet | 1 | Ethereum production environment network | +| Ropsten | 3 | Ethereum Test Network (PoW) | +| Rinkeby | 4 | Ethereum Test Network (PoA) | + +refer to: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md + +⑦: If the checks from ③ to ⑥ do not catch the item, it is considered as "logged in". After this, we will code the post-login process. + +⑧: Next, get the user's wallet address and display it. Scroll to find ⑧ and code as follows. + +```tsx +const walletAddress = await getAccount() +const addressElement = document.getElementById('address') +addressElement.innerText = walletAddress +``` + +The `getAccount` function created in ⑤ is used to get the wallet address. + +⑨: Next, acquire the user's possessed DEV and display it. Scroll to find the `getBalanceOfDEV` function. Code the `getBalanceOfDEV` function as follows: + +```tsx +import { addresses, contractFactory } from '@devprotocol/dev-kit' +import { BigNumber } from '@ethersproject/bignumber' +import Web3 from 'web3' + +async function getBalanceOfDEV(walletAddress: string) { + const provider = new Web3(window.ethereum) + const client = contractFactory(provider.currentProvider) + + const registryContract = client.registry(addresses.eth.ropsten.registry) + + const addressDEV = await registryContract.token() + + const amountBigNumber = BigNumber.from( + await client.dev(addressDEV).balanceOf(walletAddress) + ) + + const amount = amountBigNumber.div('1000000000000000000').toString() + return amount +} +``` + +> - Add `await` when calling` getBalanceOfDEV` + +`contractFactory` is a function declared in` @ devprotocol / dev-kit`, and you can create a `client` by passing the` currentProvider` of `Web3` as an argument. You can use this `client` to operate the Dev Protocol. This time, we are using `client` to get the number of possessed DEVs. + +```tsx +const registryContract = client.registry(addresses.eth.ropsten.registry) +``` + +Dev Protocol contracts are distributed by type, and the address of each contract is managed by `registryContract`. In the above part, we are getting the `registryContract` of the` ropsten` environment. DevProtocol has `main` and` ropsten` environments. In the above part, we are getting the registryContract of the ropsten environment. DevProtocol has main and ropsten environments. + +```tsx +const addressDEV = await registryContract.token() +``` + +In this hands-on, we want to display the number of DEVs we have, so we are returning the address of the `token` contract that handles DEV tokens. + +```tsx +const amountBigNumber = BigNumber.from( + await client.dev(addressDEV).balanceOf(walletAddress) +) +``` + +The `dev` function is a method for contracts related to DEV tokens. By setting the contract address of the DEV token in the `dev` function and specifying the wallet address of the target person in the `balanceOf` method, the number of DEVs possessed by the target person is returned. + +In addition to the `dev` function,` client` has the following functions. + +```tsx +export type DevkitContract = { + readonly allocator: ReturnType + readonly market: ReturnType + readonly property: ReturnType + readonly propertyFactory: ReturnType + readonly lockup: ReturnType + readonly withdraw: ReturnType + readonly dev: ReturnType + readonly registry: ReturnType + readonly policy: ReturnType + readonly policyGroup: ReturnType + readonly metrics: ReturnType + readonly policyFactory: ReturnType +} +``` + +Codebase: https://github.com/dev-protocol/dev-kit-js/blob/372c762539855b794af2e3df5774061d640f61d0/lib/contract.ts + +In addition to the `balanceOf` function, the` dev` function has the following functions. + +```tsx +export type DevContract = { + readonly totalSupply: () => Promise + readonly balanceOf: (address: string) => Promise + readonly transfer: (to: string, value: string) => Promise + readonly allowance: (from: string, to: string) => Promise + readonly approve: (to: string, value: string) => Promise + readonly transferFrom: ( + from: string, + to: string, + value: string + ) => Promise + readonly name: () => Promise + readonly symbol: () => Promise + readonly decimals: () => Promise + readonly deposit: (to: string, value: string) => Promise + readonly contract: () => Contract +} +``` + +Codebase: https://github.com/dev-protocol/dev-kit-js/blob/372c762539855b794af2e3df5774061d640f61d0/lib/dev/index.ts + +```tsx +const amount = amountBigNumber.div('1000000000000000000').toString() +``` + +Since the decimal point of the ERC20 token is 18 digits, it is divided to match the decimal point. + +This is the end of coding. Let's check the operation. +When you can log in and your wallet address and the number of DEVs you have are displayed on the screen, you are done. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 2.md b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 2.md new file mode 100644 index 0000000000..ac9570f41b --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 2.md @@ -0,0 +1,209 @@ +--- +title: Display registered properties and perform staking +sidebar_position: 2 +--- + +## Hands-on #2 + +This hands-on displays the projects registered in the Dev Protocol (called properties in the code). Dev Protocol data can be called by GraphQL. First, let's look at the data using GraphQL. GraphQL can be accessed from the link below. + +#### Mainnet environment + +- https://explorer.graphql.devprotocol.xyz/ + +Let's search for properties that are onboard. + +> You cannot search for properties that are currently onboard in the Ropsten environment. + +### How to use + +First, I will introduce the finished product to be created this time. Please access the following URL: + +- https://xfxyq.csb.app/ + +This application gets the property list from GraphQL at the time of access and displays only the first one. The property has a button to stake "1 DEV", and pressing this button will stake. + +### Explanation of operation + +Please access the following URL and open CodeSandbox.: + +- https://codesandbox.io/s/display-property-and-staking-build-xfxyq?file=/src/index.ts + +Select src / index.ts from Explore on the left to display the source code. +If you scroll to the bottom, you will find ①. + +> This time, we will code the ① & ②. + +①: Here, when the page is displayed, get the list of properties from GraphQL and return it. Scroll to find the `getPropertyFromRopsten` function. Code the `getPropertyFromRopsten` function as follows: + +```tsx +async function getPropertyFromRopsten() { + // Get property information from GraphQL + const response = await fetch( + 'https://devprtcl-event-ropsten.azurewebsites.net/v1/graphql', + { + method: 'POST', + headers: { + 'X-Requested-With': 'xhr', + 'Content-Type': 'application/json', + 'x-hasura-admin-secret': 'SjV2f9iWscDxFj4KU', + }, + body: JSON.stringify({ + query: ` + query MyQuery { + property_meta(limit: 3) { + name + property + } + } + `, + }), + } + ) + const json = await response.json() + const convert = Array.from(json.data.property_meta).map((value) => { + return { property_meta: value } + }) + return convert +} +``` + +Queries to GraphQL are queried using `fetch`. In `query` of` body` of `fetch`, you can paste the query issued by GraphQL as it is. + +- Originally, `property_authentication` is specified in the query, but since it does not work in the Ropsten environment,` property_meta` is specified. + +Let's run it after coding and check that the property name changes + +The `getPropertyFromRopsten` function gets the properties of the Ropsten environment. Let's also code the `getPropertyFromMain` function to get the property from the mainnet environment. + +Modify the `getPropertyFromMain` function as follows: + +```tsx +async function getPropertyFromMain() { + const response = await fetch('https://api.devprotocol.xyz/v1/graphql', { + method: 'POST', + headers: { + 'X-Requested-With': 'xhr', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: ` + query property_stake_social_onboard { + property_authentication( + order_by: {property_creation: {block_number: desc}} + limit: 3 + ) { + property_meta { + name + property + } + } + } + `, + }), + }) + const json = await response.json() + const allCreatorInfo = json.data.property_authentication + return allCreatorInfo +} +``` + +After coding, let's change the part that calls `getPropertyFromRopsten` to call` getPropertyFromMain`. + +```tsx +// ① Get a list of properties that are onboard +// const properties = await getPropertyFromRopsten(); +const properties = await getPropertyFromMain() +``` + +When you're done coding, run it and see if the property name changes. +After checking, revert to using getPropertyFromRopsten + +②: Next, code the processing when the Staking button is pressed. Scroll to find the `clickStakingButton` function. Code the `clickStakingButton` function as follows: + +```tsx +async function clickStakingButton() { + const propertyAddress = this.dataset.propertyAddress + + // Create Client + const provider = new Web3(window.ethereum) + const client = contractFactory(provider.currentProvider) + + // Get the address of the Dev Protocol on the ropsten network + const registryContract = client.registry(addresses.eth.ropsten.registry) + const addressDev = await registryContract.token() + + // Convert to 1DEV = 1000000000000000000 + const amountBigNumber = BigNumber.from('1') + const amount = amountBigNumber.mul('1000000000000000000').toString() + + // deposit (`property address`,` staking amount`) + const result = await client.dev(addressDev).deposit(propertyAddress, amount) + + return result ? alert('Successful staking') : alert('Staking failed') +} +``` + +The first half is the one that created the `client` of Dev-kit-js that was coded in the previous hands-on. + +```tsx +const propertyAddress = this.dataset.propertyAddress + +// Create Client +const provider = new Web3(window.ethereum) +const client = contractFactory(provider.currentProvider) +``` + +The `deposit` function for staking is included in the DEV token contract, so we are getting the address of the DEV token contract. + +```tsx +// Get the address of the Dev Protocol on the ropsten network +const registryContract = client.registry(addresses.eth.ropsten.registry) +const addressDev = await registryContract.token() +``` + +This time I will stake 1DEV, but I will change it to 18 digits to match the unit of 1DEV. +I am using a library because JS cannot handle numbers with a large number of digits. + +```tsx +// Convert to 1DEV = 1000000000000000000 +const amountBigNumber = BigNumber.from('1') +const amount = amountBigNumber.mul('1000000000000000000').toString() +``` + +Staking is performed by setting the address of the DEV token contract in the `dev` function of` client` and calling the `deposit` function. When staking is complete, the return value will be `true` + +```tsx +// deposit (`property address`,` staking amount`) +const result = await client.dev(addressDev).deposit(propertyAddress, amount) +``` + +In addition to `deposit`, the` dev` function has the following functions + +```tsx +export type DevContract = { + readonly totalSupply: () => Promise + readonly balanceOf: (address: string) => Promise + readonly transfer: (to: string, value: string) => Promise + readonly allowance: (from: string, to: string) => Promise + readonly approve: (to: string, value: string) => Promise + readonly transferFrom: ( + from: string, + to: string, + value: string + ) => Promise + readonly name: () => Promise + readonly symbol: () => Promise + readonly decimals: () => Promise + readonly deposit: (to: string, value: string) => Promise + readonly contract: () => Contract +} +``` + +Codebase: https://github.com/dev-protocol/dev-kit-js/blob/372c762539855b794af2e3df5774061d640f61d0/lib/dev/index.ts + +This is the end of coding. Let's check the operation. +First, log in, press the Staking button, and when the message "Staking was successful" is displayed, you are done. + +Let's check with Etherscan. Etherscan is a website where you can check Ethereum transactions, and the transactions you stake this time are also recorded. Let's search by the address of the DEV token contract and look at the log. +https://ropsten.etherscan.io/address/0x5312f4968901Ec9d4fc43d2b0e437041614B14A2 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 3.md b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 3.md new file mode 100644 index 0000000000..86eb8bf439 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/Hands-on/hands-on 3.md @@ -0,0 +1,188 @@ +--- +title: List staking properties and withdraw staking +sidebar_position: 3 +--- + +### Hands-on #3 + +This hands-on get staking property information from GraphQL. First, let's get a list of staking properties using GraphQL. GraphQL can be accessed from the link below. + +Mainnet environment +https://explorer.graphql.devprotocol.xyz/ + +Specify `account_address` in where of` account_lockup` and set the following address to the value of `_ilike` and execute. I think you can get some data +`0x262A038D0bc05B4112c7D58BBfd407810bcfE2aB` +This data will be the data for the staking property. We will use this data to perform hands-on. + +> Currently, you cannot search for `account_lockup` in the Ropsten environment. + +First, I will introduce the finished product to be created this time. Please access the following URL +https://g90uk.csb.app/ + +This application gets the property list staking by the person accessing from GraphQL at the time of access and displays only the first one. The property has a button to pull out "1 DEV", and pressing this button will pull out the staking. + +> Since `account_lockup` cannot be searched in the Ropsten environment at present, the address of the property that was stakes in the previous hands-on is specified. + +[Explanation of operation] +Please access the following URL and open CodeSandbox. +https://codesandbox.io/s/your-staking-and-withdraw-build-g90uk?file=/src/index.ts + +Select src / index.ts from Explore on the left to display the source code. +This time, we will code ① to ②. + +①: Here, when the page is displayed, the property list that the person accessing from GraphQL is staking will be acquired. Scroll to find the `getStakingPropertyFromRopsten` function. Code the `getStakingPropertyFromRopsten` function as follows: + +```tsx +async function getStakingPropertyFromRopsten(address) { + // Get property information from GraphQL + const response = await fetch( + 'https://devprtcl-event-ropsten.azurewebsites.net/v1/graphql', + { + method: 'POST', + headers: { + 'X-Requested-With': 'xhr', + 'Content-Type': 'application/json', + 'x-hasura-admin-secret': 'SjV2f9iWscDxFj4KU', + }, + body: JSON.stringify({ + query: ` + query MyQuery { + property_meta(limit: 3) { + name + property + } + } + `, + }), + } + ) + const json = await response.json() + const convert = Array.from(json.data.property_meta).map((value) => { + return { + value: '20000000000000000000', + property_meta: value, + property_address: '0xb42612a90d05785c005b292f635871ca28aa10e0', + } + }) + return convert +} +``` + +Queries to GraphQL are queried using fetch. In `fetch` of `body` of `query`, you can paste the query issued by GraphQL as it is. + +> Currently, the code is modified because the list of staking properties cannot be obtained in the Ropsten environment. + +Let's run it after coding and check that the property name changes + +The `getStakingPropertyFromRopsten` function gets the properties of the Ropsten environment. Let's also code the `getStakingPropertyFromMain` function to get the property from the mainnet environment. +Modify the `getStakingPropertyFromMain` function as follows: + +```tsx +async function getStakingPropertyFromMain(address) { + const response = await fetch('https://api.devprotocol.xyz/v1/graphql', { + method: 'POST', + headers: { + 'X-Requested-With': 'xhr', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: ` + query Staking_properties { + account_lockup( + where: {account_address: {_ilike: "${address}"}} + ) { + value + property_meta { + name + } + property_address + } + } + `, + }), + }) + const json = await response.json() + const allStakingInfo = json.data.account_lockup + return allStakingInfo +} +``` + +For `where` in query, set the` address` passed as an argument. + +After coding, let's change the part that calls `* getStakingPropertyFromRopsten *` to call` getStakingPropertyFromMain`. + +```tsx +// ① Get a list of properties that are onboard +// const properties = await getStakingPropertyFromRopsten(await getAccount()); +const properties = await getStakingPropertyFromMain(await getAccount()) +``` + +Let's run it when we're done coding. If you are staking on Stakes.social, the property name will change. +After checking, set it back to use `getStakingPropertyFromRopsten` + +(2): Next, we will code the processing when the Withdraw button is pressed. Scroll to find the `clickWithdrawButton` function. Code the `clickWithdrawButton` function as follows: + +```tsx +async function clickWithdrawButton() { + const propertyAddress = this.dataset.propertyAddress + + // Create Client + const provider = new Web3(window.ethereum) + const client = contractFactory(provider.currentProvider) + + // Get the address of the Dev Protocol on the ropsten network + const registryContract = client.registry(addresses.eth.ropsten.registry) + + // Since withdraw is included in the lockup contract, we get the address of the lockup contract + const addressLockup = await registryContract.lockup() + + // Convert to 1DEV = 1000000000000000000 + const amountBigNumber = BigNumber.from('1') + const amount = amountBigNumber.mul('1000000000000000000').toString() + + // withdraw (`property address`,` withdrawal amount`) + const result = await client + .lockup(addressLockup) + .withdraw(propertyAddress, amount) + + result ? alert('Successful withdrawal') : alert('Failed to withdraw') +} +``` + +The first half is the one that created the `client` of Dev-kit-js that was coded in the previous hands-on. + +```tsx +// Create Client +const provider = new Web3(window.ethereum) +const client = contractFactory(provider.currentProvider) + +// Get the address of the Dev Protocol on the ropsten network +const registryContract = client.registry(addresses.eth.ropsten.registry) + +// Since withdraw is included in the lockup contract, we get the address of the lockup contract +const addressLockup = await registryContract.lockup() +``` + +This time I will pull out 1 DEV, but I will change it to 18 digits to match the unit of DEV. +I am using a library because JS cannot handle numbers with a large number of digits. + +```tsx +// Convert to 1DEV = 1000000000000000000 +const amountBigNumber = BigNumber.from('1') +const amount = amountBigNumber.mul('1000000000000000000').toString() +``` + +Once you have the address of the `lockup` contract, pass it to` lockup` and call the `withdraw` function to pull the staking. + +```tsx +// withdraw (`property address`,` withdrawal amount`) +const result = await client.lockup(addressLockup).withdraw(propertyAddress, '1') + +result ? alert('Successful withdrawal') : alert('Failed to withdraw') +``` + +This is the end of coding. Let's check the operation. +First, log in, press the Withdraw button, and when the message "Successfully withdrawn" is displayed, you are done. + +Let's check with Etherscan. Etherscan is a website where you can check Ethereum transactions, and the transactions you stake this time are also recorded. Let's search by the address of the lockup contract and look at the log. +https://ropsten.etherscan.io/address/0xb8b7a92A716318F2CCed7eA856BE029969552582 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/learning/_category_.json new file mode 100644 index 0000000000..9819335030 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Learning", + "position": 6 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/ethereum.md b/i18n/es/docusaurus-plugin-content-docs/current/learning/ethereum.md new file mode 100644 index 0000000000..1e3ec55e7a --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/ethereum.md @@ -0,0 +1,70 @@ +--- +title: What's Ethereum? +sidebar_position: 0 +--- + +Ethereum is a P2P network with computing infrastructure. It is one of the blockchain implementation. + +## P2P + +P2P network is a network structure that is opposite to client-server model network. + +Client-server network is connected by one-on-one connection of a server and plural users. Today, IP address of a server is attracted from host names by DNS, and we often see domains like `example.com`. + +![Client Server Network](/img/developers/basics/whats-ethereum/client-server.png) + +A server is located at the center of the diagram. Each client, in other words, each user is connected to it one-on-one. Since the server is managed by administrators, this network is called centralized network. + +P2P is a network that doesn't have any centralized computers equivalent to a server. In the client-server network, processing is done by a server, although in P2P network, each user shares processing. + +![P2P Network](/img/developers/basics/whats-ethereum/p2p.png) + +We don’t need any administrators in this network due to the absence of centralized server, so it’s called decentralized network. + +## Blockchain + +Blockchain is one of the types of P2P network. One of the biggest differences from other P2P network is that blockchain is excelling in tamper resistant and time series. + +![Blockchains under P2P](/img/developers/basics/whats-ethereum/p2p-blockchains.png) + +Blockchain is a network that has the following characteristics: + +- No one can manipulate the information exchanged among users. + - There is no central administrators due to P2P. +- We can deal with time-series data although it’s decentralized. + - Continuity of data can be expressed without using central time stamps. +- No one can change the data. + - Past data remains as a fact. +- Data is continuously being added. + +These 3 points are realized because blockchain saves data as "Markle tree". + +![Chaining hash](/img/developers/basics/whats-ethereum/chaining-hash.png) + +Request from users, in other words, processed results in accordance with transaction is hashed to one value at a certain interval and incorporated as part of the next transaction queue. Since transaction queues include hash value of the transaction queue just before, the continuity of hash value is guaranteed without failure. In addition, time series can be accurately expressed thanks to the chain structure. + +![Merkle tree](/img/developers/basics/whats-ethereum/merkle-tree.png) + +(Several transactions are expressed by a single hash value and compose blocks.) + +Merkle tree is a structure used at git, and developers familiarize with it. Thanks to its continuity of hash value, Merkle tree can certify that logs are not tampered. + +In addition to the data perpetuation by Merkle tree, Blockchain, a P2P network, has an algorithm to blocking generate unauthorized Markle tree to illegal operations (consensus algorithm). + +That means, it is always proved that data in blockchain is not tampered. The reason why crypto assets such as BTC, Bitcoin, and ETH, Ethereum, have a sort of quality as “assets” in the real world is that they are proved to be data tampered by nobody. + +If ETH is administered by a server of client-server network, the third party cannot certify whether the sever is correctly administered. + +## Ethereum + +Ethereum is one of the implementation of blockchain, and is a unique blockchain in terms of the implementation of program at decentralized environment. + +Bitcoin, one of the most famous blockchain implementation, works as a register of BTC, although Ethereum records the execution result of program on blockchain. + +![Ethereum as a Autonomous Runtime](/img/developers/basics/whats-ethereum/autonomous-runtime.png) + +Program execution results are the manipulation that causes the rewrite of variables of a class. Developers can deploy self-made program on Ethereum, execute it at P2P network on Ethereum, and record the execution result by Merkle tree. Ethereum is also thought to be an autonomous runtime. + +Programs executed on Ethereum is coded by a statically-typed programming language called Solidity. Solidity is an object-oriented programming language, and has a specification similar to ECMAScript. However, Solidity has various technical limitation in blockchain, therefore, its programming style tends to be stoic as well as minimalistic. + +Programs executed on Ethereum are called _smart contracts_. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/learning/token.md b/i18n/es/docusaurus-plugin-content-docs/current/learning/token.md new file mode 100644 index 0000000000..c0a1e914c0 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/learning/token.md @@ -0,0 +1,47 @@ +--- +title: What's token? +sidebar_position: 1 +--- + +Token is a program executed on Ethereum, and is one of the common forms of smart contract. It is a written program in accordance with standardized interface. + +Since written programs are freely executed on Ethereum, there is no limit for its usage. However, by standardizing interface, composability can be realized for programs that are used for the same purpose. Token is a standardized program for "the program as currency", which is generally called as crypto currency or crypto assets. + +Standardizing process in Ethereum is administered at git repository called EIP. Anyone can make a suggestion for it, so the specification approved by the majority of users users will be officially standardized. + +There are many new-coming specifications proposed for accessibility. But the most popular specification is **ERC-20**, and its interface is like this: + +```solidity +interface IERC20 { + function totalSupply() external view returns (uint256); + + function balanceOf(address who) external view returns (uint256); + + function allowance(address owner, address spender) + external view returns (uint256); + + function transfer(address to, uint256 value) external returns (bool); + + function approve(address spender, uint256 value) + external returns (bool); + + function transferFrom(address from, address to, uint256 value) + external returns (bool); + + event Transfer( + address indexed from, + address indexed to, + uint256 value + ); + + event Approval( + address indexed owner, + address indexed spender, + uint256 value + ); +} +``` + +All of the smart contracts that succeed this interface are tokens conforming to ERC-20. Developers can add their original functions to the interface. + +[Open Zeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts) is the most popular smart contract library. You can develop tokens easily and safely with it. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/protocol/_category_.json new file mode 100644 index 0000000000..a6573ced7d --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "The Protocol", + "position": 2 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/_category_.json new file mode 100644 index 0000000000..ffd09ed31b --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/_category_.json @@ -0,0 +1,3 @@ +{ + "label": "Governance" +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/dips.md b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/dips.md new file mode 100644 index 0000000000..b18f2d4ea2 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/dips.md @@ -0,0 +1,15 @@ +--- +title: DIPs +--- + +Dev Protocol has improvement proposal schemes "DIPs" through git. The DIPs' git remote repository is on GitHub. + +https://github.com/dev-protocol/DIPs + +All core modules and variables of the Dev Protocol are updated by on-chain governance with source code. By asking the community for pros and cons through governance before developing the source code, developers can stabilize their development direction. + +:::note + +Currently, on-chain governance can only update some variables managed by Policy Contract + +::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/governance.md b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/governance.md new file mode 100644 index 0000000000..0e0fa2e358 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/governance.md @@ -0,0 +1,27 @@ +--- +title: Governance +--- + +# Basic concept of governance + +## Fully on-chain + +Governance in Dev Protocol is driven fully on-chain for all decisions. + +:::note + +Currently, only pre-defined variables are updated on-chain. See the [Upgrading code modules](/docs/protocol/governance/upgrading-core-modules) page for core modules upgrades. + +::: + +## Governance scopes are not limit + +Governance in Dev Protocol allows all source code updates, from predefined variables to core modules. + +## Everything is code + +All proposals should be guaranteed by code. + +## Derive the optimal solution + +Governance in Dev Protocol eliminates the shortcomings of majority voting by accepting multiple weighted votes. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-core-modules.md b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-core-modules.md new file mode 100644 index 0000000000..c8d876045e --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-core-modules.md @@ -0,0 +1,53 @@ +--- +title: Upgrading core modules +--- + +:::note + +This page mentions many unimplemented features. + +::: + +:::info + +If you want to add or remove variables managed by Policy Contract or change existing specifications, you need to upgrade the core modules on Dev Protocol. + +::: + +## Smart contracts that upgraders should implement + +In order to upgrade the core modules, the developer needs to develop the following smart contracts. + +### Patch contracts + +Prepare smart contracts with patches applied to existing core modules or smart contracts that implement newly added modules. + +### Writer contract + +Prepare a smart contract to apply the patch. + +A writer contract needs to be created as self-destructible contracts, as they are one-time contracts used for patching purposes. + +The following interfaces are required for a writer contract. + +#### write + +This function is called after the authority is temporarily transferred from the Upgrader Contract(unimplemented), and it is necessary to apply the patch with one call. + +``` +function write() external; +``` + +#### close + +Self-destruct. It would help if you verified that a caller is an Upgrader Contract(unimplemented). + +``` +function close() external; +``` + +## Upgrader Contract + +A contract is responsible for managing the authority to upgrade the Dev Protocol core modules and enforcing core module upgrades passed by on-chain governance. + +Upgrader Contract allows upgrade itself with a patch contract. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-predefined-variables.md b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-predefined-variables.md new file mode 100644 index 0000000000..ff2e97f147 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/governance/upgrading-predefined-variables.md @@ -0,0 +1,110 @@ +--- +title: Upgrading predefined variables +--- + +Some variables can be easily upgraded with Policy Contract + +> Adding/removing variables that Policy Contract should manage need core modules upgrades. +> Currently, core modules upgrades are carried out by the ADMIN key after voting by DIPs, but ADMIN is working on decentralizing core modules upgrades. + +## Propose upgrades of predefined variables using Policy Contract + +It inherits the Policy Contract interface and adds a concrete implementation to every method. The interface is [published on npm](https://www.npmjs.com/package/@devprotocol/protocol). + +```bash +# Install npm package +> npm i @devprotocol/protocol +``` + +Import the Policy Contract interface in Solidity. + +``` +import {IPolicy} from "@devprotocol/protocol/contracts/interface/IPolicy.sol"; +``` + +All interfaces are described the following. + +## All functions that Policy Contract should implement + +You need to implement all the functions, but you should minimize the changes by **inheriting the existing Policy Contract** if you have nothing to change. + +### rewards + +Takes the total number of staking and the total number of authenticated assets as arguments and returns the number of inflations (the number of mints) per block. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IPolicy.sol#L5-L8) + +### holdersShare + +Takes the total number of inflations and the total number of staking as arguments and returns the total number of creator rewards. The staking rewards are calculated by subtracting this value from the total rewards. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IPolicy.sol#L10-L13) + +### authenticationFee + +Takes the total number of authenticated assets and the total number of staking for a Property Contract as arguments and returns the authentication fee. Property Contract authors must burn this authentication fee for each asset authentication. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IPolicy.sol#L15-L18) + +### marketApproval + +Takes the total number of yes votes and the total number of no votes as arguments and returns the new Market Contract is pass or not. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/a89d43860200002fa630be8e5b14b0f8c00968e9/contracts/interface/IPolicy.sol#L20-L23) + +### policyApproval + +Takes the total number of yes votes and the total number of no votes as arguments and returns the new Policy Contract is pass or not. +Policy Contract is a singleton, so if multiple Policy Contracts are voting simultaneously, only the earliest approved Policy Contract will be adopted, and the other options will be removed. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/a89d43860200002fa630be8e5b14b0f8c00968e9/contracts/interface/IPolicy.sol#L25-L28) + +### marketVotingBlocks + +Returns the voting period for a new Market Contract in blocks. Market Contracts that do not pass beyond this period are considered rejected. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IPolicy.sol#L30) + +### policyVotingBlocks + +Returns the voting period for a new Policy Contract in blocks. Policy Contracts that do not pass beyond this period are considered rejected. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IPolicy.sol#L32) + +### shareOfTreasury + +Takes the total supply of a new Property Contract as arguments and returns the number of Property Contracts to a Treasury Contract. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/a89d43860200002fa630be8e5b14b0f8c00968e9/contracts/interface/IPolicy.sol#L34) + +### treasury + +Returns a Treasury Contract address. + +[dev-protocol/protocol](https://github.com/dev-protocol/protocol/blob/main/contracts/interface/IPolicy.sol#L36) + +## Propose with on-chain + +Deploy the new Policy Contract to the mainnet or testnet and run the Policy Factory Contract's `create` function. + +The current Policy Factory Contract address can be obtained with the `policyFactory` function of Address Config Contract. The address of the Address Config Contract is [0x1D415aa39D647834786EB9B5a333A50e9935b796](https://etherscan.io/address/0x1d415aa39d647834786eb9b5a333a50e9935b796#readContract). + +## Voting + +Community votes by `votePolicy` function of Vote Counter Contract. If `policyApproval` function of an existing Policy Contract returns `true`, the new Policy Contract will be activated immediately. + + votePolicy function takes the following three arguments: + +1. Address of a new Policy Contract +2. Address of a Property Contract you are staked +3. yes/no in boolean + +### Why use Property Contract's address in the second argument? + +The voting rights of a voter are equal to the total number of staking for a voter. The number of staking to one Property Contract per vote is used as the voting right, and the used voting right cannot be exercised again. You can vote for one Policy Contract more than once or vote for multiple Policy Contracts. + +This is a specification that implements the concept of quadratic voting. + +When there are multiple options simultaneously, a simple majority vote does not choose all stakeholders' best options. + +For example, given that the difference in the number of votes for each option is small, the option most people choose for second place may be better than the one for first place, which is slightly higher than the others. Quadratic voting reflects individual weights in your votes to help you choose the best option. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/protocol/whitepaper.md b/i18n/es/docusaurus-plugin-content-docs/current/protocol/whitepaper.md new file mode 100644 index 0000000000..0ba88458b0 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/protocol/whitepaper.md @@ -0,0 +1,376 @@ +--- +title: Protocol whitepaper +--- + +# The Protocol whitepaper + +### The World that Dev Protocol Aims for + +Economic activities are built on top of many real world activities. These activities need investments to realize future growth and profit. Dev Protocol is a decentralized technology that fairly evaluates various activities that have not received an economic evaluation and realizes their autonomous distribution and sustainability through P2P trading and reward distribution. + +### Overview + +Individuals produce value through activities. Dev Protocol offers market, staking, and reward distribution features for tokenizing these activities and trading them through P2P. When activities are tokenized, the following is achieved. + +- Market rewards are obtained based on the staked +- A tokenized activity undergoes Staking (financial support) by third parties +- Providing value as an incentive for Staking +- Sharing properties with joint activity participants and distributing market rewards + +Staking is a new form of trading money that uses the inflation mechanism. Through staking, the sustainability of users’ activities is secured, and users receive value at zero financial cost. This is a mechanism that provides profit for all properties that had previously been released for free or through other indirect monetization mechanisms. Dev Protocol aims for a total value staked that surpasses donation activities that have been taking place through legal tender. + +Dev Protocol transfers the formulation of its policy, which serves as the guiding principle for its governance, to the community so that it can be updated depending on the circumstances. Users can freely propose a new policy through the protocol. In order for a policy to take effect, approval must be granted through a vote of staking users(a.k.a. stakers). A policy can be related to a decision on the inflation rate and other aspects of the ecosystem. The current [policy is here](https://github.com/dev-protocol/protocol/blob/main/docs/POLICY.md). + +### Market + +The market serves to provide assuring identity by certifying an individual’s activity on the blockchain. A market is created for each authentication target, and the community can propose the opening of new markets. + +### Tokenization + +As a premise, ownership of a user’s activities is certified to belong to the user in Dev Protocol. This differs from the model employed in existing web platforms, in which the platform owns the user data, and separates the ownership and utilization of properties. A property can be used infinitely through the application layer built on top of Dev protocol. + +### Tokenization Method + +By authenticating an external account that expresses ownership of the activity on Dev Protocol, users can define their activity as a “property” on the market and certify that they are the owner of the property. When authenticating a property, the user pays a commission in DEV that has been defined by the policy, and the commission that has been paid is instantly burned. Users can authenticate multiple properties and connect them to multiple markets. + +### Profit, Market Reward, Inflation, Deflation + +An owner of a Property receives a market reward based on the total staked of the property. +The flow of DEV in the protocol can be summarized through the following lifecycle. For simplicity, the owner of a Property is listed as an “activity participant,” and a third party who receives some form of utility is listed as a “user,” although a user can be classified as both. + +1. DEV is newly minted by an activity participant and undergoes inflation. +2. A user stakes the DEV for the activity participant. +3. The more staking that a Property collectes, the more DEV this activity participant can newly mint. +4. As a perk for staking, the activity participant can provide the user with utility optionally. +5. When the user cancels staking, the user is able to withdraw the staking amount, as well as a portion of the DEV that the activity participant obtained through the offering. + +The total amount of rewards is determined (dynamically or statically) based on the policy regarding the inflation rate for DEV. The [current policy is here](https://github.com/dev-protocol/protocol/blob/main/docs/POLICY.md). Through the protocol, DEV is newly issued, burned, staked, and fluctuates based on demand. + +### Shared Rights with Joint Activity Participants + +The owner of a Property initially owns 100% of the ownership rights. Owning 100% of the ownership rights is equivalent to the right to receive all of the market rewards. It is possible for multiple people, such as joint activity participants, to own the ownership rights by transferring a portion of the ownership rights. Ownership rights holders can receive a portion of market rewards based on the ownership ratio. This is realized by the fact that the Property Contract that represents ownership rights conforms to ERC20 standard. + +### Treasury + +Property ownership is by default 100% owned by the Property owner. However, the percentage specified by Policy will be sent to Treasury Contract. The [current policy is here](https://github.com/dev-protocol/protocol/blob/main/docs/POLICY.md). Treasury Contract earns/accumulates a portion of the market rewards earned from a Property by holding a portion of the Property tokenized over the protocol. Treasury Contract accumulates Properties and DEV, which are used as financial resources for the community. + +### Staking + +Staking is used in Dev Protocol as a new supporting system that enables trading of various Properties. Staking is a mechanism that increases market rewards through the temporary deposit of DEV toward a property. As consideration for staking, the payer receives utility from the activity participant, and the activity participant receives the market rewards that have increased during the staking period. Staking continues while the payer needs this utility, increasing the scarcity value of DEV. By receiving staking, activity participant secure the sustainability of their activity. + +### Supporting Flow + +By staking DEV in a Property over a specific period of time, the supporter receives some sort of perk optionally. +Based on the amount of DEV staked, a market reward (inflation) amount is added for the property. The longer the staking period by the payer, the more market rewards are promised to the activity participant. +As interest, the supporter receives a portion of the DEV that is newly acquired by the activity participant. The amount that can be received at this time is determined by the amount that the user has staked in comparison with the total amount staked. +When the staking period ends, the DEV staked in the property is released, and the user can withdraw it. + +### Governance + +Many incentives are built into Dev Protocol so that all users can receive profit without encroaching on each other’s interests. There is no decisive theory on the interaction of these incentives, and our hope is for the community, including stakeholders, to constantly propose improvements. In Dev Protocol, indices with uncertainty are accepted from external sources as part of the policy. And, the [current policy is here](https://github.com/dev-protocol/protocol/blob/main/docs/POLICY.md). + +### Application Layer + +By staking their DEV toward an activity participant, users receive some sort of perk from this activity participant. (Although it is possible for the staking user to contact the activity participant and request perk in a direct manner) The application layer automatically executes a series of trades. The application layer relays the user’s staking to the activity participant and relays the activity participant’s perk to the user. The motivation to build out an application layer depends on each individual’s intentions, but below are possible motivations. + +- Increase the value of DEV owned +- Receive a portion of the rewards by inheriting a portion of the activity participant’s Property +- Collect commission from the user + +If a staking user gets some staking perk, those perks will be provided via the application layers. + +## Mechanism + +Dev Protocol is comprised of the following 14 main contracts. + +- Market Contract +- Market Factory Contract +- Property Contract +- Property Factory Contract +- Metrics Contract +- Policy Contract +- Policy Factory Contract +- Lockup Contract +- Allocator Contract +- Policy Contract +- Policy Factory Contract +- Address Config Contract +- Treasury Contract +- Dev Contract + +![Chart](/img/chart-of-contracts.png) + +### Market Contract + +The Market Contract represents a specific group of properties. The properties handled by Dev Protocol can be defined through the `authenticate` function. + +Anybody can freely propose a Market Contract. However, in order for it to take effect, it must be approved through a vote of existing Property Contract owners. The number of votes will be the sum of the count staked in the Property Contract and the `totals`. Generally, votes are expected to be carried out by property owners, but stake executors can use their own count of stakes as the number of votes in order to vote. In this case, the address of the Property Contract subject to staking will be assigned. + +The `authenticate` function authenticates the executor of the function as the owner of the property. For example, a GitHub repository is assigned, and the fact that the executor is the owner of this GitHub repository is authenticated. Therefore, it should not be possible for anybody other than the owner of the Property Contract to execute the `authenticate` function. This function is called directly by a user, and it is expected for `authenticatedCallback` to be called for a successful authentication. When executing the `authenticate` function, a commission defined by the Policy Contract is paid in DEV, and the commission paid is automatically burned. + +### Market Factory Contract + +The Market Factory Contract generates a new Market Contract. + +The generation of a Market Contract is carried out by executing the create function. The create function receives the address for the Property Contract with the next interface and generates a new Market Contract. + +``` +contract IMarketBehavior { + string public schema; + + function authenticate( + address _prop, + string memory _args1, + string memory _args2, + string memory _args3, + string memory _args4, + string memory _args5, + address market + ) public returns (address); + + function getId(address _metrics) external view returns (string memory); +} +``` + +When you implement the `authenticate` function, strongly recommended to verify the sender is associated with the Market Contract. To verify, please create a function to set the associated Market Contract address. + +``` +function authenticate( + address _prop, + string memory _args1, + string memory, + string memory, + string memory, + string memory, + address market, + address +) public returns (bool) { + require(msg.sender == associatedMarket, 'Invalid sender'); + // Unique authentication method +} +``` + +The `schema` is an array-type JSON character string that explains the significance of the arguments that the `authenticate` function receives for authentication. The maximum for these arguments is 5, in addition to the address of the Property Contract. An example is presented below. + +``` +string public schema = '["Your asset identity", "Read-only token", "More something"]'; +``` + +The `authenticate` function always handles the 2nd argument as the unique ID. Accordingly, values that cannot secure uniqueness should not be assigned. The following schema is an incorrect example. + +``` +string public schema = '["Read-only token", "Your GitHub repository(e.g. your-name/repos)"]'; +``` + +And the following schema is a correct example. + +``` +string public schema = '["Your GitHub repository(e.g. your-name/repos)", "Read-only token"]'; +``` + +The `getId` function receives an argument as a Metrics contract address and returns the authenticated asset name. For example, that return value is like `dev-protocol/dev-kit-js`. + +The Market Factory Contract creates a new Market Contract that has the proxy method and other elements for the contract. There are 3 proxy methods, which are `authenticate`, `schema`, and `getId`. The `authenticatedCallback` function, which receives the successful authentication, and the vote function, which accepts votes, are also added. + +### Property Contract + +The Property Contract represents the user’s property group. This is a token that conforms to ERC20 and can be transferred to any email address. + +Each Property Contract(Token) holder will receive market rewards based on the balance of the Property Contract(Token) that they own. Calculating the market rewards is the responsibility of the Allocator Contract, whereas receiving the market rewards is the responsibility of the Withdraw Contract. The Property Contract is a pure ERC20. + +The `transfer` function for the Property Contract requests the Allocator Contract to adjust the amount that can be withdrawn, since the amount of market rewards that can be withdrawn varies based on changes to the balance. + +A Property Contract in its initial state is not assuring assets (e.g., GitHub repositories). + +In order for a Property to be associated with an asset, a Market Contract must be associated with the Property Contract. The association is established by the `authenticatedCallback` function for the Market Contract. Multiple Market Contracts can be associated with a Property Contract. 1 Property Contract can represent a specific assets group or a Property Contract can be created for each asset. + +### Property Factory Contract + +The Property Factory Contract generates a new Property Contract. + +The generation of a Property Contract is carried out by executing the `create` function. The `name` and `symbol` are specified as an argument. For ease of comparison of Property Contracts, `totalSupply` is fixed as `10000000` (in Solidity, it's `10000000000000000000000000`), and `decimals` is fixed as 18. + +When the Property Factory Contract generates a new Property Contract, a portion of the total supply will be allocated to the Treasury Contract. + +Tokens assigned to the Treasury Contract will be used by the Dev Protocol developers team for more flexible use case development or returned to the Property Contract creator. + +The allocation share to the Treasury Contract is determined by the Policy Contract's `shareOfTreasury` function. Besides, the Treasury Contract's address is determined by the `treasury` function of the Policy Contract. + +Users who do not yet have a Property Contract will want to create a Property Contract and authenticate with a Market Contract at the same time. To do this, the Property Factory Contract exposes the `createAndAuthenticate` method. The `createAndAuthenticate` method creates a Property Contract and consistently uses that Property Contract to authenticate with a Market Contract. + +### Metrics Contract + +The Metrics Contract represents the association between Property Contracts and Market Contracts. + +When `authenticatedCallback` of the Market Contract is called, a Metrics Contract that retains the addresses of the Property Contract and Market Contract is generated. + +`authenticatedCallback` for the Market Contract returns the address for the Metrics Contract. By creating a map that brings the addresses for the Market Contract and Metrics Contract together, it is possible to retain the authentication context. + +### Lockup Contract + +The Lockup Contract manages staking in Property Contracts. + +#### lockup + +When a user stakes their own DEV in a Property Contract. This function can only be executed from the `deposit` function for DEV. + +Bypassing the Property Contract address to stake in and the amount of DEV, the Lockup Contract stakes the DEV. Stakes can be added as many times as desired. + +By staking DEV, users can receive some utility from the corresponding Property Contract owner. Staking continues until the utility is needed, increasing the scarcity value of DEV. + +A cumulative total reward amount at a time of staking (accumulation of the return value of the `calculateMaxRewardsPerBlock` function of the Allocator Contract according to the elapsed block) is recorded and used for the withdrawal reward calculation. + +An amount of reward is the same regardless of the Property Contract of the staking destination, but it changes all as the staking ratio changes. Therefore, the Lockup Contract keeps track of the "cumulative sum of the per-staking remuneration" and updates the value every time staking is added or removed. + +The following variables are used to calculate a reward amount for a staking user. + +- r: Cumulative total reward amount (accumulation of a return value of the `calculateMaxRewardsPerBlock` function of the AllocatorContract according to elapsed block) +- t: Total staked amount +- s: User's staked amount +- Policy.holdersShare: Reward rate function receive by a Property Contract holder + The calculation formula is as follows. + +``` +total_interest = s(r / t - Policy.holdersShare(r / t, t)) +``` + +The `r / t` in the above formula shows the "cumulative sum of the per-staking remuneration." + +The amount of interest that can be withdrawn per user can be calculated by subtracting the value of `total_interest` when the user's last staking or withdrawal from the latest `total_interest`. + +When a staking person gets a reward, a value of `total_interest` per user overrides with the latest value. In this way, a withdrawable interest amount does not exceed the maximum amount that one person can withdraw. This is exemplified below. `r`, `t` and `s` are not considered for simplicity. + +1. Alice is staking 500 DEV for the first time when the `total_interest` is 100. When `total_interest` reaches 500, the withdrawable interest amount is `(500-100) × 500 = 200000`. +2. `total_interest` becomes 520, and Alice withdraws again. The withdrawable interest amount is `(520-500) × 500 = 10000`. + +Alice withdraws it twice and earns `200000 + 10000 = 210000`. If Alice did not make the first withdrawal, Alice's withdrawable interest amount is `(520-100) × 500 = 210000` now. From this, it is clear that the withdrawable interest amount does not change regardless of withdrawal timing. + +This formula holds only when the staking amount of a staking person is constant. Therefore, it is necessary to update `total_interest` and snapshots the withdrawable interest amount when executing the `withdraw` function of the Lockup Contract. + +#### withdraw + +All or part of the DEV that the user has staked in the Property Contract and the full amount of interest that can be withdrawn will be withdrawn. + +### Allocator Contract + +The Allocator Contract plays several roles in determining market rewards. + +#### calculateMaxRewardsPerBlock + +Calculate and return a value per block of a total reward given to all users. +Take a total staking amount of DEV at a time of a calculation and a total number of authenticated assets. This function acts as a proxy for the rewards function of Policy Contract. Correlation between arguments and return values is defined by Policy. + +### Withdraw Contract + +The Winthdraw Contract plays several roles for managing the amount of market rewards that can be withdrawn. + +#### withdraw + +Withdraws the market rewards for the Property Contract. The executor withdraws the amount that can be withdrawn when it is called. + +An amount of remuneration is determined by a staking ratio of a Property Contract. Therefore, the Withdraw Contract queries to the Lockup Contract a cumulative holder's reward amount for Property Contract (cumulative holder's reward amount according to elapsed block) and calculate a withdrawable amount. + +The following variables are used to calculate a reward amount for a Property holder. + +- `r`: Cumulative total reward amount(accumulation of a return value of the `calculateMaxRewardsPerBlock` function of the Allocator Contract according to elapsed block) +- `t`: Total staked amount +- `s`: Property Contract's staked amount +- `ts`: Total supply of the Property Contract +- `b`: Balance of the Property Contract for the user +- `Policy.holdersShare`: Reward rate function receive by a Property Contract holder + +The calculation formula is as follows. + +``` +total_reward = b(s(Policy.holdersShare(r / t, t)) / ts) +``` + +The amount of reward that can be withdrawn per Property Contract holder can be calculated by subtracting the value of `Policy.holdersShare(r / t, t)` when the user's last withdrawal from the latest `Policy.holdersShare(r / t, t)` and multiply the b. + +In this way, a withdrawable reward amount does not exceed the maximum amount that one person can withdraw. This is exemplified below. `Policy.holdersShare(r / t, t)` are assigned as i for simplicity. + +1. Alice has 500 tokens of a Property Contract. When `i` reaches 100, the withdrawal amount is `(100-0) × 500 = 50000`. +2. `i` becomes 120 and Alice withdraws again. The withdrawal amount is `(120-100) × 500 = 10000`. + +Alice withdraws it twice and earns `50000 + 10000 = 60000`. If Alice didn't make the first withdrawal, Alice's withdrawable amount is `(120 - 0) × 500 = 60000` now. From this, it is clear that the withdrawable amount does not change regardless of the timing of withdrawal. + +This formula holds only when the balance of a Property holder is constant. Therefore, it is necessary to update `i` when executing the `transfer` function of a Property Contract. + +### Policy Contract + +The Policy Contract represents the policy of Dev Protocol. Dev Protocol assigns the formulation of uncertain indices to the community and updates the indices based on the circumstances. + +Anybody can freely propose a Policy Contract. However, for it to take effect, it must be approved through a vote of staking users. The number of votes will be the staking amount for each Property Contract per user. The vote is completed by executing vote for the Policy Contract. + +As soon as the new Policy Contract receives enough affirmative votes to meet the conditions, it will take effect, and the old Policy Contract will cease to exist. + +The Policy Contract decides the following indices. + +#### rewards + +The total value of market rewards for the block. It is called when calculating market rewards in the Allocator Contract, and the total value of market rewards is calculated using the following variables. + +- Total Stakes in the Property +- Total Count of Properties (Total Metrics Contracts) + +#### holdersShare + +The share of market rewards received by the Property Contract(Token) holder. It is called when calculating market rewards in the Allocator Contract, and the share of market rewards received by the Property Contract(Token) holder is calculated using the following variables. + +- Value of Market Rewards +- Count of Stakes + +The share received by the stake executor is the excess portion of the Holders Share. + +#### authenticationFee + +The commission for authenticating a property. It is called within authenticatedCallback for the Market Contract, and the commission for authenticating a property is decided based on the following variables. + +- Total Count of Properties (Total Metrcis Contracts) +- Total Current Stakes in the Property Contract + +#### marketApproval + +Whether or not a new Market Contract takes effect. It is called within vote for the Market Contract, and whether the new Market Contract takes effect is decided based on the following variables. + +- Affirmative Votes +- Negative Votes + +#### policyApproval + +Whether or not a new Policy Contract takes effect. Within `vote` for the proposed Policy Contract, `policyApproval` for the current Policy Contract is called, and whether the new Policy Contract takes effect is decided based on the following variables. + +- Affirmative Votes +- Negative Votes + +#### marketVotingBlocks + +The number of blocks between the proposal of a new Market Contract and the end of voting. Once voting ends, the Market Contract will be rejected. + +#### policyVotingBlocks + +The number of blocks between the proposal of a new Policy Contract and the end of voting. Once voting ends, the Policy Contract will be rejected. + +#### shareOfTreasury + +The share of total supply of newly issued Property Contracts received by the Treasury Contract. Within constructor for the Property Contract, shareOfTreasury for the current Policy Contract is called, and the share sent to the Treasury Contract takes effect is decided based on the following variables. + +- Total supply of the Property Contract + +#### treasury + +The contract address of the current Treasury Contract. + +### Policy Factory Contract + +The Policy Factory Contract generates a new Policy Contract. + +The generation of a Policy Contract is carried out by executing a create function. The create function gets the address of the Policy Contract created by a user and allows the vote function to accept votes. + +Lockup Storage Contract, Market Group Contract, Policy Group Contract, Property Group Contract, Vote Counter Storage Contract, Withdraw Storage Contract are the contracts that makes the state of the other contracts persistent. Its responsibility is to exclusively maintain the state and getter method without waiting for implementation. + +## DEV + +DEV is the ERC20 token that serves as the key currency for Dev Protocol. + +https://etherscan.io/token/0x5cAf454Ba92e6F2c929DF14667Ee360eD9fD5b26 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/_category_.json new file mode 100644 index 0000000000..4ea89c2ba3 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Stakes Social", + "position": 4 +} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-attach-image.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-attach-image.md new file mode 100644 index 0000000000..2d58bc8713 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-attach-image.md @@ -0,0 +1,19 @@ +--- +title: Attach sToken Image (for creators) +sidebar_position: 3 +--- + +1. Get access to your property page and click the position button of the sToken you would like to attach the image to. + + ![sTokenImage](/img/stakes.social/how-to-attach/positions-link.png) + +2. Drag an image file to the upload form. + ![sTokenImage](/img/stakes.social/how-to-attach/positions.png) + +3. After uploading, click the "Change image via IPFS" button. + ![sTokenImage](/img/stakes.social/how-to-attach/upload-image.png) + +4. Metamask will start. If there is no problem click "Confirm". + ![sTokenImage](/img/stakes.social/how-to-attach/save.png) + +5. After the confirmation, the sToken image is replaced with the uploaded image. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-buy-dev.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-buy-dev.md new file mode 100644 index 0000000000..74ef6ddc98 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-buy-dev.md @@ -0,0 +1,123 @@ +--- +title: How to buy DEV +sidebar_position: 1 +--- + +This is a simple guide for those who wish to buy DEV, even if you have never used cryptocurrencies in your life. + +First of all, DEV is an [ERC-20 token](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) - a token launched on the Ethereum blockchain - and the best way to buy it right now is on Uniswap - a Decentralized Exchange - DEX. + +It is recommended that you use Uniswap because, currently, it has the best liquidity(big transactions have a small impact on the price) on all of the exchanges that DEV is listed. + +You will also need a basic understanding of how wallets work in order to stake your DEV to fund Open Source Software - OSS - projects, so by using a DEX first, you get at that skill level already. + +### Bank Account to Centralized Exchanges + +The most widely used and accessible exchange in the world right now is [Binance](https://www.binance.us/en/home) (if you're in the US), so I'm going to base this guide on it. If you already use any other Centralized Exchange or have any other preferences, feel free to use them, just make sure that they allow crypto withdraws. + +#### 1. Register + +It is required to register in order to use Binance, just like in any other broker, you will have to pass through a KYC process, usually it takes less than 1h to be verified, but on their website it says that it could take up to 36h. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_1.png) + +#### 2. Bank Transfer/Credit Card + +Depending where you're from there are a few options to move your money to Binance. The best ones are Bank Transfers - usually don't have a fee- and Credit Card - has a small fee-. + +I personally use Bank Transfers. To do it, you need click on Wallet, on the top right corner, and on the dropdown menu click on Fiat and Spot. +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_2.png) + +After clicking on that, you will arrive on this page, where all your balance shows up, click on the yellow Deposit button at the top of the page. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_3.png) + +This leads you to this Deposit Crypto page. Since we want to deposit Fiat, on the top right corner click on the Deposit Fiat button. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_4.png) + +On the drop down list, you choose the fiat currency you use in your country and follow the instructions, it should look like this. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_5.png) + +### Buy Ethereum + +After depositing Fiat in your Binance account, click on **Markets**, at the top of the page; then on **Spot Markets**; after that on **FIAT Markets,** you find your correspondent the ETH/FIAT pair to buy some Ethers. In this example I chose the ETH/EUR trading pair. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_6.png) + +After clicking on it, a page like this should show up. +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_7.png) + +This has a graph showing the price of Ether against Euro and an orderbook, the red row/list are aggregate offers from individuals that want to sell Ether to Euro from the lowest to the highest price. The green row/list are aggregate offers from individuals that want to buy Ether using Euro, from the highest to the lowest price. + +If you want to offer at a specific price, just type it on the the price bracket (make sure you type the number right, fat-fingering is a common thing, pay attention) and the total correspondent amount in EUR or FIAT, if the the market price hits your price, your offer will be filled. + +If you don't want to wait and offer a specific price, you can just click on Market and type the amount of Fiat that you want to buy ETH with. This will automatically fill your offer at the current price of the market. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_8.png) + +At this point you should have Ether in your Binance Wallet. + +### Centralized Exchange to Wallet + +This is one of the most important steps, and you should be really careful with it. Having your own wallet is having the sovereignty over your own money/assets, like being your own bank, so you have to treat it like such, don't forget you seed words, passwords and have safe back ups of them. + +Your wallet is where you store your private keys, and it's where you can access your tokens on the blockchain. Your private keys is the only access that you have to it, store it safely, if you lose them, you lose access to your tokens. + +#### Create your Wallet + +There are a few wallets that are widely used, the most common one is [Metamask](https://metamask.io/), a browser extension, it is an easy to use and secure wallet that will give you access to any [web3 applications](https://ethereum.org/en/developers/docs/web2-vs-web3/#:~:text=Web3%2C). + +#### 1. Download the Extension + +After you download and install the extension a little fox should show up as an extension at the top right corner of your browser. If you click on that extension for the first time, it should redirect you to a page where you will create your password (should be as strong as possible), don't forget to write it down somewhere that you'll never forget. You will also have to write down a back up seed phrase (never lose this, and never share it with anyone else). Follow the instructions carefully. + +We strongly recommend you to watch this tutorial while setting it up. + + + +#### 2. Transfer Ethereum to your Metamask Wallet + +After setting up your wallet, click on the Metamask extension, it should open up like the picture bellow. A single click on your [address](https://hackernoon.com/how-to-generate-ethereum-addresses-technical-address-generation-explanation-25r3zqo) (Hexadecimal format, with 0x prefix), will copy it for you. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_9.png) + +After copying you address, go back to your Binance Account to Withdraw your Ethereum. + +On the Fiat and Spot page again, instead of Deposit, click on the Withdraw button right next to it. On the Withdraw page, click on Withdraw Crypto button on the top left, it should bring you to this page. Paste your address on the Address box, select the ERC20 Network, and type the number of ETH you want to transfer to you wallet, or simply click on MAX, if that's the case. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_10.png) + +You will pay a small fee for the Network use and in a few minutes your Ether should be in your wallet. + +Remember, after moving out of Centralized exchanges, and when using the Ethereum Network, you will pay Gas fees to execute any form of Smart Contract, so, always try to always have a little bit of Ether($50 or more) in your wallet at all times. + +### Buy DEV on Uniswap + +Now that you have Ether in your Metamask Wallet, go to [Uniswap](https://app.uniswap.org/#/swap), connect your Metamask to the dapp on your the top right corner. +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_11.png) + +After connecting your wallet, click on Select a token, since Dev isn't automatically on the list, type DEV on the box that shows up. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_12.png) + +Import the Dev token that has the Dev Protocol logo, and it's imported via Coingecko, I have checked the contract address and it's really DEV. If you want to be extra careful, just check if the Hexadecimal address shown one the process matches the contract address - https://etherscan.io/token/0x5cAf454Ba92e6F2c929DF14667Ee360eD9fD5b26. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_13.png) + +After adding Dev, an alert should show up that there's no liquidity on V3, just click on the button to trade with V2. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_14.png) + +Now type the amount of ETH that you want to swap to DEV. **Remember**, don't max out the amount of Ethers here, you want to save some ETH to be able to sell or deposit your DEV on staking after it. You always need some Ether to pay for smart contract executions, you can't pay it with DEV or any other token on the Ethereum Network. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_15.png) + +Click on swap, then the transaction details should show up. Click on swap again and your Metamask wallet should pop up asking for a transaction confirmation. + +![how to buy DEV](/img/how-to-buy/how-to-buy-dev_16.png) + +Check the gas fee, if it's absurdly high ~$50 or more, try on another time, or talk to community members on the Telegram or Discord. If it's something like this, just click Confirm. + +After a few minutes, your transaction should be complete and will have DEV in your wallet. The DEV token doesn't show automatically on your Metamask so you will have to add it manually. To do so, just Open your wallet, click on the Add Token button, then click on Personalized Token, paste the DEV contract address on it (0x5cAf454Ba92e6F2c929DF14667Ee360eD9fD5b26) then confirm it. Now your DEV should show up on your wallet. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-move-funds.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-move-funds.md new file mode 100644 index 0000000000..4c435e88ea --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-move-funds.md @@ -0,0 +1,39 @@ +--- +title: How to Move Funds to Arbitrum +sidebar_position: 5 +--- + +You’ll need some Ethereum on Arbitrum in order to pay for (significantly cheaper) gas fees. Simply go to the Arbitrum Bridge, connect via MetaMask, and bridge some ETH. + +In order to send DEV to Layer 2, we will use the DEV Arbitrum Bridge. Start by connecting your wallet. Keep in mind, you will need DEV in your wallet in order to wrap and bridge it to Arbitrum. + +You’ll need to wrap your DEV to make an Arbitrum-compliant WDEV. You can do that in the “Wrap” tab. + +![DEV TOKEN BRIDGE 01](/img/stakes.social/guide-move-funds01.png) + +Once the transaction completes, you will see your WDEV balance reflected in the top right of the app. Now that we have some WDEV, we can use the L2 Bridge tab to send the funds to Arbitrum. + +![DEV TOKEN BRIDGE 02](/img/stakes.social/guide-move-funds02.png) + +Bridging funds to Arbitrum usually takes about 10 minutes for the funds to appear on Layer 2. +In order for the funds to show up in MetaMask, make sure you import the token _0x91F5dC90979b058eBA3be6B7B7e523df7e84e137_, which is DEV on Arbitrum Mainnet. + +Please use [Arbitrum Bridge](https://bridge.arbitrum.io/) to transfer DEV from Arbitrum one to Ethereum mainnet. + +Keep in mind, withdrawing _any funds_ from Arbitrum can take up to **10 days** to complete. +Remember, you also have to send Ethereum to Arbitrum to cover for gas fees, to that, follow these steps: + +### To transfer ETH from Ethereum mainnet (Layer 1) to Arbitrum (Layer 2) : + +**1. Go to the Arbitrum bridge, click on ‘I agree’, then connect your wallet.** + +![DEV TOKEN BRIDGE 03](/img/stakes.social/guide-move-funds03.png) + +**2. After connecting, a window showing your current balance on L1 should show up. Check your ETH balance and set the amount you want to transfer to L2.** +![DEV TOKEN BRIDGE 04](/img/stakes.social/guide-move-funds04.png) + +**3. Click deposit and confirm, all of your funds will be moved to the Arbitrum one chain, change the network on top of your wallet to Arbitrum one and proceed to stake on stakes.social** + +If you don’t feel comfortable enough after reading this, check out this YouTube video explaining how to do it step by step: + + diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-arbitrum.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-arbitrum.md new file mode 100644 index 0000000000..25ee194353 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-arbitrum.md @@ -0,0 +1,74 @@ +--- +title: How to Onboard Arbitrum's Dev Protocol +sidebar_position: 6 +--- + +![onboard Arbitrum](/img/stakes.social/guide-arbitrum01.png) + +Dev Protocol has released Dev Protocol on Layer2's Arbitrum to avoid the recent surge in gas prices on the Ethereum network. By using Layer2, the gas cost for all transactions can be reduced, making staking and onboarding easier than ever. +You can continue to use the Dev Protocol on the mainnet, but if you want to onboard the Dev Protocol of Arbitrum, you will need to register onboard again. + +## What is Layer2 + +Layer2 is a technology that allows you to implement a virtual machine "EVM" that executes contracts such as DeFi and NFT on a blockchain (Layer2) different from the mainnet. Arbitrum is a promising candidate for this technology, and Dev Protocol has released a service to Arbitrum One that has already been deployed. + +## Why release on Layer 2? + +Ethereum Mainnet has maintained high transaction fees due to recent increases in demand. Arbitrum can keep this fee low while using the same system as Ethereum. + +## Onboard method + +First, it is necessary to set the network to which MetaMask connects to "Arbitrum One". To change the connection network, just select from the networks if you have already added "Arbitrum One" to MetaMask, but if you have not added it yet, add the network by referring to the following. + +![MetaMask](/img/stakes.social/guide-arbitrum02.png) + +**Add Arbitrum One to your Metamask network** +To connect to Arbitrum with MetaMask, you need to add "Arbitrum One" to your network. You can select "Custom RPC" from the network and enter the network information, but you can easily add it by using Chainlist. +https://chainlist.org/ + +Search for "Arbitrum One" in the Chainlist search and click "Add To Metamask". + +:::info + +If you want to enter the network information and register, please https://developer.offchainlabs.com/docs/mainnet#connect-your-wallet + +::: + +**Move ETH from Mainnet to Arbitrum One** +In order to onboard the Dev Protocol on Arbitrum, it is necessary to move some ETH to Arbitrum to cover gas. Use the Arbitrum Bridge for that +https://bridge.arbitrum.io + +Please refer [this](https://arbitrum.io/bridge-tutorial/) for how to use it. + +**Onboard** + +After accessing Stakes.social, switch from Metamask to the "Arbitrum One" network, and then go onboard. +For projects that are already onboard on the mainnet, you do not need to apply again, so please use the link below to tokenize. + +:::note + +Please switch the connection network to "Arbitrum One" before proceeding. +https://stakes.social/arbitrum-one/create/0x84b9e407e2Ee76A641b45d007bBFd9e60a13FF7d +For "Project name", enter the path of the project's Github URL + +::: + +![Github path](/img/stakes.social/guide-arbitrum03.png) + +See [this](/docs/stakes-social/onboard-guide/) guide for onboarding instructions + +**Move DEV from mainnet to Arbitrum One** + +When moving the mainnet DEV to Arbitrum One, use Dev Protocol Bridge. + +https://bridge.devprotocol.xyz/wrap + +You can move the DEV to Arbitrum One by following the steps below. + +1. Access the Dev Protocol Bridge from the URL above. +2. Connect with your wallet +3. First, Wrap the DEV you want to transfer and convert it to WDEV. +4. Go to the L2 Bridge tab +5. Enter the WDEV you want to transfer and press the Convert button. + +It takes about 10 days to make a transaction from Arbitrum to the mainnet. Therefore, please note that it will take 10 days to bring the DEV from Arbitrum to the mainnet. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-polygon.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-polygon.md new file mode 100644 index 0000000000..2cf32a3655 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-onboard-polygon.md @@ -0,0 +1,67 @@ +--- +title: How to Onboard Polygon's Dev Protocol +sidebar_position: 7 +--- + +## What is Polygon + +Launched in 2017 originally as Matic network as an universal blockchain scaling solution, then it was rebranded in early 2021 as Polygon, focusing on being a scaling solution for Ethereum. Since it’s rebranding and change of focus, it has had tremendous success, with solid projects like Uniswap, Aave, OpenSea and upcoming games like Aavegotchi running on the Polygon network. + +With the increasing gas fees on Ethereum mainnet, users and developers started looking to find a robust scaling solution. Polygon has been adopted by many, mainly because of its advantages over Ethereum mainnet, being significantly cheaper and faster. + +Note1: Even today Matic and Polygon are sometimes used interchangeably, so don’t get confused when you see it. + +Note2: MATIC is the token that pays for the gas fees on the Polygon network, so please have some MATIC in your wallet at all times on the Polygon network to pay for all the transactions. + +## Add Polygon Network to your Wallet + +You will need to add Polygon network to your favorite wallet. The easiest way to do it is to go to +Chainlist and type in “Polygon”, connect your wallet to “Polygon Mainnet”, make sure the chainID is 137. + +If you don’t want to go through the Chainlist route you can also add it manually in your wallet. To do that, open your wallet and click on the Network selection button at the top. + +![Image 1](/img/stakes.social/polygon-guide/image1.png) + +Click on ‘Custom RPC’ at the end of the list. This will open the page below, which will allow you to add the Polygon (MATIC) network to your wallet. Just enter all the details as it is in this image and you will be good to go. + +![Image 2](/img/stakes.social/polygon-guide/image2.png) + +## Using the Polygon bridge + +Go to the Polygon Bridge, connect your wallet, then you will be able to send tokens from the Ethereum mainnet to the Polygon network. You can also use [Polygon Bridge](https://wallet.polygon.technology/) to transfer DEV from the Polygon network to the Ethereum mainnet. + +https://wallet.polygon.technology/bridge + +![Image 3](/img/stakes.social/polygon-guide/image3.png) + +Just type in the amount of tokens that you want to send to the Polygon network and click on Transfer to do so. + +Note: remember that gas fees on the Polygon network are paid with MATIC. + +There is a YouTube guide if you still don’t feel comfortable transferring assets between chains: + +> https://www.youtube.com/playlist?list=PLslsfan1R_z0Epvnqsj29V1LBAh99dzu9 + +Make sure you get some MATIC for the onboarding fee costs, it shouldn’t be too much since Polygon is very cheap compared to the Ethereum mainnet. + +## Onboarding + +Go to stakes.social, remember to change your network to Polygon, you can do that directly through your wallet or by clicking on the three dots menu on the top right corner of the page. + +![Image 4](/img/stakes.social/polygon-guide/image4.png) + +By clicking on the menu, you will be able to check in what network you are connected to and be able to select another one and change it. + +![Image 5](/img/stakes.social/polygon-guide/image5.PNG) + +Now on the same menu, click on the Create button (1) , you will be redirected to the Create an Asset page (2) where you will be asked to submit an application. Fill in the forms (3) and submit, after that, you will be asked to approve it with the signature button and your application will be completed. + +![Image 6](/img/stakes.social/polygon-guide/image6.png) + +If you already have a project onboarded on any other network please do the process again for the Polygon network. + +## Screening Process + +We kindly ask for a week for the team to evaluate the project on the screening process. We will let you know the results via e-mail so please change the filtering setup for your mailbox to receive an email from “@devprotocol.xyz”. + +If you have any questions, please follow the [onboarding guide](/docs/stakes-social/onboard-guide) below, or contact us on [Discord](https://discord.com/invite/VwJp4KM). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-stake.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-stake.md new file mode 100644 index 0000000000..164fffa346 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/how-to-stake.md @@ -0,0 +1,65 @@ +--- +title: How to stake DEV on Stakes.social +sidebar_position: 2 +--- + +### What is Staking in the Dev Protocol context + +Staking a token or a cryptocurrency is the act of locking up your tokens in a node or contract to validate transactions on a Proof of Stake blockchain, the Staker usually gets paid for that action. + +Since Dev Protocol goal is to sustainably fund Creators, in this context, Staking is the act of actively setting aside your DEV tokens in your Wallet to deposit them in your favorite Creator pool on stakes.social. + +The page currently looks like this: + +![how to stake on stakes.social](/img/stakes.social/stakes.social-1.png) + +When you Stake your DEV on a project, currently, you will get a 30.07% APY while the Creator you're staking on will get a 31.3% APY. For example, imagine you have 1000 DEV and you Stake on a project you like, with all the other things held constant, after one year you would have accrued 300.7 DEV while the Creator would have accrued 313 DEV from your staking. + +- APY is constantly being updated. Please check Stakes.social for the latest data. + +That doesn't mean that your DEV are locked in the Smart Contract for a year, in fact **you're free to deposit and withdrawal any amount**, including just the rewards **any time you want**. + +### How to Find a Project and Stake + +First of all, I suppose you already have DEV in your wallet, if you don't you can buy them on the exchanges listed on [coingecko](https://www.coingecko.com/en/coins/dev-protocol), I recommend Uniswap, because currently, it has the best liquidity by far. You will also need some Ethereum in your wallet to pay for the Staking and Withdrawal gas fees. + +Go to stakes.social, you connect your wallet on the top right corner of the page, then on the Pools section, if you already know the project you want to stake your DEV in, you can type the name of the project you're looking for, it should show up, you can also browse the list until you find it. + +![how to stake on stakes.social](/img/stakes.social/stakes.social-2.png) + +If you still don't know in which project you want to stake your DEV, you can filter by the most Recent and most Staked projects, you can also filter the Asset Pools, selecting GitHub, npm and Creators. + +If you find a project interesting, you can click on the banner, the project page will show up, there you can find the description and some useful things like Github, Twitter pages, YouTube channel, Website, etc. This could help you decide. + +![how to stake on stakes.social](/img/stakes.social/stakes.social-3.png) + +If you still can't decide, my tip is, visit the official Discord or Telegram channel and ask the community. Always try to stake and reward active developers that promote Dev, this will be good for everyone on the long run. + +When you find the project which you want to support, you click on the pool banner and you'll end up in a page like this: +![how to stake on stakes.social](/img/stakes.social/stakes.social-4.png) + +On the blue box, you can type an specific amount of DEV you want to stake on that project, or you can just click on DEV, and total amount of DEV in your wallet will automatically show on that box. After that, you can click on the blue Stake button and transaction approval message will pop up in your wallet, you can check out the amount of gas required to Stake, by clicking approve, your DEV will be deposited on the contract and it will be staked. + +![how to stake on stakes.social](/img/stakes.social/stakes.social-5.png) + +Once staked refresh the page and your DEV will show on the 'Your Staking Amount' box. You will instantly start receiving Rewards and so will the Creator that you chose, those can also be seen on the dashboard. + +### Restaking + +A common practice on the Dev Protocol community is to withdrawal you rewards from time to time to stake them again, either on the same project or new projects. This way your yield will be manually compounded. Keep in mind that, with current high gas costs, Restaking might only be a financially wise idea, once you have accumulated a significant amount of rewards. + +To withdrawal just the rewards you just type 0 on the grey box, click on the Withdrawal grey button and a confirmation will pop up in your wallet, you check the gas costs and hit confirm. All of your DEV that you originally staked will still be staked and you will only withdrawal your Rewards. + +![how to stake on stakes.social](/img/stakes.social/stakes.social-6.png) + +### Withdrawal + +To withdrawal your DEV you do the same steps as above but you type the number of DEV you want on the grey box. Keep in mind that every time you withdrawal all your rewards are as well, so keep that in mind if you just need an specific amount of DEV. For example, you have accrued 30 DEV in Rewards, but you want to Withdrawal 100 DEV, you type 70 DEV on the box, once you have approved the transaction it'll show up 70 DEV+30 DEV(Reward) in your wallet. + +To Withdrawal everything, just click on the DEV button in the grey box and the total amount of DEV you have deposited will show up, click on the Withdrawal button, approve the transaction and everything will show up in your wallet. + +### Comments and other questions + +Keep in mind that the gas costs are defined the by the usage of the Ethereum network, it's not dependent on Dev Protocol. It is also variable, if it is too expensive to approve a transaction, it could get cheaper later, and vice-versa, if you're confused, just ask other community members. + +If you have any other questions you can just ask them on [Discord](https://discord.com/invite/VwJp4KM) or [Telegram](https://web.telegram.org/#/im?p=@devprtcl), there are community and team members always active and ready to help you. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/onboard-guide.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/onboard-guide.md new file mode 100644 index 0000000000..fa0ec94ace --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/onboard-guide.md @@ -0,0 +1,119 @@ +--- +title: Onboard Guide +sidebar_position: 4 +--- + +## What’s Stakes.social? + +Stakes.social is a platform where you can register your OSS to Dev Protocol and stake registered OSS projects. Unlike other donation services, Dev Protocol is designed for the benefit of both supporters as well as developers by staking. Thanks to this system, developers find it easy to ask people for aid, which results in continuous support. + +## A guide to onboard + +In this guideline, you’ll get an idea on the process of registering your OSS to Dev Protocol. We also mention points where you should be careful or might be puzzled to make it clear. + +## Before you start + +In order for you to register (or tokenize) your OSS to Dev Protocol, you need to go through a registration procedure for Stakes.social. You’ll need a wallet to register, so you must have one beforehand. + +## What’s wallet? + +A wallet is used for managing your crypto assets. You need to have a wallet to store the DEV tokens issued by Ethereum and Dev Protocol. Since Dev Protocol doesn’t provide you with a wallet function, you have to get one by yourself. + +If you’re looking for a wallet, we’d recommend you to have MetaMask. +MetaMask corresponds to Chrome Extension version, so if you want to use Stakes.social via your PC, MetaMask would be one of you options. +[https://metamask.io/](https://metamask.io/) + +## Connection between your wallet and Stakes.social + +Click “Sign in” button located at right end of the header to connect your wallet (MetaMask, in this case) and Stakes.social. + +![GUIDE01](/img/stakes.social/onboard-guide/guide01.jpeg) + +## Gas fee + +Please check the following website for the details of gas fee : [https://devprotocol.xyz/faq](https://devprotocol.xyz/faq) +You need a gas fee to register at Stakes.social. The required gas fee will fluctuate depending on the congestion of the network you choose to onboard. + +## How to register your OSS + +In this section, we’ll briefly explain registration steps for your OSS to be registered. +In order to register your OSS at Stakes.social, start from the main menu, as stated below. + +![GUIDE03](/img/stakes.social/onboard-guide/guide03.jpeg) + +In STEP03, you’ll input necessary information into each item to apply. The following table shows sections to fill in. + +| Items | Explanation | +| :-------------- | :------------------------------------------------------------------------- | +| Your name | Input your name. | +| Your email | Input your email. | +| Project name | Input your project name. | +| Description | Input the description of your project. | +| Your role | Input your role in the project. `i.e. owner / maintainer / developer …etc` | +| Github repo | Input URL for the repository of your project. | +| Discord name | Input your Discord account information. | +| Additional info | If you have any additional comments, please share them with us. | + +After you’ve completed to input necessary information into each item, click “Submit” button and your wallet is activated. Then, you’ll be asked for your signature. +Shortly after you press “Signature” button, your application will be completed. When your application is done, you can see the following image on your screen. + +![GUIDE04](/img/stakes.social/onboard-guide/guide04.png) + +## Screening + +We kindly ask you to wait for about a week for screening process. We’ll let you know the result via email, so please change the filtering setup for your mail box to receive an email from `@devprotocol.xyz`. + +## OSS registration after screening + +If you successfully pass the screening, access the URL written in the approval email. + +:::note + +You’ll need a gas fee for your registration. It fluctuates depending on the congestion condition, however, it would be around 0.0436ETH. Before you’re moving on to the next step, you should prepare ETH in your wallet. + +::: + +In this step for tokenization, we’ll issue your token. This is called Property Token. Your reward is allocated in accordance with the ownership ratio of Property Token. + +> For example, if you have a co-developer for your OSS project, you can distribute your reward by splitting this token. + +
+ +| Items | Explanation | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Creator wallet address | This is the address for your wallet. This item will be automatically input if you’re connected to Stakes.social. If it says `Fetching wallet`, connect your wallet. | +| Project name | Input the project name written in the approval email. | +| Token name | This is the name of your token. Input the name using half-width English numbers and letters. i.e. Ethereum token is Ether. | +| Token symbol | This is an identifier for your token. i.e. Ethereum’s token is ETH. You can use 3-5 English numbers and letters to choose. | +| Personal Access Token | Personal Access Token (PAT) is an access token used for obtaining the information in Github. Create your Personal Access Token (PAT) that doesn’t have any of the scopes. | + +After you’ve completed the input and click “Tokenize” button, your registration is done, and then you’ll see a confirmation page for it. However, before completion, you’ll need a gas fee to register. ETH needed for the fee is displayed on your screen, so please check your wallet and make sure that enough amount of ETH is there. + +![GUIDE05](/img/stakes.social/onboard-guide/guide05.png) + +In the confirmation screen, the following information is displayed. + +| Items | Explanation | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Project Name | Project Name that you entered. | +| Token Name | Token Name that you entered. | +| Token Symbol | Token Symbol that you entered. | +| Supply | Numbers of token (Property Token) that you’ll issue. | +| Dev Protocol Treasury Fee | We receive 5% of your issuing token as a treasury fee for Dev Protocol. For more details, check the following website: [What is treasury](https://initto.devprotocol.xyz/en/what-is-treasury/) | + +After you’ve confirmed and clicked `Tokenize` button, tokenization process is activated. + +It takes about an hour to finish the process. You can either continue to connect to or disconnect from Stakes.social. If you disconnect, you can still check your status at the following website. + + + +When the tokenization process is done, the registration of your OSS to Dev Protocol is completed. +After a while, your OSS will be listed at List Page on Stakes,social, and Dev Protocol’s official Twitter will make an announcement on it. + +![GUIDE06](/img/stakes.social/onboard-guide/guide06.png) + +## Receiving more support + +In order for you to get more support for your OSS, it is important to let people know your Stakes.social page. We’d recommend you to tweet, place a link at a donation page or write a blog post. + +In Dev Protocol team and community, we’re talking with each other about the way to make an announcement of onboarding at Stakes.social. If you have any insights or ideas, please share them at [Dev Protocol Forum](https://community.devprotocol.xyz/). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/stakes-social.md b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/stakes-social.md new file mode 100644 index 0000000000..ab22a71030 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/current/stakes-social/stakes-social.md @@ -0,0 +1,50 @@ +--- +title: Stakes Social +--- + +## What is Stakes.social? + +
+ +![logo](/img/stakessocial-logo.png) + +Stakes.social is the first official Dapp built on the Dev Protocol, released in June 2020. Stakes.social is a new sponsor platform where both developers and sponsors are rewarded with tokens if they support their favorite projects by staking DEV tokens. + +Key Features + +- Tokenize Open source software assets +- Get sponsors and raise funds from your community +- Both developers and sponsors get DEV tokens through staking. + +## What is Staking? + +It is a framework where people contribute to the network by locking (temporarily making inaccessible) their crypto assets. In terms of Dev, when people stake "DEV token" (ERC20) for to support creator's works, they are rewarded with dev tokens for doing so. + +## Who is using Stakes.social? + +Over 1,600 OSS projects issue tokens (utility token with ERC-20 form), and many developers, including both individuals and firms, succeed in achieving sustainability through fundraising. There is an increasing number of unique creators joining Stakes.social, so you can support different creators such as OSS developers, VR artists, NFT markets, green projects, and Vtubers. You can see all the creators here. https://stakes.social/ + +## Get Started + +### Onboard to Stakes.social (If you are an OSS developer) + +Onboarding Stakes.social has many benefits for your OSS and supporters. Please consider it. +Please see the onboard guide [here](/stakes-social/onboard-guide/). + +### Support OSS projects (Both supporters and OSS developers) + +Support your favourite OSS and both you and the developer will be rewarded. +Please see the staking guide [here](/stakes-social/how-to-stake/). + +### Don't have a DEV yet? + +You can buy or sell DEV tokens on various DEXs (Decentralized Exchange) like Uniswap. +If you are new to crypto, Please see the start guide [here](/stakes-social/how-to-buy/). + +## Reference + + + +**What is Dev Protocol?** + + diff --git a/i18n/es/docusaurus-plugin-content-docs/version-0.1.0.json b/i18n/es/docusaurus-plugin-content-docs/version-0.1.0.json new file mode 100644 index 0000000000..87e8bc5b09 --- /dev/null +++ b/i18n/es/docusaurus-plugin-content-docs/version-0.1.0.json @@ -0,0 +1,54 @@ +{ + "version.label": { + "message": "0.1.0", + "description": "The label for version 0.1.0" + }, + "sidebar.tutorialSidebar.category.Introduction": { + "message": "Introducción", + "description": "The label for category Introduction in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.The Protocol": { + "message": "El Protocolo", + "description": "The label for category The Protocol in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Governance": { + "message": "Gobierno", + "description": "The label for category Governance in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Khaos": { + "message": "Khaos", + "description": "The label for category Khaos in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Stakes Social": { + "message": "Stakes Social", + "description": "The label for category Stakes Social in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Developers": { + "message": "Desarrolladores", + "description": "The label for category Developers in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Modules": { + "message": "Modulos", + "description": "The label for category Modules in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.V1": { + "message": "V1", + "description": "The label for category V1 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.V2": { + "message": "V2", + "description": "The label for category V2 in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Tools": { + "message": "Herramientas", + "description": "The label for category Tools in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Learning": { + "message": "Aprendizaje", + "description": "The label for category Learning in sidebar tutorialSidebar" + }, + "sidebar.tutorialSidebar.category.Hands-on": { + "message": "Manos a la obra", + "description": "The label for category Hands-on in sidebar tutorialSidebar" + } +} diff --git a/i18n/es/docusaurus-theme-classic/footer.json b/i18n/es/docusaurus-theme-classic/footer.json new file mode 100644 index 0000000000..14b8558bd3 --- /dev/null +++ b/i18n/es/docusaurus-theme-classic/footer.json @@ -0,0 +1,94 @@ +{ + "link.title.Docs": { + "message": "Documentación", + "description": "The title of the footer links column with title=Docs in the footer" + }, + "link.title.Community": { + "message": "Comunidad", + "description": "The title of the footer links column with title=Community in the footer" + }, + "link.title.Developers": { + "message": "Desarrolladores", + "description": "The title of the footer links column with title=Developers in the footer" + }, + "link.title.Products": { + "message": "Productos", + "description": "The title of the footer links column with title=Products in the footer" + }, + "link.item.label.Home": { + "message": "Casa", + "description": "The label of footer link with label=Home linking to /" + }, + "link.item.label.Getting Started": { + "message": "Cómo empezar", + "description": "The label of footer link with label=Getting Started linking to /docs/getting-started" + }, + "link.item.label.Tutorials": { + "message": "Tutoriales", + "description": "The label of footer link with label=Tutorials linking to https://initto.devprotocol.xyz/en/" + }, + "link.item.label.Support": { + "message": "Ayuda", + "description": "The label of footer link with label=Support linking to https://ctt.ac/CEchF" + }, + "link.item.label.FAQs": { + "message": "FAQs", + "description": "The label of footer link with label=FAQs linking to https://devprotocol.xyz/faq" + }, + "link.item.label.Discord": { + "message": "Discord", + "description": "The label of footer link with label=Discord linking to https://discord.com/invite/VwJp4KM" + }, + "link.item.label.Forum": { + "message": "Foró", + "description": "The label of footer link with label=Forum linking to https://community.devprotocol.xyz/" + }, + "link.item.label.Twitter": { + "message": "Twitter", + "description": "The label of footer link with label=Twitter linking to https://twitter.com/devprtcl" + }, + "link.item.label.Youtube": { + "message": "YouTube", + "description": "The label of footer link with label=Youtube linking to https://www.youtube.com/channel/UCN7m74tFgJJnoGL4zk6aJ6g" + }, + "link.item.label.GitHub": { + "message": "GitHub", + "description": "The label of footer link with label=GitHub linking to https://github.com/dev-protocol" + }, + "link.item.label.Community Builders": { + "message": "Constructores de la Comunidad", + "description": "The label of footer link with label=Community Builders linking to https://builders.devprotocol.xyz/" + }, + "link.item.label.Get Started": { + "message": "Como empezar", + "description": "The label of footer link with label=Get Started linking to https://devprotocol.xyz/developers" + }, + "link.item.label.Solve Bounty": { + "message": "Resuelve la recompensa", + "description": "The label of footer link with label=Solve Bounty linking to https://app.chainwhiz.app/explore" + }, + "link.item.label.Join Community": { + "message": "Únete a la comunidad", + "description": "The label of footer link with label=Join Community linking to https://github.com/dev-protocol/community/issues/new?assignees=&labels=github-invitation&template=invitation.yml&title=Please+invite+me+to+the+community" + }, + "link.item.label.Stakes.social": { + "message": "Stakes.social", + "description": "The label of footer link with label=Stakes.social linking to https://stakes.social/" + }, + "link.item.label.Khaos Oracle": { + "message": "Khaos Oracle", + "description": "The label of footer link with label=Khaos Oracle linking to https://github.com/dev-protocol/khaos" + }, + "link.item.label.Dev Kit": { + "message": "Kit de desarrollador", + "description": "The label of footer link with label=Dev Kit linking to https://github.com/dev-protocol/dev-kit-js" + }, + "link.item.label.About Us": { + "message": "Acerca de", + "description": "The label of footer link with label=About Us linking to https://devprotocol.xyz/about" + }, + "copyright": { + "message": "Copyright © 2022 Dev Protocol", + "description": "The footer copyright" + } +} diff --git a/i18n/es/docusaurus-theme-classic/navbar.json b/i18n/es/docusaurus-theme-classic/navbar.json new file mode 100644 index 0000000000..82a4fb7be6 --- /dev/null +++ b/i18n/es/docusaurus-theme-classic/navbar.json @@ -0,0 +1,46 @@ +{ + "item.label.The Protocol": { + "message": "El Protocolo", + "description": "Navbar item with label The Protocol" + }, + "item.label.Stakes Social": { + "message": "Stakes Social", + "description": "Navbar item with label Stakes Social" + }, + "item.label.Developers": { + "message": "Desarrolladores", + "description": "Navbar item with label Developers" + }, + "item.label.Community": { + "message": "Comunidad", + "description": "Navbar item with label Community" + }, + "item.label.Medium Page": { + "message": "Página de Medium", + "description": "Navbar item with label Medium Page" + }, + "item.label.Blog": { + "message": "Blog", + "description": "Navbar item with label Blog" + }, + "item.label.GitHub": { + "message": "GitHub", + "description": "Navbar item with label GitHub" + }, + "item.label.Twitter": { + "message": "Twitter", + "description": "Navbar item with label Twitter" + }, + "item.label.Discord": { + "message": "Discord", + "description": "Navbar item with label Discord" + }, + "item.label.Forum": { + "message": "Foró", + "description": "Navbar item with label Forum" + }, + "item.label.Community Builders": { + "message": "Constructores de la Comunidad", + "description": "Navbar item with label Community Builders" + } +}