Transacción#

Emisión de Transacción#

Cómo Firmar y Enviar Transacciones#

  • En Decentral.Exchange puede crear algunos tipos de transacciones como transferencia, emisión/reemisión/quemado, patrocinio de tarifas, asignar scripts, crear alias.

  • A través de Node REST API:

    • El método POST /transactions/broadcast envía una transacción firmada a un nodo;

    • El método POST /transactions/sign genera la firma de la transacción (pero este método solo está disponible para el propietario del nodo).

Remitente de Transacción y Firma#

Cada transacción contiene la llave pública de la cuenta del remitente, en cuyo nombre se realiza la acción en la cadena de bloques. Las cuentas inteligentes y dApps pueden establecer sus propias reglas para la verificación de transacciones salientes.

Las transacciones que se envían desde una cuenta ordinaria (sin script) deben contener la firma digital del remitente. El remitente genera una firma utilizando la clave privada de la cuenta. Junto con la firma, la transacción contiene la clave pública del remitente, por lo que el nodo (y cualquiera) puede verificar la integridad de los datos de la transacción y la autenticidad de la firma, es decir, asegurarse de que la firma de la transacción coincida con la clave pública. .

Después de Enviar la Transacción#

Al recibir una transacción, el nodo valida su firma, verifica el saldo del remitente, etc. Consulte el artículo validación de transacciones para obtener más detalles. Si la transacción es válida, el nodo coloca la transacción en el grupo UTX, que es una lista de transacciones que esperan agregarse, y también transmite la transacción a otros nodos de la red blockchain.

Debido a la limitación del tamaño del bloque (\(1\) MB), es posible que la transacción no llegue al bloque de inmediato. En primer lugar, los nodos agregan las transacciones más «rentables» con la tarifa más alta por byte. Después de agregarse a un bloque, la transacción cambia el estado de la cadena de bloques: saldos de cuenta, registros en el almacenamiento de datos de la cuenta, etc. Es posible que la transacción nunca se agregue a un bloque si deja de ser válida mientras espera en el grupo UTX. Por ejemplo, la transacción ha caducado (la marca de tiempo tiene más de \(2\) horas de atraso con respecto a la hora actual) u otra transacción ha cambiado el estado de la cadena de bloques y ahora el saldo del remitente es insuficiente para ejecutar la transacción o la secuencia de comandos de la cuenta o del activo niega la transacción.

Pruebas de Transacciones#

Verificación por Script#

Si el remitente de la transacción es una dApp o cuenta inteligente, la transacción se verifica mediante el script asignado a la cuenta en lugar de la verificación de la firma. El script permite o deniega la transacción dependiendo de si cumple las condiciones especificadas. En particular, el script puede ejecutar varias verificaciones de las pruebas.

Un ejemplo común es una cuenta inteligente con una firma múltiple donde tres usuarios copropietarios almacenan fondos compartidos.

Tarifas de Transacción#

La tarifa de transacción es una tarifa que el propietario de una cuenta paga para enviar una transacción. El remitente de una transacción puede especificar cualquier cantidad de tarifa, pero no menos de la cantidad mínima. Cuanto mayor sea la tarifa, más rápido se agregará la transacción al nuevo blocque. Para las transacciones para invocar scripts y transferencia masiva, un remitente puede especificar una tarifa de transacción nominada en un activo patrocinado en lugar de DecentralCoins, consulte la sección tarifa en activo patrocinado a continuación.

Tarifas Regulares#

Tarifa Mínima#

Las tarifas mínimas en DecentralCoins para cada tipo de transacción se enumeran a continuación.

:stong:`Ejemplo 1`

  • La tarifa mínima de una transacción para transferencia:

  • Sin cuenta inteligente ni activos inteligentes: \(0.001\) DecentralCoins.

  • Transferencia desde cuenta inteligente*: \(0.001 + 0.004 = 0.005\) DecentralCoins.

  • Transferencia de activo inteligente: \(0.001 + 0.004 = 0.005\) DecentralCoins.

  • Transferencia de activo inteligente enviado desde cuenta inteligente*: \(0.001 + 0.004 + 0.004 = 0.009\) DecentralCoins.

Si la complejidad del script de la cuenta es superior al umbral de complejidad del remitente.

Ejemplo 2

La tarifa mínima de una Transacción para Invocar Scripts:

  • Sin cuenta inteligente, sin activos emitidos: \(0.005\) DecentralCoins.

  • La invocación del script de una dApp se envía desde una cuenta inteligente*: \(0.005 + 0.004 = 0.009\) DecentralCoins.

  • La invocación del script de una dApp emite un activo que no es tokens no fungibles: \(0.005 + 1 = 1.005\) DecentralCoins.

  • La invocación del script dApp se envía desde la cuenta inteligente* y se emiten \(10\) activos que no son tokens no fungibles: \(0.005 + 0.004 + 10 × 1 = 10.009\) DecentralCoins.

Si la complejidad del script de la cuenta es superior al umbral de complejidad del remitente.

Tarifas Mínimas#

Tipo de transacción

ID del tipo de transacción

Tarifa mínima de transacción en DecentralCoins

Transacción para quemado

\(6\)

\(0.001\)

Transacción para crear alias

\(10\)

\(0.001\)

Transacción para Datos

\(12\)

\(0.001\) por kilobyte. El tamaño se redondea a un número entero de kilobytes.

Transacción para intercambio

\(7\)

\(0.003\)

Transacción para invocar scripts

\(16\)

\(0.005 + K\). \(K\) es la cantidad de activos emitidos como resultado de la invocación del script de la dApp que no son tokens no fungibles.

Transacción para emisión

\(3\)

\(1\) para token regular. \(0.001\) para token no fungible.

Transacción para cancelar arrendamiento

\(9\)

\(0.001\)

Transacción para arrendamiento

\(8\)

\(0.001\)

Transacción para transferencia masiva

\(11\)

\(0.001 + 0.0005 × N\). \(N\) es el número de transferencias dentro de la transacción. El valor se redondea a los tres decimales.

Transacción para reemisión

\(5\)

\(0.001\)

Transacción para asignar scripts de activos

\(15\)

\(1\)

Transacción para Asignar Scripts

\(13\)

\(0.01\)

Transacción para patrocinar tarifas

\(14\)

\(0.001\)

Transacción para transferencia

\(4\)

\(0.001\)

Transacción para actualizar información de activos

\(17\)

\(0.001\)

Tarifa por Transacciones Fallidas#

Transacciones para invocar scripts y transacciones para intercambio se pueden guardar en la cadena de bloques incluso si el resultado de un script de dApp o un script de activos la ejecución falló. En este caso, al remitente se le cobra una tarifa. Para una transacción de intercambio, al emparejador se le cobra la tarifa por transacción, pero a los remitentes de pedidos no se les cobra la tarifa del emparejador. Más sobre la validación de transacciones.

Tarifa en Activo Patrocinado#

Un emisor de un activo puede configurar el patrocinio, de modo que cualquier usuario pueda especificar una tarifa de transacción en este activo para transacciones para invocar scripts y transacciones para transferencia. Para activar el patrocinio, el emisor coloca una transacción para patrocinar tarifas que especifica una cantidad de activo que es equivalente a la tarifa mínima de \(0.001\) DecentralCoins. Por ejemplo, si minSponsoredAssetFee: \(5\), entonces la tarifa en este activo para una transacción de script de invocación es igual a \(5 * \frac{0.005}{0.001} = 25\).

