bcnet

Estructuras

Por enrique ()


#fn

Define un bloque de código que se llama desde #fn_name y retorna (desde donde fue llamado) con #rtn. Al retornar vuelve a la siguiente instrucción inmediata.

Los tipos var son privados a la fn.

una fn puede ser perteneciente a un sec, se declara como #fn: fnName@this, arg1, arg2, argX;

No se puede usar @this fuera de un sec.


#sec

Define un sub bloque de código ( para poder ser extraído RAW para poder hacer un hasheo parcial de sus datos).

Los argumentos requeridos para un sec son:

1: hash del contenido del sec.

2: La llave publica con que se firma el contenido del sec.

El sec finaliza en #endSec

El argumento requerido para un endSec es:

1: Firma del contenido del sec.

Ejemplo de uso:

#sec: secHash, publicKey;

      #....mi sec code

#endSec: secSiganture;


#main

Define un sub bloque que sera llamado con cada parseo de cada bloque...allí están contenidas las reglas de la red escrito en el lenguaje de script de bcnet.

Termina en #endMain


#sub

Define un sub bloque de código. Comparte el ámbito global del tipo var.


#sub_name@event

Igual que los sub pero que solo es llamado en un evento durante la ejecución, se debe definir dentro de main.

Ideal para hacer primeras-ultimas comprobaciones.

Son optativos.

start@event al comienzo de ejecución.

end@event al final ejecución.

newTx@event al recibir un tx.

otros@event antes de end@event

#div (obsoleto ?)

Define un sub bloque de código para poder ser extraido RAW para poder hacer un hasheo parcial de sus datos.. termina en endDiv (obsoleto?)


Tx

Cuando se recibe una tx, el driver prueba la tx en una ejecución de bloque tentativo:

La tx se agrega un header de blockId + 1, se parsea y se hay exito se llama a newTx@event

newTx script -> buffer

Estructura bloque génesis

[cabecera]

Id

hash

firma

[cuerpo]

statics

main

Inits

fn

Subs

sec

Subs@event

[de uso]

txs

etc...

//Estructura bloque regular

[cabecera]

Id

hash

firma

[cuerpo]

statics

[de uso]

sec

etc....


--------------------------------------------------------------------

Flujo de parseo de bloques

1) Se lee la cabecera, y cargan los datos que contienen en MAC, luego se la retira del bloque.

2) Se leen los statics y se cargan en MAC. Si estamos en un bloque genesis, --> la MAC entra en modo protegido <--

3) se carga el programa definido por main <--> endMain y se parsea...la MAC toma los valores

4) se parsea la seccion "de uso"...

5) fin con el resultado

Resumen de reglas de operación