Estoy tratando de usar blockapps-js para invocar funciones en mi contrato inteligente implementado en blockapps. Como necesito la clave privada para ello, estoy mirando el archivo app/users/admin/.json. El problema es que no puedo averiguar cuál de estos campos usar. ¿Es encPrivKeys.key? Mi código aún no funciona y estoy tratando de averiguar si esa es la causa.
{
"encSeed": {
"encStr": "...",
"iv": "...",
"salt": "..."
},
"encHdRootPriv": {
"encStr": "...",
"iv": "",
"salt": ""
},
"hdIndex": 1,
"encPrivKeys": {
"": {
"key": "...",
"iv": "",
"salt": ""
}
},
"addresses": ["..."],
"keyHash": "...",
"salt": {
"words": [, -,,],
"sigBytes": 16
}
}
No estoy familiarizado con blockapps, pero encprivkey será su clave privada cifrada. La clave está cifrada por el iv (hash)
campo y luego salada con el campo de sal.
Deberá descifrar la clave privada antes de poder usarla. ;)
OK, no estoy seguro si es la mejor manera de hacerlo, pero finalmente lo hice posible.
Aquí es cómo:
npm install eth-lightwallet
node
>var lightwallet = require("eth-lightwallet")
>var upgrade = require("eth-lightwallet/lib/upgrade")
>var jsonStr='contents of ./app/users/admin/*.json file'
>var newJSON
>upgrade.upgradeOldSerialized(jsonStr, , function(err, tmpJSON) {newJSON=tmpJSON;console.log(newJSON);});
>keystore = lightwallet.keystore.deserialize(newJSON);
>var derivedKey;
>lightwallet.keystore.deriveKeyFromPassword('', function (err, pwDerivedKey) {derivedKey = pwDerivedKey;});
>var addresses = keystore.getAddresses();
>keystore.exportPrivateKey(addresses[0], derivedKey);
Utilicé los consejos de esta publicación , sin embargo, los sdk-s han cambiado desde entonces.
tayvano
pablomorriss