Representaciones de Transacciones#

Representación JSON#

La Node REST API de los nodos DecentralChain usa la representación JSON de transacciones. Puede enviar transacciones a un nodo y leer transacciones almacenadas en la cadena de bloques a través de la API REST en JSON. Aquí hay un ejemplo de representación JSON:

{
  "senderPublicKey": "BVv1ZuE3gKFa6krwWJQwEmrLYUESuUabNCXgYTmCoBt6",
  "sender": "3N8S4UtauvDAzpLiaRyDdHn9muexWHhBP4D",
  "feeAssetId": null,
  "proofs": [
    "22QJfRKX7kUQt4qjdnUqZAnhqukqhnofE27uvP8Q5xnBf8M6PCNtWVGq2ngm6m7Voe7duys59D1yU9jhKrmdXDCe"
  ],
  "fee": 100000,
  "alias": "91f452553298770f",
  "id": "AD7KmXwoVNc2fXsmaxsHsrnT1tfPF3HsWYtfjFijVsvM",
  "type": 10,
  "version": 2,
  "timestamp": 1548443069053,
  "height": 466104
}
Representación JSON#

Campo

Descripción

senderPublicKey

Llave pública del remitente de la transacción: matriz de bytes codificada en base58.

sender

Address del remitente de la transacción: matriz de bytes codificados en base58.

feeAssetId

ID del token de tarifa. null significa que la tarifa está en DecentralCoins. El remitente puede especificar la tarifa para transacciones para invocar scripts y transacciones para transferencia en un activo patrocinado, consulte el artículo sobre tarifas patrocinadas para obtener más detalles.

proofs

Matriz de pruebas de transacción. Hasta \(8\) pruebas, cada prueba hasta \(64\) bytes codificados en base58.

fee

Tarifa de transacción: un valor entero indicado en la fracción mínima («centavo») del activo de la tarifa. Por ejemplo, si la tarifa es \(0.001\) DecentralCoins, \(100000\) se indica en la representación JSON, hasta \(1\) DecentralCoin = \(10^{8}\) Decentralites .

id

ID de transacción. Para conocer el método de cálculo del ID de transacción, consulte el artículo detalles prácticos criptográficos.

type

Tipo de transacción. Los ID de tipo se enumeran en el artículo tipos de transacción.

version

Versión de transacción. Las versiones para cada tipo de transacción se enumeran en las descripciones del formato binario de transacción.

applicationStatus

Estado de ejecución de la transacción: 1) exitosa: la transacción es exitosa. 2) script_execution_failed: el script de dApp o el script de activos falló. Consulte el artículo transaction validation para obtener más detalles.

timestamp

Marca de tiempo de la transacción especificada por el remitente: tiempo Unix en milisegundos. La transacción no se puede agregar a la cadena de bloques si el valor de la marca de tiempo tiene más de \(2\) horas de atraso o \(1.5\) horas antes de la marca de tiempo del bloque actual.

height

El número de secuencia del bloque que contiene la transacción.

No es necesario completar los campos de remitente, ID, aplicationStatus y altura al enviar una transacción, y no se almacenan en la cadena de bloques. El nodo calcula estos campos cuando proporciona datos de transacciones a través de la API REST del nodo. Los campos que dependen del tipo de transacción se enumeran en la descripción de cada tipo de transacción.

Formato Binario#

Las transacciones se almacenan en la cadena de bloques en formato binario (representación de bytes). Las extensiones de nodo como servidor gRPC pueden trabajar directamente con datos en formato binario. La firma de la transacción y la identificación también se forman sobre la base del formato binario. La guía para generar una firma y una identificación se proporciona en el artículo detalles prácticos criptográficos. El formato binario de transacción se describe en el artículo formato binario de transacción.

Puedes obtener la transacción por ID, o la lista de transacciones por determinada dirección de cuenta, o la lista de todas las transacciones en el bloque:

  • En DecentralChain Explorer.

  • A través de Node REST API usando los siguientes métodos:

    • GET /transactions/info/{id} devuelve datos de transacción por ID de transacción.

    • GET /transactions/address/{address}/limit/{limit} devuelve la lista de transacciones en las que está involucrada la dirección especificada.

    • GET /blocks/at/{height} devuelve los datos del bloque a la altura especificada, incluidas todas las transacciones del bloque.

Tipos de Transacciones#

Tokenización#

Tokenización#

ID del tipo de transacción

Nombre

Descripción

\(3\)

Transacción para emisión

Emite un token.

\(5\)

Transacción para reemisión

Reemite un token.

\(6\)

Transacción para quemado

Disminuye la cantidad de token.

\(15\)

Transacción para asignar scripts de activos

Modifica el script del activo.

\(17\)

Transacción para actualizar información de activos

Cambia el nombre y la descripción del token.

Transacción para Emisión#

La transacción para emisión crea un nuevo token.

Tarifa

La tarifa mínima para una transacción de emisión es \(1\) DecentralCoins, en caso de emisión de un token no fungible (NFT) \(0.001\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "2M25DqL2W4rGFLCFadgATboS8EPqyWAN3DjH12AH5Kdr",
  "quantity": 50000,
  "fee": 100000000,
  "description": "Script true.",
  "type": 3,
  "version": 2,
  "reissuable": true,
  "script": "base64:AQa3b8tH",
  "sender": "3Mz9N7YPfZPWGd4yYaX6H53Gcgrq6ifYiH7",
  "feeAssetId": null,
  "chainId": 84,
  "proofs": [
    "4yjVxzrLuXUq5y2QCa2LDn1Fp9P63hPBmqDLGQCqn41EB1uZ1pys79NP81h7FxRBnZSbpNGbz1xjwckHcPAQHmFX"
  ],
  "assetId": "7Xpp9PPeZbG4wboJrcbRQdq3SxCJqbeFRUjjKccM1DsD",
  "decimals": 2,
  "name": "Smart",
  "id": "7Xpp9PPeZbG4wboJrcbRQdq3SxCJqbeFRUjjKccM1DsD",
  "timestamp": 1548653407494,
  "height": 469677
}
Representación JSON de Transacción para Emisión#

Campo

Descripción

name

Nombre del token. Desde \(4\) hasta \(16\) bytes (el carácter \(1\) puede ocupar hasta \(4\) bytes).

description

Descripción del token. Desde \(0\) hasta \(1000\) bytes.

quantity

Cantidad de token: un valor entero especificado en la fracción mínima («centavos»), es decir, la cantidad real multiplicada por \(10^{decimales}\). De \(1\) a \(9,223,372,036,854,775,807\). \(1\) para NFT.

decimals

Número de decimales, desde \(0\) hasta \(8\). \(0\) para NFT.

reissuable

Indicador de disponibilidad de reemisión, consulte el artículo reemitir transacción. Falso para NFT.

script

Para un activo inteligente: el script de activo compilado, hasta :math:`8192 ` bytes, codificado en base64. Para el token sin script: nulo. El token emitido sin un script no se puede convertir en un activo inteligente.

chainId

ID de cadena

assetId

Token ID codificado base58. El ID del token es el mismo que el ID de la transacción para emisión.

