Contrats intelligents
Le contrat intelligent (ci-après dénommé le contrat) est l'un des éléments de base d'une application. L'implémentation d'un contrat sur une page par l'utilisateur est généralement une opération unique dont le but est de mettre à jour ou de créer une entrée dans une base de données. Toutes les opérations de données d'une application forment un système de contrats, et ces contrats interagissent les uns avec les autres grâce aux fonctions de contenu de la base de données ou du contrat.
Structure du contrat
Utilisez le mot-clé contract
pour déclarer un contrat, suivi du nom du contrat, et le contenu du contrat doit être enclos entre des accolades. Un contrat se compose principalement de trois sections :
data - section des données, où sont déclarées les variables des données d'entrée, y compris le nom de la variable et le type de la variable ;
conditions - section des conditions, où l'on vérifie la justesse des données ;
action - section des actions, où l'on définit les manipulations des données.
Section des données
La section data
décrit les entrées de données du contrat et les paramètres de formulaire reçus.
La structure de chaque ligne par séquence :
- Nom de la variable - ne reçoit que des variables, pas des tableaux ;
- Type de données de la variable - le type de données de la variable ;
- optionnel - un paramètre facultatif qui n'a pas besoin d'être rempli dans l'élément de formulaire.
Section des conditions
La section "conditions" décrit la validation des données reçues.
Les commandes suivantes sont utilisées pour les avertissements d'erreur : erreurs graves error
, erreurs avertissement warning
, erreurs suggestives info
. Ces trois commandes généreront une erreur qui mettra fin à l'exécution des contrats, et chaque erreur affichera un type différent d'informations de journal d'erreur. Par exemple :
Section d'action
La section "action" décrit le code principal du contrat, qui récupère d'autres données et enregistre les valeurs de résultat dans des tables. Par exemple:
Variables
Les variables déclarées dans la section des données sont transmises aux autres sections du contrat via le symbole $
suivi du nom de la variable. Le symbole $
peut également être utilisé pour déclarer d'autres variables qui ne se trouvent pas dans la section des données, et qui sont considérées comme des variables globales de ce contrat et de tous les contrats dans lesquels ce contrat est imbriqué.
Des variables prédéfinies peuvent être utilisées dans les contrats, elles contiennent les données de transaction qui ont appelé le contrat :
$time
- horodatage de la transaction; $ecosystem_id
- ID de l'écosystème; $block
- ID du bloc contenant la transaction; $key_id
- adresse du compte ayant signé la transaction actuelle; $type
- ID du contrat dans la machine virtuelle; $block_key_id
- adresse du compte du nœud ayant généré le bloc; $block_time
- horodatage de génération du bloc; $original_contract
- nom du contrat qui a initialement traité la transaction. Cela signifie que le contrat est appelé lors de la validation de la transaction si la variable est une chaîne vide. Pour vérifier si le contrat est appelé par un autre contrat ou directement par la transaction, vous devez comparer les valeurs de $original_contract et $this_contract. Cela signifie que le contrat est appelé par la transaction s'ils sont égaux; $this_contract
- nom du contrat actuellement en cours d'exécution; $guest_key
- adresse du compte invité; $stack
- pile de tableaux de contrats avec un type de données de tableau, contenant tous les contrats exécutés. Le premier élément du tableau représente le nom du contrat actuellement en cours d'exécution, tandis que le dernier élément représente le nom du contrat qui a initialement traité la transaction; $node_position
- le numéro d'index du tableau de nœuds de vérification où se trouve le bloc; $txhash
- hachage de la transaction; $contract
- tableau de structure de contrat actuel.
Les variables prédéfinies peuvent être utilisées non seulement dans les contrats, mais aussi dans les champs de permission qui définissent les conditions d'accès des éléments de l'application. Lorsqu'elles sont utilisées dans les champs de permission, les variables prédéfinies pour les informations de bloc sont toujours égales à zéro, telles que $time
, $block
, etc.
Une variable prédéfinie $result
est assignée avec le résultat de retour du contrat.
Contrats imbriqués
Vous pouvez imbriquer des contrats dans les sections des conditions et des actions du contrat. Les contrats imbriqués peuvent être appelés directement, et les paramètres du contrat sont spécifiés entre parenthèses après le nom du contrat, par exemple, @1NomContrat(Paramètres)
. Vous pouvez également appeler des contrats imbriqués avec la fonction CallContract.
Téléchargement de fichier
Pour télécharger un fichier en utilisant un formulaire au format multipart/form-data
, le type de données du contrat doit être file
.
Le contrat UploadBinary est utilisé pour télécharger et stocker des fichiers. Avec la fonction Binary du langage Logicor dans l'éditeur de page, vous pouvez obtenir le lien de téléchargement du fichier.
Dans le langage du contrat, JSON peut être spécifié comme type de champ. Vous pouvez utiliser la syntaxe : columnname->fieldname pour traiter le champ d'entrée. La valeur obtenue est enregistrée dans columnname.fieldname. La syntaxe ci-dessus peut être utilisée dans les colonnes, les conditions et les clauses "Where" de la fonction DBFind.
Requêtes avec des opérations de date et d'heure
Vous ne pouvez pas interroger directement et mettre à jour la date et l'heure avec les fonctions du langage de contrat, mais vous pouvez utiliser les fonctions et fonctionnalités de PostgreSQL dans la clause Where comme dans l'exemple ci-dessous. Par exemple, vous devez comparer le champ date_column avec l'heure actuelle. Si date_column est de type timestamp, l'expression devrait être date_column < NOW()
; si date_column est de type Unix, l'expression devrait être to_timestamp(date_column) > NOW()
.
La fonction Needle suivante est utilisée pour traiter la date et l'heure au format SQL :
Langage du contrat NEEDLE
Le langage du contrat comprend un ensemble de fonctions, d'opérateurs et de structures, qui permettent de réaliser le traitement algorithmique des données et les opérations de base de données.
Le contenu du contrat peut être modifié si l'autorisation de modification du contrat n'est pas définie sur "fausse". L'historique complet des modifications du contrat est stocké dans la blockchain, ce qui est disponible dans Weaver.
Les opérations de données dans la blockchain sont exécutées conformément à la dernière version du contrat.
Éléments de base et structure
Types de données et variables
Le type de données doit être défini pour chaque variable. Normalement, les types de données sont convertis automatiquement. Les types de données suivants peuvent être utilisés :
bool
- Booléen, true
ou false
; bytes
- un format de byte; Int
- un entier sur 64 bits; Array
- un tableau de n'importe quel type; map
- un tableau d'objets; money
- un grand entier; float
- un nombre à virgule flottante sur 64 bits; string
- une chaîne de caractères doit être définie avec des guillemets doubles ou un format d'échappement : "Ceci est une chaîne de caractères" ou `Ceci est une chaîne de caractères`; file
- un tableau d'objets :
Name
- nom du fichier, de type string
; MimeType
- type MIME du fichier, de type string
; Body
- contenu du fichier, de type bytes
.
Tous les identifiants, y compris les noms de variables, de fonctions et de contrats, sont sensibles à la casse (MyFunc et myFunc sont des noms différents).
Utilisez le mot-clé var pour déclarer une variable, suivi du nom et du type de la variable. Les variables déclarées entre accolades doivent être utilisées dans la même paire d'accolades.
La valeur par défaut de toute variable déclarée est zéro : la valeur zéro du type booléen est false, la valeur zéro de tous les types numériques est 0, et la valeur zéro pour les chaînes de caractères est une chaîne vide. Un exemple de déclaration de variable :
Tableau
Le langage du contrat prend en charge deux types de tableaux :
Array
- un tableau dont l'index commence à 0 ; map
- un tableau d'objets.
Lors de l'allocation et de la récupération des éléments d'un tableau, l'indice doit être placé entre crochets. Les index multiples ne sont pas pris en charge dans le tableau, et les éléments du tableau ne peuvent pas être traités comme myarr[i][j].
Vous pouvez également définir des tableaux de type tableau en spécifiant les éléments entre []
. Pour les tableaux de type map, veuillez utiliser {}
.
Vous pouvez utiliser cette initialisation dans les expressions. Par exemple, utilisez-la dans les paramètres de fonction.
Pour un tableau d'objets, vous devez spécifier une clé. Les clés sont spécifiées en tant que chaînes de caractères entre guillemets doubles (""
). Si le nom de la clé est limité aux lettres, aux chiffres et aux underscores, vous pouvez omettre les guillemets doubles.
Un tableau peut contenir des chaînes de caractères, des nombres, des noms de variables de n'importe quel type, et des noms de variables avec le symbole $
. Il prend en charge les tableaux imbriqués. Vous pouvez spécifier différentes cartes ou tableaux en tant que valeurs.
Les expressions ne peuvent pas être utilisées comme éléments de tableau. Utilisez une variable pour stocker le résultat de l'expression et spécifiez cette variable en tant qu'élément de tableau.
If et While déclarations
Le langage du contrat prend en charge les déclarations conditionnelles standard if et les boucles while, qui peuvent être utilisées dans les contrats et les fonctions. Ces déclarations peuvent être imbriquées les unes dans les autres.
Les déclarations if et while doivent être suivies d'une déclaration conditionnelle. Si la déclaration conditionnelle renvoie un nombre, elle est considérée comme fausse lorsque sa valeur est 0.
val == 0 est équivalent à !val, val != 0 est équivalent à val. L'instruction if peut avoir un bloc de code else, et le else est exécuté lorsque la déclaration conditionnelle if est fausse.
Les opérateurs de comparaison suivants peuvent être utilisés dans les déclarations conditionnelles : <, >, >=, <=, ==, !=, ||, &&
Le bloc de code est exécuté lorsque la condition de l'instruction while est vraie. break signifie terminer la boucle du bloc de code. Si vous souhaitez recommencer une boucle depuis le début, utilisez continue.
En plus des instructions conditionnelles, Needle prend également en charge les opérations arithmétiques standard : +
, -
, *
, /
.
Les variables de type chaîne de caractères et octets peuvent être utilisées comme condition. Si la longueur du type est supérieure à zéro, la condition est vraie, sinon elle est fausse.
Fonctions
Les fonctions peuvent effectuer des opérations sur les données reçues par la section de données d'un contrat : lire et écrire des données dans la base de données, convertir le type de valeur et établir l'interaction entre les contrats.
Déclaration de fonction
Utilisez le mot-clé func
pour déclarer une fonction, suivi du nom et de la liste des paramètres qui lui sont passés ainsi que de leurs types. Tous les paramètres sont enclos entre parenthèses et séparés par des virgules. Après les parenthèses, le type de données de la valeur renvoyée par la fonction doit être déclaré. Le corps de la fonction doit être enclos entre accolades. Si la fonction n'a pas de paramètres, les accolades peuvent être omises. Pour renvoyer une valeur à partir d'une fonction, utilisez le mot-clé return
.
La fonction ne renvoie pas d'erreurs, car toutes les vérifications d'erreur sont effectuées automatiquement. Si une erreur se produit dans n'importe quelle fonction, le contrat mettra fin à son fonctionnement et affichera la description de l'erreur dans une fenêtre.
Paramètres de longueur variable
Les fonctions peuvent définir des paramètres de longueur variable, utilisez le symbole ...
comme dernier type de paramètre de la fonction pour indiquer des paramètres de longueur variable, avec un type de données array
. Les paramètres de longueur variable incluent toutes les variables à partir du moment où le paramètre est passé dans l'appel. Tous les types de variables peuvent être passés, mais vous devez gérer les conflits de types de données incompatibles.
Paramètres optionnels
Une fonction a de nombreux paramètres, mais nous n'avons besoin que de certains d'entre eux lors de son appel. Dans ce cas, vous pouvez déclarer des paramètres optionnels de la manière suivante : func myfunc(name string).Param1(param string).Param2(param2 int) {...}
, puis vous pouvez appeler les paramètres spécifiés dans n'importe quel ordre : myfunc("nom").Param2(100)
.
Dans le corps de la fonction, vous pouvez manipuler ces variables normalement. Si aucun paramètre optionnel spécifié n'est appelé, leurs valeurs par défaut sont zéro. Vous pouvez également utiliser ... pour spécifier un paramètre de longueur variable : func DBFind(table string).Where(request string, params ...)
puis l'appeler : DBFind("matable").Where({" id": $monid, "type": 2})
.
Classification des fonctions Needle
Récupération des valeurs de la base de données :
Mise à jour des données dans les tables :
Opérations avec des tableaux :
Opérations avec des contrats et des autorisations:
Opérations avec des adresses :
Opérations avec des valeurs de variables:
Opérations arithmétiques :
Opérations avec JSON:
Opérations avec des chaînes de caractères:
Opérations avec des octets :
Opérations avec date et heure au format SQL :
Opérations avec les paramètres de la plateforme:
Fonctionnement du mode CLB :
Fonctions pour les nœuds maîtres CLB :
Référence des fonctions Needle
AppParam
Retourne la valeur d'un paramètre d'application spécifié (à partir de la table des paramètres d'application app_params).
Syntaxe
App
Identifiant de l'application.
name
Nom du paramètre de l'application.
Ecosystemid
Identifiant de l'écosystème.
Exemple
DBFind
Interroge les données d'une table spécifiée avec les paramètres spécifiés et renvoie un tableau de tableaux d'objets map.
.Row()
permet d'obtenir le premier élément map dans la requête, .One(column string)
permet d'obtenir le premier élément map d'une colonne spécifiée dans la requête.
Syntaxe
table
Nom de la table.
colonnes
Retourne une liste de colonnes. Si non spécifié, toutes les colonnes seront renvoyées.
La valeur est un tableau ou une chaîne de caractères séparée par des virgules.
où
Conditions de requête.
Exemple: .Where({name: "John"})
ou .Where({"id": {"$gte": 4}})
.
Ce paramètre doit contenir un tableau d'objets avec des critères de recherche. Le tableau peut contenir des éléments imbriqués.
Les constructions syntaxiques suivantes sont utilisées :
{"field1": "value1", "field2": "value2"}
Équivalent à field1 = "value1" ET field2 = "value2"
.
{"field1": {"$eq":"value"}}
Équivalent à field = "value"
.
{"field1": {"$neq": "value"}}
Équivalent à field != "value"
.
{"field1: {"$in": [1,2,3]}}
Équivalent à field IN (1,2,3)
.
{"field1": {"$nin": [1,2,3]}}
Équivalent à field NOT IN (1,2,3)
.
{"field": {"$lt": 12}}
Équivalent à field < 12
.
{"field": {"$lte": 12}}
Équivalent à field <= 12
.
{"field": {"$gt": 12}}
Équivalent à field > 12
.
{"field": {"$gte": 12}}
Équivalent à field >= 12
.
{"$and": [<expr1>, <expr2>, <expr3>]}
Équivalent à expr1 ET expr2 ET expr3
.
{"$or": [<expr1>, <expr2>, <expr3>]}
Équivalent à expr1 OU expr2 OU expr3
.
{field: {"$like": "value"}}
Équivalent à field like '%value%'
(recherche floue).
{field: {"$begin": "value"}}
Équivalent à field like 'value%'
(commence par value
).
{field: {"$end": "value"}}
Équivalent à field like '%value'
(se termine par value
).
{field: "$isnull"}
Équivalent à field is null
.
Assurez-vous de ne pas écraser les clés des tableaux d'objets. Par exemple, si vous souhaitez interroger avec id>2 et id<5
, vous ne pouvez pas utiliser {id:{"$gt": 2}, id:{"$lt": 5}}
, car le premier élément sera écrasé par le deuxième élément. Vous devriez utiliser la structure de requête suivante :
Id
Order
limit
Offset
Ecosystemid
Exemple
DBRow
Interroge les données d'une table spécifiée avec les paramètres spécifiés. Renvoie un tableau de tableaux d'objets map.
Syntaxe
table
Nom de la table.
columns
Retourne une liste de colonnes. Si non spécifié, toutes les colonnes seront renvoyées.
La valeur est un tableau ou une chaîne de caractères séparée par des virgules.
où
Conditions de requête.
Par exemple : .Where({name: "John"})
ou .Where({"id": {"$gte": 4}})
.
Pour plus de détails, consultez DBFind.
Id
Requête par ID. Par exemple, .WhereId(1)
.
Order
Utilisé pour trier l'ensemble des résultats par une colonne spécifiée, ou par id par défaut.
Pour plus de détails, voir DBFind.
Ecosystemid
Identifiant de l'écosystème. Par défaut, la table de l'écosystème actuel est interrogée.
Exemple
DBSelectMetrics
Retourne les données agrégées d'une métrique.
Les métriques sont mises à jour à chaque fois que 100 blocs sont générés. Et les données agrégées sont stockées sur un cycle de 1 jour.
Syntaxe
metric
Nom de la métrique
ecosystem_pages
Nombre de pages d'écosystème.
Valeur de retour : clé - ID de l'écosystème, valeur - nombre de pages d'écosystème.
ecosystem_members
Nombre de membres de l'écosystème.
Valeur de retour : clé - ID de l'écosystème, valeur - nombre de membres de l'écosystème.
ecosystem_tx
Nombre de transactions de l'écosystème.
Valeur de retour : clé - ID de l'écosystème, valeur - nombre de transactions de l'écosystème.
timeInterval
Intervalle de temps pour l'agrégation des données de la métrique. Par exemple : 1 jour
, 30 jours
.
aggregateFunc
Fonction d'agrégation. Par exemple, max
, min
, avg
.
Exemple
EcosysParam
Retourne la valeur d'un paramètre spécifié dans la table des paramètres de l'écosystème.
Syntaxe
Exemple
GetHistory
Retourne l'historique des modifications apportées aux entrées d'une table spécifiée.
Syntaxe
table
Nom de la table.
Id
Identifiant d'entrée.
Valeur de retour
Retourne un tableau d'objets de type map, qui spécifient l'historique des modifications apportées aux entrées des tables.
Chaque tableau contient les champs d'un enregistrement avant de procéder à la prochaine modification.
Le tableau est trié par ordre des modifications les plus récentes.
Le champ id dans le tableau pointe vers l'id de la table rollback_tx. block_id représente l'ID du bloc, tandis que block_time représente l'horodatage de génération du bloc.
Exemple
GetHistoryRow
Retourne un instantané unique de l'historique des modifications d'une entrée spécifiée dans une table spécifiée.
Syntaxe
GetColumnType
Returns the data type of a specified field in a specified table.
Syntaxe
table
Table name.
column
Field Name.
Valeur de retour
The following types can be returned: text, varchar, number, money, double, bytes, json, datetime, double
.
Exemple
GetDataFromXLSX
Returns data from XLSX spreadsheets.
Syntaxe
binId
ID in XLSX format in the binary table binary.
line
The starting line number, starting from 0 by default.
count
The number of rows that need to be returned.
sheet
List number, starting from 1 by default.
Exemple
GetRowsCountXLSX
Returns the number of lines in a specified XLSX file.
Syntaxe
Exemple
LangRes
Returns a multilingual resource with name label for language lang, specified as a two-character code, for example: en
, fr
. If there is no language for a selected language, then the language resource of the en
label is returned.
Syntaxe
Exemple
GetBlock
Returns relevant information about a specified block.
Syntaxe
Valeur de retour
Return an array of objects:
Exemple
DBInsert
Adds an entry to a specified table and return the entry ID.
Syntaxe
Exemple
DBUpdate
Changes the column value of a specified entry ID in a specified table. If the entry ID does not exist in the table, an error is returned.
Syntaxe
Exemple
DBUpdateExt
Modifie la valeur d'une colonne dans une table spécifiée qui correspond à la condition de requête.
Syntaxe
tblname
Nom de la table.
où
Conditions de requête.
Pour plus de détails, consultez DBFind.
params
Un tableau d'objets où les clés sont les noms des champs et les valeurs sont les nouvelles valeurs après les modifications.
Exemple
DelColumn
Supprime un champ dans une table spécifiée qui ne contient aucun enregistrement.
Syntaxe
tblname
Nom de la table.
column
Le champ à supprimer.
DelTable
Supprime une table spécifiée qui ne contient aucun enregistrement.
Syntaxe
Exemple
Append
Insère n'importe quel type de valeur dans le tableau src.
Syntaxe
Ajouter (src tableau, val anyType) tableau
src
Le tableau original.
val
La valeur à insérer.
Exemple
Join
Combine les éléments du tableau en une chaîne de caractères avec un séparateur spécifié.
Syntaxe
In
Nom du tableau.
sep
Séparateur.
Exemple
Split
Utilisez le séparateur "sep" pour diviser la chaîne d'entrée en éléments et les placer dans un tableau.
Syntaxe
In
Chaîne.
sep
Séparateur.
Exemple
Len
Retourne le nombre d'éléments dans un tableau spécifié.
Syntaxe
Exemple
Row
Le paramètre de liste ne doit pas être spécifié dans ce cas. Renvoyez le premier tableau d'objets dans la liste d'arrays. Si la liste est vide, un résultat vide est renvoyé. Cette fonction est principalement utilisée en conjonction avec la fonction DBFind. Lors de l'utilisation de cette fonction, vous ne pouvez pas spécifier de paramètres.
Syntaxe
Exemple
One
Retourne la valeur du champ du premier objet du tableau dans la liste d'arrays. Si la liste est vide, nil est retourné. Cela est principalement utilisé en conjonction avec la fonction DBFind. Lors de l'utilisation de cette fonction, vous ne pouvez pas spécifier de paramètres.
Syntaxe
Le tableau d'objets retourné par la fonction DBFind.
Exemple
GetMapKeys
Retourne le tableau de clés dans le tableau d'objets.
Syntaxe
Exemple
SortedKeys
Retourne un tableau de clés triées dans le tableau d'objets.
Syntaxe
Exemple
CallContract
Appelle le contrat avec un nom spécifié. Tous les paramètres de la section de données dans le contrat doivent être inclus dans un tableau d'objets. Cette fonction renvoie la valeur assignée à la variable $result par un contrat spécifié.
Syntaxe
Exemple
ContractAccess
Vérifie si le nom du contrat en cours d'exécution correspond à l'un des noms répertoriés dans les paramètres. Cela est généralement utilisé pour contrôler l'accès du contrat aux tables. Lors de la modification des champs de table ou de l'insertion et de l'ajout de nouveaux champs de colonne dans la section des autorisations de la table, veuillez spécifier cette fonction dans les champs d'autorisations.
Syntaxe
Exemple
ContractConditions
Appelle la section des conditions dans le contrat avec un nom spécifié.
Pour ce type de contrats, la section des données doit être vide. Si la section des conditions est exécutée sans erreur, elle renvoie true. S'il y a une erreur pendant l'exécution, le contrat parent sera également résilié en raison de l'erreur. Cette fonction est généralement utilisée pour contrôler l'accès du contrat aux tables et peut être appelée dans les champs de permission lors de la modification des tables système.
Syntaxe
Exemple
EvalCondition
Obtient la valeur du champ condfield dans l'enregistrement avec un champ 'name' de la table tablename, et vérifie les conditions de la valeur du champ condfield.
Syntaxe
Exemple
GetContractById
Retourne le nom du contrat en fonction de l'ID du contrat. Si le contrat n'est pas trouvé, une chaîne vide est renvoyée.
Syntaxe
Exemple
GetContractByName
Cette fonction renvoie l'ID de contrat correspondant à son nom de contrat. Si le contrat n'est pas trouvé, zéro est renvoyé.
Syntaxe
Exemple
RoleAccess
Vérifie si l'ID du rôle de l'appelant du contrat correspond à l'un des IDs spécifiés dans le paramètre.
Vous pouvez utiliser cette fonction pour contrôler l'accès du contrat aux tables et autres données.
Syntaxe
Exemple
TransactionInfo
Requêtes les transactions par valeur de hachage spécifiée et renvoie des informations sur le contrat exécuté et ses paramètres.
Syntaxe
Valeur de retour
Cette fonction renvoie une chaîne au format JSON.
Exemple
Throw
Génère une erreur de type exception.
Syntaxe
ErrorId
Identifiant d'erreur.
ErrDescription
Description de l'erreur.
Valeur de retour
Le format de ce type de transaction est le suivant:
Exemple
ValidateCondition
Tente de compiler les conditions spécifiées par le paramètre de condition. S'il y a une erreur pendant le processus de compilation, une erreur est générée et le contrat appelé est terminé. Cette fonction est conçue pour vérifier la correction du format conditionnel.
Syntaxe
condition
Le format conditionnel qui doit être vérifié.
state
Identifiant de l'écosystème. Si vous vérifiez l'état mondial, veuillez le spécifier comme 0.
Exemple
AddressToId
Retourne l'adresse de compte correspondante en fonction de l'adresse de portefeuille. Si une adresse invalide est spécifiée, '0' est retourné.
Syntaxe
Exemple
IdToAddress
Retourne l'adresse de portefeuille correspondante à l'adresse du compte. Si une adresse invalide est spécifiée, l'adresse invalide 'invalid' est renvoyée.
Syntaxe
Exemple
PubToID
L'adresse du compte est renvoyée par la clé publique au format hexadécimal.
Syntaxe
Exemple
DecodeBase64
Retourne une chaîne en spécifiant le format base64
Syntaxe
Input
Chaîne au format base64.
Exemple
EncodeBase64
Retourne une chaîne au format base64 en spécifiant une chaîne.
Syntaxe
Input
La chaîne à encoder.
Exemple
Float
Convertit un entier ou une chaîne de caractères en nombre décimal.
Syntaxe
Exemple
HexToBytes
Convertit une chaîne au format hexadécimal en octets de type byte.
Syntaxe
Exemple
Retourne la valeur de chaîne de exp / 10 ^ digit.
Syntaxe
Exemple
Random
Syntaxe
Exemple
Int
Convertit une valeur au format chaîne de caractères en un entier.
Syntaxe
Exemple
Hash
Retourne le hachage d'un tableau d'octets ou d'une chaîne spécifiée, qui est généré par la bibliothèque de chiffrement système crypto.
Syntaxe
Exemple
Sha256
Retourne le hachage SHA256 d'une chaîne spécifiée.
Syntaxe
Exemple
Str
Convertit un nombre entier int ou un nombre à virgule flottante float en une chaîne de caractères.
Syntaxe
Exemple
JSONEncode
Convertit un nombre, une chaîne de caractères ou un tableau en une chaîne de caractères au format JSON.
Syntaxe
Exemple
JSONEncodeIndent
Utilise l'indentation spécifiée pour convertir un nombre, une chaîne de caractères ou un tableau en une chaîne au format JSON.
Syntaxe
Exemple
JSONDecode
Convertit une chaîne au format JSON en nombre, chaîne de caractères ou tableau.
Syntaxe
Exemple
HasPrefix
Vérifie si la chaîne commence par une chaîne spécifiée.
Syntaxe
Valeur de retour
Si la chaîne commence par une chaîne spécifiée, true
est renvoyé.
Exemple
Contains
Vérifie si la chaîne de caractères contient une sous-chaîne spécifiée.
Syntaxe
Valeur de retour
Si la chaîne contient la sous-chaîne, elle renvoie true
.
Exemple
Remplacer
Remplacez l'ancien (la vieille chaîne) par le nouveau (la nouvelle chaîne) dans la chaîne.
Syntaxe
Exemple
Size
Retourne le nombre d'octets dans une chaîne spécifiée.
Syntaxe
Exemple
Sprintf
Cette fonction crée une chaîne de caractères en utilisant le modèle et les paramètres spécifiés.
Jokers disponibles :
%d
(entier) %s
(chaîne de caractères) %f
(nombre à virgule flottante) %v
(n'importe quel type)
Syntaxe
pattern
Un modèle de chaîne.
Exemple
Substr
Retourne la sous-chaîne obtenue à partir d'une chaîne spécifiée en commençant à l'offset (calculé à partir de 0 par défaut), et la longueur maximale est limitée à length.
Si l'offset ou la longueur est inférieure à zéro, ou si l'offset est supérieur à la longueur, une chaîne vide est renvoyée.
Si la somme de l'offset et de la longueur est supérieure à la taille de la chaîne, alors la sous-chaîne sera renvoyée à partir de l'offset jusqu'à la fin de la chaîne.
Syntaxe
Exemple
ToLower
Renvoie une chaîne spécifiée en minuscules.
Syntaxe
Exemple
ToUpper
Renvoie une chaîne spécifiée en majuscules.
Syntaxe
Exemple
TrimSpace
Supprime les espaces, les tabulations et les sauts de ligne en début et en fin d'une chaîne spécifiée.
Syntaxe
Exemple
Floor
Renvoie la plus grande valeur entière inférieure ou égale à un nombre spécifié, un nombre à virgule flottante et une chaîne de caractères.
Syntaxe
Exemple
Log
Retourne le logarithme naturel d'un nombre spécifié, d'un nombre à virgule flottante et d'une chaîne de caractères.
Syntaxe
Exemple
Log10
Renvoie le logarithme en base 10 d'un nombre, d'un nombre flottant et d'une chaîne spécifiés.
Syntaxe
Exemple
Pow
Renvoie la base spécifiée à la puissance spécifiée (xy).
Syntaxe
x
Numéro de base.
y
Exposant.
Exemple
Round
Renvoie la valeur d'un nombre spécifié arrondi à l'entier le plus proche.
Syntaxe
Exemple
Sqrt
Retourne la racine carrée d'un nombre spécifié.
Exemple
StringToBytes
Convertit une chaîne de caractères en octets.
Syntaxe
Exemple
BytesToString
Convertit des octets en chaîne de caractères.
Syntaxe
Exemple
SysParamString
Retourne la valeur d'un paramètre de plateforme spécifié.
Syntaxe
Exemple
SysParamInt
Retourne la valeur d'un paramètre de plateforme spécifié sous forme de nombre.
Syntaxe
Exemple
DBUpdateSysParam
Met à jour la valeur et les conditions d'un paramètre de plateforme. Si vous n'avez pas besoin de modifier la valeur ou les conditions, veuillez spécifier une chaîne vide dans le paramètre correspondant.
Syntaxe
Exemple
UpdateNotifications
Obtient la liste des notifications d'une clé spécifiée depuis la base de données, et envoie la notification obtenue à Centrifugo.
Syntaxe
EcosystemID
Identifiant de l'écosystème.
key
Une liste d'adresses de compte, séparées par des virgules. Ou vous pouvez utiliser un tableau pour spécifier une liste d'adresses de compte.
Exemple
UpdateRolesNotifications
Obtient la liste des notifications de toutes les adresses de compte d'un ID de rôle spécifié dans la base de données, et envoie la notification obtenue à Centrifugo.
Syntaxe
EcosystemID
Identifiant de l'écosystème.
roles
Une liste d'identifiants de rôles, séparés par des virgules. Ou vous pouvez utiliser un tableau pour spécifier une liste d'identifiants de rôles.
Exemple
HTTPRequest
Envoie des requêtes HTTP à l'adresse spécifiée.
Remarque
Cette fonction ne peut être utilisée que dans les contrats CLB.
Syntaxe
Url
Adresse à laquelle la demande sera envoyée.
method
Type de requête (GET ou POST).
heads
Un tableau d'en-têtes de requête, d'objets.
pars
Paramètres de la demande.
Exemple
HTTPPostJSON
Cette fonction est similaire à la fonction HTTPRequest, mais elle envoie une requête POST et les paramètres de la requête sont des chaînes de caractères.
Remarque
Cette fonction ne peut être utilisée que dans les contrats CLB.
Syntaxe
Url
Adresse à laquelle la demande sera envoyée.
heads
Un tableau d'en-têtes de requête, d'objets.
pars
Paramètres de requête sous forme de chaîne JSON.
Exemple
BlockTime
Retourne le temps de génération du bloc au format SQL.
Syntaxe
Exemple
DateTime
Convertit le timestamp unixtime en une chaîne de caractères au format YYYY-MM-DD HH:MI:SS.
Syntaxe
Exemple
UnixDateTime
Convertit une chaîne au format YYYY-MM-DD HH:MI:SS en un horodatage unixtime
Syntaxe
Exemple
CreateOBS
Crée un CLB enfant.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
Exemple
GetOBSList
Retourne la liste des CLBs enfants.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
Valeur de retour
Un tableau d'objets, où la clé est le nom du CLB et la valeur est l'état du processus.
RunOBS
Un processus en cours d'exécution du CLB.
Cette fonction ne peut être utilisée que dans le mode maître du CLB.
Syntaxe
StopOBS
Arrêtez le processus d'un CLB spécifié.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
RemoveOBS
Supprime le processus d'un CLB spécifié.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
Nom du CLB.
Il ne peut contenir que des lettres et des chiffres, et le symbole d'espace ne peut pas être utilisé.
System Contracts
Les contrats système sont créés par défaut lorsque la plateforme blockchain IBax est lancée. Tous ces contrats ont été créés dans le premier écosystème. C'est pourquoi vous devez spécifier leurs noms complets lors de leur appel à partir d'autres écosystèmes, par exemple, @1NewContract
.
NewEcosystem
Ce contrat crée un nouvel écosystème. Pour obtenir l'ID de l'écosystème créé, vous devez citer le champ de résultat retourné dans txstatus.
Paramètres:
- Name - string - nom de l'écosystème. Il peut être modifié ultérieurement.
EditEcosystemName
Modifie le nom de l'écosystème dans la table 1_ecosystems qui n'existe que dans le premier écosystème.
Paramètres:
- EcosystemID - int - change le nom de l'ID de l'écosystème;
- NewName - string - nouveau nom de l'écosystème.
NewContract
Crée un nouveau contrat dans l'écosystème actuel.
Paramètres:
- ApplicationId - int - l'application à laquelle appartient un nouveau contrat;
- Value - string - code source du contrat. La couche supérieure ne doit avoir qu'un seul contrat;
- Conditions - string - modifie les conditions du contrat;
- TokenEcosystem - int "optionnel" - ID de l'écosystème. Il détermine quel jeton sera utilisé pour les transactions lorsque le contrat est activé.
EditContract
Modifie le contrat dans l'écosystème actuel.
Paramètres:
- Id - int - l'ID du contrat modifié;
- Value - string "optionnel" - code source du contrat;
- Conditions - string "optionnel" - modifie les conditions du contrat.
BindWallet
Liaison du contrat à l'adresse du portefeuille dans l'écosystème actuel. Après liaison avec le contrat, les frais d'exécution du contrat seront payés sous cette adresse.
Paramètres:
- Id - int - l'ID du contrat à lier.
- WalletId - string "optionnel" - l'adresse du portefeuille liée au contrat.
UnbindWallet
Détacher le contrat de l'adresse du portefeuille dans l'écosystème actuel. Seules les adresses liées au contrat peuvent être détachées. Après avoir détaché le contrat, les utilisateurs qui exécutent le contrat devront payer les frais d'exécution.
Paramètres:
- Id - int - l'ID du contrat en cours de liaison.
NewParameter
Un nouveau paramètre d'écosystème a été ajouté à l'écosystème actuel.
Paramètres:
- Nom - string - nom du paramètre;
- Valeur - string - valeur du paramètre;
- Conditions - string - conditions pour modifier le paramètre.
EditParameter
Modifie les paramètres de l'écosystème existant dans l'écosystème actuel.
Paramètres:
- Nom - string - nom du paramètre à modifier;
- Valeur - string - nouvelle valeur du paramètre;
- Conditions - string - nouvelles conditions pour modifier le paramètre.
Ajoute un nouveau menu dans l'écosystème actuel.
Paramètres:
- Nom - string - nom du menu;
- Valeur - string - code source du menu;
- Titre - string "optional" - titre du menu;
- Conditions - string - conditions pour changer le menu.
Modifie le menu existant dans l'écosystème actuel.
Paramètres:
- Id - int - ID du menu à modifier ;
- Value - string "optionnel" - code source du nouveau menu ;
- Title - string "optionnel" - titre du nouveau menu ;
- Conditions - string "optionnel" - nouvelles conditions pour modifier le menu.
Ajoute le contenu du code source aux menus existants dans l'écosystème actuel
Paramètres:
- Id - int - ID du menu ;
- Value - string - code source à ajouter.
NewPage
Ajoute une nouvelle page dans l'écosystème actuel.
Paramètres:
Nom - String - nom de la page ;
Valeur - String - code source de la page ;
Menu - String - nom du menu associé à la page ;
Conditions - String - conditions pour changer la page ;
ValidateCount - int "optionnel" - nombre de nœuds requis pour la validation de la page. Si ce paramètre n'est pas spécifié, la valeur du paramètre d'écosystème min_page_validate_count est utilisée. La valeur de ce paramètre ne peut pas être inférieure à min_page_validate_count et supérieure à max_page_validate_count ;
ValidateMode - int "optional" - mode de vérification de validité de la page. La page sera vérifiée lorsqu'elle est chargée si la valeur de ce paramètre est 0 ; ou vérifiée lorsqu'elle est chargée ou quitte la page si la valeur de ce paramètre est 1.
EditPage
Modifie les pages existantes dans l'écosystème actuel.
Paramètres:
- Id - int - ID de la page à modifier;
- Value - string "optional" - code source de la nouvelle page ;
- Menu - string "optional" - nom du nouveau menu associé à la page ;
- Conditions - string "optional" - nouvelles conditions pour modifier la page ;
- ValidateCount - int "optional" - nombre de nœuds requis pour la validation de la page. Si ce paramètre n'est pas spécifié, la valeur du paramètre d'écosystème min_page_validate_count est utilisée. La valeur de ce paramètre ne peut être inférieure à min_page_validate_count et supérieure à max_page_validate_count ;
- ValidateMode - int "optional" - mode de vérification de la validité de la page. La page sera vérifiée lors de son chargement si la valeur de ce paramètre est 0 ; ou vérifiée lors de son chargement ou de sa sortie de la page si la valeur de ce paramètre est 1.
AppendPage
Ajoute le contenu source aux pages existantes dans l'écosystème actuel.
Paramètres:
- Id - int - ID de la page à modifier;
- Value - string - Le code source à ajouter.
NewBlock
Ajoute un module de page à l'écosystème actuel.
Paramètres:
- Nom - string - nom du module;
- Valeur - string - code source du module;
- Conditions - string - conditions pour modifier le module.
EditBlock
Modifie les modules de page existants dans l'écosystème actuel.
Paramètres:
- Id - int - module ID à changer;
- Value - string - code source du nouveau module;
- Conditions - string - nouvelles conditions pour changer le module.
NewTable
Ajoute une nouvelle table à l'écosystème actuel.
Paramètres:
- ApplicationId - int - ID de l'application de la table associée ;
- Name - string - nom de la nouvelle table ;
- Columns - string - tableau de champs au format JSON
[{"name":"...", "type":"...","index": "0", "conditions":".. ."},...]
, où
- name - nom du champ, uniquement des caractères latins ;
- type - type de données
varchar,bytea,number,datetime,money,text,double,character
; - index - champ non clé primaire
0
, clé primaire 1
; - conditions - conditions pour modifier les données du champ, et les autorisations d'accès doivent être spécifiées au format JSON "
{"update":"ContractConditions(MainCondition)", "read":"ContractConditions(MainCondition)"}
;
- Permissions - string - autorisations d'accès au format JSON
{"insert": "...", "new_column": "...", "update": "...", "read": ".. ."}
.
- insert - autorisation d'insérer des entrées ;
- new_column - autorisation d'ajouter une nouvelle colonne ;
- update - autorisation de modifier les données de l'entrée ;
- read - autorisation de lire les données de l'entrée.
EditTable
Modifie les permissions d'accès d'une table dans l'écosystème actuel.
Paramètres:
- Name - string - nom de la table ;
- InsertPerm - string - autorisation d'insérer des entrées dans la table ;
- UpdatePerm - string - autorisation de mettre à jour les entrées dans la table ;
- ReadPerm - string - autorisation de lire les entrées dans la table ;
- NewColumnPerm - string - autorisation de créer une nouvelle colonne ;
NewColumn
Ajoute un nouveau champ à la table de l'écosystème actuel.
Paramètres:
- TableName - string - nom de la table ;
- Name - string - nom du champ en caractères latins ;
- Type - string - type de données
varchar,bytea,number,money,datetime,text,double,character
; - UpdatePerm - string - autorisation de modifier la valeur dans la colonne ;
- ReadPerm - string - autorisation de lire la valeur dans la colonne.
EditColumn
Modifie les permissions d'un champ de table spécifié dans l'écosystème actuel.
Paramètres:
- TableName - string - nom de la table ;
- Name - string - nom du champ en caractères latins à modifier ;
- UpdatePerm - string - nouvelle autorisation pour modifier la valeur dans la colonne ;
- ReadPerm - string - nouvelle autorisation pour lire la valeur dans la colonne.
NewLang
Ajoute des ressources linguistiques à l'écosystème actuel, et la permission de le faire est définie dans le paramètre changing_language des paramètres de l'écosystème.
Paramètres:
- Name - string - nom des ressources linguistiques en caractères latins
- Trans - string - chaîne au format JSON, avec un code de langue à deux caractères comme clé et la chaîne traduite comme valeur. Par exemple,
{"en": "Texte en anglais", "fr": "Texte en français"}
.
EditLang
Modifie les ressources linguistiques dans l'écosystème actuel, et l'autorisation de le faire est définie dans le paramètre changing_language de l'écosystème.
Paramètres:
- Id - int - ressources linguistiques ID.
- Trans - string En format JSON, avec un code de langue à deux caractères comme clé et la chaîne traduite comme valeur. Par exemple,
{"en": "Texte en anglais", "fr": "Texte en français"}
.
Import
Importe une application dans l'écosystème actuel et importe les données chargées à partir du contrat ImportUpload.
Paramètres:
- Data - string - Données importées au format texte, provenant d'un fichier exporté par l'écosystème.
ImportUpload
Charge un fichier d'application externe dans la table buffer_data de l'écosystème actuel pour une importation ultérieure.
Paramètres:
- InputFile - file - un fichier écrit dans la table buffer_data de l'écosystème actuel.
NewAppParam
Ajoute de nouveaux paramètres d'application à l'écosystème actuel.
Paramètres:
- ApplicationId - int - ID de l'application ;
- Name - string - nom du paramètre ;
- Value - string - valeur du paramètre ;
- Conditions - string - autorisation de modifier le paramètre.
EditAppParam
Modifie les paramètres de l'application existante dans l'écosystème actuel.
Paramètres:
- Id - int - ID du paramètre de l'application ;
- Value - string "optional" - nouvelle valeur du paramètre ;
- Conditions - string "optional" - nouvelles autorisations pour modifier le paramètre.
NewDelayedContract
Ajoute une nouvelle tâche au démon planificateur des contrats retardés.
Le planificateur des contrats retardés exécute les contrats requis par le bloc actuellement généré.
Paramètres:
- Contract - string - nom du contrat ;
- EveryBlock - int - le contrat sera exécuté tous les X blocs ;
- Conditions - string - autorisation de modifier la tâche ;
- BlockID - int "optional" - l'ID du bloc où le contrat doit être exécuté. S'il n'est pas spécifié, il sera calculé automatiquement en ajoutant l'ID du "bloc courant" + EveryBlock ;
- Limit - int "optional" - le nombre maximum d'exécutions de la tâche. S'il n'est pas spécifié, la tâche sera exécutée un nombre illimité de fois.
EditDelayedContract
Modifie une tâche dans le démon planificateur des contrats retardés.
Paramètres:
- Id - int - ID de la tâche ;
- Contract - string - nom du contrat ;
- EveryBlock - int - le contrat sera exécuté tous les X blocs ;
- Conditions - string - autorisation de modifier la tâche ;
- BlockID - int "optional" - l'ID du bloc où le contrat doit être exécuté. S'il n'est pas spécifié, il sera calculé automatiquement en ajoutant l'ID du "bloc courant" + EveryBlock ;
- Limit - int "optional" - le nombre maximum d'exécutions de la tâche. S'il n'est pas spécifié, la tâche sera exécutée un nombre illimité de fois ;
- Deleted - int "optional" - bascule de la tâche. Une valeur de
1
désactivera la tâche. Une valeur de 0
activera la tâche.
UploadBinary
Ajoute ou remplace un fichier statique dans la table X_binaries. Lors de l'appel d'un contrat via l'API HTTP, la requête doit être au format multipart/form-data
; le paramètre DataMimeType sera utilisé en conjonction avec les données du formulaire.
Paramètres:
- Name - string - nom du fichier statique ;
- Data - bytes - contenu du fichier statique ;
- DataMimeType - string "optional" - un fichier statique au format mime-type ;
- ApplicationId - int - l'ID de l'application associée à la table X_binaries.
Si le paramètre DataMimeType n'est pas spécifié, le format application/octet-stream
est utilisé par défaut.