Escribiendo un Esquema

驴Est谩s escribiendo un nuevo complemento de bitxorcore que incluye un nuevo tipo de transacci贸n?

En esta gu铆a, examinaremos c贸mo se construy贸 el transfer.cats en la biblioteca de catbuffer. Puedes adaptar los mismos pasos para definir un nuevo esquema.

Instrucciones

  1. Clona el repositorio de catbuffer-schemas.

    git clone https://github.com/bitxorcorp/bitxor.git
    
  2. Crea un nuevo archivo dentro de la carpeta catbuffer/schemas. En nuestro caso, hemos llamado al archivo transfer.cats.

  3. Define la estructura para el cuerpo de la transacci贸n.

    Piensa en una estructura como un conjunto de propiedades que deseamos almacenar en el mismo bloque de memoria.

    El cuerpo de la transacci贸n contiene las propiedades adicionales que difieren de una transacci贸n b谩sica. Cada atributo puede tener uno de los tipos definidos en types.cats.

    # Dise帽o binario para una transacci贸n de transferencia
    struct TransferTransactionBody
        # destinatario de la transacci贸n
        recipient = UnresolvedAddress
        # tama帽o del mensaje adjunto
        messageSize = uint16
        # n煤mero de tokens adjuntos
        tokensCount = uint8
        # mensaje de la transacci贸n
        message = array(byte, messageSize)
        # tokens adjuntos
        tokens = array(UnresolvedToken, tokensCount, sort_key=tokenId)
    
  4. Define una segunda estructura de transacci贸n en el mismo archivo.

    Esto contendr谩 informaci贸n sobre la versi贸n de la entidad y su identificador. Las propiedades de la transacci贸n subyacente y el cuerpo de la transacci贸n en particular se agregan como elementos en l铆nea.

    # Dise帽o binario para una transacci贸n de transferencia no incrustada
    struct TransferTransaction
        const uint8 version = 3
        const EntityType entityType = 0x4154
    
        inline Transaction
        inline TransferTransactionBody
    
  5. Define una estructura EmbeddedTransaction para serializar las transacciones internas dentro de un conjunto.

    La transacci贸n incrustada y la transacci贸n de cuerpo se agregan como elementos en l铆nea.

    # Dise帽o binario para una transacci贸n incrustada
    struct EmbeddedTransaction
        inline SizePrefixedEntity
        inline EntityBody
    
  6. La biblioteca catbuffer te permite generar los generadores de transacciones a partir del esquema que hemos definido.

    Por ejemplo, ejecuta el siguiente comando para generar c贸digo C++:

    python main.py --schema bitxor/transfer/transfer.cats --generator cpp_builder
    

    El generador crea el archivo de generadores de transacciones en la carpeta _generated/cpp_builder.