No es necesario completar el campo assetId al enviar una transacción y no se almacena en la cadena de bloques. El nodo calcula estos campos cuando proporciona datos de transacciones a través de la API REST. Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para emisión.

Estructura Ride

The IssueTransaction structure is used for transaction handling in smart contracts.

Transacción para Reemisión#

La transacción de reemisión aumenta la cantidad del token en la cadena de bloques y/o prohíbe su reemisión. Solo el emisor del token puede enviar una transacción de reemisión. La cantidad adicional de token aumenta el saldo del remitente de la transacción. El campo reemisible del token determina si el token se puede volver a emitir.

Tarifa

La tarifa mínima para una transacción de reemisión es \(0.001\) DecentralCoins. Si el token es un activo inteligente, la tarifa mínima aumenta en \(0.004\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "DjYEAb3NsQiB6QdmVAzkwJh7iLgUs3yDLf7oFEeuZjfM",
  "quantity": 200000,
  "fee": 100000000,
  "type": 5,
  "version": 2,
  "reissuable": true,
  "sender": "3PLJciboJqgKsZWLj7k1VariHgre6uu4S2T",
  "feeAssetId": null,
  "chainId": 87,
  "proofs": [
    "5mEveeUwBdBqe8naNoV5eAe5vj6fk8U743eHGkhxhs3v9PMsb3agHqpe4EtzpUFdpASJegXyjrGSbynZg557cnSq"
  ],
  "assetId": "GA4gB3Lf3AQdF1vBCbqGMTeDrkUxY7L83xskRx6Z7kEH",
  "id": "27ETigYaHym2Zbdp4x1gnXnZPF1VJCqQpXmhszC35Qac",
  "timestamp": 1548521785933,
  "height": 1368623
}
Representación JSON de Transacción para Reemisión#

Campo

Descripción

assetId

Token ID codificado base58.

quantity

Cantidad de token a reemitir: un valor entero especificado en la fracción mínima («centavos») de token. La cantidad total de tokens como resultado de la reemisión no debe exceder \(9,223,372,036,854,775,807\).

chainId

ID de cadena

reissuable

Vuelva a emitir el indicador de disponibilidad.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para reemisión.

Estructura Ride

The ReissueTransaction structure is used for transaction handling in smart contracts.

Transacción para Quemado#

La transacción para quemado disminuye la cantidad de token en la cuenta del remitente y, por lo tanto, la cantidad total del token en la cadena de bloques. Cualquier cuenta que posea un token (no necesariamente el emisor del token) puede enviar la transacción para quemado. Los tokens quemados no se pueden restaurar a la cuenta.

Tarifa

La tarifa mínima en una transacción para quemado es \(0.001\) DecentralCoins, en caso de quemar un activo inteligente \(0.005\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "9GaQj7gktEiiS1TTTjGbVjU9bva3AbCiawZ11qFZenBX",
  "amount": 9999,
  "fee": 100000,
  "type": 6,
  "version": 2,
  "sender": "3P9QZNrHbyxXj8P9VrJZmVu2euodNtA11UW",
  "feeAssetId": null,
  "chainId": 87,
  "proofs": [
    "61jCivdv3KTuTY6QHgxt4jaGrXcszWg3vb9TmUR26xv7mjWWwjyqs7X5VDUs9c2ksndaPogmdunHDdjWCuG1GGhh"
  ],
  "assetId": "FVxhjrxZYTFCa9Bd4JYhRqXTjwKuhYbSAbD2DWhsGidQ",
  "id": "csr25XQHT1c965Fg7cY2vJ7XHYVsudPYrUbdaFqgaqL",
  "timestamp": 1548660675277,
  "height": 1370971
}
Representación JSON de Transacción para Quemado#

Campo

Descripción

amount

Cantidad de token para quemar: un valor entero especificado en la fracción mínima («centavos») de token.

assetId

Token ID codificado base58.

chainId

ID de cadena

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para quemado.

Estructura Ride

The BurnTransaction structure is used for transaction handling in smart contracts.

Transacción para Asignar Scripts de Activos#

La transacción para asignar scripts de activos reemplaza a script de activo. Solo el emisor del token puede enviar una transacción de script de activos. Si se emite un token sin un script, entonces no se le puede asignar ningún script. También es imposible eliminar el script y convertir el activo inteligente en uno normal.

Tarifa

La tarifa mínima en una transacción para asignar scripts de activos establecida es \(1\) DecentralCoin.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "AwQYJRHZNd9bvF7C13uwnPiLQfTzvDFJe7DTUXxzrGQS",
  "fee": 100000000,
  "type": 15,
  "version": 1,
  "script": "base64:AQa3b8tH",
  "sender": "3P67JUW8Djit7hMjKhADmn6CWvKPbRuh2sQ",
  "feeAssetId": null,
  "chainId": 87,
  "proofs": [
    "nzYhVKmRmd7BiFDDfrFVnY6Yo98xDGsKrBLWentF7ibe4P9cGWg4RtomHum2NEMBhuyZb5yjThcW7vsCLg7F8NQ"
  ],
  "assetId": "7qJUQFxniMQx45wk12UdZwknEW9cDgvfoHuAvwDNVjYv",
  "id": "FwYSpmVDbWQ2BA5NCBZ9z5GSjY39PSyfNZzBayDiMA88",
  "timestamp": 1547201038106,
  "height": 1346345
}
Representación JSON de Transacción para Asignar Scripts de Activos#

Campo

Descripción

assetId

Token ID codificado base58.

chainId

ID de cadena

script

Script de activos compilado, hasta \(8192\) bytes, codificado en base64.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para asignar scripts de activos.

Estructura Ride

The SetAssetScriptTransaction structure is used for transaction handling in smart contracts.

Transacción para Actualizar Información de Activos#

La transacción para actualizar información de activos modifica el nombre y la descripción del token.

Tarifa

La tarifa mínima en una transacción actualizar información de activos es \(0.001\) DecentralCoins, en caso de una activo inteligente \(0.005\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "6a6r9d3r2ccyE9SvuxmdZbfSHXmKPUoExnigvippJLfu",
  "fee": 100000,
  "description": "xxxXXXxxx",
  "type": 17,
  "version": 1,
  "applicationStatus": "succeeded",
  "sender": "3MQdH4MAmM5RNz5TAT43UXXCvMtCa9YgHq9",
  "feeAssetId": null,
  "chainId": 83,
  "proofs": [
    "4DfvJL4cVisQaMuMB7ar15EtYZTvTZzAUQQMkq4RA3uTMzziVYLrbNHSL2a1eCqBV3YQb7dddXdjywETXHuu65ij"
  ],
  "assetId": "syXBywr2HVY7wxqkaci1jKY73KMpoLh46cp1peJAZNJ",
  "name": "zzzz",
  "id": "4DL8K4bRvYb9Qrys9Auq7hSGuLGq8XsUYZqDDBBfVGMf",
  "timestamp": 1591886337668,
  "height": 411389
}
Representación JSON de Transacción para Actualizar Información de Activos#

Campo

Descripción

name

Nombre del token. Desde \(4\) hasta \(16\) bytes.

description

Descripción del token. Desde \(0\) hasta \(1000\) bytes.

chainId

ID de cadena

