Tutorial para desarrolladores de redes IBAX
Guía de inicio
Despliegue
Guía avanzada
Vamos a desplegar un contrato inteligente en la cadena de bloques IBAX y aprender cómo llamar a un contrato inteligente utilizando la herramienta de línea de comandos (opens new window). Como nuestro primer contrato inteligente, lo desplegaremos en una red de prueba local. Puedes consultar cómo desplegar una red local en Despliegue de red, por lo que no necesitas ningún gasto para desplegarlo y ejecutarlo.
Crear una aplicación.
Invocar el contrato inteligente @1NewApplication para crear una aplicación. Este contrato inteligente tiene un parámetro de nombre de aplicación y un parámetro de modificación de permisos (../concepts/about-the-platform.md#access-rights-control-mechanism).
- En la primera línea, se inicia la terminal de línea de comandos.
- En la quinta línea, se llama al contrato inteligente @1NewApplication para crear una aplicación llamada
testapp
, con permisos de modificación de la aplicación para el desarrollador @1DeveloperCondition
. - En la octava línea, se muestra el ID del bloque generado por la transacción.
- En la novena línea, se muestra el hash del bloque generado por la transacción.
- En la décima línea, se muestra si la transacción falló (0: sin castigo, 1: castigo).
- En la undécima línea, si la transacción falló, se devuelve un mensaje de texto de error y si se devuelve el ID del bloque, el campo err es el ID de la aplicación.
Por supuesto, si desea ver qué campos y tipos de datos tiene este contrato inteligente, puede llamar al método getContractInfo
, que devolverá información sobre el contrato inteligente de la siguiente manera:
El campo fields
es el parámetro de este contrato inteligente, que incluye el nombre del parámetro name
, el tipo type
, la opción opcional optional
, Name
y Conditions
son campos obligatorios, VotingId
es opcional y se puede consultar en el método de API contract/name.
Escribir un contrato inteligente.
Usamos Needle para escribir contratos inteligentes. Implementamos una operación de suma simple. El código fuente del contrato inteligente es el siguiente. Guardamos el contrato inteligente como SumMath.sim
.
- En la primera línea, definimos un contrato inteligente llamado SumMath.
- En la segunda línea, se encuentra la sección de datos.
- En las líneas 3 y 4, definimos dos parámetros de entrada de tipo entero de 64 bits llamados
A
y B
. - En la línea 6, se encuentra la sección de condiciones.
- En la línea 9, se encuentra la sección de acciones. Definimos una variable llamada
sum
para recibir el resultado de la suma de A
y B
, y luego asignamos el valor de sum
a $result
, que es el resultado del contrato inteligente. Por supuesto, también podríamos asignar directamente el valor de A+B
a $result
, pero esto es solo un ejemplo.
Crear un contrato inteligente.
Hay dos formas de crear un contrato inteligente, el primer método:
El primer paso es escribir un archivo de parámetros de contrato inteligente en formato JSON:
El ApplicationId
es el ID de la aplicación, Value
es el código fuente del contrato inteligente y debe escapar los caracteres especiales. Conditions
son los permisos de modificación del contrato inteligente.
Lo llamaremos SumMathParams.json
.
El segundo paso es llamar a la creación del contrato inteligente @1NewContract.
Segunda opción:
Enviar directamente el archivo de código fuente del contrato inteligente guardado como parámetro del contrato inteligente, el formato del parámetro es nombre del parámetro
+ -
+ "archivo", nombreDelParametro-archivo
como se muestra a continuación:
- Línea 1: Se llama al contrato inteligente @1NewContract para crear un contrato inteligente, utilizando el parámetro del contrato inteligente importado desde un archivo con la opción -f.
- Línea 3: El ID del bloque generado por la transacción.
- Línea 4: El hash del bloque generado por la transacción.
- Línea 5: Si la transacción falla (0: sin castigo, 1: castigo).
- Línea 6: Si la transacción falla, se devuelve un mensaje de error de texto. Si se devuelve un ID de bloque, el campo err es el ID de este contrato inteligente.
Intentemos llamar al contrato inteligente que acabamos de implementar.
La llamada se ha completado y el resultado es el esperado, a continuación se explica línea por línea:
- En la primera línea se llama al contrato inteligente, aquí hemos desplegado el contrato inteligente en la ecología con el id 5, pero si estamos en la misma ecología con el id 5, también podemos llamarlo así:
callContract SumMath {"A":1, "B":2}
. - En la tercera línea se muestra el id del bloque generado por la transacción.
- En la cuarta línea se muestra el hash del bloque generado por la transacción.
- En la quinta línea se muestra si la transacción falló (0: sin penalización, 1: con penalización).
- En la sexta línea, si la transacción falló, se devuelve un mensaje de error en forma de texto. Si se devuelve un id de bloque, el campo "err" será el resultado del contrato inteligente, es decir, el valor de
$result
.
En este tutorial, aprenderás cómo:
- Crear un ecosistema
- Crear una aplicación
- Crear una tabla de datos
- Crear parámetros de aplicación
- Crear y desplegar un contrato inteligente
- Crear parámetros ecosistema
- Agregar localización
- Modificar el contrato inteligente
- Modificar los permisos de la tabla de datos
Para comprender mejor cómo es el ecosistema y las aplicaciones de IBAX, y para qué se utilizan, primero debemos entender a qué parte pertenecen el ecosistema y las aplicaciones. Podemos comprenderlo mejor a través de un simple mapa mental:
Se puede ver que la red IBAX puede tener muchos ecosistemas, cada ecosistema puede tener múltiples aplicaciones, cada aplicación tiene contratos inteligentes, tablas de datos, el ecosistema tiene parámetros de ecosistema, las aplicaciones tienen parámetros de aplicación.
Paso 1 - Crear un ecosistema
Primero usaremos la herramienta de línea de comandos (https://github.com/IBAX-io/ibax-cli) para crear un ecosistema y llamar al contrato inteligente @1NewEcosystem. Si desea modificar el nombre del ecosistema, puede llamar al contrato inteligente @1EditEcosystemName.
- En la primera línea, se inicia el programa de consola de línea de comandos.
- En la quinta línea, se llama al contrato inteligente @1NewEcosystem para crear un ecosistema con el nombre
test ecosystem
. - En la octava línea, se muestra el ID del bloque generado por la transacción.
- En la novena línea, se muestra el hash del bloque generado por la transacción.
- En la décima línea, se muestra si la transacción falló (0: sin castigo, 1: castigo).
- En la undécima línea, si la transacción falló, se devuelve un mensaje de error de texto y si se devuelve el ID del bloque, el campo err es el ID del ecosistema que es
18
.
Luego, configuramos la herramienta de comando config.yml
, establecemos ecosystem
como el ID del ecosistema creado 18
y reiniciamos el programa de consola de línea de comandos.
Paso 2 - Crear una aplicación
Para llamar al contrato inteligente @1NewApplication
para crear una aplicación, el contrato inteligente tiene un parámetro para el nombre de la aplicación y un parámetro para modificar los derechos de acceso.
Si necesitas modificar los permisos de la aplicación, puedes llamar al contrato inteligente EditApplication
.
- En la primera línea, se llama al contrato inteligente @1NewApplication para crear una aplicación llamada
GradesRecorder
, con permisos de modificación para desarrolladores @1DeveloperCondition
. - En la cuarta línea, se muestra el ID del bloque generado por la transacción.
- En la quinta línea, se muestra el hash del bloque generado por la transacción.
- En la sexta línea, se indica si la transacción falló (0: sin castigo, 1: castigo).
- En la séptima línea, si la transacción falló, se devuelve un mensaje de error. Si se devuelve un ID de bloque, el campo "err" de la aplicación es
47
.
Vamos a escribir un ejemplo sencillo. Esta aplicación puede registrar las calificaciones de los estudiantes. Los campos de la tabla de datos incluyen información del estudiante, grado grade
, clase class
, calificaciones en matemáticas, física y literatura mathematics, physics, literature
, puntaje general overall_score
, calificación score
, y una marca de tiempo de creación (en milisegundos) created_at
.
Paso 3 - Crear tabla de datos
"Primero, escribimos un archivo de parámetros de contrato inteligente en formato json:"
El campo ApplicationId
es el ID de la aplicación, Name
es el nombre de la tabla de datos creada test_table
, ColumnsArr
es una matriz de campos de la tabla de datos, TypesArr
es una matriz de tipos de campos de la tabla de datos, que incluye 9 tipos tipos. varchar
, character
, json
, number
, datetime
, double
, money
, text
, bytea
, el nombre del campo y el tipo de campo son una correspondencia uno a uno, InsertPerm
es el permiso para crear una entrada en la tabla de datos, UpdatePerm
es el permiso para actualizar una entrada en la tabla de datos, ReadPerm
es el permiso para leer datos de la tabla de datos, NewColumnPerm
es el permiso para crear un nuevo campo en la tabla de datos. Consulte Gestión de permisos, aquí ContractConditions(\"MainCondition\")
está disponible para el creador del ecosistema actual.
Lo llamamos createTable.json y luego llamamos al contrato inteligente para crear la tabla de datos @1NewTableJoint
.
Modificar los permisos de los campos de la tabla de datos.
Podemos modificar los permisos de los campos de la tabla de datos. Los permisos de los campos de la tabla de datos incluyen permisos de lectura y permisos de actualización. Los permisos de lectura, cuando se utilizan DBFind.Columns
en el contrato inteligente para filtrar campos o al consultar a través de la interfaz como list (opens new window), si no se tienen permisos, se producirá un error de permisos. Los permisos de actualización son los permisos para actualizar los campos de la tabla de datos. Establecemos los permisos de lectura y actualización del campo student
en false
, pero también se pueden establecer para que sean operables por algún contrato inteligente. Llamamos al contrato inteligente @1EditColumn
para modificar los permisos de los campos de la tabla de datos.
We can create several application parameters grade_best_type
, grade_type_a+
, grade_type_a
, grade_type_b+
, grade_type_b
, grade_type_c
, for grading types.
Podemos crear varios parámetros de aplicación grade_best_type
, grade_type_a+
, grade_type_a
, grade_type_b+
, grade_type_b
, grade_type_c
, para tipos de calificación.
Paso 4 - Crear parámetros de la aplicación
Utiliza el contrato inteligente @1NewAppParam
para crear los parámetros de la aplicación. Si deseas modificar los parámetros de la aplicación, puedes utilizar el contrato inteligente @1EditAppParam
.
El parámetro grade_best_type
es el tipo de calificación más alta. El parámetro grade_type_a+
es la condición que desencadena la calificación A+
. Cuando la puntuación es mayor o igual a 90 y menor que 101, se califica como A+
. Los demás parámetros son similares.
Paso 5 - Crear un contrato inteligente y desplegarlo
Vamos a crear un contrato inteligente para registrar la información de calificaciones y calificaciones finales de los estudiantes. Al ingresar la información, se ingresan las calificaciones de cada materia y la clase y el grado del estudiante. Se realiza un cálculo promedio de las calificaciones ingresadas para obtener la puntuación general overallScore
y la calificación final score
. Al llamar al contrato inteligente, se creará un registro en la tabla de datos grade_info
que acabamos de crear.
Primero, escribiremos un contrato inteligente y lo llamaremos NewRecord.sim
.
- En la línea 2, la sección de datos define los parámetros de entrada
Student
para el nombre del estudiante, Grade
para el grado, Class
para la clase, Mathematics
para la puntuación de matemáticas, Physics
para la puntuación de física y Literature
para la puntuación de literatura. - En la línea 10, la función getScore calcula la puntuación general y la calificación final en función de las puntuaciones de cada materia.
- En la línea 30, la función safeJsonDecode decodifica una cadena JSON y la convierte en un mapa.
- En la línea 38, se encuentra la sección de condiciones.
- En la línea 39, se encuentra la sección de acciones.
Puede ver que cuando se llama al contrato inteligente, primero se ejecuta la parte de la condición, verificando si los parámetros de entrada del contrato inteligente son válidos, como el nombre del estudiante if Size($Student) == 0 {
si está vacío (línea 39), si está vacío, devuelve un mensaje de error. "Student Can not be empty"
(línea 30), cuando se verifican todos los parámetros de entrada, en la línea 61, se utiliza DBFind para recuperar la información de la aplicación con el id de ecología 18
, el nombre de la aplicación GradesRecorder
y que no ha sido eliminada deleted=0
de la base de datos. En las líneas 69-74, se utiliza AppParam para recuperar los parámetros de la aplicación, como $gradeBestType = AppParam(app_id, "grade_best_type", $eId)
(línea 69), si los parámetros de la aplicación se almacenan en formato json, como grade_type_a
, puede consultar $gradeTypeABest = safeJsonDecode(AppParam(app_id, "grade_type_a+", $eId))
, y convertir los parámetros de la aplicación obtenidos en formato de mapa a través de la función safeJsonDecode.
Luego, se ejecuta la parte de la operación, se llama a la función getScore para obtener la puntuación general y la calificación final (línea 10), se almacena en un mapa, en la línea 79, se define un mapa para guardar la información de calificaciones de los estudiantes, y se utiliza DBInsert para insertar datos en la tabla de datos @18grade_info
.
Hay dos formas de crear un contrato inteligente, la primera forma:
Primero, escribimos un archivo de parámetros de contrato inteligente, el formato del archivo es json:
El ApplicationId
es el ID de la aplicación y se requiere procesar los caracteres especiales de escape. Las Conditions
son los permisos de modificación del contrato inteligente y Value
es el código fuente del contrato inteligente, que se guarda como NewRecordParams.json
:
Después de escribir el contrato inteligente, necesitamos implementarlo y llamar a la creación del contrato inteligente @1NewContract
.
- Línea 1: Se llama al contrato inteligente
@1NewContract
para crear un contrato inteligente, utilizando el parámetro del contrato inteligente importado del archivo NewRecord.json
con la opción -f
. - Línea 3: El ID del bloque generado por la transacción.
- Línea 4: El hash del bloque generado por la transacción.
- Línea 5: Si la transacción falla (0: sin castigo, 1: castigo).
- Línea 6: Si la transacción falla, devuelve un mensaje de error de texto. Si se devuelve el ID del bloque, el campo
err
del ID del contrato inteligente es 348
.
Segunda opción:
Se puede pasar directamente el código fuente del contrato inteligente guardado como parámetro del contrato inteligente, con el formato de parámetro nombreDelParámetro
+ -
+ "archivo", nombreDelParámetro-archivo
como se muestra a continuación:
Ok, la traducción en español sería: "Vamos a intentar llamar al contrato inteligente que acabamos de crear.
La llamada se completa y luego verificamos si se guarda un registro en la tabla de datos.
Puedes ver que ya hay un registro en la tabla de datos, donde el student
Tom tiene una puntuación integral de 56 y una calificación de C.
El ejemplo anterior es solo para fines de aprendizaje e investigación. Debes modificar los parámetros relevantes de acuerdo con la situación real, como el permiso de escritura de la tabla de datos, el permiso de modificación del contrato inteligente, etc.
Por ejemplo, si queremos especificar que solo una persona puede llamar a este contrato inteligente para crear un nuevo registro, y todas las demás personas no pueden llamarlo, podemos establecer un parámetro ecológico new_record_account
.
Paso 6 - Configuración de los parámetros ecosistema.
Invocar el contrato inteligente @1NewParameter
creará el parámetro ecológico new_record_account
en la tabla @1parameters
. Si necesita modificar el parámetro ecológico, puede llamar a @1EditParameter
.
Hemos creado un parámetro ecológico llamado new_record_account
, con un valor de keyId 6667782293976713160
, y permisos de modificación establecidos en ContractConditions("MainCondition")
, lo que significa que solo el creador actual del ecosistema puede modificarlo. Cuando se ejecuta la transacción con éxito, el campo "err" muestra que el id del parámetro ecológico es 273
.
Paso 7 - Agregar idioma de localización
You can use the @1NewLangJoint
smart contract to create a localized parameter called account_not_access
, which will be created in the @1languages
table. You can modify the localized parameter using @1EditLangJoint
.
Paso 8 - Modificar el contrato inteligente
Entonces necesitamos modificar el código fuente del contrato en la sección de condiciones
, agregando el siguiente código a condiciones
.
Llamando a la modificación del contrato @1EditContract, donde Id
es el ID del contrato y Value
es el código fuente del contrato.
Paso 9 - Modificar los permisos de la tabla de datos
Aquí necesitamos cambiar los permisos de inserción de la tabla de datos. Originalmente, el permiso ContractConditions("MainCondition")
era para el creador del ecosistema, pero la configuración del contrato new_record_account
no es el creador del ecosistema. Por lo tanto, solo necesitamos cambiar ContractConditions("MainCondition")
a ContractAccess("@18NewRecord")
, que es el contrato especificado que puede operar. Luego, llamamos al contrato @1EditTable
para cambiar los permisos de la tabla de datos.
Continúa llamando al contrato modificado recientemente y crea un nuevo registro.
Puedo ver que el parámetro de localización que acabamos de establecer, account_not_access
, está funcionando.
Hemos encontrado un error de permisos, el usuario actual no tiene permisos para operar, así que cambiamos a la cuenta con keyId 6667782293976713160
. Podemos obtener la información del usuario actual a través de la herramienta de línea de comandos account info
. Configuramos el archivo config.yml
de la herramienta de línea de comandos para cambiar a la cuenta con keyId 6667782293976713160
. Después de configurar esto, llamamos al contrato de nuevo.
La llamada ha sido completada. Al consultar la tabla de datos a través de getList @18grade_info
, los resultados son los esperados.
Espero que este artículo le ayude a comprender mejor cómo funciona la red IBAX y cómo escribir un código claro y seguro con Needle
.
En este tutorial, aprenderás cómo:
Antes de comenzar este tutorial, necesitas tener tu propia aplicación y conocer los conceptos de la ecología y la aplicación. Puedes consultar la Guía de inicio para obtener más información. Utilizaremos la herramienta de línea de comandos (opens new window) para importar y exportar aplicaciones en la cadena de bloques de IBAX.
Aplicación de exportación
Al llamar a account info
, se puede consultar la información de la cuenta actual. Aquí, el ID del ecosistema de inicio de sesión es 9
. Al llamar al comando getList
, se puede consultar qué aplicaciones hay en el ecosistema actual.
Puedes ver que hay 6 aplicaciones en el ecosistema actual. Usamos el comando export
para exportar la aplicación con id
36.
Aquí, el parámetro -f
guardará la aplicación exportada en un archivo data.json
en el directorio actual. Si no se utiliza el parámetro -f
, los datos de la aplicación se mostrarán en la terminal de comandos.
El comando export
encapsula los pasos para exportar una aplicación. Puedes utilizar este comando para exportar una aplicación o seguir los siguientes pasos:
- Llama al contrato
@1ExportNewApp
para exportar una nueva aplicación. - Se generará un registro de la aplicación exportada en la tabla
1_buffer_data
.
Invocar el contrato @1Export
para exportar la aplicación seleccionada, buscarla en la tabla 1_buffer_data
y exportar todos los recursos de la aplicación en una cadena JSON generada. La cadena JSON generada se escribirá en la tabla 1_binaries
del ecosistema actual.
getList
comando para consultar los datos en la tabla 1_binaries
.
Obtener el ID y el hash del archivo binario. Llamar al comando binaryVerify
para exportar el archivo binario.
Importar aplicación.
Para importar una aplicación usando el comando import
, use el parámetro -f
para especificar el archivo de la aplicación que desea importar.
El comando import
encapsula los pasos para importar una aplicación, y puedes usar el comando anterior para importar una aplicación.
Alternativamente, para facilitar el aprendizaje e investigación, puedes seguir los siguientes pasos:
- Paso 1: Llama al contrato
@1ImportUpload
para importar una nueva aplicación, lo que generará un registro de la aplicación exportada en la tabla 1_buffer_data
. El parámetro Data
del contrato @1ImportUpload
es de tipo file
, que incluye las palabras clave Name
para el nombre del archivo (cadena), MimeType
para el tipo de archivo (cadena) y Body
para el contenido del archivo ([]byte). Necesitas codificar los datos del archivo de la aplicación en base64 y pasarlos a Body
. Puedes usar el comando base64Encode
para codificar en base64.
- Paso 2: Después de llamar a la función, utiliza el comando
getList
para consultar los datos en la tabla 1_buffer_data
.
- Paso 3: Ensamble los datos de value.data->Data en un arreglo unidimensional, [a,b,c,d], luego cree un archivo de parámetros de contrato llamado
importParams.json
, con el siguiente contenido:
- Paso 4: Llame al contrato
@1Import
para importar los datos de la aplicación.
En este tutorial, aprenderás cómo:
Antes de comenzar este tutorial, necesitas tener tu propia aplicación y conocer los conceptos de la ecología y la aplicación. Puedes consultar la Guía de inicio para obtener más información. Utilizaremos la herramienta de línea de comandos (opens new window) para configurar la ecología en la cadena de bloques de IBAX.
Solicitar unirse al ecosistema
Podemos llamar al contrato @1MembershipRequest
para solicitar la membresía en el ecosistema. Por ejemplo:
Solicitud de unirse al ecosistema con ID 19
, el contrato @1MembershipRequest
restringe las llamadas solo al ecosistema base. Una vez que se aprueba la solicitud, el administrador del ecosistema objetivo recibirá una notificación y solo se considerará que se ha unido al ecosistema objetivo después de que el administrador del ecosistema apruebe la solicitud. Si el ecosistema objetivo es público, puedes unirte directamente.
Agregar miembros al ecosistema
Cuando se crea un ecosistema, solo el creador del ecosistema es miembro. Si deseas invitar a otros miembros a unirse, necesitas conocer la clave pública del miembro invitado y luego llamar al contrato @1MembershipAdd
para agregar al miembro.
Si la ecología es pública y permite que cualquier persona se una, puedes establecer el parámetro de ecología "free_membership" en 1. Por defecto, la ecología no es pública, pero una vez que se establece este parámetro, cualquier persona puede unirse sin necesidad de aprobación.
Si no has establecido el parámetro free_membership
, recibirás una notificación de solicitud cuando otros miembros soliciten unirse a tu ecosistema, que puedes ver en "Ver todas las notificaciones de roles".
Llama al contrato @1MembershipDecide
para aprobar la solicitud, con el parámetro del contrato NotificId
como el ID de la notificación y Accept
como la identificación de la decisión, donde 1
significa aprobado.
Congelar cuenta
Llame al contrato @1DeleteMember
para congelar la cuenta. Tenga en cuenta que esta operación no se puede deshacer.
Gestión de roles
Nueva creación de rol
Llame al contrato @1RolesCreate
para crear un nuevo rol con el nombre estudiante
y el tipo 2
(1-Asignable, 2-Elegido por votación, 3-Sistema).
El resultado contiene el ID de rol 21
.
Agregar miembros al rol
Hay dos métodos, el primer método es que los miembros del ecosistema presenten una solicitud y llamen al contrato @1RolesRequest
para solicitar ser agregados como miembros de ese rol, donde Rid
es el ID del rol.
La segunda opción es que el administrador de roles asigne miembros a un rol. El administrador de roles llama al contrato "@1RolesAssign" para agregar miembros a ese rol.
Eliminar miembros del rol
Primero, vamos a ver qué miembros tiene un cierto personaje. Podemos hacerlo mediante la consulta getList, como se muestra a continuación:
En la cláusula where
, ecosystem
especifica el ecosistema, role->id
especifica el ID del rol y deleted: 0
especifica que no ha sido eliminado. Podemos ver que se han encontrado 3 registros. Si queremos eliminar los permisos del rol para el miembro 1273-2644-xxxx-5846-6598
, es decir, el rol con id
21, el administrador puede llamar al contrato @1RolesUnassign
para eliminar al miembro del rol, como se muestra a continuación:
Modificar el administrador del rol
Vamos a echar un vistazo a los roles en el ecosistema actual.
En este caso, roles_access
es el rol de gestión del rol actual y es una matriz que puede tener varios valores. Para agregar un rol de gestión al rol teacher
, se llama al contrato @1RolesAccessManager
, donde el parámetro Action
es el operador de gestión (clean
para limpiar, remove
para eliminar, add
para agregar), Rid
es el ID del rol que se desea gestionar y ManagerRid
es el ID del gestor de ese rol.
Eliminar el rol
Podemos llamar al contrato @1RolesDelete
para eliminar un rol, donde el parámetro del contrato Rid
es el ID del rol que se desea administrar, y Ops
es el operador (D
para eliminar, R
para restaurar).
Emisión de tokens ecosistema
Crear un ecosistema
Crear un ecosistema, llamando al contrato @1NewEcosystem
.
Entonces, vamos a modificar la configuración de la herramienta de línea de comandos para iniciar sesión en el nuevo ecosistema "21" que acabamos de crear.
Instalar aplicaciones básicas
Invocar la instalación de una aplicación básica en un contrato inteligente, como se muestra a continuación:
- Primera línea, instalar la aplicación de plataforma.
- Segunda línea, instalar el rol predeterminado.
- Tercera y cuarta línea, instalar la configuración ecológica y la aplicación de emisión de tokens, donde la ID de la aplicación "5,6" se puede consultar a través de getList, como se muestra a continuación:
Emisión de tokens en el ecosistema
Debido a que es un ecosistema recién establecido, es necesario configurar la emisión de tokens. Llama al contrato @1TeSettings
para especificar el rol que puede emitir tokens.
RoleDeveloper
es el ID del rol actual en el ecosistema, que se puede obtener a través de la tabla de datos "@1roles".
Emisión de tokens
Llame al contrato @1NewToken
para emitir tokens.
Los parámetros del contrato Symbol
representan el símbolo del token, Name
representa el nombre del token, Amount
representa la cantidad total y Digits
representa la precisión.
Incrementar la emisión de tokens
Destrucción de tokens
La emisión y la destrucción de tokens son permitidas por defecto, pero puedes desactivarlas a través de @1TeChange
. TypeChange
indica el tipo de cambio (emission
para emisión y withdraw
para destrucción) y Value
indica el estado del cambio (1
para activar y 2
para desactivar). Por ejemplo: Desactivar la emisión. Ten en cuenta que una vez desactivado, no se puede volver a activar.
Desactivar y destruir
Si desea volver a activar la función de destrucción, simplemente establezca el valor de "Value" en "1".
Deducción de tarifas ecosistema
Antes de configurar el ecosistema para la deducción de tarifas de gas por parte de los miembros, es necesario comprender el modelo de tarifas de IBAX, que se puede encontrar en el libro blanco (opens new window).
Primero establecemos la dirección de la billetera del ecosistema, llamamos al contrato @1EditParameter
y modificamos los parámetros del ecosistema:
Id
se refiere al ID del parámetro ecosystem_wallet
de la billetera ecológica. Puede consultarlo de la siguiente manera:
El valor Value
es la dirección de la billetera ecológica que se va a vincular. La tarifa de gas generada por el contrato será pagada por esa dirección. Esta dirección debe tener suficientes tokens en la ecología actual y solo se modificará con el consentimiento de la dirección vinculada.
Llamando al contrato @1EcoFeeModeManage
para configurar la deducción de tarifas de múltiples ecosistemas, como sigue:
Los campos de parámetros del contrato se definen de la siguiente manera:
FollowFuel
: parámetro que multiplica la tasa de la tarifa ecológica 1. CombustionFlag
: si se habilita la quema de tarifas de gas en transacciones ecológicas, 1-no, 2-sí. CombustionPercent
: porcentaje de quema, solo efectivo cuando se habilita la quema de tarifas de gas, con valores del 1 al 100. Cuando no está habilitado, es 0. VmCostFlag
: identificador de costo de máquina virtual, establecido para pago directo o pago por proxy, 1-pago directo, 2-pago por proxy. StorageFlag
: identificador de costo de almacenamiento, establecido para pago directo o pago por proxy, 1-pago directo, 2-pago por proxy. ExpediteFlag
: identificador de costo acelerado, establecido para pago directo o pago por proxy, 1-pago directo, 2-pago por proxy. VmCostConversionRate
: tasa de conversión de costo de máquina virtual, con 2 decimales, solo efectiva para pago por proxy, mayor que cero. StorageConversionRate
: tasa de conversión de costo de almacenamiento, con 2 decimales, solo efectiva para pago por proxy, mayor que cero.
Si utiliza la configuración mencionada anteriormente, todas las tarifas de transacción generadas por los usuarios al llamar a contratos dentro de ese ecosistema serán pagadas por la billetera ecológica configurada actualmente. Todos los usuarios solo necesitan pagar las tarifas de gas generadas dentro de ese ecosistema. Por supuesto, puede ajustar los parámetros de tarifas correspondientes según sea necesario.
Gobernanza DAO del ecosistema
Antes de cambiar a un ecosistema de gobernanza DAO, es necesario asegurarse de que el ecosistema actual ya haya emitido tokens. Después de cambiar a un ecosistema de gobernanza DAO, todas las propuestas en el ecosistema serán decididas por la votación de los miembros del comité de gobernanza, en lugar de ser administradas por separado por los desarrolladores del ecosistema. Los miembros del comité de gobernanza DAO son elegidos por los 50 principales poseedores de los tokens del ecosistema.
Invoca el contrato @1EditControlMode
para cambiar el modo de gobernanza ecológica al modo de gobernanza DAO.
El parámetro Value
con valor 1
representa el modelo de creador, mientras que 2
representa el modelo de gobernanza DAO.
Podemos intentar crear una aplicación:
En este momento se generará una propuesta de gobernanza DAO, que solo se creará después de que sea aprobada por votación por el comité de gobernanza DAO. Se requiere una mayoría del 75% de los votos para que una propuesta sea válida, con una tasa de aprobación del 68%.
El alcance de la gobernanza DAO incluye:
- Agregar, eliminar y modificar aplicaciones, contratos, páginas, fragmentos de código, pestañas, menús, parámetros de aplicación, tablas de datos y campos.
- Modificar el multilingüismo.
- Interruptores de modelo DAO y creador.
- Editar parámetros ecosistema.
- Roles, asignación y eliminación de miembros de roles.
- Emitir y destruir monedas.
- Modificar parámetros de plataforma.
- Modificar información ecológica.
- Modificar contratos de retraso.
- Modificar plantillas de votación.
Antes de comenzar este tutorial, necesitas descargar la herramienta de empaquetado de aplicaciones IBAX (opens new window). Necesitamos usar esta herramienta para empaquetar la aplicación IBAX.
Necesitamos guardar los archivos de la aplicación en la siguiente estructura de directorios:
Como sigue:
El directorio app_params
contiene archivos de parámetros de aplicación, con el nombre del parámetro seguido del formato de archivo .csv
, y el contenido del archivo es el valor del parámetro. El directorio contracts
contiene contratos en formato de archivo .sim
, y el contenido del archivo es el código fuente del contrato. El directorio tables
contiene la estructura de la tabla de datos de la aplicación en formato de archivo json
, como se muestra a continuación:
name
es el nombre del campo de la tabla de datos, conditions
son los permisos del campo de la tabla de datos, type
es el tipo de campo.
En el primer paso, generamos un archivo config.json y lo guardamos en el directorio airdrop. El contenido del archivo es el siguiente:
En primer lugar, name
es el nombre de la aplicación y conditions
son los permisos para modificar la aplicación. Luego, se guarda en el directorio airdrop
.
En el segundo paso, se empaqueta la aplicación y se genera el archivo airdrop.json
en el directorio actual. Si se modifican los parámetros de la aplicación o el contrato, es necesario volver a empaquetar la aplicación.
Podemos importar una aplicación a través de la herramienta de línea de comandos (opens new window), como se muestra a continuación:
Usando el comando import
, importe la aplicación y el parámetro -f
especifica el archivo de la aplicación a importar.
Por supuesto, si tienes una aplicación, también puedes generar la estructura completa del directorio con el siguiente comando.