Contrats intelligents
- Structure du contrat
- Variables
- Contrats imbriqués
- Téléchargement de fichier
- Requêtes au format JSON
- Requêtes avec des opérations de date et d'heure
- Langage du contrat NEEDLE
- Classification des fonctions Needle
- Référence des fonctions Needle
- AppParam
- DBFind
- DBRow
- DBSelectMetrics
- EcosysParam
- GetHistory
- GetHistoryRow
- GetColumnType
- GetDataFromXLSX
- GetRowsCountXLSX
- LangRes
- GetBlock
- DBInsert
- DBUpdate
- DBUpdateExt
- DelColumn
- DelTable
- Append
- Join
- Split
- Len
- Row
- One
- GetMapKeys
- SortedKeys
- CallContract
- ContractAccess
- ContractConditions
- EvalCondition
- GetContractById
- GetContractByName
- RoleAccess
- TransactionInfo
- Throw
- ValidateCondition
- AddressToId
- IdToAddress
- PubToID
- DecodeBase64
- EncodeBase64
- Float
- HexToBytes
- FormatMoney
- Random
- Int
- Hash
- Sha256
- Str
- JSONEncode
- JSONEncodeIndent
- JSONDecode
- HasPrefix
- Contains
- Remplacer
- Size
- Sprintf
- Substr
- ToLower
- ToUpper
- TrimSpace
- Floor
- Log
- Log10
- Pow
- Round
- Sqrt
- StringToBytes
- BytesToString
- SysParamString
- SysParamInt
- DBUpdateSysParam
- UpdateNotifications
- UpdateRolesNotifications
- HTTPRequest
- HTTPPostJSON
- BlockTime
- DateTime
- UnixDateTime
- CreateOBS
- GetOBSList
- RunOBS
- StopOBS
- RemoveOBS
- System Contracts
- NewEcosystem
- EditEcosystemName
- NewContract
- EditContract
- BindWallet
- UnbindWallet
- NewParameter
- EditParameter
- NewMenu
- EditMenu
- AppendMenu
- NewPage
- EditPage
- AppendPage
- NewBlock
- EditBlock
- NewTable
- EditTable
- NewColumn
- EditColumn
- NewLang
- EditLang
- Import
- ImportUpload
- NewAppParam
- EditAppParam
- NewDelayedContract
- EditDelayedContract
- UploadBinary
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.
contract MyContract {
data {
FromId int
ToId int
Amount money
}
func conditions {
...
}
func action {
...
}
}
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.
contract my {
data {
Name string
RequestId int
Photo file "optional"
Amount money
Private bytes
}
...
}
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 :
if fuel == 0 {
error "fuel cannot be zero!"
}
if money < limit {
warning Sprintf("You don't have enough money: %v <%v", money, limit)
}
if idexist > 0 {
info "You have already been registered"
}
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:
action {
DBUpdate("keys", $key_id, {"-amount": $amount})
DBUpdate("keys", $recipient, {"+amount": $amount, "pub": $Pub})
}
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 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.
contract my {
data {
Name string
Amount money
}
func conditions {
if $Amount <= 0 {
error "Amount cannot be 0"
}
$ownerId = 1232
}
func action {
var amount money
amount = $Amount - 10
DBUpdate("mytable", $ownerId, {name: $Name,amount: amount})
DBUpdate("mytable2", $ownerId, {amount: 10})
}
}
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
.
contract Upload {
data {
File 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.
Requêtes au format JSON
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.
var ret map
var val str
var list array
ret = DBFind("mytable").Columns("myname,doc,doc->ind").WhereId($Id).Row()
val = ret["doc.ind"]
val = DBFind("mytable").Columns("myname,doc->type").WhereId($Id).One("doc->type")
list = DBFind("mytable").Columns("myname,doc,doc->ind").Where("doc->ind = ?", "101")
val = DBFind("mytable").WhereId($Id).One("doc->check")
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()
.
Where("to_timestamp(date_column)> NOW()")
Where("date_column <NOW() - 30 * interval '1 day'")
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
oufalse
;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 typestring
;MimeType
- type MIME du fichier, de typestring
;Body
- contenu du fichier, de typebytes
.
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 :
func myfunc( val int) int {
var mystr1 mystr2 string, mypar int
var checked bool
...
if checked {
var temp int
...
}
}
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].
var myarr array
var mymap map
var s string
myarr[0] = 100
myarr[1] = "This is a line"
mymap["value"] = 777
mymap["param"] = "Parameter"
s = Sprintf("%v, %v, %v", myarr[0] + mymap["value"], myarr[1], mymap["param"])
// s = 877, This is a line, Parameter
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 {}
.
var my map
my={"key1": "value1", key2: i, "key3": $Name}
var mya array
mya=["value1", {key2: i}, $Name]
Vous pouvez utiliser cette initialisation dans les expressions. Par exemple, utilisez-la dans les paramètres de fonction.
DBFind...Where({id: 1})
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.
{key1: "value1", key2: "value2"}
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.
[1+2, myfunc(), name["param"]] // don't do this
[1, 3.4, mystr, "string", $ext, myarr, mymap, {"ids": [1,2, i], company: {"Name": "MyCompany"}} ] // this is ok
var val string
val = my["param"]
MyFunc({key: val, sub: {name: "My name", "color": "Red"}})
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 : <, >, >=, <=, ==, !=, ||, &&
if val> 10 || id != $block_key_id {
...
} else {
...
}
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.
var i int
while true {
if i > 100 {
break
}
...
if i == 50 {
continue
}
...
i = i + 1
}
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
.
func myfunc(left int, right int) int {
return left*right + left - right
}
func test int {
return myfunc(10, 30) + myfunc(20, 50)
}
func ooops {
error "Ooops..."
}
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.
func sum(out string, values ...) {
var i, res int
while i <Len(values) {
res = res + values[i]
i = i + 1
}
Println(out, res)
}
func main() {
sum("Sum:", 10, 20, 30, 40)
}
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})
.
func DBFind(table string).Columns(columns string).Where(format string, tail ...)
.Limit(limit int).Offset(offset int) string {
...
}
func names() string {
...
return DBFind("table").Columns("name").Where({"id": 100}).Limit(1)
}
Classification des fonctions Needle
Récupération des valeurs de la base de données :
AppParam | EcosysParam | GetDataFromXLSX |
DBFind | GetHistory | GetRowsCountXLSX |
DBRow | GetHistoryRow | GetBlock |
DBSelectMetrics | GetColumnType | LangRes |
Mise à jour des données dans les tables :
DBInsert | DBUpdateExt | DelTable |
DBUpdate | DelColumn |
Opérations avec des tableaux :
Append | Len | GetMapKeys |
Join | Row | SortedKeys |
Split | One |
Opérations avec des contrats et des autorisations:
CallContract | GetContractById | TransactionInfo |
ContractAccess | RoleAccess | Throw |
ContractConditions | GetContractByName | ValidateCondition |
EvalCondition |
Opérations avec des adresses :
AddressToId | IdToAddress | PubToID |
Opérations avec des valeurs de variables:
DecodeBase64 | FormatMoney | Hash |
EncodeBase64 | Random | Sha256 |
Float | Int | Str |
HexToBytes |
Opérations arithmétiques :
Floor | Log10 | Round |
Log | Pow | Sqrt |
Opérations avec JSON:
JSONEncode | JSONEncodeIndent | JSONDecode |
Opérations avec des chaînes de caractères:
HasPrefix | Size | ToLower |
Contains | Sprintf | ToUpper |
Replace | Substr | TrimSpace |
Opérations avec des octets :
StringToBytes | BytesToString |
Opérations avec date et heure au format SQL :
BlockTime | DateTime | UnixDateTime |
Opérations avec les paramètres de la plateforme: | | | | | --------- | -------- | ------------ | | SysParamString | SysParamInt | DBUpdateSysParam | | UpdateNotifications | UpdateRolesNotifications | |
Fonctionnement du mode CLB : | | | | | ----------- | ------------ | ---- | | HTTPRequest | HTTPPostJSON | |
Fonctions pour les nœuds maîtres CLB :
CreateOBS | RunOBS | RemoveOBS |
GetOBSList | StopOBS |
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
AppParam(app int, name string, ecosystemid int) string
-
App
Identifiant de l'application.
-
name
Nom du paramètre de l'application.
-
Ecosystemid
Identifiant de l'écosystème.
Exemple
AppParam(1, "app_account", 1)
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
DBFind(table string)
[.Columns(columns array|string)]
[.Where(where map)]
[.WhereId(id int)]
[.Order(order string)]
[.Limit(limit int)]
[.Offset(offset int)]
[.Row()]
[.One(column string)]
[.Ecosystem(ecosystemid int)] array
-
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 parvalue
). -
{field: {"$end": "value"}}
Équivalent àfield like '%value'
(se termine parvalue
). -
{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: [{"$gt": 2}, {"$lt": 5}]}
{"$and": [{id:{"$gt": 2}}, {id:{"$lt": 5}}]}
Id
Requêtes par ID. Par exemple, .WhereId(1).
Order
Utilisé pour trier l'ensemble de résultats par une colonne spécifiée, ou par id par défaut.
Si vous utilisez uniquement un champ pour le tri, vous pouvez le spécifier en tant que chaîne de caractères. Pour trier plusieurs champs, vous devez spécifier un tableau d'objets de chaînes de caractères :
Ordre décroissant : {"field": "-1"}
Équivalent à field desc
.
Ordre croissant : {"field": "1"}
Équivalent à field asc
.
limit
Renvoie le nombre d'entrées. 25, par défaut. Le nombre maximum est de 10 000.
Offset
Décalage.
Ecosystemid
Identifiant de l'écosystème. Par défaut, la table de l'écosystème actuel est interrogée.
Exemple
var i int
var ret string
ret = DBFind("contracts").Columns("id,value").Where({id: [{"$gt": 2}, {"$lt": 5}]}).Order( "id")
while i <Len(ret) {
var vals map
vals = ret[0]
Println(vals["value"])
i = i + 1
}
ret = DBFind("contracts").Columns("id,value").WhereId(10).One("value")
if ret != nil {
Println(ret)
Println(ret)
Println(ret)
}
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
DBRow(table string)
[.Columns(columns array|string)]
[.Where(where map)]
[.WhereId(id int)]
[.Order(order array|string)]
[.Ecosystem(ecosystemid int)] map
-
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
var ret map
ret = DBRow("contracts").Columns(["id","value"]).Where({id: 1})
Println(ret)
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
DBSelectMetrics(metric string, timeInterval string, aggregateFunc string) array
-
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
var rows array
rows = DBSelectMetrics("ecosystem_tx", "30 days", "avg")
var i int
while(i <Len(rows)) {
var row map
row = rows[i]
i = i + 1
}
EcosysParam
Retourne la valeur d'un paramètre spécifié dans la table des paramètres de l'écosystème.
Syntaxe
EcosysParam(name string) string
-
name
Nom du paramètre.
Exemple
Println(EcosysParam("founder_account"))
GetHistory
Retourne l'historique des modifications apportées aux entrées d'une table spécifiée.
Syntaxe
GetHistory(table string, id int) array
-
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
var list array
var item map
list = GetHistory("blocks", 1)
if Len(list) > 0 {
item = list[0]
}
GetHistoryRow
Retourne un instantané unique de l'historique des modifications d'une entrée spécifiée dans une table spécifiée.
Syntaxe
GetHistoryRow(table string, id int, rollbackId int) map
-
table
Nom de la table.
-
Id
Identifiant de l'entrée.
-
rollbackId
rollback_tx The entry ID of the table.
$result = GetHistoryRow("contracts",205,2358)
GetColumnType
Returns the data type of a specified field in a specified table.
Syntaxe
GetColumnType(table, column string) string
-
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
var coltype string
coltype = GetColumnType("members", "member_name")
GetDataFromXLSX
Returns data from XLSX spreadsheets.
Syntaxe
GetDataFromXLSX(binId int, line int, count int, sheet int) string
-
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
var a array
a = GetDataFromXLSX(3, 12, 10, 1)
GetRowsCountXLSX
Returns the number of lines in a specified XLSX file.
Syntaxe
GetRowsCountXLSX(binId int, sheet int) int
-
binId
ID in XLSX format in the binary table binary.
-
sheet
List number, starting from 1 by default.
Exemple
var count int
count = GetRowsCountXLSX(binid, 1)
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
LangRes(label string, lang string) string
-
label
Language resource name.
-
lang
Two-character language code.
Exemple
warning LangRes("@1confirm", "en")
error LangRes("@1problems", "fr")
GetBlock
Returns relevant information about a specified block.
Syntaxe
GetBlock(blockID int64) map
-
blockID
Block ID.
Valeur de retour
Return an array of objects:
-
id
Block ID.
-
time
Block generation timestamp.
-
key_id
The account address of the verification node generated the block.
-
Exemple
var b map
b = GetBlock(1)
Println(b)
DBInsert
Adds an entry to a specified table and return the entry ID.
Syntaxe
DBInsert(table string, params map) int
-
tblname
Table name.
-
params
An array of objects where keys are field names and values are inserted values.
Exemple
DBInsert("mytable", {name: "John Smith", amount: 100})
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
DBUpdate(tblname string, id int, params map)
-
tblname
Table name.
-
Id
Identifiant de l'entrée.
-
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
DBUpdate("mytable", myid, {name: "John Smith", amount: 100})
DBUpdateExt
Modifie la valeur d'une colonne dans une table spécifiée qui correspond à la condition de requête.
Syntaxe
DBUpdateExt(tblname string, where map, params map)
-
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
DBUpdateExt("mytable", {id: $key_id, ecosystem: $ecosystem_id}, {name: "John Smith", amount: 100})
DelColumn
Supprime un champ dans une table spécifiée qui ne contient aucun enregistrement.
Syntaxe
DelColumn(tblname string, column string)
-
tblname
Nom de la table.
-
column
Le champ à supprimer.
DelColumn("mytable", "mycolumn")
DelTable
Supprime une table spécifiée qui ne contient aucun enregistrement.
Syntaxe
DelTable(tblname string)
-
tblname
Nom de la table.
Exemple
DelTable("mytable")
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
var list array
list = Append(list, "new_val")
Join
Combine les éléments du tableau en une chaîne de caractères avec un séparateur spécifié.
Syntaxe
Join(in array, sep string) string
-
In
Nom du tableau.
-
sep
Séparateur.
Exemple
var val string, myarr array
myarr[0] = "first"
myarr[1] = 10
val = Join(myarr, ",")
Split
Utilisez le séparateur "sep" pour diviser la chaîne d'entrée en éléments et les placer dans un tableau.
Syntaxe
Split(in string, sep string) array
-
In
Chaîne.
-
sep
Séparateur.
Exemple
var myarr array
myarr = Split("first,second,third", ",")
Len
Retourne le nombre d'éléments dans un tableau spécifié.
Syntaxe
Len(val array) int
-
val
Tableau.
Exemple
if Len(mylist) == 0 {
...
}
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
Row(list array) map
-
list
Le tableau d'objets retourné par la fonction DBFind.
Exemple
var ret map
ret = DBFind("contracts").Columns("id,value").WhereId(10).Row()
Println(ret)
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
One(list array, column string) string
- list
Le tableau d'objets retourné par la fonction DBFind.
-
column
Nom du champ.
Exemple
var ret string
ret = DBFind("contracts").Columns("id,value").WhereId(10).One("value")
if ret != nil {
Println(ret)
}
GetMapKeys
Retourne le tableau de clés dans le tableau d'objets.
Syntaxe
GetMapKeys(val map) array
-
val
Tableau d'objets.
Exemple
var val map
var arr array
val["k1"] = "v1"
val["k2"] = "v2"
arr = GetMapKeys(val)
SortedKeys
Retourne un tableau de clés triées dans le tableau d'objets.
Syntaxe
SortedKeys(val map) array
-
val
Tableau d'objets.
Exemple
var val map
var arr array
val["k2"] = "v2"
val["k1"] = "v1"
arr = SortedKeys(val)
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
CallContract(name string, params map)
-
name
Le nom du contrat qui est appelé.
-
params
Un tableau associatif des données d'entrée du contrat.
Exemple
var par map
par["Name"] = "My Name"
CallContract("MyContract", par)
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
ContractAccess(name string, [name string]) bool
-
name
Nom du contrat.
Exemple
ContractAccess("MyContract")
ContractAccess("MyContract","SimpleContract")
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
ContractConditions(name string, [name string]) bool
-
name
Nom du contrat.
Exemple
ContractConditions("MainCondition")
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
EvalCondition(tablename string, name string, condfield string)
-
tablename
Nom de la table.
-
name
Interroge la valeur avec le champ 'name'.
-
condfield
Le nom du champ dont les conditions doivent être vérifiées.
Exemple
EvalCondition(`menu`, $Name, `conditions`)
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
GetContractById(id int) string
-
Id
L'identifiant du contrat dans la table des contrats est contracts.
Exemple
var name string
name = GetContractById($IdContract)
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
GetContractByName(name string) int
-
name
Le nom du contrat dans la table des contrats est "contrats".
Exemple
var id int
id = GetContractByName(`NewBlock`)
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
RoleAccess(id int, [id int]) bool
-
Id
Identifiant de rôle.
Exemple
RoleAccess(1)
RoleAccess(1, 3)
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
TransactionInfo(hash: string)
-
hash
Hachage de transaction au format de chaîne hexadécimale.
Valeur de retour
Cette fonction renvoie une chaîne au format JSON.
{"contract":"ContractName", "params":{"key": "val"}, "block": "N"}
-
contract
Nom du contrat.
-
params
Données transmises aux paramètres du contrat.
-
block
ID du bloc qui a traité la transaction.
Exemple
var out map
out = JSONDecode(TransactionInfo(hash))
Throw
Génère une erreur de type exception.
Syntaxe
Throw(ErrorId string, ErrDescription string)
-
ErrorId
Identifiant d'erreur.
-
ErrDescription
Description de l'erreur.
Valeur de retour
Le format de ce type de transaction est le suivant:
{"type":"exception","error":"Error description","id":"Error ID"}
Exemple
Throw("Problem", "There is a problem")
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
ValidateCondition(condition string, state int)
-
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
ValidateCondition(`ContractAccess("@1MyContract")`, 1)
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
AddressToId(address string) int
-
Address
Adresse de portefeuille au format
XXXX-...-XXXX
ou au format numérique.
Exemple
wallet = AddressToId($Recipient)
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
IdToAddress(id int) string
-
Id
Adresse du compte.
Exemple
$address = IdToAddress($id)
PubToID
L'adresse du compte est renvoyée par la clé publique au format hexadécimal.
Syntaxe
PubToID(hexkey string) int
-
hexkey
La clé publique au format hexadécimal.
Exemple
var wallet int
wallet = PubToID("04fa5e78.....34abd6")
DecodeBase64
Retourne une chaîne en spécifiant le format base64
Syntaxe
DecodeBase64(input string) string
-
Input
Chaîne au format base64.
Exemple
val = DecodeBase64(mybase64)
EncodeBase64
Retourne une chaîne au format base64 en spécifiant une chaîne.
Syntaxe
EncodeBase64(input string) string
-
Input
La chaîne à encoder.
Exemple
var base64str string
base64str = EncodeBase64("my text")
Float
Convertit un entier ou une chaîne de caractères en nombre décimal.
Syntaxe
Float(val int|string) float
-
val
Un entier ou une chaîne de caractères.
Exemple
val = Float("567.989") + Float(232)
HexToBytes
Convertit une chaîne au format hexadécimal en octets de type byte.
Syntaxe
HexToBytes(hexdata string) bytes
-
hexdata
Une chaîne au format hexadécimal.
Exemple
var val bytes
val = HexToBytes("34fe4501a4d80094")
FormatMoney
Retourne la valeur de chaîne de exp / 10 ^ digit.
Syntaxe
FormatMoney(exp string, digit int) string
-
Exp
Un nombre au format de chaîne de caractères.
-
digit
L'exposant (positif ou négatif) de 10 dans l'expression
Exp/10^digit
. Les valeurs positives déterminent les décimales.
Exemple
s = FormatMoney("78236475917384", 0)
Random
Returns a random number between min and max (min <= result <max). Both min and max must be positive numbers.
Syntaxe
Random(min int, max int) int
-
min
La valeur minimale parmi les nombres aléatoires.
-
max
La limite supérieure des nombres aléatoires. Le nombre aléatoire généré sera inférieur à cette valeur.
Exemple
i = Random(10,5000)
Int
Convertit une valeur au format chaîne de caractères en un entier.
Syntaxe
Int(val string) int
-
val
Un nombre au format de chaîne de caractères.
Exemple
mystr = "-37763499007332"
val = Int(mystr)
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
Hash(val interface{}) string, error
-
val
Une chaîne de caractères ou un tableau d'octets.
Exemple
var hash string
hash = Hash("Test message")
Sha256
Retourne le hachage SHA256 d'une chaîne spécifiée.
Syntaxe
Sha256(val string) string
-
val
Une chaîne nécessite l'opération de hachage Sha256.
Exemple
var sha string
sha = Sha256("Test message")
Str
Convertit un nombre entier int ou un nombre à virgule flottante float en une chaîne de caractères.
Syntaxe
Str(val int|float) string
-
val
Un nombre entier ou décimal.
Exemple
myfloat = 5.678
val = Str(myfloat)
JSONEncode
Convertit un nombre, une chaîne de caractères ou un tableau en une chaîne de caractères au format JSON.
Syntaxe
JSONEncode(src int|float|string|map|array) string
-
src
Data to convert.
Exemple
var mydata map
mydata["key"] = 1
var json string
json = JSONEncode(mydata)
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
JSONEncodeIndent(src int|float|string|map|array, indent string) string
-
src
Données à convertir.
-
Indent
La chaîne sera utilisée comme indentation.
Exemple
var mydata map
mydata["key"] = 1
var json string
json = JSONEncodeIndent(mydata, "\t")
JSONDecode
Convertit une chaîne au format JSON en nombre, chaîne de caractères ou tableau.
Syntaxe
JSONDecode(src string) int|float|string|map|array
-
src
Une chaîne contenant des données au format JSON.
Exemple
var mydata map
mydata = JSONDecode(`{"name": "John Smith", "company": "Smith's company"}`)
HasPrefix
Vérifie si la chaîne commence par une chaîne spécifiée.
Syntaxe
HasPrefix(s string, prefix string) bool
-
s
Une chaîne de caractères.
-
prefix
Le préfixe à vérifier.
Valeur de retour
Si la chaîne commence par une chaîne spécifiée, true
est renvoyé.
Exemple
if HasPrefix($Name, `my`) {
...
}
Contains
Vérifie si la chaîne de caractères contient une sous-chaîne spécifiée.
Syntaxe
Contains(s string, substr string) bool
-
s
Une chaîne de caractères.
-
substr
Une sous-chaîne.
Valeur de retour
Si la chaîne contient la sous-chaîne, elle renvoie true
.
Exemple
if Contains($Name, `my`) {
...
}
Remplacer
Remplacez l'ancien (la vieille chaîne) par le nouveau (la nouvelle chaîne) dans la chaîne.
Syntaxe
Replace(s string, old string, new string) string
-
s
La chaîne originale.
-
Old
La sous-chaîne à remplacer.
-
new
La nouvelle chaîne.
Exemple
s = Replace($Name, `me`, `you`)
Size
Retourne le nombre d'octets dans une chaîne spécifiée.
Syntaxe
Size(val string) int
-
val
Une chaîne de caractères.
Exemple
var len int
len = Size($Name)
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
Sprintf(pattern string, val ...) string
-
pattern
Un modèle de chaîne.
Exemple
out = Sprintf("%s=%d", mypar, 6448)
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
Substr(s string, offset int, length int) string
-
val
Une chaîne de caractères.
-
Offset
Décalage.
-
length
Longueur de la sous-chaîne.
Exemple
var s string
s = Substr($Name, 1, 10)
ToLower
Renvoie une chaîne spécifiée en minuscules.
Syntaxe
ToLower(val string) string
-
val
Une chaîne de caractères.
Exemple
val = ToLower(val)
ToUpper
Renvoie une chaîne spécifiée en majuscules.
Syntaxe
ToUpper(val string) string
-
val
Une chaîne de caractères.
Exemple
val = ToUpper(val)
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
TrimSpace(val string) string
-
val
Une chaîne de caractères.
Exemple
var val string
val = TrimSpace(" mystr ")
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
Floor(x float|int|string) int
-
x
Un nombre, un nombre décimal et une chaîne de caractères.
Exemple
val = Floor(5.6) // returns 5
Log
Retourne le logarithme naturel d'un nombre spécifié, d'un nombre à virgule flottante et d'une chaîne de caractères.
Syntaxe
Log(x float|int|string) float
-
x
Un nombre, un nombre décimal et une chaîne de caractères.
Exemple
val = Log(10)
Log10
Renvoie le logarithme en base 10 d'un nombre, d'un nombre flottant et d'une chaîne spécifiés.
Syntaxe
Log10(x float|int|string) float
-
x
Un nombre, un nombre décimal et une chaîne de caractères.
Exemple
val = Log10(100)
Pow
Renvoie la base spécifiée à la puissance spécifiée (xy).
Syntaxe
Pow(x float|int|string, y float|int|string) float
-
x
Numéro de base.
-
y
Exposant.
Exemple
val = Pow(2, 3)
Round
Renvoie la valeur d'un nombre spécifié arrondi à l'entier le plus proche.
Syntaxe
Round(x float|int|string) int
-
x
Un numéro.
Exemple
val = Round(5.6)
Sqrt
Retourne la racine carrée d'un nombre spécifié.
Sqrt(x float|int|string) float
-
x
Un numéro.
Exemple
val = Sqrt(225)
StringToBytes
Convertit une chaîne de caractères en octets.
Syntaxe
StringToBytes(src string) bytes
-
src
Une chaîne de caractères.
Exemple
var b bytes
b = StringToBytes("my string")
BytesToString
Convertit des octets en chaîne de caractères.
Syntaxe
BytesToString(src bytes) string
-
src
Octet.
Exemple
var s string
s = BytesToString($Bytes)
SysParamString
Retourne la valeur d'un paramètre de plateforme spécifié.
Syntaxe
SysParamString(name string) string
-
name
Nom du paramètre.
Exemple
url = SysParamString(`blockchain_url`)
SysParamInt
Retourne la valeur d'un paramètre de plateforme spécifié sous forme de nombre.
Syntaxe
SysParamInt(name string) int
-
name
Nom du paramètre.
Exemple
maxcol = SysParam(`max_columns`)
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
DBUpdateSysParam(name, value, conditions string)
-
name
Nom du paramètre.
-
value
Nouvelle valeur d'un paramètre.
-
conditions
Nouvelles conditions pour mettre à jour un paramètre.
Exemple
DBUpdateSysParam(`fuel_rate`, `400000000000`, ``)
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
UpdateNotifications(ecosystemID int, keys int...)
-
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
UpdateNotifications($ecosystem_id, $key_id, 23345355454, 35545454554)
UpdateNotifications(1, [$key_id, 23345355454, 35545454554])
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
UpdateRolesNotifications(ecosystemID int, roles int ...)
-
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
UpdateRolesNotifications(1, 1, 2)
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
HTTPRequest(url string, method string, heads map, pars map) string
-
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
var ret string
var ret string
var ret string
var pars, heads, json map
heads["Authorization"] = "Bearer "+ $auth_token
pars["obs"] = "true"
ret = HTTPRequest("http://localhost:7079/api/v2/content/page/default_page","POST", heads, pars)
json = JSONToMap(ret)
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
HTTPPostJSON(url string, heads map, pars string) string
-
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
var ret string
var ret string
var ret string
var heads, json map
heads["Authorization"] = "Bearer "+ $auth_token
ret = HTTPPostJSON("http://localhost:7079/api/v2/content/page/default_page", heads, `{"obs":"true"}`)
json = JSONToMap(ret)
BlockTime
Retourne le temps de génération du bloc au format SQL.
Syntaxe
BlockTime()
Exemple
var mytime string
mytime = BlockTime()
DBInsert("mytable", myid, {time: mytime})
DateTime
Convertit le timestamp unixtime en une chaîne de caractères au format YYYY-MM-DD HH:MI:SS.
Syntaxe
DateTime(unixtime int) string
Exemple
DateTime(1532325250)
UnixDateTime
Convertit une chaîne au format YYYY-MM-DD HH:MI:SS en un horodatage unixtime
Syntaxe
UnixDateTime(datetime string) int
Exemple
UnixDateTime("2018-07-20 14:23:10")
CreateOBS
Crée un CLB enfant.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
CreateOBS(OBSName string, DBUser string, DBPassword string, OBSAPIPort int)
-
OBSName
Nom du CLB.
-
DBUser
Le nom du rôle de la base de données.
-
DBPassword
Le mot de passe du rôle.
-
OBSAPIPort
Le port de la requête API.
Exemple
CreateOBS("obsname", "obsuser", "obspwd", 8095)
GetOBSList
Retourne la liste des CLBs enfants.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
GetOBSList()
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
RunOBS(OBSName string)
-
OBSName
Nom du CLB.
Il ne peut contenir que des lettres et des chiffres, et le symbole d'espace ne peut pas être utilisé.
StopOBS
Arrêtez le processus d'un CLB spécifié.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
StopOBS(OBSName string)
-
OBSName
Nom du CLB.
Il ne peut contenir que des lettres et des chiffres, et le symbole d'espace ne peut pas être utilisé.
RemoveOBS
Supprime le processus d'un CLB spécifié.
Cette fonction ne peut être utilisée qu'en mode CLB maître.
Syntaxe
RemoveOBS(OBSName string)
- OBSName
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.
NewMenu
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.
EditMenu
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.
AppendMenu
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é primaire1
; - 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 de0
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.