assetId

Token ID codificado base58.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para actualizar información de activos.

Estructura Ride

The UpdateAssetInfoTransaction structure is used for transaction handling in smart contracts.

Utilización#

Utilización#

ID del tipo de transacción

Nombre

Descripción

\(4\)

Transacción para transferencia

Transfiere un token a otra cuenta.

\(7\)

Transacción para intercambio

Intercambia dos tokens diferentes entre dos cuentas. Contiene dos contraórdenes: una orden de compra y una orden de venta.

\(10\)

Transacción para crear alias

Crea un alias para la dirección del remitente.

\(11\)

Transacción para transferencia masiva

Transfiere un token, hasta \(100\) destinatarios.

\(12\)

Data transaction

Agrega, modifica y elimina entradas de datos en el almacenamiento de datos de la cuenta del remitente.

\(13\)

Set script transaction

Asigna el script de dApp o script de cuenta a la cuenta del remitente.

\(16\)

Invoke script transaction

Invoca una función invocable de una dApp.

Transacción para Transferencia#

La transacción de transferencia transfiere una cierta cantidad de token a otra cuenta.

Tarifa

La tarifa mínima en una transacción para transferencia es \(0.001\) DecentralCoins, en caso de transferir un activo inteligente \(0.005\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "Cs4DShy4nTx6WyxjKRoDtoYsGhvT663pYLysPCLeVZHE",
  "amount": 15540,
  "signature": "5EaYqFx2xFJmdvwZ1gT3yLecKr88z3jByCj5GE1MjE1ossvehExZKoT7uhGatiYCGM9Co8iUR8Q5ce52XDmno3rn",
  "fee": 100000,
  "type": 4,
  "version": 1,
  "attachment": "3vrgtyozxuY88J9RqMBBAci2UzAq9DBMFTpMWLPzMygGeSWnD7k",
  "sender": "3PN2bVFxJjgudPKqEGZ41TVsD5ZJmxqnPSu",
  "feeAssetId": null,
  "proofs": [
    "5EaYqFx2xFJmdvwZ1gT3yLecKr88z3jByCj5GE1MjE1ossvehExZKoT7uhGatiYCGM9Co8iUR8Q5ce52XDmno3rn"
  ],
  "assetId": "7uncmN7dZfV3fYVvNdYTngrrbamPYMgwpDnYG1bGy6nA",
  "recipient": "3PFmoN5YLoPNsL4cmNGkRxbUKrUVntwyAhf",
  "feeAsset": null,
  "id": "D79kL1Jr5xyL2Rmw2FnafQHugJGvuBhNEbLnhMuwMkDC",
  "timestamp": 1548660895034,
  "height": 1370973
}
Representación JSON de Transacción para Transferencia#

Campo

Descripción

assetId

Token ID base58 codificado. nulo significa DecentralCoins.

amount

Cantidad de token a transferir: un valor entero especificado en la fracción mínima («centavos») de token.

attachment

Datos binarios arbitrarios (normalmente un comentario para transferir) codificados en base58, hasta \(4\) bytes.

recipient

Dirección del destinatario codificada en base58 o alias del destinatario con alias:<chain_id>: prefijo, por ejemplo, alias:T:merry (consulte ID de cadena).

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para transferencia.

Estructura Ride

The TransferTransaction structure is used for transaction handling in smart contracts.

Transacción para Intercambio#

La transacción para intercambio intercambia dos tokens diferentes entre dos cuentas. Comúnmente, la transacción para intercambio es creada por el servicio emparejador que ejecuta órdenes para comprar y vender tokens. La transacción para intercambio contiene dos contraórdenes: una orden de compra y una orden de venta. La cadena de bloques garantiza que los términos del intercambio no sean peores que los indicados en cada pedido.

Un pedido se puede completar parcialmente. Una orden puede participar en varias transacciones para intercambio, con diferentes contraórdenes. Uno de los dos tokens intercambiados es el activo de cantidad (moneda base): representa la cantidad de token en los pedidos y en la transacción para intercambio. Otro token es un activo de precio (moneda de cotización): representa el precio.

../_images/08_Exchange-Transaction.png

Tarifa de Transacción

La tarifa mínima en una transacción para intercambio es \(0.003\) DecentralCoins. En caso de intercambio de un activo inteligente por un activo ordinario, la tarifa mínima es \(0.007\) DecentralCoins, en caso de intercambio de dos activos inteligentes, el mínimo la tarifa es \(0.011\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Tarifa del Emparejador

El emparejador recibe una tarifa por la ejecución de la orden de cada remitente de la orden. La tarifa mínima del emparejador la establece el emparejador. El remitente del pedido especifica la tarifa no menos que la cantidad mínima.

Si el pedido se llena por completo con una transacción para intercambio, el emparejador recibe la tarifa completa especificada en el pedido. Si el pedido se completa parcialmente, el emparejador recibe una parte de la tarifa. La cadena de bloques garantiza que la tarifa de emparejador total recibida del remitente de la orden en todas las transacciones de intercambio no exceda la tarifa especificada en la orden.

../_images/09_Matcher-Fee.png

Representación JSON

{
  "senderPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
  "amount": 100000000,
  "fee": 300000,
  "type": 7,
  "version": 2,
  "sellMatcherFee": 750,
  "sender": "3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu",
  "feeAssetId": null,
  "proofs": [
    "LQD8VoFhHEW2b6o2e2ujzDHdZatwMMwigC2tmoSHcFNRGXrowA1yyVxD6nZBNeABLWjs59dnuLhgNP7UMfFKDuR"
  ],
  "price": 1134500,
  "id": "EHLccXcemZPEvUpM9UkASG1GciwMt9R5B3QuYFxywj9g",
  "order2": {
    "version": 3,
    "id": "JCiF3gmprLc8u7xdWR7KUkJ3YfM6yfgxB6CvhJYGJFAa",
    "sender": "3PRBeeFD64wvTMfS3HEoDDFPXfJs3gFdAxk",
    "senderPublicKey": "ytgWVbKG9e6TSsQ5buMryr2QyxNoL3RezXP3f9RJ2As",
    "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
    "assetPair": {
      "amountAsset": null,
      "priceAsset": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
    },
    "orderType": "sell",
    "amount": 40000000000,
    "price": 1134500,
    "timestamp": 1591356602063,
    "expiration": 1593862202062,
    "matcherFee": 300000,
    "matcherFeeAssetId": null,
    "signature": "3D2Ngr7H6MQRs1izMQSix3dMHmDfg4bcRjxamFXFsb4Ku28neNWHdtwE6LtR3eq69Jqr1CvEsAKCWkQEeEEomcoK",
    "proofs": [
      "3D2Ngr7H6MQRs1izMQSix3dMHmDfg4bcRjxamFXFsb4Ku28neNWHdtwE6LtR3eq69Jqr1CvEsAKCWkQEeEEomcoK"
    ]
  },
  "order1": {
    "version": 3,
    "id": "FNvEGPgUqEWnrnpxevZQnaZS3DUTBGE2wa6L75xCw7mo",
    "sender": "3PDxxx7eSeYLgzTAtuAV7gUCtHeeXeU85fP",
    "senderPublicKey": "3WEkbavP3Sw4y5tsgxbZvKkWh87BdB3CPVVxhcRUDBsJ",
    "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
      "assetPair": {
      "amountAsset": null,
      "priceAsset": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"
    },
    "orderType": "buy",
    "amount": 100000000,
    "price": 1134500,
    "timestamp": 1591356752271,
    "expiration": 1593862352271,
    "matcherFee": 300000,
    "matcherFeeAssetId": null,
    "signature": "2gvqaYy2BFbK4BJZS8taRJnhgfQ1z2CytF2RqjcyEfzFiu9tkTjN5q4UyFXpPqS3E6eD2WQBUaYCTYDKv98iW1sy",
    "proofs": [
      "2gvqaYy2BFbK4BJZS8taRJnhgfQ1z2CytF2RqjcyEfzFiu9tkTjN5q4UyFXpPqS3E6eD2WQBUaYCTYDKv98iW1sy"
    ]
  },
  "buyMatcherFee": 300000,
  "timestamp": 1591356752456,
  "height": 2093333
}
Representación JSON de Transacción para Intercambio#

Campo

Descripción

amount

Monto de la cantidad activo: un valor entero especificado en la fracción mínima («centavo») de activo.

price

Precio por la cantidad del activo nominado en el precio del activo, multiplicado por el factor: 1) \(10^{8}\) para la versión de transacción para intercambio 3. 2) \(10^{(8 + priceAssetDecimals – amountAssetDecimals )}\). Donde amountAssetDecimals, priceAssetDecimals son decimales de los activos, para la transacción para intercambio versión 2 o 1.

