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"
    }
  }
}