Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add some Spanish translations #16

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,13 @@ module.exports = {
lang: 'zh-CN',
title: 'GXChain文档',
description: 'GXChain技术文档'
},
'/es/': {
lang: 'es-US',
title: 'Documento de GXChain',
description: 'Documento Técnico de GXChain'
}

},
head: [
['link', {rel: 'icon', href: `/logo.png`}],
Expand Down Expand Up @@ -106,6 +112,47 @@ module.exports = {
'/zh/contract/': genSidebarConfig ('contract', '智能合约'),
'/zh/ecosystem/': genSidebarConfig ('ecosystem','生态系统')
}
},
'/es/': {
label: 'Español',
selectText: 'Idioma',
editLinkText: 'Edit this page on GitHub',
lastUpdated: 'Last Updated',
serviceWorker: {
updatePopup: {
message: "New content is available.",
buttonText: "Refresh"
}
},
nav: [
{
text: 'Guía',
link: '/es/guide/',
},
// {
// text: 'Tutorial avanzado',
// link: '/es/advanced/',
// },
{
text: 'Contrato Inteligente',
link: '/es/contract/',
},
{
text: 'Problemas comunes',
link: '/es/faq/',
// },
// {
// text: 'Ecosistema',
// link: '/es/ecosystem/',
}
],
sidebar: {
'/es/guide/': genSidebarConfig ('guide', 'Guía'),
// '/es/advanced/': genSidebarConfig ('contract', 'Tutorial avanzado'),
'/es/contract/': genSidebarConfig ('contract', 'Contrato Inteligente'),
'/es/faq/': genSidebarConfig ('faq', 'Problemas comunes')
// '/es/ecosystem/': genSidebarConfig ('contract', "Ecosistema")
}
}
}
}
Expand Down
23 changes: 23 additions & 0 deletions docs/es/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
home: true
heroImage: /hero.png
actionText: Inicio rápido →
actionLink: /zh/guide/
footer: MIT Licensed | Copyright © 2018 GXChain
---

<div class="features">
<div class="feature">
<h2>Rendimiento Alto</h2>
<p>Realizar el mecanismo de consenso de DPoS y soporte <strong>3000+ TPS</strong></p>
</div>
<div class="feature">
<h2>Latencia Baja</h2>
<p>Sin desperdicio de esfuerzo minero, bloque <strong>autenticación de segundo nivel</strong></p>
</div>
<div class="feature">
<h2>Flexible</h2>
<p>Soporte de <strong>contrato inteligente</strong>, basado en la máquina virtual estándar WebAssembly</p>
</div>
</div>

898 changes: 898 additions & 0 deletions docs/es/contract/README.md

Large diffs are not rendered by default.

103 changes: 103 additions & 0 deletions docs/es/contract/abi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@

# Análisis de archivos ABI


El archivo abi es la interfaz externa para invocar la action de contrato inteligente, definiendo los parámetros de la acción y los campos de la table. Cuando normalmente llamamos a una acción, suele ser el caso de que la llamada a la acción falle debido a los elementos que faltan en el archivo abi. Por lo tanto, este tutorial analiza el archivo abi y, cuando se produce un error de archivo Abi durante el desarrollo del contrato, también puede identificar la causa del problema.

El archivo Abi contiene cuatro campos importantes: types、structs、actions、tables.

![](./png/abi.jpg)

## types

El campo types define los alias personalizados para los tipos durante el desarrollo del contrato, por ejemplo:

```cpp
// El contrato se define como sigue
typedef std::string mystring;
// @abi action
void appyourcom(mystring comname,std::string compub);
...

// La abi generada se define de la siguiente manera
"types": [{
"new_type_name": "mystring",
"type": "string"
}
],
```

## structs

El campo structs define el nombre de la table, el tipo de campo que contiene, el nombre de la action y el tipo de parámetros que contiene

```json
// 以红包合约abi文件为例,structs包含了table的定义和字段、action的定义和字段等详细定义
"structs": [{
.......
{
"name": "record",
"base": "",
"fields": [{
"name": "packet_issuer",
"type": "uint64"
},{
"name": "accounts",
"type": "account[]"
}
]
},{
"name": "issue",
"base": "",
"fields": [{
"name": "pubkey",
"type": "string"
},{
"name": "number",
"type": "uint64"
}
]
}
......
}
```

## actions

El campo de actions--name, type (como name ), payable (tipo bool--si se llama a la action para adjuntar activos--es una de las interfaces externas definidas)

```json
"actions": [{
"name": "issue",
"type": "issue",
"payable": true
},
.....
{
"name": "close",
"type": "close",
"payable": false
}
],
```

## tables

El campo de table contiene la tabla de varios índices definida, el name (nombre de table, tal como se define en el contrato), index_type (tipo de índice de clave principal, i64), key_names (nombre de miembro de clave principal), key_types (tipo de miembro de clave principal), type (igual que el nombre de la tabla)


```json
"tables": [{
"name": "packet",
"index_type": "i64",
"key_names": [
"issuer"
],
"key_types": [
"uint64"
],
"type": "packet"
}
.....
],
```
71 changes: 71 additions & 0 deletions docs/es/contract/contractfee.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Introducción a la tarifa de contrato inteligente