buyMatcherFee

Tarifa del emparejador por la ejecución de la orden de compra. La identificación del token de tarifa se indica en la orden de compra.

sellMatcherFee

Tarifa del emparejador por la ejecución de la orden de venta. El ID del token de tarifa se indica en la orden de venta.

order1, order2

Ordenes de compra y venta. Consulte el artículo sobre órdenes para obtener más información.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para intercambio.

Estructura Ride

The ExchangeTransaction structure is used for transaction handling in smart contracts.

Transacción para Crear Alias#

La transacción Create Alias crea un alias para la dirección del remitente. Un alias creado no se puede eliminar.

Tarifa

La tarifa mínima para una transacción de creación de alias es \(0.001\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey":"BVv1ZuE3gKFa6krwWJQwEmrLYUESuUabNCXgYTmCoBt6",
  "sender":"3N8S4UtauvDAzpLiaRyDdHn9muexWHhBP4D",
  "feeAssetId":null,
  "proofs": [
    "22QJfRKX7kUQt4qjdnUqZAnhqukqhnofE27uvP8Q5xnBf8M6PCNtWVGq2ngm6m7Voe7duys59D1yU9jhKrmdXDCe"
  ],
  "fee":100000,
  "alias":"91f452553298770f",
  "id":"AD7KmXwoVNc2fXsmaxsHsrnT1tfPF3HsWYtfjFijVsvM",
  "type":10,
  "version":2,
  "timestamp":1548443069053,
  "height":466104
}
Representación JSON de Transacción para Crear Alias#

Campo

Descripción

alias

Alias. Desde \(4\) hasta \(30\) bytes (el carácter \(1\) puede ocupar hasta \(4\) bytes).

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para crear alias.

Estructura Ride

The CreateAliasTransaction structure is used for transaction handling in smart contracts.

Transacción para Transferencia Masiva#

La transacción para transferencia masiva transfiere un token a varias cuentas, desde \(1\) DecentralCoin a \(100\) DecentralCoins .

Tarifa

La tarifa mínima en una transacción para transferencia masiva es \(0.001 + 0.0005 × N\) DecentralCoins, en caso de transferir un activo inteligente \(0.001 + 0.0005 × N\) DecentralCoins, donde \(N\) DecentralCoins es el número de destinatarios. El valor de la tarifa se redondea a tres decimales.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "5DphrhGy6MM4N3yxfB2uR2oFUkp2MNMpSzhZ4uJEm3U1",
  "fee": 5100000,
  "type": 11,
  "transferCount": 100,
  "version": 1,
  "totalAmount": 500000000000,
  "attachment": "xZBWqm9Ddt5BJVFvHUaQwB7Dsj78UQ5HatQjD8VQKj4CHG48WswJxUUeHEDZJkHgt9LycUpHBFc8ENu8TF8vvnDJCgfy1NeKaUNydqy9vkACLZjSqaVmvfaM3NQB",
  "sender": "3P2rvn2Hpz6pJcH8oPNrwLsetvYP852QQ2m",
  "feeAssetId": null,
  "proofs": [
    "FmGBaWABAy5bif7Qia2LWQ5B4KNmBnbXETL1mE6XEy4AAMjftt3FrxAa8x2pZ9ux391oY5c2c6ZSDEM4nzrvJDo"
  ],
  "assetId": "Fx2rhWK36H1nfXsiD4orNpBm2QG1JrMhx3eUcPVcoZm2",
  "transfers": [
    {
      "recipient": "3PHnjQrdK389SbzwPEJHYKzhCqWvaoy3GQB",
      "amount": 5000000000
    },
    {
      "recipient": "3PGNLwUG2GPpw74teTAxXFLxgFt3T2uQJsF",
      "amount": 5000000000
    },
    {
      "recipient": "3P5kQneM9EdpVUbFLgefD385LLYTXY5J32c",
      "amount": 5000000000
    },
    ...
  ],
  "id": "3LRfudet7avpQcW1AdauiBGb8SSRAaoCugDzngDPLVcv",
  "timestamp": 1528973951321,
  "height": 1041197
}
Representación JSON de Transacción para Transferencia Masiva#

Campo

Descripción

assetId

Token ID base58 codificado. nulo significa DecentralCoins.

attachment

Datos binarios arbitrarios (normalmente un comentario para transferir) codificados en base58, hasta \(140\) bytes.

transfers.recipient

Dirección del destinatario codificada en base58 o alias del destinatario con alias:<chain_id>: prefijo, por ejemplo, alias:T:merry (consulte ID de cadena).

transfers.amount

Cantidad de token a transferir: un valor entero especificado en la fracción mínima («centavos») de token.

transferCount

Número de destinatarios.

totalAmount

Monto total de transferencias en la transacción.

No es necesario completar los campos transferCount y totalAmount al enviar una transacción, y no se almacenan en la cadena de bloques. El nodo calcula estos campos cuando proporciona datos de transacciones a través de la API REST.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para transferencia masiva.

Estructura Ride

The MassTransferTransaction structure is used for transaction handling in smart contracts.

Transacción para Datos#

La transacción de datos agrega, modifica y elimina entradas de datos en el almacenamiento de datos de la cuenta del remitente. Las limitaciones son las siguientes:

  • El número máximo de entradas es \(100\).

  • Para una transacción versión 2, el tamaño máximo de datos (claves + valores) es \(165,890\) bytes.

  • Para una transacción versión 1, el tamaño máximo de transacción (excepto las pruebas) es \(153,600\) bytes.

Tarifa

