Contratos inteligentes
Los contratos inteligentes (en adelante, "contratos") son los elementos básicos de las aplicaciones. Los usuarios ejecutan contratos inteligentes en la página web generalmente como una sola operación, lo que resulta en la modificación o creación de entradas en la base de datos. Todas las operaciones de datos de la aplicación forman el sistema de contratos inteligentes, que interactúan entre sí a través de la base de datos o las funciones del contenido del contrato inteligente.
Estructura del contrato inteligente
Se utiliza la palabra clave contract para declarar un contrato inteligente, seguido del nombre del contrato inteligente. El contenido del contrato inteligente debe estar entre llaves. La estructura del contrato inteligente consta de tres partes principales:
- data - Sección de datos, que declara las variables de entrada de datos, incluyendo el nombre y el tipo de las variables;
- conditions - Sección de condiciones, que verifica la corrección de los datos;
- action - Sección de acción, que ejecuta las acciones de operación de datos.
Sección de datos
La sección data
describe la entrada de datos del contrato inteligente y los parámetros de formulario recibidos.
La estructura de cada línea es la siguiente:
- Nombre de la variable - Solo acepta variables, no admite matrices;
- Tipo de datos de la variable - Tipo de datos de la variable;
- opcional - Parámetro opcional, elementos de formulario que no necesitan ser completados.
Sección de condiciones
La sección conditions
describe la validación de los datos recibidos.
Los siguientes comandos se utilizan para advertencias de error: error de gravedad error
, error de advertencia warning
, error de información info
. Los tres comandos generarán un error que detendrá la ejecución del contrato inteligente y cada error imprimirá información de registro de error de un tipo diferente. Por ejemplo:
Sección de Acción
La sección action
describe el código principal del contrato inteligente, que recupera otros datos y registra los valores de resultado en una tabla de base de datos. Por ejemplo:
Variables
Las variables declaradas en la sección data se pasan a otras partes del contrato inteligente usando el símbolo $
seguido del nombre de la variable. El símbolo $
también se puede usar para declarar variables que no están en la sección de datos. Estas variables se consideran variables globales para este contrato inteligente y todos los contratos inteligentes anidados.
Se pueden usar variables predefinidas dentro del contrato inteligente, que contienen datos de transacción para la llamada al contrato inteligente:
$time
-- Marca de tiempo de la transacción; $ecosystem_id
-- ID del ecosistema; $block
-- ID del bloque que contiene la transacción; $key_id
-- Dirección de la cuenta que firmó la transacción actual; $type
-- ID del contrato inteligente en la máquina virtual; $block_key_id
-- Dirección de la cuenta del nodo que generó el bloque; $block_time
-- Marca de tiempo de generación del bloque; $original_contract
-- El nombre del contrato inteligente que procesó originalmente la transacción. Si esta variable es una cadena vacía, significa que el contrato inteligente fue llamado durante el proceso de verificación. Para verificar si el contrato inteligente fue llamado por otro contrato inteligente o directamente desde la transacción, es necesario comparar los valores de $original_contract y $this_contract. Si son iguales, significa que el contrato inteligente fue llamado directamente desde la transacción; $this_contract
-- El nombre del contrato inteligente que se está ejecutando actualmente; $guest_key
-- Dirección de la cuenta de invitado; $stack
-- Pila de matriz de contrato inteligente, de tipo array, que contiene todos los contratos inteligentes ejecutados, con el primer elemento de la matriz que representa el nombre del contrato inteligente que se está ejecutando actualmente y el último elemento que representa el nombre del contrato inteligente que procesó originalmente la transacción; $node_position
-- Número de índice de la matriz de nodos de validación donde se encuentra el bloque; $txhash
-- Hash de transacción; $contract
-- Matriz de estructura de contrato inteligente actual.
Las variables predefinidas no solo se pueden acceder dentro del contrato inteligente, sino también en los campos de permiso que definen las condiciones de acceso para los elementos de la aplicación. Cuando se usan en campos de permiso, las variables predefinidas relacionadas con la información del bloque siempre son iguales a cero, como $time
, $block
, etc.
La variable predefinida $result
se asigna al resultado de retorno del contrato inteligente.
Contratos inteligentes anidados
En la sección de condiciones y acción de un contrato inteligente, se pueden anidar otros contratos inteligentes. Los contratos inteligentes anidados se pueden llamar directamente, y los parámetros del contrato inteligente se especifican entre paréntesis después del nombre del contrato inteligente, por ejemplo, @1NameContract(Params)
. También se puede llamar utilizando la función CallContract.
Carga de archivos
Para cargar archivos en un formulario utilizando el formato multipart/form-data
, el tipo de datos del contrato inteligente debe ser file
.
UploadBinary es un contrato inteligente utilizado para cargar y almacenar archivos. En el editor de páginas, se puede utilizar la función Binary del lenguaje Logicor para obtener el enlace de descarga del archivo.
En el lenguaje de contrato inteligente, el tipo de formato JSON se puede especificar como tipo de campo. Se utiliza la sintaxis:
columnname->fieldname para manejar los campos de entrada. El valor obtenido se registra en columnname.fieldname.
La sintaxis anterior se puede utilizar en las funciones Columns, One, Where de DBFind.
Consulta de formato de fecha y hora
Las funciones del lenguaje de contrato inteligente no pueden consultar ni actualizar directamente la fecha y hora, pero se pueden utilizar las funciones y características de PostgreSQL en la cláusula Where, como se muestra en el ejemplo.
Por ejemplo, si se necesita comparar el campo date_column con la hora actual y date_column es de tipo timestamp, la expresión sería date_column < NOW()
;
si date_column es de tipo Unix, la expresión sería to_timestamp(date_column) > NOW()
.
La función Needle a continuación se encarga de procesar fechas y horas en formato SQL:
Lenguaje de contrato inteligente Needle
Este lenguaje incluye un conjunto de funciones, operadores y estructuras que permiten procesar algoritmos de datos y operaciones de base de datos.
En caso de que se tenga permiso para editar el contrato inteligente y la condición de permiso no sea false
, se pueden realizar cambios en el contenido del contrato inteligente. El historial completo de cambios realizados en el contrato inteligente se almacena en la cadena de bloques y se puede conocer a través de Weaver.
Las operaciones de datos en la cadena de bloques son ejecutadas por la versión más reciente del contrato inteligente.
Basic Elements and Structure
Data Types and Variables
Cada variable debe definir un tipo de datos, por lo general, el tipo de datos se convierte automáticamente. Se pueden utilizar los siguientes tipos de datos:
bool
- valores booleanos, true
y false
;
bytes
- formato de bytes;
int
- entero de 64 bits;
array
- matriz de valores de cualquier tipo;
map
- matriz de objetos;
money
- tipo de entero grande;
float
- flotante de 64 bits;
string
- cadena de caracteres, entre comillas dobles o formato de escape: "This is a string" o `This is a string`;
file
- matriz de objetos:
Name
- nombre del archivo, tipo string
; MimeType
- formato de archivo mime-type, tipo string
; Body
- contenido del archivo, tipo bytes
.
Todos los identificadores, incluidos los nombres de variables, funciones y contratos inteligentes, son sensibles a mayúsculas y minúsculas (MyFunc y myFunc son nombres diferentes).
Se utiliza la palabra clave var para declarar una variable, seguida del nombre y tipo de la variable. Las variables declaradas dentro de llaves deben ser utilizadas dentro de la misma pareja de llaves.
Las variables declaradas tienen un valor predeterminado de cero: el valor cero para los tipos de datos booleanos es false
, el valor cero para todos los tipos de datos numéricos es 0
, el valor cero para los tipos de datos de cadena es una cadena vacía. Ejemplo de declaración de variable:
Array
Este lenguaje admite dos tipos de arrays:
array
- un array con índices que comienzan en 0; map
- un array de objetos.
Cuando se asignan y recuperan elementos de un array, el índice debe estar entre corchetes. Los arrays no admiten múltiples índices, no se puede tratar un elemento de un array como myarr[i][j].
Puedes definir un tipo de array
especificando los elementos en []
. Para los arrays de tipo map
, utiliza {}
.
Puede utilizar esta inicialización en expresiones, por ejemplo, en los parámetros de una función.
Para matrices de objetos, debes especificar una clave. La clave se especifica como una cadena entre comillas dobles (""
). Si el nombre de la clave solo contiene letras, números y guiones bajos, se pueden omitir las comillas dobles.
El array puede contener cadenas de texto, números, cualquier tipo de nombre de variable y nombres de variable con el símbolo $
. Admite arrays anidados, donde se pueden especificar diferentes mapeos o arrays como valores.
Las expresiones no pueden ser utilizadas como elementos de un array. En su lugar, se debe utilizar una variable para almacenar el resultado de la expresión y especificar esa variable como elemento del array.
Declaraciones If y While
El lenguaje de contrato inteligente admite declaraciones de condición estándar if y bucles while, que se pueden utilizar en contratos inteligentes y funciones. Estas declaraciones se pueden anidar entre sí.
Después de las palabras clave if y while, debe seguir una declaración de condición. Si la declaración de condición devuelve un número, se considera falso cuando su valor es 0.
val == 0 es igual a !val, val != 0 es igual a val. La declaración if puede tener un bloque de código else, que se ejecuta cuando la declaración de condición if es falsa.
Los siguientes operadores de comparación se pueden utilizar en declaraciones de condición: <, >, >=, <=, ==, !=, ||, &&
.
El bucle while ejecuta el bloque de código mientras la declaración de condición sea verdadera. La instrucción break se utiliza para salir del bucle, mientras que la instrucción continue se utiliza para saltar al inicio del bucle y continuar con la siguiente iteración.
Aparte de las declaraciones condicionales, needle también admite operaciones aritméticas estándar: +
, -
, *
, /
.
Los tipos de datos string y bytes se pueden utilizar como declaraciones condicionales. Si la longitud del tipo es mayor que cero, la condición es verdadera, de lo contrario es falsa.
Funciones
Las funciones pueden realizar operaciones en los datos recibidos por la sección de datos del contrato inteligente: leer y escribir datos en la base de datos, convertir tipos de valores y establecer interacciones entre contratos inteligentes.
Declaración de funciones
Se utiliza la palabra clave func para declarar una función, seguida del nombre de la función y la lista de argumentos y sus tipos de datos que se le pasan. Todos los argumentos se encierran entre paréntesis y se separan por comas. Después de los paréntesis, se debe declarar el tipo de datos del valor de retorno de la función. El cuerpo de la función debe estar entre llaves. Si la función no tiene argumentos, las llaves pueden omitirse.
Se utiliza la palabra clave return
para devolver el valor de retorno de la función.
La función no devolverá errores ya que todas las comprobaciones de errores se realizan automáticamente. Cuando se produce un error en cualquier función, el contrato inteligente detendrá su operación y mostrará una ventana que contiene una descripción del error.
Parámetros de longitud variable
Las funciones pueden definir parámetros de longitud variable utilizando el símbolo ...
como el último tipo de parámetro de la función, lo que indica que es un parámetro de longitud variable y su tipo de datos es array
. El parámetro de longitud variable contiene todas las variables desde la variable que se pasa al llamar a la función. Se pueden pasar variables de cualquier tipo, pero debe manejar conflictos con tipos de datos que no coinciden.
Parámetros opcionales
Una función puede tener muchos parámetros, pero a veces solo necesitamos algunos de ellos al llamarla. En este caso, podemos declarar parámetros opcionales de la siguiente manera: func myfunc(name string).Param1(param string).Param2(param2 int) {...}
, lo que nos permite llamar a la función y especificar los parámetros en cualquier orden: myfunc("name").Param2(100)
.
Dentro del cuerpo de la función, podemos manejar estas variables como lo haríamos normalmente. Si no se llama a un parámetro opcional específico, su valor predeterminado será cero.
También podemos usar ...
para especificar parámetros de longitud variable: func DBFind(table string).Where(request string, params ...)
. Luego podemos llamarlo así: DBFind("mytable").Where({"id": $myid, "type": 2})
.
Clasificación de funciones de la función Needle
Búsqueda en la base de datos de valores:
Cambiar el valor de una tabla de datos:
Operaciones de arreglo:
Contratos inteligentes y operaciones de permisos:
Operación de dirección de billetera:
Operación de valores de variables:
Operaciones aritméticas:
Operación de formato JSON:
Manipulación de cadenas:
Manipulación de bytes:
Operaciones de fecha y hora en formato SQL:
Operación de parámetros de la plataforma:
Operación de la función de modo CLB:
Operaciones de la función del nodo CLB principal:
Referencia de la función Needle
AppParam
Devolver el valor de un parámetro de aplicación especificado (de la tabla de parámetros de aplicación app_params).
Gramática
app
name
ecosystemid
Ejemplo
DBFind
Buscar datos de una tabla específica según los parámetros especificados. Devuelve un array array compuesto por arrays de objetos map.
.Row()
devuelve el primer elemento map del registro solicitado, mientras que .One(column string)
devuelve el primer elemento map de la columna especificada en el registro solicitado.
Gramática
table
сolumns
where
{"field1": "value1", "field2" : "value2"}
Equivalente a field1 = "value1" AND field2 = "value2"
.
{"field1": {"$eq":"value"}}
Equivalente a field = "value"
.
{"field1": {"$neq": "value"}}
Equivalente a field != "value"
.
{"field1: {"$in": [1,2,3]}
Equivalente a field IN (1,2,3)
.
{"field1": {"$nin" : [1,2,3]}
Equivalente a field NOT IN (1,2,3)
.
{"field": {"$lt": 12}}
Equivalente a field < 12
.
{"field": {"$lte": 12}}
Equivalente a field <= 12
.
{"field": {"$gt": 12}}
Equivalente a field > 12
.
{"field": {"$gte": 12}}
Equivalente a field >= 12
.
{"$and": [<expr1>, <expr2>, <expr3>]}
Equivalente a expr1 AND expr2 AND expr3
.
{"$or": [<expr1>, <expr2>, <expr3>]}
Equivalente a expr1 OR expr2 OR expr3
.
{field: {"$like": "value"}}
Equivalente a field like '%value%'
(búsqueda difusa).
{field: {"$begin": "value"}}
Equivalente a field like 'value%'
(comienza con value
).
{field: {"$end": "value"}}
Equivalente a field like '%value'
(termina con value
).
{field: "$isnull"}
Equivalente a field is null
.
Por favor, asegúrese de no sobrescribir las claves del arreglo de objetos. Por ejemplo, si desea realizar una consulta con la sentencia id>2 y id<5
, no puede utilizar {id:{"$gt": 2}, id:{"$lt": 5}}
, ya que el primer elemento será sobrescrito por el segundo elemento. Debe utilizar la siguiente estructura de consulta:
id
order
Si la ordenación se realiza en función de un solo campo, se puede especificar como una cadena. Para ordenar en función de varios campos, se debe especificar una matriz de objetos de cadena:
Descendente: {"field": "-1"}
es equivalente a field desc
.
Ascendente: {"field": "1"}
es equivalente a field asc
.
limit
offset
ecosystemid
Ejemplo
DBRow
Según los parámetros especificados, busca datos en la tabla de datos especificada. Devuelve un array array compuesto por un conjunto de objetos map.
Gramática
table
Nombre de la tabla de datos.
columns
Devuelve una lista de columnas. Si no se especifica, se devolverán todas las columnas.
El valor es un array o una cadena separada por comas.
where
Criterios de búsqueda.
Por ejemplo: .Where({name: "John"})
o .Where({"id": {"$gte": 4}})
.
Para obtener información más detallada, consulte DBFind.
id
Buscar por ID. Por ejemplo, .WhereId(1)
.
order
Se utiliza para ordenar el conjunto de resultados según la columna especificada. Por defecto, se ordena por id.
Para obtener más información, consulte DBFind.
ecosystemid
ID del ecosistema. Por defecto, se busca la tabla de datos del ecosistema actual.
Ejemplo
DBSelectMetrics
Devolver datos agregados para las métricas.
Los estándares de las métricas se actualizarán cada 100 bloques generados. Los datos agregados se almacenarán diariamente.
Gramática
metric
Nombre del indicador.
ecosystem_pages
Número de páginas del ecosistema.
Valor de retorno: key - ID del ecosistema, value - número de páginas del ecosistema.
ecosystem_members
Número de miembros del ecosistema.
Valor de retorno: key - ID del ecosistema, value - número de miembros del ecosistema.
ecosystem_tx
Número de transacciones del ecosistema.
Valor de retorno: key - ID del ecosistema, value - número de transacciones del ecosistema.
timeInterval
Intervalo de tiempo para la agregación de datos. Por ejemplo: 1 day
, 30 days
.
aggregateFunc
Función de agregación. Por ejemplo: max
, min
, avg
.
Ejemplo
EcosysParam
Devolver el valor del parámetro especificado en la tabla de parámetros del ecosistema parámetros.
Gramática
name
Nombre del parámetro.
Ejemplo
GetHistory
Recuperar el historial de cambios realizados en las entradas de una tabla de datos especificada.
Gramática
Valor de retorno
Devuelva una matriz de objetos de tipo map. Estas matrices especifican el historial de cambios de entradas en la tabla de datos.
Cada matriz contiene los campos de registro antes del próximo cambio.
Las matrices se ordenan en orden de cambio más reciente.
El campo id en la matriz apunta al campo id en la tabla rollback_tx. block_id representa el ID del bloque y block_time representa la marca de tiempo de generación del bloque.
Ejemplo
GetHistoryRow
Devolver una única instantánea del historial de cambios de una entrada específica en una tabla de datos especificada.
Gramática
GetColumnType
Devolver el tipo de datos de un campo especificado en una tabla especificada.
Gramática
Valor de retorno
Devuelve los siguientes tipos: text, varchar, number, money, double, bytes, json, datetime, double
。
Ejemplo
GetDataFromXLSX
Devolver datos de una hoja de cálculo XLSX.
Gramática
binId
ID en formato XLSX en la tabla binaria binary.
line
Comience la fila, por defecto comienza en 0.
count
número de filas a devolver.
sheet
Listado de números, por defecto comienza en 1.
Ejemplo
GetRowsCountXLSX
Devuelve el número de filas de un archivo XLSX especificado.
Gramática
Ejemplo
LangRes
Devolver recursos multilingües especificados. Su etiqueta lang es un código de idioma de dos caracteres, como: en, es
. Si la etiqueta de idioma seleccionada no tiene recursos de idioma, devuelva los recursos de idioma de la etiqueta es
.
Gramática
Ejemplo
GetBlock
Devolver información relacionada con un bloque especificado.
Gramática
blockID
Identificador de bloque.
Valor de retorno
Devuelve una matriz de objetos:
id
Identificador de bloque.
time
Marca de tiempo de generación de bloque.
key_id
Generar la dirección de la cuenta del nodo de validación que creó este bloque.
Ejemplo
DBInsert
Agregar una entrada a una tabla de datos específica y devolver el ID de la entrada.
Gramática
tblname
Nombre de la tabla de datos.
params
Array de objetos, donde la clave es el nombre del campo y el valor es el valor a insertar.
Ejemplo
DBUpdate
Cambiar el valor de la columna de una entrada especificada por ID en una tabla de datos especificada. Si el ID de entrada no existe en la tabla, devolver un error.
Gramática
tblname
Nombre de la tabla de datos.
id
ID de entrada.
params
Array de objetos, donde la clave es el nombre del campo y el valor es el nuevo valor a cambiar.
Ejemplo
DBUpdateExt
Modificar los valores de las columnas que coinciden con la condición de búsqueda en una tabla de datos específica.
Gramática
Para obtener información más detallada, consulte DBFind.
Ejemplo
DelColumn
Eliminar un campo específico de una tabla. La tabla debe estar vacía.
Gramática
DelTable
Eliminar la tabla de datos especificada. La tabla debe estar vacía.
Gramática
Ejemplo
Append
Inserte cualquier tipo de val en el arreglo src.
Gramática
Ejemplo
Join
Unir los elementos del arreglo in en una cadena con el separador sep especificado.
Gramática
in
Nombre del arreglo.
sep
Separador.
Ejemplo
Split
Divide la cadena in en elementos utilizando el separador sep y colócalos en un arreglo.
Gramática
in
Cadena de caracteres.
sep
Separador.
Ejemplo
Len
Devuelve el número de elementos en un arreglo especificado.
Gramática
Ejemplo
Row
El parámetro lista no debe ser especificado en este caso.
Devolver el primer objeto de la matriz en la lista de matrices. Si la lista está vacía, devolver un resultado vacío. Esta función se utiliza principalmente en conjunto con la función DBFind y no se pueden especificar parámetros al usarla.
Gramática
Ejemplo
One
Devolver el valor del campo del primer objeto de la matriz en la lista de matrices. Si la matriz de la lista está vacía, devolver nil. Esta función se utiliza principalmente con la función DBFind y no se puede especificar con parámetros cuando se utiliza.
Gramática
list
- Array de objetos devuelto por la función DBFind.
column
Ejemplo
GetMapKeys
Retorna un array de claves de un array de objetos.
Gramática
Ejemplo
SortedKeys
Devuelve un array de claves de un array de objetos, ordenado en orden ascendente.
Gramática
Ejemplo
CallContract
Llame al contrato inteligente con el nombre especificado. Todos los parámetros de la sección de datos del contrato inteligente deben incluirse en una matriz de objetos. Esta función devuelve el valor asignado al variable $result del contrato inteligente especificado.
Gramática
Ejemplo
ContractAccess
Verifique si el nombre de ejecución del contrato inteligente coincide con uno de los nombres enumerados en los parámetros. Se utiliza comúnmente para controlar el acceso del contrato inteligente a las tablas de datos. Especifique esta función en el campo de permisos al editar los campos de la tabla de datos o al insertar y agregar nuevos campos en la sección de permisos de la tabla.
Gramática
Ejemplo
ContractConditions
Llame a la sección de condiciones conditions de un contrato inteligente con el nombre especificado.
Para este tipo de contrato inteligente, la sección de datos debe estar vacía. Si la sección de condiciones se ejecuta sin errores, se devuelve true. Si se genera un error durante la ejecución, el contrato inteligente padre también terminará con este error.
Esta función se utiliza normalmente para controlar el acceso del contrato inteligente a las tablas y se puede llamar en el campo de permisos al editar las tablas del sistema.
Gramática
Ejemplo
EvalCondition
Obtener el valor del campo condfield de los registros con el campo 'name' de la tabla tablename, y verificar la condición del valor del campo condfield.
Gramática
tablename
Nombre de la tabla de datos.
name
Buscar valores según el campo 'name'.
condfield
Nombre del campo que requiere verificación de condiciones.
Ejemplo
GetContractById
La función devuelve el nombre del contrato inteligente por su ID de contrato inteligente. Si no se puede encontrar el contrato inteligente, se devuelve una cadena vacía.
Gramática
Ejemplo
GetContractByName
La función devuelve el ID del contrato inteligente por su nombre. Si no se puede encontrar el contrato inteligente, devuelve cero.
Gramática
Ejemplo
RoleAccess
Verificar si el ID de rol del llamador del contrato inteligente coincide con uno de los IDs especificados en los parámetros.
Se puede utilizar esta función para controlar el acceso a tablas de datos y otros datos en el contrato inteligente.
Gramática
Ejemplo
TransactionInfo
Buscar transacciones según el valor hash especificado y devolver información sobre los contratos inteligentes ejecutados y sus parámetros.
Gramática
Valor de retorno
Esta función devuelve una cadena en formato JSON:
contract
Nombre del contrato inteligente.
params
Datos que se pasan como parámetros a un contrato inteligente.
block
ID de bloque que procesó la transacción.
Ejemplo
Throw
Crear un error del tipo excepción.
Gramática
ErrorId
Error de identificador.
ErrDescription
Descripción incorrecta.
Valor de retorno
El formato de los resultados para este tipo de transacción:
Ejemplo
ValidateCondition
Intentando compilar la condición especificada en el parámetro condition. Si ocurre algún error durante el proceso de compilación, se generará un error y se detendrá la llamada al contrato inteligente. Esta función tiene como objetivo verificar la corrección del formato de la condición.
Gramática
condition
Condiciones de formato que necesitan ser verificadas.
state
ID del ecosistema. Si se están verificando las condiciones globales, por favor especifique como 0.
Ejemplo
AddressToId
Devuelve la dirección de la cuenta correspondiente según la dirección de la billetera proporcionada. Si se especifica una dirección no válida, devuelve '0'.
Gramática
Ejemplo
IdToAddress
De acuerdo con la dirección de la cuenta, devuelve la dirección de la billetera correspondiente. Si se especifica una dirección no válida, devuelve la dirección no válida 'inválida'.
Gramática
Ejemplo
PubToID
Devuelve la dirección de la cuenta a través del formato de codificación hexadecimal de la clave pública.
Gramática
Ejemplo
DecodeBase64
Devuelve una cadena especificando el formato de codificación base64.
Gramática
Ejemplo
EncodeBase64
Devuelve una Cadena de caracteres en formato base64 al especificar una cadena de entrada.
Gramática
Ejemplo
Float
Convertir un entero o una cadena a un número decimal.
Gramática
Ejemplo
HexToBytes
Convertir una cadena en formato de codificación hexadecimal a tipo de bytes bytes.
Gramática
Ejemplo
Returna el valor de cadena de exp / 10 ^ digit.
Gramática
exp
Formato de cadena de números.
digit
La expresión exp/10^digit
tiene un exponente de 10, que puede ser positivo o negativo. Un valor positivo determina la cantidad de decimales después del punto decimal.
Ejemplo
Random
Retorna un número aleatorio entre min y max (min <= resultado < max). Tanto min como max deben ser números positivos.
Gramática
Ejemplo
Int
Convertir un valor de cadena a un entero.
Gramática
Ejemplo
Hash
Devolver el hash de una matriz de bytes o cadena especificada, generado por la biblioteca de cifrado del sistema "crypto".
Gramática
Ejemplo
Sha256
Retorna el valor hash SHA256 de una cadena especificada.
Gramática
Ejemplo
Str
Convertir un entero int o un número decimal float a una cadena de caracteres.
Gramática
val
Número entero o decimal.
Ejemplo
JSONEncode
Convertir números, cadenas o matrices a una cadena de formato JSON.
Gramática
src
Los datos a convertir.
Ejemplo
JSONEncodeIndent
Utilice la indentación especificada para convertir números, cadenas o matrices en una cadena con formato JSON.
Gramática
Ejemplo
JSONDecode
Convertir una cadena en formato JSON a un número, una cadena o un arreglo.
Gramática
Ejemplo
HasPrefix
Comprueba si una cadena comienza con una cadena especificada.
Gramática
s
Cadena de caracteres.
prefix
Prefijo a verificar.
Valor de retorno
Si una cadena comienza con una cadena especificada, devuelve true
.
Ejemplo
Contains
Comprueba si una cadena contiene una subcadena especificada.
Gramática
s
Cadena de caracteres.
substr
Subcadena.
Valor de retorno
Si una cadena contiene una subcadena, devuelve true
.
Ejemplo
Replace
Reemplaza la cadena "old" (cadena antigua) por "new" (cadena nueva).
Gramática
Ejemplo
Size
Devuelve el número de bytes en la cadena especificada.
Gramática
val
Cadena de caracteres.
Ejemplo
Sprintf
Esta función crea una cadena de acuerdo con una plantilla y parámetros especificados.
Los comodines disponibles son:
%d
(entero) %s
(cadena de caracteres) %f
(número de punto flotante) %v
(cualquier tipo)
Gramática
pattern
Plantilla de cadena.
Ejemplo
Substr
Devuelve una subcadena obtenida de la cadena especificada, comenzando desde el desplazamiento offset (que por defecto comienza en 0) y con una longitud máxima limitada por length.
Si el desplazamiento o la longitud son menores que cero, o si el desplazamiento es mayor que el valor de la longitud limitada, se devuelve una cadena vacía.
Si la suma del desplazamiento y la longitud limitada es mayor que el número de bytes de la cadena, la subcadena se devolverá desde el desplazamiento hasta el final de la cadena especificada.
Gramática
Ejemplo
ToLower
Devuelve la cadena especificada en minúsculas.
Gramática
val
Cadena de caracteres.
Ejemplo
ToUpper
Devuelve la cadena especificada en mayúsculas.
Gramática
val
Cadena de caracteres.
Ejemplo
TrimSpace
Elimina espacios, tabulaciones y saltos de línea iniciales y finales de la cadena especificada.
Gramática
val
Cadena de caracteres.
Ejemplo
Floor
Devuelve el valor entero más grande menor o igual que el número, el flotante y la cadena especificados.
Gramática
Ejemplo
Log
Devuelve el logaritmo natural del número, float y cadena especificados.
Gramática
Ejemplo
Log10
Devuelve el logaritmo en base 10 del número, float y cadena especificados.
Gramática
Ejemplo
Pow
Devuelve (x^y^), donde y es el exponente en base x.
Gramática
Ejemplo
Round
Devuelve el valor del número especificado redondeado al entero más cercano.
Gramática
Ejemplo
Sqrt
Devuelve la raíz cuadrada del número especificado.
Ejemplo
StringToBytes
Convierte una cadena en bytes.
Gramática
src
Cadena de caracteres.
Ejemplo
BytesToString
Convierte bytes a cadena.
Gramática
Ejemplo
SysParamString
Devuelve el valor del parámetro de plataforma especificado.
Gramática
name
Nombre del parámetro.
Ejemplo
SysParamInt
Devuelve el valor del parámetro de plataforma especificado como un número.
Gramática
name
Nombre del parámetro.
Ejemplo
DBUpdateSysParam
Actualizar valores y condiciones para los parámetros de la plataforma. Si no desea cambiar el valor o la condición, especifique una cadena vacía en el parámetro correspondiente.
Gramática
name
Nombre del parámetro de la plataforma.
value
Nuevo valor de los parámetros.
conditions
Nuevas condiciones para cambiar los parámetros.
Ejemplo
UpdateNotifications
Obtener la lista de notificaciones de una clave específica de la base de datos y enviar las notificaciones obtenidas a Centrifugo.
Gramática
Ejemplo
UpdateRolesNotifications
Obtener la lista de notificaciones de todas las direcciones de cuenta para el ID de rol especificado en la base de datos y enviar las notificaciones obtenidas a Centrifugo.
Gramática
Ejemplo
HTTPRequest
Envía una solicitud HTTP a la dirección especificada.
Gramática
url
Dirección de solicitud enviada.
method
Tipo de solicitud (GET o POST).
heads
Solicitud de encabezado, Objeto de matriz.
pars
Parámetros de solicitud.
Ejemplo
HTTPPostJSON
La función es similar a la función HTTPRequest, pero envía una solicitud POST con una cadena como parámetro de solicitud.
Gramática
url
Dirección de solicitud enviada.
heads
Encabezado, matriz de objetos.
pars
Parámetro de solicitud, JSON string.
Ejemplo
BlockTime
Devuelve el tiempo de generación del bloque en formato SQL.
Gramática
Ejemplo
DateTime
Convertir el timestamp unixtime a una cadena con formato [YYYY-MM-DD HH:MI:SS].
Gramática
Ejemplo
UnixDateTime
Convertir una cadena en formato [YYYY-MM-DD HH:MI:SS] a una marca de tiempo Unix.
Gramática
Ejemplo
CreateOBS
Create a sub-CLB.
Esta función solo puede ser utilizada en el modo CLB principal.
Gramática
OBSName
El nombre de CLB.
DBUser
El nombre del rol de la base de datos.
DBPassword
La contraseña de ese rol.
OBSAPIPort
El puerto de solicitud de API.
Ejemplo
GetOBSList
Devolver una lista de sub-CLBs.
Esta función solo se puede utilizar en modo CLB maestro.
Gramática
Valor de retorno
Una matriz de objetos donde la clave es el nombre CLB y el valor es el estado del proceso.
RunOBS
Ejecutar el proceso de CLB.
Esta función solo se puede utilizar en modo CLB maestro.
Gramática
StopOBS
Detenga el proceso del CLB especificado.
Esta función solo se puede utilizar en modo CLB maestro.
Gramática
RemoveOBS
Eliminar el proceso de un CLB específico.
Esta función solo se puede utilizar en modo CLB maestro.
Gramática
System Contracts
El contrato inteligente del sistema se crea automáticamente al iniciar la plataforma de blockchain IBAX. Todos estos contratos inteligentes se crean en el primer ecosistema, por lo que es necesario especificar su nombre completo para llamarlos desde otros ecosistemas, por ejemplo, @1NewContract
.
NewEcosystem
Para crear un nuevo ecosistema, debes hacer referencia al campo result devuelto en txstatus para obtener el ID del ecosistema creado.
Parámetros:
- Name string - El nombre del ecosistema, que puede ser cambiado.
EditEcosystemName
Cambiar el nombre del ecosistema en la tabla 1_ecosystems, que solo existe en el primer ecosistema.
Parámetros:
- EcosystemID int - ID del ecosistema al que se le cambiará el nombre;
- NewName string - Nuevo nombre del ecosistema.
NewContract
Crear un nuevo contrato inteligente en el sistema ecológico actual.
Parámetros:
- ApplicationId int - La aplicación a la que pertenece el nuevo contrato inteligente;
- Value string - El código fuente del contrato inteligente, debe haber solo un contrato inteligente en la capa superior;
- Conditions string - Las condiciones para cambiar este contrato inteligente;
- TokenEcosystem int "opcional" - El ID del ecosistema, qué token se utilizará para las transacciones cuando se active el contrato inteligente.
EditContract
Editar el contrato inteligente en el ecosistema actual.
Parámetros:
- Id int - ID del contrato inteligente a cambiar;
- Value string "optional" - Código fuente del contrato inteligente;
- Conditions string "optional" - Condiciones para cambiar este contrato inteligente.
BindWallet
Vincular el contrato inteligente a la dirección de la billetera actual en el ecosistema. Después de vincular el contrato, esta dirección pagará los costos de ejecución del contrato inteligente.
Parámetros:
- Id int - ID del contrato inteligente que se va a vincular.
- WalletId string "optional" - Dirección de la billetera a la que se vinculará el contrato inteligente.
UnbindWallet
Desvincular la dirección de la billetera del contrato inteligente del sistema actual, solo las direcciones que hayan vinculado ese contrato inteligente podrán desvincularlo. Después de que el contrato inteligente se desvincule, el usuario que lo ejecute pagará la tarifa de ejecución.
Parámetros:
- Id int - ID del contrato inteligente vinculado.
Nuevo parámetro
Se agregó un nuevo parámetro del sistema al sistema actual.
Parámetros:
- Name string - Nombre del parámetro;
- Value string - Valor del parámetro;
- Conditions string - Condiciones para cambiar el parámetro.
EditParameter
Modificar los parámetros del sistema ecológico existente en el sistema actual.
Parámetros:
- Name string - Nombre del parámetro a cambiar;
- Value string - Nuevo valor del parámetro;
- Conditions string - Nuevas condiciones para cambiar el parámetro.
Agregar un nuevo menú al sistema ecológico actual.
Parámetros:
- Name string - Nombre del menú;
- Value string - Código fuente del menú;
- Title string "optional" - Título del menú;
- Conditions string - Condiciones para cambiar el menú.
Cambiar el menú existente en el sistema ecológico actual.
Parámetros:
- Id int - ID del menú que se desea cambiar;
- Value string "optional" - Nuevo código fuente del menú;
- Title string "optional" - Nuevo título del menú;
- Conditions string "optional" - Nuevas condiciones para cambiar el menú.
Agregar el contenido del código fuente al menú existente en el sistema ecológico actual.
Parámetros:
- Id int - ID del menú;
- Value string - Código fuente a agregar.
NewPage
Agregar una nueva página al ecosistema actual.
Parámetros:
- Name string - Nombre de la página;
- Value string - Código fuente de la página;
- Menu string - Nombre del menú asociado con la página;
- Conditions string - Condiciones para cambiar la página;
- ValidateCount int "optional" - Número de nodos requeridos para la validación de la página. Si este parámetro no se especifica, se utiliza el valor del parámetro de ecosistema min_page_validate_count. Este valor no puede ser menor que min_page_validate_count y mayor que max_page_validate_count;
- ValidateMode int "optional" - Modo de verificación de validez de la página. Un valor de 0 significa verificar la página cuando se carga. Un valor de 1 significa verificar la página cuando se carga y cuando se sale.
EditPage
Modificar la página existente en el sistema actual.
Parámetros:
- Id int - ID de la página que se desea modificar;
- Value string "optional" - Nuevo código fuente de la página;
- Menu string "optional" - Nuevo nombre del menú asociado a la página;
- Conditions string "optional" - Nuevas condiciones para modificar la página;
- ValidateCount int "optional" - Número de nodos necesarios para validar la página. Si este parámetro no se especifica, se utiliza el valor del parámetro del sistema min_page_validate_count. Este valor no puede ser menor que min_page_validate_count y mayor que max_page_validate_count;
- ValidateMode int "optional" - Modo de validación de la página. El valor 0 indica que se debe validar la página al cargarla. El valor 1 indica que se debe validar la página al cargarla y al salir de ella.
AppendPage
Agregar el contenido del código fuente a la página existente en el sistema ecológico actual.
Parámetros:
- Id int - ID de la página que se desea modificar;
- Value string - Código fuente que se desea agregar.
NewBlock
Agregar un módulo de página al sistema ecológico actual.
Parámetros:
- Name string - Nombre del módulo;
- Value string - Código fuente del módulo;
- Conditions string - Condiciones para cambiar el módulo.
EditBlock
Cambiar el módulo de página existente en el ecosistema actual.
Parámetros
- Id int - ID del módulo que se desea cambiar;
- Value string - Nuevo código fuente del módulo;
- Conditions string - Nuevas condiciones para cambiar el módulo.
NewTable
Agregar una nueva tabla de datos al ecosistema actual.
Parámetros:
ApplicationId int - ID de la aplicación asociada a la tabla de datos;
Name string - Nombre de la nueva tabla de datos;
Columns string - Matriz de campos en formato JSON [{"name":"...", "type":"...","index": "0", "conditions":"..."},...]
, donde:
- name - Nombre del campo, solo caracteres latinos;
- type - Tipo de datos
varchar,bytea,number,datetime,money,text,double,character
; - index - Campo no clave
0
, clave principal 1
; - conditions - Condiciones para cambiar los datos del campo, deben especificarse los permisos de acceso en formato JSON
{"update":"ContractConditions(`MainCondition`)", "read":"ContractConditions(`MainCondition`)"}
;
Permissions string - Permisos de acceso en formato JSON {"insert": "...", "new_column": "...", "update": "...", "read": "..."}
.
- insert - Permiso para insertar entradas;
- new_column - Permiso para agregar nuevas columnas;
- update - Permiso para cambiar los datos de las entradas;
- read - Permiso para leer los datos de las entradas.
EditTable
Cambiar los permisos de acceso a la tabla de datos en el ecosistema actual.
Parámetros:
- Name string - Nombre de la tabla de datos.
- InsertPerm string - Permiso para insertar entradas en la tabla de datos;
- UpdatePerm string - Permiso para actualizar entradas en la tabla;
- ReadPerm string - Permiso para leer entradas en la tabla;
- NewColumnPerm string - Permiso para crear nuevas columnas en la tabla;
NewColumn
Agregar un nuevo campo a la tabla de datos del ecosistema actual.
Parámetros:
- TableName string - Nombre de la tabla de datos;
- Name string - Nombre del campo de caracteres latinos;
- Type string - Tipo de datos;
varchar,bytea,number,money,datetime,text,double,character
; - UpdatePerm string - Permiso para cambiar el valor en la columna;
- ReadPerm string - Permiso para leer el valor en la columna.
EditColumn
Cambiar los permisos de campo especificados en una tabla de datos en el ecosistema actual.
Parámetros:
- TableName string - Nombre de la tabla de datos;
- Name string - Nombre del campo de caracteres latinos que se desea cambiar;
- UpdatePerm string - Nuevo permiso para cambiar los valores en la columna;
- ReadPerm string - Nuevo permiso para leer los valores en la columna.
NewLang
Agregar recursos multilingües al ecosistema actual, agregando permisos en el parámetro changing_language de los parámetros del sistema.
Parámetros:
- Name string - El nombre de los recursos multilingües en caracteres latinos;
- Trans string - Una cadena en formato JSON, donde el código de idioma de dos caracteres se utiliza como clave y la cadena de traducción se utiliza como valor. Por ejemplo:
{"en": "English text", "es": "texto en español"}
.
EditLang
Cambiar los recursos de idioma en el sistema ecológico actual. Los permisos de cambio se establecen en el parámetro changing_language de los parámetros del sistema ecológico.
Parámetros:
- Id int - ID de recursos de idioma múltiple.
- Trans - Cadena de formato JSON, con códigos de idioma de dos caracteres como clave y cadenas de traducción como valor. Por ejemplo,
{"en": "English text", "es": "texto en español"
。
Import
Importe la aplicación al ecosistema actual. Importe los datos cargados desde el contrato inteligente ImportUpload.
Parámetros:
- Data string - Los datos importados en formato de contenido de texto, que provienen de un archivo exportado del ecosistema.
ImportUpload
Cargar el archivo de la aplicación externa en la tabla buffer_data del sistema ecológico actual para su posterior importación.
Parámetros:
- InputFile file - Archivo que se escribirá en la tabla buffer_data del sistema ecológico actual.
NewAppParam
El ecosistema actual del sistema ha añadido nuevos parámetros de aplicación.
Parámetros:
- ApplicationId int - ID de la aplicación;
- Name string - Nombre del parámetro;
- Value string - Valor del parámetro;
- Conditions string - Permiso para cambiar el parámetro.
EditAppParam
Cambiar los parámetros de la aplicación existente en el ecosistema actual.
Parámetros:
- Id int - ID de parámetro de la aplicación;
- Value string "optional" - Nuevo valor del parámetro;
- Conditions string "optional" - Nuevos permisos para cambiar el parámetro.
NewDelayedContract
Agregar una nueva tarea al proceso de vigilancia del contrato inteligente de programación diferida.
El proceso de vigilancia del contrato inteligente de programación diferida ejecuta el contrato inteligente necesario para generar el bloque actual.
Parámetros:
- Contract string - Nombre del contrato inteligente;
- EveryBlock int - El contrato inteligente se ejecutará después de un número especificado de bloques;
- Conditions string - Permiso para cambiar la tarea;
- BlockID int "optional" - El ID del bloque en el que se iniciará el contrato inteligente. Si no se especifica, se calculará automáticamente como "ID del bloque actual" + EveryBlock;
- Limit int "optional" - El número de veces que se iniciará la tarea. Si no se especifica, la tarea de inicio del contrato inteligente se ejecutará infinitamente.
EditDelayedContract
Modificar la tarea en el proceso de vigilancia del contrato inteligente de programación de retraso.
Parámetros:
- Id int - ID de la tarea.
- Contract string - Nombre del contrato inteligente.
- EveryBlock int - El contrato inteligente se ejecutará después de un número de bloques especificado;
- Conditions string - Permiso para cambiar la tarea;
- BlockID int "optional" - El ID del bloque en el que se iniciará el contrato inteligente. Si no se especifica, se calculará automáticamente "ID del bloque actual" + EveryBlock;
- Limit int "optional" - El número de veces que se iniciará la tarea. Si no se especifica, la tarea de inicio del contrato inteligente se ejecutará un número ilimitado de veces.
- Deleted int "optional" - Cambio de tarea. El valor de
1
desactivará la tarea. El valor de 0
habilitará la tarea.
UploadBinary
En la tabla X_binaries, se agrega o sobrescribe un archivo estático. Al llamar al contrato inteligente a través de la API HTTP, el formato de solicitud debe usar multipart/form-data
; el parámetro DataMimeType se utilizará junto con los datos del formulario.
Parámetros:
- Name string - Nombre del archivo estático;
- Data bytes - Contenido del archivo estático;
- DataMimeType string "optional" - mime-type del formato del archivo estático;
- ApplicationId int - Identificación de la aplicación asociada a la tabla X_binaries.
Si no se pasa el parámetro DataMimeType, se utilizará el formato application/octet-stream
por defecto.