En GXChain, hay diferentes cantidades de cargos para implementar, actualizar e invocar contratos. Este documento explica los honorarios asociados con los contratos inteligentes.


## La tarifa del contrato de implementación


La cuota del contrato de despliegue es pagada por el llamador y se calcula como sigue:
:

```cpp
// base_fee es 0.01GXC,contract_size es el tamaño del contrato,price_per_kbyte es el costo de 1kb ram,actualmente es 0.2GXC
fee = base_fee + contract_size / 1024 * price_per_kbyte
```

## La tarifa de renovación


La cuota para la actualización del contrato es pagada por el llamador y se calcula de la siguiente manera:


```cpp
// base_fee es 0.01GXC,contract_size es el tamaño del contrato,price_per_kbyte es el costo de 1kb ram,actualmente es 0.2GXC
fee = base_fee + new_contract_size / 1024 * price_per_kbyte
```

## Tarifa de contrato de llamada


El contrato de llamada es gratuito, pero habrá una tarifa de manejo cuando se llame. La tasa de tramitación consta de tres partes, ram_fee, cpu_fee y base_fee, que se devolverán más tarde.


- **ram_fee**

Cuando se crea o modifica un objeto en la table del contrato, ram_fee puede especificar una cuenta asociada para pagarlo. Ram_fee método de cálculo:


```cpp
// ram_bytes为占用的内存字节数,price_per_kbyte_ram为1kb ram的费用,当前为0.2GXC
ram_fee = ram_bytes / 1024 * price_per_kbyte_ram
```

| ram_fee payer | Instrucciones |
| --- | --- |
| 0 | Cuenta del contrato (ibid.\_ slef) |
| \_self | Cuenta de contrato (igual que 0)) |
| sender | Cuenta de llamada de contrato |
| original | La cuenta de invocación original del contrato, que se llama a través del contrato, es la cuenta de invocación inicial |

Ram_fee restitución: después de eliminar el objeto en la table, la tasa incurrida en el momento de la creación será devuelta inmediatamente al payer donde pertenece la memoria.


- **cpu_fee**

El precio unitario actual de cpu_fee es 0


- **base_fee**

El contrato de llamada, además de usar cpu_fee y ram_fee, tiene una tarifa base de 0.001 GXC.

Devolución de base_fee: la cuota básica generada por la invocación del contrato será devuelta al saldo no congelado del usuario, que debe ser recogido por el usuario manualmente.
El método de cálculo de invocar una tarifa de contrato inteligente es el siguiente:

```cpp
// base_fee es 0.001GXC,Ram_fee se calcula en función de la memoria ocupada por el pagador y cpu_fee es 0
fee = base_fee + ram_fee + cpu_fee
```

78 changes: 78 additions & 0 deletions docs/es/contract/debug.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Depuración de contrato


En el proceso de desarrollo de contratos inteligentes, la depuración también es muy importante, en la actualidad, la forma de depurar contratos inteligentes, principalmente es utilizar interfaces de cadena de bloque GXChain proporcionadas print para imprimir registros relacionados a la consola witness, por lo que local estructuras, una cadena privada o un inicio local de un nodo de red de prueba sincrónica, es necesario para la depuración del contrato inteligente.


Para iniciar la depuración, se requieren dos operaciones:
#### 1. Modifique el archivo config.ini local de la siguiente manera:
```
[logger.default]
level=debug
appenders=stderr,FILE
```

#### 2. Traiga el parámetro `--contracts-console` para el inicio del administrador witness_node

El modo de depuración print, logra una variedad de tipos de parámetros de sobrecarga. Cadena de soporte, int, punto flotante, hexadecimal, etc.

::: tip Propina:
Agregue "\n" al registro de impresión, de lo contrario no se imprimirá.
:::



## print

Diferentes funciones de print se sobrecargan según parámetros diferentes, y las siguientes funciones se llaman internamente, como se muestra en la figura, un tipo diferente de resultado de impresión
![](./png/print.jpg)

## prints
```cpp
//Imprimir cadena const char*
prints("hello");
Imprimir: hello
```

## prints_l
```cpp
//Imprime los primeros caracteres de una cadena.
prints_l("hello",3);
Imprimir:hel
```
## printi
```cpp
//Imprime los primeros caracteres de la cadena, el parámetro es de tipo int64_t
printi(-1);
Imprimir:-1
```
## printui
```cpp
//Imprima el número sin firmar con el tipo uint64_t como parámetro
printui(-1);
Imprimir:18446744073709551615
```

## printdf
```cpp
//Imprimir el número de punto flotante, el parámetro es doble
printdf(3.14159);
Imprimir:3.141590000000000e+00
```

## printn
```cpp
//Imprima el resultado del cifrado UInt64 tipo base32
printn(N(hello));
Imprimir:hello
```

## printhex
```cpp
//Imprima en hexadecimal
std::string str="hello";
checksum256 sum;
sha256(str.c_str(),str.length(),&sum);
printhex(sum.hash,32);
Imprimir:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
```
Loading