La tarifa mínima en una transacción para datos es \(0.001\) DecentralCoins por kilobyte, el tamaño se redondea hasta un número entero de kilobytes.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "38bYRUxFCaoa9h822nMnsoTX1qfczqtHJLgouNcNnd8h",
  "data": [
    {
      "type": "boolean",
      "value": true,
      "key": "bool"
    },
    {
      "type": "binary",
      "value": "base64:SGVsbG8gV2F2ZXM=",
      "key": "bin"
    },
    {
      "type": "integer",
      "value": 1234567,
      "key": "int"
    },
    {
      "type": "string",
      "value": "some text",
      "key": "str"
    }
  ],
  "sender": "3N4iKL6ikwxiL7yNvWQmw7rg3wGna8uL6LU",
  "feeAssetId": null,
  "proofs": [
    "kE1hjN1yW68j8DsYGNB7Gg1ydC4hqRmt3wBaFQUPkftnbiM7QfJCn1gTHgveJ7pCLXvvqffhKBmiF8qS1Uqk6SR"
  ],
  "fee": 100000,
  "id": "3EPJuvQiJYiu9Y5g6mYDQgHVu8GFUfnZurHrVwwF1ViH",
  "type": 12,
  "version": 2,
  "timestamp": 1591351545000,
  "height": 1029815
}
Representación JSON de Transacción para Datos#

Campo

Descripción

data.key

Clave de entrada. Cadena, hasta \(400\) bytes para la versión 2, hasta \(100\) caracteres para la versión 1.

data.type

Tipo de entrada: 1) binario. 2) booleano. 3) entero. 4) cadena. 5) nulo: eliminar entrada.

data.value

Valor de entrada. Hasta \(32,767\) bytes. El valor binario está codificado en base64. nulo: eliminar entrada.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para datos.

Estructura Ride

La estructura DataTransaction se usa para el manejo de transacciones en contratos inteligentes.

Transacción para Asignar Scripts#

La transacción para asignar scripts asigna el script de dApp o script de cuenta a la cuenta del remitente .

Tarifa

La tarifa mínima en una transacción para asignar scripts es \(0.001\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "7nLAwoiRA4fWF4VHd6gRsbwF2UFFmRADXHqRcgy3h27w",
  "sender": "3N9yCRmNsLK2aPStjLBne3EUiPSKvVHYgKk",
  "feeAssetId": null,
  "chainId": 84,
  "proofs": [
    "2ihGFLUbvJHEpuGRqx5MXEXsEzwMuCmB8FgUTZgSPdANA4iab4M3nsNJ7a7hyiuqjrvwNCHoWn69hvUeziJiSAie"
  ],
  "fee": 1400000,
  "id": "28hbeFhYBq6uir1bbjt2dxbpqxCM2B6GKq4c7zf7AbkX",
  "type": 13,
  "version": 1,
  "script": "base64:AAIDAAAAAAAAAAYIARIAEgAAAAACAQAAAApyYW5kb21pemVyAAAAAQAAAANpbnYEAAAACGxhc3RQbGF5BAAAAAckbWF0Y2gwCQAEHAAAAAIFAAAABHRoaXMCAAAACGxhc3RQbGF5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAFhBQAAAAckbWF0Y2gwAQAAAAxXYXZlc0xvdHRvVjIJAQAAAAV0aHJvdwAAAAAEAAAABHJhbmQJAADLAAAAAgkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACBQAAAAhsYXN0UGxheQgFAAAAA2ludgAAAA10cmFuc2FjdGlvbklkCAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQgFAAAACWxhc3RCbG9jawAAABNnZW5lcmF0aW9uU2lnbmF0dXJlCQABmgAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQABmgAAAAEIBQAAAAlsYXN0QmxvY2sAAAAGaGVpZ2h0CQAB9wAAAAEFAAAABHJhbmQBAAAACnN0YXJ0TG90dG8AAAABAAAAA2ludgQAAAAJcGxheUxpbWl0CQAAaQAAAAIJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzAAAAAAAAAABkBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkAAAIAAAABAgAAAB9TaG91bGQgYmUgd2l0aCBQYXltZW50IGluIFdhdmVzAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAaUGF5bWVudCBzaG91bGQgYmUgaW4gV2F2ZXMDCQAAZgAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAJcGxheUxpbWl0CQAAAgAAAAEJAAEsAAAAAgIAAAAcUGF5bWVudCBzaG91bGQgYmUgbGVzcyB0aGFuIAkAAaQAAAABBQAAAAlwbGF5TGltaXQEAAAACHJhbmRoYXNoCQEAAAAKcmFuZG9taXplcgAAAAEFAAAAA2ludgQAAAALd2luVHJhbnNmZXIJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAA2ludgAAAAZjYWxsZXIJAABpAAAAAgkAAGgAAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQAAAAAAAAAAL4AAAAAAAAAAGQFAAAABHVuaXQFAAAAA25pbAQAAAANd3JpdGVMYXN0UGxheQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAIbGFzdFBsYXkFAAAACHJhbmRoYXNoBQAAAANuaWwDCQAAZgAAAAIAAAAAAAAAAfQJAABqAAAAAgkABLEAAAABBQAAAAhyYW5kaGFzaAAAAAAAAAAD6AkBAAAADFNjcmlwdFJlc3VsdAAAAAIFAAAADXdyaXRlTGFzdFBsYXkFAAAAC3dpblRyYW5zZmVyCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAANd3JpdGVMYXN0UGxheQkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAADbmlsAAAAAgAAAANpbnYBAAAABWxvdHRvAAAAAAkBAAAACnN0YXJ0TG90dG8AAAABBQAAAANpbnYAAAADaW52AQAAAAdkZWZhdWx0AAAAAAkBAAAACnN0YXJ0TG90dG8AAAABBQAAAANpbnYAAAAA4XqnJg==",
  "timestamp": 1592408917668,
  "height": 1047736
}
Representación JSON de Transacción para Asignar Scripts#

Campo

Descripción

chainId

ID de cadena

script

Script compilado, codificado en base64. Script de cuenta hasta \(8192\) bytes, script dApp hasta \(32,767\) bytes. nulo: eliminar secuencia de comandos.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para asignar scripts.

Estructura Ride

The SetScriptTransaction structure is used for transaction handling in smart contracts.

Transacción para Invocar Scripts#

La transacción de script de invocación invoca la función invocable de la dApp.

Además de la dirección de la dApp, el nombre de la función invocable y los argumentos, la transacción Invoke Script puede contener pagos a la dApp. El número máximo de pagos es 10.

Tarifa

El remitente puede especificar una tarifa de transacción nominada en un activo patrocinado en lugar de DecentralCoins, consulte el artículo tarifa patrocinada.

La tarifa mínima en DecentralCoins en una transacción para invocar scripts es Fee \(= 0.005 + S + 1 × I\).

  • Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función de verificación de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, entonces \(S = 0.004\); de lo contrario, \(S = 0\).

  • \(I\) es el número de activos emitidos que no son NFT.

Complejidad Total

Una función invocable de dApp puede invocar una función invocable de otra dApp, u otra función invocable de la misma dApp, o incluso a sí misma. Todas las funciones invocadas se ejecutan dentro de una sola transacción Invoke Script. Más sobre la invocación de dApp a dApp.

La complexity total está limitada por \(26,000\) para todas las funciones invocables y scripts de activos de activos inteligentes involucrados en una sola transacción de script de invocación . La complejidad del script de la cuenta del remitente no está incluida en ese límite.

Representación JSON

