Get a 10% discount when purchasing Tangem Wallet using the code!
CRIPSIS-XYZ

Chia 🌱 - DataPlayer, trabaja con DataLayer como un humano

Facilita la interacción con Chia DataLayer, encripta y codifica tus datos con contraseña mediante esta herramienta

3 min read
Chia 🌱 - DataPlayer, trabaja con DataLayer como un humano
  • Trabajar con datos en hexadecimal no es cómodo de administrar, tanto para leer como para escribir
  • Que cualquiera que se suscriba a tu datastore pueda ver los datos en crudo puede suponer un compromiso

DataPlayer es una herramienta que viene a cubrir esos problemas ya que permite leer y escribir datos en DataLayer con lenguaje humano, funcionando como un puente entre el usuario y Chia DL.

Codificación y encriptado con COSE

(CBOR Object Signing and Encryption) es un formato de datos para la representación concisa de mensajes. Está optimizado para dispositivos de bajo consumo. Los mensajes COSE se pueden cifrar, usar MAC y firmar. A día de hoy DataPlayer funciona únicamente con cifrado MAC0.

diagrama de funcionamiento de dataplayer
diagrama de funcionamiento de dataplayer

Repositorio

Puedes encontrar el repositorio con el código original en mi Github.

Requisitos

Un intérprete de python3 y la biblioteca pipenv, para crear y utilizar el entorno virtual.

pip3 install pipenv

Uso

Entorno

Instala el entorno con

pipenv install

Accede al entorno con

pipenv shell

También se puede ejecutar datalayer directamente sin entrar al entorno:

pipenv run python dataplayer --help

usage: dataplayer datastore [-h] ...
...

Configuración

Se carga el archivo config.yaml (en la raíz del proyecto) por defecto. Edítalo si no estás usando DataPlayer en la misma máquina que el nodo operativo de Chia.

Estructura config.yaml:

---
rpc_connector: 
  host: "localhost" #Host of the wallet
  private_wallet_cert_path: "~/.chia/mainnet/config/ssl/wallet/private_wallet.crt" #Private certificate to connect with RPC
  private_wallet_key_path: "~/.chia/mainnet/config/ssl/wallet/private_wallet.key" #Key of the certificate to connect with RP
  service_ports: 
    wallet: 9256 #TCP Port of wallet RPC
    datalayer: 8562 #TCP Port of datalayer RPC
  service_wallets: 
    chia: 1 #ID of Chia wallet (default)
    datalayer: 2 #ID of datalayer wallet (default)

log_level: "WARNING" #Log level (DEBUG, INFO, WARNING, ERROR) (default WARNING)

Archivo .env

Si se va utilizar el codec de COSE, editar el archivo .env y setear correctamente la variable de entorno COSE_KEY, siguiendo el mismo formato de clave HMAC-SHA-MD5 de 32 caracteres.

cat .env
COSE_KEY=03d4f7f0611f28563a318c64f8b0852b
⚠️
En caso de no especificar una clave por variable de entorno, se utilizará la clave por defecto

Argumentos

usage: dataplayer datastore [-h] --id ID [--codec {hex,cose}] --action {update_key,read_key,list_keys} [--key KEY] [--value VALUE]
                            [--cose-ph COSE_PH [COSE_PH ...]] [--cose-uh COSE_UH [COSE_UH ...]]

optional arguments:
  -h, --help            show this help message and exit
  --id ID, -i ID        Datastore ID
  --codec {hex,cose}, -c {hex,cose}
                        Encoding type for reading or updating (default hex)
  --action {update_key,read_key,list_keys}, -a {update_key,read_key,list_keys}
                        Action to execute over datastore (required)
  --key KEY, -k KEY     Key of selection (required for read_key, update_key actions)
  --value VALUE, -v VALUE
                        Value for update_key action (optional)
  --cose-ph COSE_PH [COSE_PH ...], -cph COSE_PH [COSE_PH ...]
                        List of protected headers to store for update_key action and cose codec (optional). Format: FOO=BAR ABC=XYZ
  --cose-uh COSE_UH [COSE_UH ...], -cuh COSE_UH [COSE_UH ...]
                        List of unprotected headers to store for update_key action and cose codec (optional). Format: FOO=BAR ABC=XYZ

Ejemplos de uso

Listar claves de un datastore

./dataplayer datastore --id="2530caa7911d0c7c3b93f53927f0fd5bf18b82ac290f4476e26e5b3c32e8526c" -a "list_keys"
{
  "keys": [
    "key1",
    "humanized_key",
    "other_key",
    "encoded_key"
  ],
  "success": true
}

Actualizar claves con codificación HEX por defecto

./dataplayer datastore --id="2530caa7911d0c7c3b93f53927f0fd5bf18b82ac290f4476e26e5b3c32e8526c" -a "update_key" -k "humanized_key" -v "hello world" -c hex
{
  "success": true,
  "tx_id": "0x1ba3397f6e51a16e03244d4015bfcce6d598053db91c3ace6c036e038a006f5e"
}

Actualizar claves con codificación y encriptado con COSE

./dataplayer datastore --id="2530caa7911d0c7c3b93f53927f0fd5bf18b82ac290f4476e26e5b3c32e8526c" -a "update_key" -k "encoded_key" -v "hello worrldd" -c cose -cph a_protected_header=secret_value -cuh an_unprotected_header=public_value
{
  "success": true,
  "tx_id": "0xaecb1953cdbdb5c2294591c0538c6315c5f2fcfe8fcebf1418680b25271943ad"
}

Leer claves con codificación HEX por defecto

./dataplayer datastore --id="2530caa7911d0c7c3b93f53927f0fd5bf18b82ac290f4476e26e5b3c32e8526c" -a "read_key" -k "humanized_key" -c hex
{
  "success": true,
  "value": "hello world"
}

Leer claves con codificación y encriptado con COSE

./dataplayer datastore --id="2530caa7911d0c7c3b93f53927f0fd5bf18b82ac290f4476e26e5b3c32e8526c" -a "read_key" -k "encoded_key" -c cose
{
  "success": true,
  "value": {
    "payload": "hello worrldd",
    "protected_headers": {
      "a_protected_header": "secret_value"
    },
    "unprotected_headers": {
      "an_unprotected_header": "public_value"
    }
  }
}