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