{
  "type": 16,
  "id": "DN9Ny8mph4tLjn58e9CqhckPymH9zwPqBSZtcv2bBi3u",
  "sender": "3Mw48B85LvkBUhhDDmUvLhF9koAzfsPekDb",
  "senderPublicKey": "BvJEWY79uQEFetuyiZAF5U4yjPioMj9J6ZrF9uTNfe3E",
  "fee": 500000,
  "feeAssetId": null,
  "timestamp": 1601652119485,
  "proofs": [
    "2536V2349X3cuVEK1rSxQf3HneJwLimjCmCfoG1QyMLLq1CNp6dpPKUG3Lb4pu76XqLe3nWyo3HAEwGoALgBhxkF"
  ],
  "version": 2,
  "chainId": 84,
  "dApp": "3N28o4ZDhPK77QFFKoKBnN3uNeoaNSNXzXm",
  "payment": [],
  "call": {
    "function": "foo",
    "args": [
      {
        "type": "list",
        "value": [
          {
            "type": "string",
            "value": "alpha"
          },
          {
            "type": "string",
            "value": "beta"
          },
          {
            "type": "string",
            "value": "gamma"
          }
        ]
      }
    ]
  },
  "height": 1203100,
  "applicationStatus": "succeeded",
  "stateChanges": {
    "data": [
      {
        "key": "3Mw48B85LvkBUhhDDmUvLhF9koAzfsPekDb",
        "type": "string",
        "value": "alphabetagamma"
      }
    ],
    "transfers": [],
    "issues": [],
    "reissues": [],
    "burns": [],
    "sponsorFees": [],
    "leases": [],
    "leaseCancels": [],
    "invokes": []
  }
}
Representación JSON de Transacción para Invocar Scripts#

Campo

Descripción

call.function

Nombre de la función invocable. Hasta \(255\) bytes (\(1\) carácter puede ocupar hasta \(4\) bytes).

call.args.type

Tipo de argumento: 1) binario. 2) booleano. 3) entero. 4) cadena. 5) lista.

call.args.value

Valor del argumento. 1) entero: de \(-9,223,372,036,854,775,808\) a \(9,223,372,036,854,755,807\) inclusive. 2) cadena o binario: hasta \(32,767\) bytes. El valor binario debe estar codificado en base64. 3) lista: hasta \(1000\) elementos.

dApp

Dirección de dApp codificada en base58 o alias de dApp con alias:<chain_id>: prefijo, por ejemplo, alias:T:merry (Consulte Chain ID).

payment.amount

Cantidad de token en pago: un valor entero especificado en unidades atómicas.

payment.assetId

ID of token in payment, base58 encoded. null means that the payment is in DecentralCoin.

stateChanges

Acciones de script realizadas por la función invocable y resultados de invocación de dApp a dApp.

No es necesario completar la estructura stateChanges al enviar una transacción, y no se almacena en la cadena de bloques. El nodo devuelve esta estructura cuando proporciona datos de transacciones a través de la API REST.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para invocar scripts.

Estructura Ride

The InvokeScriptTransaction structure is used for transaction handling in smart contracts.

Red#

Red#

ID del tipo de transacción

Nombre

Descripción

\(8\)

Transacción para arrendamiento

Crear un arrendamiento de DecentralCoins.

\(9\)

Transacción para cancelar arrendamiento

Cancela el arrendamiento.

\(14\)

Transacción para patrocinar tarifas

Configura el patrocinio.

Transacción para Arrendamiento#

La transacción para arrendamiento crea un arrendamiento de DecentralCoins a otra cuenta. Después del bloque \(1000\), los tokens alquilados se contabilizan según el saldo generador del destinatario. Cuanto mayor sea el saldo de generación del nodo, mayores serán las posibilidades de que ese nodo sea seleccionado para generar el siguiente bloque. Por lo general, los propietarios de los nodos comparten la recompensa por los bloques generados con los arrendadores. Más información sobre el arrendamiento de.

Los tokens arrendados permanecen bloqueados en la cuenta del remitente con el control total de su propietario. El remitente puede cancelar el arrendamiento en cualquier momento mediante la transacción para cancelar arrendamiento.

Tarifa

La tarifa mínima en una transacción para arrendamiento es \(0.001\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "senderPublicKey": "b8AB1PQWE7kH55cS48uDTV5fezrAyDTCf7iePyXNzNm",
  "amount": 500000000,
  "signature": "3n34MYd3Acx1JpTtvYffdVYCVySuRgZvSbHMA3AxqQwr4xvfZedv9UbqSB9k84PGY5C8RSwGRjDnMGcYwQu2x7B5",
  "fee": 100000,
  "type": 8,
  "version": 1,
  "sender": "3P6iv9tYo3ELne7tc9HR8BzhK3LE2aDDu1A",
  "feeAssetId": null,
  "proofs": [
    "3n34MYd3Acx1JpTtvYffdVYCVySuRgZvSbHMA3AxqQwr4xvfZedv9UbqSB9k84PGY5C8RSwGRjDnMGcYwQu2x7B5"
  ],
  "recipient": "3P2HNUd5VUPLMQkJmctTPEeeHumiPN2GkTb",
  "id": "7k4EPgA3VxoE56TMJLjvF9FMpywyfeS5qRJSEEN9XGuU",
  "timestamp": 1528813353617,
  "status": "canceled",
  "height": 1038624
}
Representación JSON de Transacción para Arrendamiento#

Campo

Descripción

amount

Cantidad de DecentralCoins para arrendar.

recipient

Dirección del destinatario codificada en base58 o alias del destinatario.

status

Estado de arrendamiento: 1) activo: el arrendamiento está activo. 2) cancelado: el contrato de arrendamiento está cancelado, consulte la transacción para cancelar arrendamiento.

No es necesario completar el campo de estado al enviar una transacción y no se almacena en la cadena de bloques. El nodo calcula estos campos cuando proporciona datos de transacciones a través de la API REST.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para arrendamiento.

Estructura Ride

The LeaseTransaction structure is used for transaction handling in smart contracts.

Transacción para Cancelar Arrendamiento#

La transacción para cancelar arrendamiento cancela el arrendamiento. Consulte el artículo transacción para arrendamiento.

Tarifa

La tarifa mínima en una transacción para cancelar arrendamiento es \(0.001\) DecentralCoins.

Si el remitente de la transacción es una dApp o una cuenta inteligente, y la complejidad de la secuencia de comandos de la cuenta o la función del verificador de la secuencia de comandos de la dApp supera el umbral de complejidad del remitente, la tarifa mínima se incrementa en \(0.004\) DecentralCoins.

Representación JSON

