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.
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. Si el remitente del pedido en una transacción para intercambio es una dApp o cuenta inteligente, esto no afecta la tarifa mínima.
La tarifa mínima se incrementa en \(0.004\) DecentralCoins por cada activo inteligente involucrado, excepto por:
Activos inteligentes utilizados como tarifa del emparejador en transacciones para intercambio.
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.
Tipo de transacción |
ID del tipo de transacción |
Tarifa mínima de transacción en DecentralCoins |
---|---|---|
\(6\) |
\(0.001\) |
|
\(10\) |
\(0.001\) |
|
\(12\) |
\(0.001\) por kilobyte. El tamaño se redondea a un número entero de kilobytes. |
|
\(7\) |
\(0.003\) |
|
\(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. |
|
\(3\) |
\(1\) para token regular. \(0.001\) para token no fungible. |
|
\(9\) |
\(0.001\) |
|
\(8\) |
\(0.001\) |
|
\(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. |
|
\(5\) |
\(0.001\) |
|
\(15\) |
\(1\) |
|
\(13\) |
\(0.01\) |
|
\(14\) |
\(0.001\) |
|
\(4\) |
\(0.001\) |
|
\(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\).
Tarifas Patrocinadas#
Los usuarios de aplicaciones basadas en DecentralChain deben pagar una tarifa por cada transacción. Este es el umbral de entrada para nuevos usuarios. A veces, los usuarios no saben nada sobre DecentralCoins o no entienden cómo obtener DecentralCoins o no quieren gastar dinero. El patrocinio permite lanzar aplicaciones que no requieren DecentralCoins de los usuarios.
Activo Patrocinado#
Una cuenta que emitió un activo puede habilitar el patrocinio, es decir, permitir que todos los usuarios paguen una tarifa en este activo por transacción para invocar scripts y transacciones para transferencia. El patrocinador puede distribuir el activo patrocinado entre los usuarios de la aplicación.
Cómo Habilitar el Patrocinio#
Puedes usar Decentral.Exchange en línea para habilitar el patrocinio.
Asegúrate de haber iniciado sesión en tu cuenta. Encuentre el activo deseado en la lista, coloque el cursor sobre él y en su menú (⋮) haga clic en Habilitar Patrocinio.
Lea atentamente los Términos y Condiciones antes de continuar y luego, en el cuadro Monto por transacción, especifique el monto requerido de activo patrocinado que se cobrará a los usuarios. Luego haga clic en Continuar.
En la siguiente ventana, vuelva a verificar los datos ingresados y, si todo es correcto, haga clic en Enviar o haga clic en Volver para hacer las correcciones. La activación se procesará con el siguiente bloque.
Después de la activación, podrá cambiar la cantidad especificada sin la desactivación. Para hacerlo, busque su activo en la lista, pase el cursor sobre él y en su menú (⋮) haga clic en Cambiar Patrocinio.
The fee for this type of transaction is \(0.001\) DecentralCoins.
Cómo Desactivar el Patrocinio#
Puedes usar Decentral.Exchange en línea para deshabilitar el patrocinio.
Asegúrate de haber iniciado sesión en tu cuenta. Encuentre el activo deseado en la lista, coloque el cursor sobre él y en su menú (⋮) haga clic en Desactivar Patrocinio.
En la siguiente ventana haz clic en Firmar para desactivar el patrocinio. La desactivación se procesará con el siguiente bloque.
Restricciones#
Solo el emisor del activo puede ser patrocinador.
Los activos inteligentes no pueden ser activos patrocinados.
El patrocinio solo funciona si el saldo de la cuenta del patrocinador es superior a \(1.005\) DecentralCoins. Si el saldo de la cuenta es inferior a \(1.005\) DecentralCoins, se suspende el patrocinio, y si el saldo es superior a \(1.005\) DecentralCoins, se reanuda el patrocinio.
La tarifa en el activo patrocinado solo se puede especificar en transacciones para invocar scripts y transacciones para transferencia.
Cómo Funciona#
Después de habilitar el patrocinio, si se cumplen los requisitos descritos en la sección restricciones, el patrocinio funciona de la siguiente manera:
Un usuario transmite una transacción y especifica una tarifa en el activo patrocinado.
El patrocinador recibe la tarifa en el activo patrocinado de la cuenta del usuario.
Los generadores de bloques reciben la tarifa en DecentralCoins de la cuenta del patrocinador (de acuerdo con el protocolo DecentralChain-M5, la tarifa se distribuye entre el generador de bloques actual y el siguiente generador de bloques en una proporción de \(\frac{40}{60}\).
El script en la cuenta del patrocinador no se ejecuta y no afecta el patrocinio porque la transacción se envía desde la cuenta del usuario.
La tarifa en DecentralCoins cobrada al patrocinador es proporcional a la tarifa especificada por el remitente de la transacción:
feeInDecentralCoins = feeInSponsoredAsset × 0,001 / minSponsoredAssetFee
minSponsoredAssetFee es la cantidad de activo patrocinado equivalente a \(0.001\) DecentralCoins. El patrocinador establece este valor al habilitar el patrocinio. Por ejemplo, si el patrocinador establece \(3\) tokens = \(0.001\) DecentralCoins, entonces la tarifa mínima en una transacción para invocar scripts es :math:` 15` tokens, que corresponde a \(0.005\) DecentralCoins. Tenga en cuenta:
El usuario puede usar el activo patrocinado para pagar transacciones que no están relacionadas con una determinada aplicación.
El usuario puede especificar cualquier cantidad de tarifa, como la que exceda significativamente el mínimo.
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
}
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:
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#
ID del tipo de transacción |
Nombre |
Descripción |
---|---|---|
\(3\) |
Emite un token. |
|
\(5\) |
Reemite un token. |
|
\(6\) |
Disminuye la cantidad de token. |
|
\(15\) |
Modifica el script del activo. |
|
\(17\) |
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
}
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 |
|
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
}
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 |
|
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
}
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 |
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
}
Campo |
Descripción |
---|---|
assetId |
Token ID codificado base58. |
chainId |
|
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
}
Campo |
Descripción |
---|---|
name |
Nombre del token. Desde \(4\) hasta \(16\) bytes. |
description |
Descripción del token. Desde \(0\) hasta \(1000\) bytes. |
chainId |
|
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#
ID del tipo de transacción |
Nombre |
Descripción |
---|---|---|
\(4\) |
Transfiere un token a otra cuenta. |
|
\(7\) |
Intercambia dos tokens diferentes entre dos cuentas. Contiene dos contraórdenes: una orden de compra y una orden de venta. |
|
\(10\) |
Crea un alias para la dirección del remitente. |
|
\(11\) |
Transfiere un token, hasta \(100\) destinatarios. |
|
\(12\) |
Agrega, modifica y elimina entradas de datos en el almacenamiento de datos de la cuenta del remitente. |
|
\(13\) |
Asigna el script de dApp o script de cuenta a la cuenta del remitente. |
|
\(16\) |
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
}
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.
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.
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
}
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
}
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
}
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
}
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
}
Campo |
Descripción |
---|---|
chainId |
|
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": []
}
}
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#
ID del tipo de transacción |
Nombre |
Descripción |
---|---|---|
\(8\) |
Crear un arrendamiento de DecentralCoins. |
|
\(9\) |
Cancela el arrendamiento. |
|
\(14\) |
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
}
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"
}
}
Campo |
Descripción |
---|---|
leaseId |
ID de transacción para arrendamiento. |
chainId |
|
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.
Transacción para Patrocinar Tarifas#
La transacción de la tarifa del patrocinador habilita o deshabilita el patrocinio. El patrocinio permite que cualquier usuario pague una tarifa en el activo patrocinado (en lugar de DecentralCoins) en transacciones para invocar scripts y transacciones para transferencia. Más sobre el patrocinio.
Solo el emisor del activo puede configurar el patrocinio. El activo inteligente no puede ser un activo patrocinado.
Tarifa
La tarifa mínima en una transacción para patrocinar tarifas 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": "5HNegWomhj1nzyggf1oAvujNJGCqbzFjM72BLYtrBecw",
"sender": "3N3ErpmUdJWy6DW4ruAr14YDis9UaiTwHd6",
"feeAssetId": null,
"proofs": [
"5jF8WpF7jxf5SBMHMbc2WcfqX3R6fRvssBGSNfzAM8p3uSmno9XzYy5b565ez5fG9vqUGrENFvcrbhk36bzCaqkP"
],
"assetId": "p1vuxnGyfH9VFiuyKmsh25rn6MedjGbQu7d6Zt1sY4U",
"fee": 100000000,
"minSponsoredAssetFee": 100,
"id": "5gHUMzmBfn4KP3tELzHtw3EYR947rzWUp5PuyF7hUW23",
"type": 14,
"version": 1,
"timestamp": 1585725309659,
"height": 934757
}
Campo |
Descripción |
---|---|
minSponsoredAssetFee |
Cantidad de activo que es equivalente a \(0.001\) DecentralCoins (\(100,000\) Decentralitos): un valor entero especificado en la fracción mínima («centavos”) del activo. nulo: deshabilitar el patrocinio. |
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 patrocinar tarifas.
Estructura Ride
The SponsorFeeTransaction structure is used for transaction handling in smart contracts.
Génesis#
ID del tipo de transacción |
Nombre |
Descripción |
---|---|---|
\(1\) |
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:
Verificación de campos de transacción que incluye:
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.
Comprobación de la versión de la transacción: todas las funciones necesarias para admitir esta versión deben estar activadas.
Comprobación del tipo de transacción: todas las funciones necesarias para admitir este tipo deben estar activadas.
Verificación de montos de tokens: los valores deben ser no negativos.
Consulta diferentes campos según el tipo de transacción.
Consulta de saldo del remitente.
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.
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.
La verificación de la firma del remitente
Para cuentas ordinarias (sin guión).
Para la ejecución del script de cuenta si el remitente es una cuenta inteligente.
Para la ejecución de la función de verificación si el remitente es una dApp.
Se realiza una verificación similar para los pedidos en una transacción para intercambio.
Para la transacción para invocar scripts
Cálculo del resultado de la función invocable de dApp.
Comprobación del saldo de dApp: la cuenta de dApp debe tener fondos suficientes para acciones de script de dApp.
Verifique que la tarifa de transacción no sea inferior a la tarifa mínima según las acciones del script.
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.