bcnet
Lista comandos
tipos vars, cons y prots
"headerStatic"
Define constantes cuando lee la cabecera del bloque, ANTES de la ejecución
solo se puede usar una etiqueta una vez;
solo argumentos literales
formato: [indice_nombre],[valor]
#headerStatic:myconstant,154657;
"static"
Define constantes antes de hacer nada: 1º pasada, ANTES de la ejecución
solo se puede usar una etiqueta una vez;
solo argumentos literales
formato: [indice_nombre],[valor]
define: myconstant,154657;
"set" -----> revisar si es necesario
Define constantes o vars;
formato: [indice_nombre],[valor]
set: my@cons, num;
set: my@cons, num@const;
en modo protegido puede escribir en prot
#set: my@prot, num@const;
"setRef" -----> revisar si es necesario
rellena array de constantes, vars prots , referenciado por el valor de otra
formato: [var,prot,cons], [indice_nombre, literal], [space]
#setRef: tmp2@var, addressIn@var, prot;
#setRef: tmp2@var, addressIn@var, prot;
"define"
Define constantes en tiempo de ejecución
solo se puede usar una etiqueta una vez;
formato: [indice_nombre],[valor]
#define: myconstant,154657;
#define: myconstant, my@var;
"var"
rellena un array con una var, declarada literal ejem: mivar o referenciada a otra var cons o prot ejemplo: minombre@var
formato: [indice_nombre (txt)],[valor]
#var: myar, m154657;
puede definir un indice_nombre con el valor de otra variable
#var: una_var_definida@var, unvalordeunavardefinida@var;
ejemplo:
#define: myconst, nombre;
#var: myconst@cons, 1234; -> nombre = 1234;
"unset"
borra una var
#unSet:myar;
también:
#unSet: una_var_definida@var, unvalordeunavardefinida@var;
"prot"
rellena un array con un prot, declarado literal ejem: miprot o referenciada a otra var cons o prot ejemplo: minombre@var
#prot: myprotvar, m154657;
#prot: una_var_definida@var, unvalordeunavardefinida@var;
#define: myconst, nombre;
#prot: myconst@cons, 1234; -> nombre = 1234;
"required"
comprueba si una var, cons o prot esta definido
detiene la ejecución en caso de falso
#required:myconstant@space;
"check" -----> revisar si es necesario (duplicado de required??)
comprueba si una var cons o prot (solo posible en modo protegido) existe en mac
#check: result2@cons,algo@var;
"checkDatInSpace" -----> revisar si es necesario (podria ser dentro de required o si fuera necesario cambair nombre a requiredHs)
comprueba si un indice esta definido en un space
#check: bool@var, myconstant@space, space;
#check: result@var, miadd@var, prot;
"setSpace"
crea espacio para (constantes, vars y functions?¿) prot
formato: [indice_nombre][valor]
"setProtSpa"
rellena un hspace con prots.
#setProtSpa: premio@cons, coinName@cons, address@var;
#setProtSpa: value, index, space;
"mainHome"
set el prot especial con el blockId donde se busca el main
este prot es un caso especial porque execbcnet lo busca en ultimo bloque de la cadena (antes de buscar el main)
ejem:
#mainHome: 1; // set como mainhome al block id 1
Estructuras
"Fn"
crea una función, las variables están aisladas, se puede pasar argumentos y devolver un resultado
se llaman con
#nombreMiFn:;
"sub"
engloba código bajo la etiqueta para ser llamado con callSub
puede haber funciones anidadas, pero si se vuelve a llamar a la función padre se redefinen y produce error
#function: myfuncion;
"rtnSub"
retorna de la función a la siguiente instrucción del programa
#callfunction: myfuncion;
"callSub"
Llama a un sub
#callfunction: myfuncion;
"if"
ejecuta un bloque de codigo si cumple una condicion logica
puede estar anidado
op: equal, not, may, min, minEqual, mayEqual
#if:myvar@var,equal,mycons@const;
"endIf"
cierra el if
#endIf:;
"getBlockDiv"
trae una parte de un bloque (RAW) delimitado entre div .... endDiv
#div: var...cons, var....cons....literal ;
"main"
aquí reside el programa de la red, que se carga para parsear cada bloque nuevo
solo se puede definir una vez, y presentar un solo main alternativo
"endMain"
cierra el bloque especial main
"div"
divide una sección del bloque, útil para hashear
#div: mypart;
"endDiv"
delimita el final de una parte del bloque
#endDiv:;
Math y crypto
"addVar"
suma un numero o una var cons o prot (si se puede) referenciado (@cons...) y una var (literal)
addVar: myvar,154657;
addVar: myvar, mydato@var;
"sigVerif"
verifica la firma de un hash con la clave publica
sigVerf: result@var, dataToSig@var, signature@var, pubkey;
"mkSha256" ?????
hace el hash de una var, cons, prot (si esta disponible)
mkSha256: variableResul,varibleIn;
"mkHash"
hash con sha256, ripemd160, crc32b, md5, tiger160
#mkHash: Result, data, alg;
"mathVar"
opera numero y una var cons o prot (si se puede) referenciado (@cons...@var) y una var (literal)
mathVar:myvar, add,154657;
mathVar:myvar, add, dato@cons;
"add"
suma var, const y nums
add:result,varmyvar,constmyconst;
add:resultado@con, mydat1@var, dat2@cons;
"math"
suma var, const y nums
math:result,var1,op,var2;
op: add, sub, mul, div
math:resultado@var, var1@prot , add, var2@cons;
Db y sistema
"getSystemTime"
obtiene la hora actual (float) del sistema
getSystemTime: myhora@cons;
"getBlockRaw"
obtiene los datos del bloque crudo
getBlockRaw: mybloque@var;
"getFromBc"
[result] [block_id] [var@space]
Trae un dato desde la db...
el tercer par. es la variable y el espacio en el bloque
#GetDatBc: tmp@var, txInBlockId, nodeAdd@var;
#GetDatBc: tmp@var, txInBlockId, ->nodeAdd@[var];
"getProtFromSpaBc" ---> revisar
atención: si el espacio o el prot no esta definido devuelve 0
el tercer argumento toma el valor que tiene la variable local, es necesario
especificar el espacio donde encontrar el dato (space)
#getFromBcSpace: result, name, space;
#getFromBcSpace: tmp@var, index@var, add@var;