{
  "type": 9,
  "id": "6rzxZ3rEsCxgmkcn6DDPB9f9Phi28D4JWZsCtwcViD8C",
  "sender": "3Mx7kNAFcGrAeCebnt3yXceiRSwru6N3XZd",
  "senderPublicKey": "81fxJw7HM2VX1ucq1vNKiedM1XBGX7H2TDUtxN6ib68Z",
  "fee": 100000,
  "feeAssetId": null,
  "timestamp": 1622579112096,
  "proofs": [
    "3eFnprsRSeczc371bQ7AUsbh6qjiUFze6y5BZGKbxyHG27K1cU6jVUgRdthYz9uWVw1FgVpLjMciGCb64rJnMp3k"
  ],
  "version": 2,
  "leaseId": "BhHPPHBZpfp8FBy8DE7heTpWGJySYg2uU2r4YM6qaisw",
  "chainId": 84,
  "height": 1551763,
  "applicationStatus": "succeeded",
  "lease": {
    "id": "BhHPPHBZpfp8FBy8DE7heTpWGJySYg2uU2r4YM6qaisw",
    "originTransactionId": "BhHPPHBZpfp8FBy8DE7heTpWGJySYg2uU2r4YM6qaisw",
    "sender": "3Mx7kNAFcGrAeCebnt3yXceiRSwru6N3XZd",
    "recipient": "3Mz9N7YPfZPWGd4yYaX6H53Gcgrq6ifYiH7",
    "amount": 124935000,
    "height": 1551763,
    "status": "canceled"
  }
}
Representación JSON de Transacción para Cancelar Arrendamiento#

Campo

Descripción

leaseId

ID de transacción para arrendamiento.

chainId

ID de cadena

lease

Parámetros de arrendamiento cancelado.

No es necesario completar la estructura de arrendamiento al enviar una transacción, y no se almacena en la cadena de bloques. El nodo devuelve esta estructura cuando proporciona datos de transacciones a través de la API REST.

Los campos que son comunes a todos los tipos de transacciones se describen en el artículo sobre transacciones.

Formato Binario

Consulte el formato binario de transacción para cancelar arrendamiento.

Estructura Ride

The LeaseCancelTransaction structure is used for transaction handling in smart contracts.

Génesis#

Génesis#

ID del tipo de transacción

Nombre

Descripción

\(1\)

Transacción Génesis

Acumula DecentralCoins en una cuenta tras la distribución inicial durante la creación de la cadena de bloques.

Transacción Génesis#

La transacción de génesis acumula DecentralCoins para dar cuenta de la distribución inicial de DecentralCoins durante la creación de la cadena de bloques. El primer bloque de la cadena de bloques, el bloque de génesis, consta de transacciones génesis.

Formato Binario

Consulte el formato binario de transacción génesis.

Validación de Transacciones#

Un nodo DecentralChain valida cada transacción en los siguientes casos:

  • El nodo recibe la transacción a través del punto final de difusión de Node extensions o gRPC server.

  • El nodo recibe la transacción de otro nodo de la red blockchain utilizando el protocolo binario.

  • El generador de bloques agrega la transacción a un bloque.

  • El nodo recibe un bloque (o microbloque) de otro nodo de la red.

La validación completa de la transacción incluye las siguientes comprobaciones:

  1. Verificación de campos de transacción que incluye:

  1. Verificación de la marca de tiempo: la marca de tiempo de la transacción no debe ser más de \(2\) horas o \(1.5\) horas antes de la marca de tiempo del bloque actual.

  2. Comprobación de la versión de la transacción: todas las funciones necesarias para admitir esta versión deben estar activadas.

  3. Comprobación del tipo de transacción: todas las funciones necesarias para admitir este tipo deben estar activadas.

  4. Verificación de montos de tokens: los valores deben ser no negativos.

  5. Consulta diferentes campos según el tipo de transacción.

  1. Consulta de saldo del remitente.

  1. El remitente debe tener fondos suficientes para pagar la tarifa. Si se utiliza un activo patrocinado para la tarifa, también se verifica el saldo del patrocinador.

  2. Según el tipo de transacción, el remitente debe tener suficientes activos para la transferencia o para los pagos adjuntos a la transacción para invocar scripts. Los remitentes de pedidos en la transacción para intercambio deben tener fondos suficientes para intercambiar.

  1. La verificación de la firma del remitente

  1. Para cuentas ordinarias (sin guión).

  2. Para la ejecución del script de cuenta si el remitente es una cuenta inteligente.

  3. Para la ejecución de la función de verificación si el remitente es una dApp.

  4. Se realiza una verificación similar para los pedidos en una transacción para intercambio.

  1. Para la transacción para invocar scripts

  1. Cálculo del resultado de la función invocable de dApp.

  2. Comprobación del saldo de dApp: la cuenta de dApp debe tener fondos suficientes para acciones de script de dApp.

  3. Verifique que la tarifa de transacción no sea inferior a la tarifa mínima según las acciones del script.

  1. Ejecución de scripts de activos si la transacción utiliza activos inteligentes, incluidos los scripts de activos utilizados en acciones de scripts de una dApp.

Al recibir la transacción a través del punto final de transmisión, agregar una transacción a un bloque o recibir un bloque a través de la red, el nodo realiza una validación completa de la transacción. Al recibir una transacción de script de invocación a través de la red, el nodo realiza cálculos de la función invocable (consulte 4.1) hasta el umbral para guardar transacciones fallidas .

Resultado de la Validación#

Cuando la transacción se recibe por transmisión o por la red:

  • Si una de las comprobaciones falla, la transacción se descarta.

  • Si se aprobaron todas las comprobaciones, la transacción se agrega al grupo UTX, que es la lista de transacciones que esperan ser agregadas al bloque.

Al agregar la transacción al bloque, el resultado de la validación depende del tipo de transacción.

Para la transacción para invocar scripts

  • Si una de las comprobaciones 1 a 3 falla, la transacción se descarta.

  • Si se pasaron las comprobaciones 1 a 3 y el cálculo del resultado de la función invocable de dApp (comprobación 4.1) falló con un error o lanzando una excepción antes de la :ref :complejidad <03_ride-language/07_dapp-to-app-invocation:Script Complexity> de los cálculos realizados supere el umbral para guardar transacciones fallidas , la transacción también se descarta.

  • Si se aprobaron las comprobaciones 1 a 3 pero fallaron las comprobaciones 4 a 5 y, además, el resultado de la función invocable se calcula correctamente o la complejidad superó el umbral, la transacción se guarda en la cadena de bloques pero se marca como fallida: «applicationStatus»: «script_execution_failed». Al remitente se le cobra la tarifa de transacción. La transacción no implica ningún otro cambio en el estado de la cadena de bloques.

  • Si se aprobaron todas las comprobaciones, la transacción se guarda en la cadena de bloques como exitosa: «applicationStatus»: «succeeded» y se le cobra la tarifa al remitente.

Para la transacción para intercambio:

  • Si una de las comprobaciones 1 a 3 falla, la transacción se descarta.

  • Si se pasaron las comprobaciones 1 a 3 pero la comprobación 5 falló, la transacción se guarda en la cadena de bloques pero se marca como fallida: «applicationStatus»: «script_execution_failed». Al remitente de la transacción (emparejador) se le cobra la tarifa de transacción. La transacción no implica ningún otro cambio en los saldos, en particular, los remitentes de la orden no pagan la tarifa del emparejador.

  • Si se aprobaron todas las comprobaciones, la transacción se guarda en la cadena de bloques como exitosa: «applicationStatus»: «succeeded». Al emparejador se le cobra la tarifa de transacción, así como a los remitentes de pedidos se les cobra la tarifa del emparejador.

Para las demás transacciones:

  • Si una de las comprobaciones falla, la transacción se descarta.

  • Si se aprueban todos los controles, la transacción se guarda en la cadena de bloques como exitosa y se le cobra la tarifa al remitente.