diff --git a/front/src/react/registerData.js b/front/src/react/registerData.js index 5a99d92..6c5f933 100644 --- a/front/src/react/registerData.js +++ b/front/src/react/registerData.js @@ -81,6 +81,10 @@ const RegisterDataComponent = () => { // console.log(reqBody)ㄴ httpCli.post('/data/register/', reqBody).then( async res => { + if(res.flag == false){ + alert('fail.') + setLoading(false); + } console.log(res) alert('데이터 등록이 완료되었습니다.') console.log(res.data); diff --git a/server/src/controller/genTradeController.js b/server/src/controller/genTradeController.js index c31832b..0077b65 100644 --- a/server/src/controller/genTradeController.js +++ b/server/src/controller/genTradeController.js @@ -1,13 +1,19 @@ import _ from 'lodash' +import fs from 'fs' +import mimc from '../core/crypto/mimc'; +import Config from '../core/utils/config'; import Encryption from '../core/crypto/encryption'; import { + getDataEncKeyFromHct, getDataInfoFromHct, getUserInfoFormNickname } from "../core/data/db.mysql"; import { getTradeContract } from "../core/contracts"; + const pubEnc = new Encryption.publicKeyEncryption(); + export const genTradeController = async (req, res) => { try { // console.log(req) @@ -16,27 +22,61 @@ export const genTradeController = async (req, res) => { const dataInfo = (await getDataInfoFromHct(h_ct))[0]; const usrInfo = await getUserInfoFormNickname(_.get(dataInfo, 'owner_nickname')); - console.log("usrInfo", JSON.stringify(usrInfo, null, 2)); + console.log("usrInfo : ", JSON.stringify(usrInfo, null, 2)); + console.log('dataInfo : ', JSON.stringify(dataInfo, null, 2)); const receipt = await getTradeContract().eth.getTransaction(tx_hash) - console.log(receipt); + // console.log(receipt); - const tmp = _.get(receipt, 'input').slice(10) - for(let i=0; i<27; i++ ){ - console.log(i, tmp.slice(i*64, (i+1)*64),) - } + const data = _.get(receipt, 'input').slice(10) + // for(let i=0; i<27; i++ ){ + // console.log(i, data.slice(i*64, (i+1)*64),) + // } + /* + pk_enc_cons, + pk_own_cons, + r_cm, + fee_own + fee_del + h_k + */ const dec_ct = decrypCT( _.get(receipt, 'input').slice(10), _.get(usrInfo, 'sk_enc') ) + // console.log(dec_ct) + + if(!checkCM(data, dec_ct, _.get(usrInfo, 'pk_own'), _.get(Config.keys, 'pk_own'))){ + return res.send({ + flag : false + }) + } + + const keyJson = await getDataEncKeyFromHct(h_ct) + console.log(keyJson) + + const enc_key = _.get(keyJson, 'enc_key') + const data_path = _.get(keyJson, 'data_path') - console.log(dec_ct) - // 2 : g^r - // 3 : c1 - // 12 ~ 17 : CT + const symEnc = new Encryption.symmetricKeyEncryption(enc_key) + const CT = _.get(JSON.parse(fs.readFileSync(data_path, 'utf-8')), 'ct_data'); + // console.log(JSON.stringify(CT, null, 2)) + + const dec = symEnc.DecData(new Encryption.sCTdata( + _.get(CT, 'r'), + _.get(CT, 'ct') + )); + + // console.log(dec) + const dataString = hexStrToString(dec) res.send({ - flag: true + flag : true, + owner : _.get(usrInfo, 'nickname'), + title : _.get(dataInfo, 'title'), + key : enc_key, + h_ct : h_ct, + data : dataString }) } catch (error) { console.log(error) @@ -46,6 +86,9 @@ export const genTradeController = async (req, res) => { } } +// 2 : g^r +// 3 : c1 +// 12 ~ 17 : CT const decrypCT = (data, sk_enc_peer) => { const c0 = sliceData(data, 2) const c1 = sliceData(data, 3) @@ -61,6 +104,70 @@ const decrypCT = (data, sk_enc_peer) => { ) } +// 4 : cm_own = Hash(pk_own_peer || r || fee_peer || h_k || pk_enc_cons) +// 5 : cm_del = Hash(pk_own_del || r || fee_del || h_k || pk_enc_cons) +const checkCM = (data, decCT, pk_own_peer, pk_own_del) =>{ + + const mimc7 = new mimc.MiMC7(); + + const cm_own = sliceData(data, 4) + const cm_del = sliceData(data, 5) + + const [ + pk_enc_cons, + pk_own_cons, + r_cm, + fee_own, + fee_del, + h_k ] = decCT + + console.log( + " pk_own_peer : ", pk_own_peer, '\n', + 'r_cm : ' , r_cm ,'\n', + 'fee_own : ' , fee_own ,'\n', + 'h_k : ' , h_k ,'\n', + 'pk_enc_cons : ' , pk_enc_cons ,'\n', + ) + + const cm_own_calc = mimc7.hash( + pk_own_peer, + r_cm, + fee_own, + h_k, + pk_enc_cons + ) + const cm_del_calc = mimc7.hash( + pk_own_del, + r_cm, + fee_del.padStart(64, '0'), + h_k, + pk_enc_cons + ) + + console.log(cm_own_calc,cm_own ) + console.log(cm_del_calc, cm_del) + + return cm_own_calc.padStart(64, '0') === cm_own.padStart(64, '0') && cm_del_calc.padStart(64, '0')===cm_del.padStart(64, '0') +} + const sliceData = (data ,idx) =>{ + if(typeof data !== 'string') {throw Error('data must be string')} return data.slice(idx * 64 , (idx+1) * 64) +} + +/** + * + * @param {Array} strArr + * @returns {string} readable data string + */ +const hexStrToString = (strArr) => { + let ret = '' + for (let i =0; i { export const registDataController = async (req, res) => { - const loginTk = getLoginTk(req); + try { + const loginTk = getLoginTk(req); - console.log("loginTk : ",loginTk); - const usrInfo = await getUserInfo(loginTk); - console.log(usrInfo); - const addr = usrInfo['eoa_addr']; - const data = req.body['data']; - const pkOwn = usrInfo['pk_own']; + const usrInfo = await getUserInfo(loginTk); + const addr = usrInfo['eoa_addr']; + const data = req.body['data']; + const pkOwn = usrInfo['pk_own']; - const snarkInput = new SnarkInput.RegistData(); - - // upload data - snarkInput.uploadDataFromStr(data); + console.log("loginTk : ",loginTk); + console.log(usrInfo, data); - // upload pk_own - snarkInput.uploadPkOwn(pkOwn); + const snarkInput = new SnarkInput.RegistData(); + + // upload data + snarkInput.uploadDataFromStr(data); - // encrypt data to make ct_data - snarkInput.encryptData(); + // upload pk_own + snarkInput.uploadPkOwn(pkOwn); - // make h_k h_data id_data - snarkInput.makeSnarkInput(); + // encrypt data to make ct_data + snarkInput.encryptData(); - libsnarkProver.uploadInputAndRunProof(snarkInput.toSnarkInputFormat(), "_" + snarkInput.gethCt()); - const verifySnarkFormat = JSON.parse(snarkInput.toSnarkVerifyFormat()); + // make h_k h_data id_data + snarkInput.makeSnarkInput(); - const contractVerifyInput = registDataInputJsonToContractFormat(verifySnarkFormat); - const contractProof = getContractProof(snarkInput.gethCt(), `RegistData`); - - // send regist data contract - console.log("proof", contractProof); - console.log("verify input", contractVerifyInput); + libsnarkProver.uploadInputAndRunProof(snarkInput.toSnarkInputFormat(), "_" + snarkInput.gethCt()); + const verifySnarkFormat = JSON.parse(snarkInput.toSnarkVerifyFormat()); - const receipt = await getTradeContract().registData( - contractProof, - contractVerifyInput, - ) + const contractVerifyInput = registDataInputJsonToContractFormat(verifySnarkFormat); + const contractProof = getContractProof(snarkInput.gethCt(), `RegistData`); + + // send regist data contract + console.log("proof", contractProof); + console.log("verify input", contractVerifyInput); - if(!(await getTradeContract().isRegisteredData(contractVerifyInput[3]))){ - return res.send(false); - } + const receipt = await getTradeContract().registData( + contractProof, + contractVerifyInput, + ) - const registerDataJson = _.merge( - { - "ct_data" : JSON.parse(snarkInput.getsCtData()), - 'enc_key' : snarkInput.getEncKey(), - 'h_ct' : snarkInput.gethCt(), - 'h_data' : snarkInput.getIdData(), - 'data_path' : fileStorePath + snarkInput.gethCt() + '.json', - 'h_k' : snarkInput.gethK(), - }, - usrInfo, req.body) - - console.log(registerDataJson); - if(await registDataQuery(registerDataJson)){ - try { - fs.writeFileSync( - registerDataJson['data_path'], - JSON.stringify(registerDataJson, null, 2) - ) - return res.send( - { - flag : true, - receipt : receipt, - h_ct : snarkInput.gethCt(), - proof : contractProof, - contractAddr: getContractAddr(), - } - ); - } catch (error) { - console.log(error); + if(!(await getTradeContract().isRegisteredData(contractVerifyInput[3]))){ + return res.send(false); } + + const registerDataJson = _.merge( + { + "ct_data" : JSON.parse(snarkInput.getsCtData()), + 'enc_key' : snarkInput.getEncKey(), + 'h_ct' : snarkInput.gethCt(), + 'h_data' : snarkInput.getIdData(), + 'data_path' : fileStorePath + snarkInput.gethCt() + '.json', + 'h_k' : snarkInput.gethK(), + }, + usrInfo, req.body) + + console.log(registerDataJson); + if(await registDataQuery(registerDataJson)){ + try { + fs.writeFileSync( + registerDataJson['data_path'], + JSON.stringify(registerDataJson, null, 2) + ) + return res.send( + { + flag : true, + receipt : receipt, + h_ct : snarkInput.gethCt(), + proof : contractProof, + contractAddr: getContractAddr(), + } + ); + } catch (error) { + console.log(error); + return res.send({flag : false}); + } + } + } catch (error) { + console.log(error); + return res.send({flag : false}); } + - res.send(false); + // res.send({flag : false}); } export const getLoginTk = (req) => { diff --git a/server/src/core/crypto/jwt.js b/server/src/core/crypto/jwt.js index 8b26084..e618519 100644 --- a/server/src/core/crypto/jwt.js +++ b/server/src/core/crypto/jwt.js @@ -42,7 +42,7 @@ export function verify(token, sk) { export const authMiddleWare = async (req, res, next) => { - + // console.log('access-token', req.headers['access-token'], req.query.token) const jwtHeader = JSON.parse((req.headers['access-token'] || req.query.token) ?? '{}') console.log(jwtHeader, req.headers); if(jwtHeader === {}){ diff --git a/server/src/core/data/db.mysql.js b/server/src/core/data/db.mysql.js index c72fb58..4a07bf3 100644 --- a/server/src/core/data/db.mysql.js +++ b/server/src/core/data/db.mysql.js @@ -234,7 +234,7 @@ export async function getMyData(nickname){ export async function getDataInfoFromHct(h_ct) { const getDataInfoFromHctQuery = - `SELECT h_k, h_ct, h_data, owner_nickname FROM data WHERE h_ct='${h_ct}';` + `SELECT h_k, h_ct, h_data, owner_nickname, title FROM data WHERE h_ct='${h_ct}';` const [rows] = await promiseConnection.execute( getDataInfoFromHctQuery @@ -243,6 +243,21 @@ export async function getDataInfoFromHct(h_ct) { return rows } +export async function getDataEncKeyFromHct(h_ct) { + try { + const getDataEncKeyFromHctQuery = + `SELECT enc_key, data_path FROM data WHERE h_ct='${h_ct}';` + + const [rows] = await promiseConnection.execute( + getDataEncKeyFromHctQuery + ); + // console.log(rows); + return rows[0] + } catch (error) { + console.log(error) + } +} + export async function getSkEncKey(lgTk) { try { const getSkQuery = `SELECT sk_enc FROM user where login_tk=?` diff --git a/server/src/server.js b/server/src/server.js index b0754c0..dca9df1 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -63,18 +63,18 @@ export const initServerAccount = async (initDBflag=false) => { _.set(Config.keys, 'sk_own', serverKey.skOwn); _.set(Config.keys, 'addr', serverKey.pk.ena); + const receipt = await getTradeContract().registUser( + hexToDec(_.get(Config.keys, 'pk_own')), + hexToDec(_.get(Config.keys, 'pk_enc')), + (_.get(Config, 'ethAddr')), + ) + console.log(receipt); + if (initDBflag){ try { await clearDB() - const receipt = await getTradeContract().registUser( - hexToDec(_.get(Config.keys, 'pk_own')), - hexToDec(_.get(Config.keys, 'pk_enc')), - (_.get(Config, 'ethAddr')), - ) - console.log(receipt); - userJoinQuery( _.merge(Config.keys, { diff --git a/tradeContract/keys.json b/tradeContract/keys.json index 8e5a92d..1371d56 100644 --- a/tradeContract/keys.json +++ b/tradeContract/keys.json @@ -1 +1 @@ -{"addresses":{"0xc9f8df493e4ba0d92f024bb19c99dabb0e10807b":{"secretKey":{"type":"Buffer","data":[65,146,248,222,58,134,91,240,73,175,252,178,19,7,131,101,241,186,102,224,246,216,133,253,26,50,220,95,107,116,211,200]},"publicKey":{"type":"Buffer","data":[94,219,157,177,231,208,203,151,250,9,248,244,239,116,59,214,84,13,125,6,68,147,27,244,186,21,13,193,116,220,211,35,121,189,79,215,213,12,235,158,68,203,86,128,2,228,53,61,11,34,34,222,87,182,100,246,44,177,101,135,135,143,37,40]},"address":"0xc9f8df493e4ba0d92f024bb19c99dabb0e10807b","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x67f97fb8ea509e60f6a5e33ddf15e808ca204906":{"secretKey":{"type":"Buffer","data":[205,157,122,159,240,23,194,137,109,226,211,176,145,42,202,95,95,31,26,64,93,231,105,147,116,42,156,219,50,212,120,204]},"publicKey":{"type":"Buffer","data":[40,80,158,40,42,84,141,89,47,178,154,0,129,239,241,131,78,185,123,162,66,1,132,171,124,119,33,82,81,3,205,182,15,132,85,38,195,241,36,45,137,14,225,24,101,216,233,236,212,203,63,131,189,130,207,68,220,119,196,254,162,96,34,183]},"address":"0x67f97fb8ea509e60f6a5e33ddf15e808ca204906","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x4721bc3273425c4a0edc5006ad6c64010d0fc26a":{"secretKey":{"type":"Buffer","data":[221,54,123,121,223,32,221,77,43,154,131,85,210,184,221,84,231,218,142,211,246,115,24,170,242,197,52,151,46,89,199,181]},"publicKey":{"type":"Buffer","data":[230,33,61,21,41,15,26,38,44,217,57,198,71,144,176,79,14,160,218,7,54,167,245,75,250,99,41,249,172,26,187,200,152,161,86,189,173,97,69,16,232,58,154,32,113,233,144,14,54,89,255,84,226,42,1,209,50,200,112,27,94,110,238,133]},"address":"0x4721bc3273425c4a0edc5006ad6c64010d0fc26a","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xb7333d1e8ba592f7cf88e614561938ab6f64cb7b":{"secretKey":{"type":"Buffer","data":[68,159,117,166,228,194,221,240,13,35,189,21,142,123,236,232,92,63,71,74,72,24,153,191,180,7,156,116,194,63,123,75]},"publicKey":{"type":"Buffer","data":[92,30,223,148,50,27,77,166,65,99,129,93,184,20,157,89,131,203,231,81,167,58,246,236,98,159,238,195,194,248,87,67,220,226,174,55,122,78,164,91,6,35,198,59,117,39,250,229,193,119,129,116,75,187,37,76,208,204,0,241,102,229,173,115]},"address":"0xb7333d1e8ba592f7cf88e614561938ab6f64cb7b","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xf22fae5076c35412a77685a2ef8bde4d0c3d273d":{"secretKey":{"type":"Buffer","data":[238,148,27,97,88,66,212,41,6,149,143,205,234,25,194,234,203,132,88,56,44,254,183,52,194,89,157,59,172,50,118,110]},"publicKey":{"type":"Buffer","data":[163,96,231,28,102,99,85,90,84,58,254,187,39,116,146,231,50,42,246,191,233,40,35,168,212,197,44,74,108,39,33,158,196,141,31,185,121,234,155,155,177,139,206,152,12,55,22,253,224,208,238,64,136,45,54,204,176,78,65,126,48,222,168,113]},"address":"0xf22fae5076c35412a77685a2ef8bde4d0c3d273d","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x8207c58d3a257c951ca33520065dbc6bd985174e":{"secretKey":{"type":"Buffer","data":[77,132,117,193,86,215,151,237,204,81,74,0,3,111,200,107,226,102,145,105,31,226,115,250,65,215,96,81,77,254,99,242]},"publicKey":{"type":"Buffer","data":[114,20,4,13,33,170,141,68,235,31,15,226,10,213,34,120,41,178,237,126,132,77,189,209,61,117,238,214,119,4,160,47,96,190,31,176,129,225,106,210,226,207,191,131,185,13,134,144,219,73,24,94,151,231,100,89,177,124,75,232,205,246,255,236]},"address":"0x8207c58d3a257c951ca33520065dbc6bd985174e","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xc03098ff5dbfe2ad3ddc29a5708ef92727f27b65":{"secretKey":{"type":"Buffer","data":[198,237,176,179,149,109,10,8,245,75,238,35,224,132,3,115,2,18,152,224,168,231,198,65,199,56,13,145,176,37,6,196]},"publicKey":{"type":"Buffer","data":[191,56,151,34,183,244,163,82,251,8,120,211,82,10,107,132,42,85,35,26,162,186,218,125,116,127,177,154,173,74,1,126,180,131,211,33,85,142,151,197,247,185,95,84,119,36,147,221,151,218,112,202,5,189,2,184,186,24,179,87,238,117,66,233]},"address":"0xc03098ff5dbfe2ad3ddc29a5708ef92727f27b65","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x40b0d10173aff8544a21ce041e815e24c315b566":{"secretKey":{"type":"Buffer","data":[26,137,92,206,53,141,236,233,155,211,211,10,223,107,150,44,144,207,130,109,57,185,182,95,221,44,47,151,224,249,133,201]},"publicKey":{"type":"Buffer","data":[176,185,11,76,119,229,251,240,66,32,27,154,79,166,149,19,53,231,89,48,22,169,204,219,157,13,218,228,182,120,38,36,216,84,148,201,92,172,27,22,91,185,157,132,6,131,4,190,208,93,194,3,239,18,168,237,184,216,137,113,237,227,37,153]},"address":"0x40b0d10173aff8544a21ce041e815e24c315b566","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xee593dd8cb35d72a18785f3c692d6b5615d451f0":{"secretKey":{"type":"Buffer","data":[165,26,31,247,76,149,213,10,236,114,176,189,111,54,168,39,158,139,98,55,65,77,100,143,30,62,57,135,66,109,102,2]},"publicKey":{"type":"Buffer","data":[220,18,217,105,8,206,237,98,220,30,17,62,176,128,187,8,182,22,12,138,67,192,169,214,240,142,89,112,115,114,136,230,1,3,205,250,100,129,98,111,11,230,208,31,48,142,177,212,103,111,37,100,99,54,48,57,187,109,211,198,59,4,93,157]},"address":"0xee593dd8cb35d72a18785f3c692d6b5615d451f0","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x37eb7588122676545f680305b58a3ce5e0fe73ff":{"secretKey":{"type":"Buffer","data":[215,40,239,12,242,88,160,55,231,206,237,249,12,100,114,18,250,27,160,155,27,251,170,158,39,143,251,45,96,129,181,201]},"publicKey":{"type":"Buffer","data":[143,76,153,57,166,195,219,117,140,38,165,26,249,252,117,180,3,249,205,106,160,107,189,83,70,38,30,120,194,86,238,122,131,36,57,165,230,179,91,130,83,149,237,218,68,53,6,9,229,121,204,83,86,235,176,216,192,55,7,65,241,126,101,206]},"address":"0x37eb7588122676545f680305b58a3ce5e0fe73ff","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}}},"private_keys":{"0xc9f8df493e4ba0d92f024bb19c99dabb0e10807b":"4192f8de3a865bf049affcb213078365f1ba66e0f6d885fd1a32dc5f6b74d3c8","0x67f97fb8ea509e60f6a5e33ddf15e808ca204906":"cd9d7a9ff017c2896de2d3b0912aca5f5f1f1a405de76993742a9cdb32d478cc","0x4721bc3273425c4a0edc5006ad6c64010d0fc26a":"dd367b79df20dd4d2b9a8355d2b8dd54e7da8ed3f67318aaf2c534972e59c7b5","0xb7333d1e8ba592f7cf88e614561938ab6f64cb7b":"449f75a6e4c2ddf00d23bd158e7bece85c3f474a481899bfb4079c74c23f7b4b","0xf22fae5076c35412a77685a2ef8bde4d0c3d273d":"ee941b615842d42906958fcdea19c2eacb8458382cfeb734c2599d3bac32766e","0x8207c58d3a257c951ca33520065dbc6bd985174e":"4d8475c156d797edcc514a00036fc86be26691691fe273fa41d760514dfe63f2","0xc03098ff5dbfe2ad3ddc29a5708ef92727f27b65":"c6edb0b3956d0a08f54bee23e0840373021298e0a8e7c641c7380d91b02506c4","0x40b0d10173aff8544a21ce041e815e24c315b566":"1a895cce358dece99bd3d30adf6b962c90cf826d39b9b65fdd2c2f97e0f985c9","0xee593dd8cb35d72a18785f3c692d6b5615d451f0":"a51a1ff74c95d50aec72b0bd6f36a8279e8b6237414d648f1e3e3987426d6602","0x37eb7588122676545f680305b58a3ce5e0fe73ff":"d728ef0cf258a037e7ceedf90c647212fa1ba09b1bfbaa9e278ffb2d6081b5c9"}} \ No newline at end of file +{"addresses":{"0x5befd1db05ec22724d40998fe26ad39698dd2ebc":{"secretKey":{"type":"Buffer","data":[157,85,42,60,104,81,197,123,30,174,157,150,111,23,35,43,178,89,150,43,209,250,15,115,95,37,5,83,127,124,195,36]},"publicKey":{"type":"Buffer","data":[1,218,70,237,250,176,13,123,160,87,65,216,143,173,219,10,135,243,179,28,229,61,105,76,217,162,212,102,87,128,214,6,143,51,249,240,155,46,232,144,188,148,15,224,8,211,103,82,136,212,102,157,40,69,15,35,250,89,160,148,251,69,101,157]},"address":"0x5befd1db05ec22724d40998fe26ad39698dd2ebc","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x83e8b6406e5abfb4403f976c78bfb2242be8bea1":{"secretKey":{"type":"Buffer","data":[33,25,136,222,123,114,142,43,73,212,132,25,235,119,22,145,36,220,113,248,63,112,72,182,118,251,79,168,157,239,94,37]},"publicKey":{"type":"Buffer","data":[108,120,226,68,66,68,117,250,176,112,114,43,244,140,194,156,215,217,173,15,122,226,78,119,101,198,52,110,188,58,205,121,102,75,55,109,185,34,83,92,27,112,64,165,243,38,212,135,169,33,251,107,83,159,178,152,63,33,3,21,110,143,216,177]},"address":"0x83e8b6406e5abfb4403f976c78bfb2242be8bea1","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x965bc08322fa0f1c9854a736c1ee79036411adf1":{"secretKey":{"type":"Buffer","data":[55,176,91,17,99,241,200,32,157,117,93,132,244,156,145,1,23,210,96,69,26,190,253,176,242,222,147,132,216,195,101,238]},"publicKey":{"type":"Buffer","data":[146,100,60,42,173,65,223,49,89,227,86,121,0,241,119,217,150,89,57,254,21,39,236,10,133,234,85,26,4,117,31,181,220,41,198,134,136,186,23,129,161,194,187,119,118,173,240,40,219,21,245,38,191,8,252,245,43,136,157,97,10,215,32,124]},"address":"0x965bc08322fa0f1c9854a736c1ee79036411adf1","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xfb304b05aa6f6c52a3c19c28720c660a93d9f966":{"secretKey":{"type":"Buffer","data":[85,45,132,3,24,143,224,241,145,240,21,251,252,195,184,113,229,63,47,232,185,238,195,123,3,249,98,198,167,86,61,170]},"publicKey":{"type":"Buffer","data":[150,205,107,224,81,161,53,65,255,81,40,62,226,165,13,53,82,114,202,230,148,214,17,193,251,76,134,173,161,145,71,207,230,202,126,161,198,38,120,255,184,92,82,223,219,131,40,206,11,100,200,205,135,100,75,169,28,205,49,170,56,102,15,215]},"address":"0xfb304b05aa6f6c52a3c19c28720c660a93d9f966","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x3c07073d6e352ac09e58f8ab800b74bb080a5b93":{"secretKey":{"type":"Buffer","data":[245,115,204,141,50,25,66,159,68,153,196,38,168,162,66,98,161,44,190,96,66,209,72,71,184,100,66,26,119,235,201,65]},"publicKey":{"type":"Buffer","data":[93,248,32,179,248,13,15,206,134,84,131,91,0,224,247,219,145,203,143,35,187,192,190,26,143,138,255,248,255,2,199,116,26,34,189,241,246,63,209,92,152,192,254,74,111,162,193,113,7,130,246,243,55,117,58,61,178,112,250,156,33,8,254,46]},"address":"0x3c07073d6e352ac09e58f8ab800b74bb080a5b93","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xcb65dc5f1d3e2e96fa7ce1e5c4d140131450198d":{"secretKey":{"type":"Buffer","data":[159,93,68,187,212,190,218,129,7,170,173,113,166,30,73,236,39,201,114,36,113,171,56,193,63,15,216,96,162,137,189,184]},"publicKey":{"type":"Buffer","data":[108,140,26,93,95,124,52,37,177,15,134,163,166,37,80,254,243,28,103,10,113,204,186,53,55,116,172,84,101,102,70,158,114,166,105,31,160,57,197,181,137,181,26,168,93,41,253,126,138,76,7,82,69,110,150,235,111,210,184,205,40,172,166,224]},"address":"0xcb65dc5f1d3e2e96fa7ce1e5c4d140131450198d","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0xca018a1b88dd2dbcdf600e6ed1b0ec5721e6f82b":{"secretKey":{"type":"Buffer","data":[53,233,190,106,4,38,217,105,107,188,43,76,156,241,28,43,181,130,129,120,69,72,175,23,255,157,89,53,207,113,80,153]},"publicKey":{"type":"Buffer","data":[57,188,151,224,10,6,143,46,190,77,82,32,234,92,90,121,95,114,151,116,196,241,152,235,43,153,5,46,15,101,220,130,104,153,14,203,246,201,50,140,140,42,132,152,77,104,253,64,102,213,9,109,54,204,145,29,180,53,195,108,237,157,240,42]},"address":"0xca018a1b88dd2dbcdf600e6ed1b0ec5721e6f82b","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x9ca9d78edb9cbf02f7dfb49627d655b5b8bd5579":{"secretKey":{"type":"Buffer","data":[21,205,13,226,252,94,217,70,143,138,181,134,83,95,110,131,61,117,247,133,140,248,38,193,113,74,223,76,56,163,82,80]},"publicKey":{"type":"Buffer","data":[123,192,253,62,210,220,73,61,111,182,232,255,233,90,10,227,48,112,59,217,139,69,142,6,33,60,71,143,231,239,204,235,59,113,172,106,174,156,78,235,215,171,120,51,137,252,168,86,131,118,111,6,98,252,130,163,93,214,107,77,58,20,77,86]},"address":"0x9ca9d78edb9cbf02f7dfb49627d655b5b8bd5579","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x2622de9dbb73e5ce591c912bf3f11d118466d41c":{"secretKey":{"type":"Buffer","data":[207,160,71,182,121,132,5,65,65,41,91,151,124,84,117,68,93,47,126,177,26,115,15,104,95,236,233,50,246,187,195,5]},"publicKey":{"type":"Buffer","data":[7,160,27,9,72,112,252,218,36,231,117,88,211,93,71,46,129,168,121,91,246,112,147,11,65,38,148,218,156,47,235,136,76,14,148,157,32,13,221,23,191,18,28,67,238,223,202,97,60,226,44,46,201,56,228,136,111,115,0,174,73,250,157,158]},"address":"0x2622de9dbb73e5ce591c912bf3f11d118466d41c","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}},"0x569ff8986c47f1429e393131e162b3e7ec4146de":{"secretKey":{"type":"Buffer","data":[41,153,182,83,205,98,144,133,245,108,209,210,221,81,130,121,208,119,116,212,127,26,80,251,192,159,199,75,106,198,252,233]},"publicKey":{"type":"Buffer","data":[203,71,63,83,192,237,93,3,201,218,104,4,11,205,121,215,234,245,202,35,46,59,185,132,245,113,231,212,191,119,103,148,175,23,172,104,44,132,46,218,229,2,71,119,180,119,89,228,86,200,39,59,62,14,24,59,251,49,0,135,219,66,136,104]},"address":"0x569ff8986c47f1429e393131e162b3e7ec4146de","account":{"nonce":"0x","balance":"0x01431e0fae6d7217caa0000000","stateRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","codeHash":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"}}},"private_keys":{"0x5befd1db05ec22724d40998fe26ad39698dd2ebc":"9d552a3c6851c57b1eae9d966f17232bb259962bd1fa0f735f2505537f7cc324","0x83e8b6406e5abfb4403f976c78bfb2242be8bea1":"211988de7b728e2b49d48419eb77169124dc71f83f7048b676fb4fa89def5e25","0x965bc08322fa0f1c9854a736c1ee79036411adf1":"37b05b1163f1c8209d755d84f49c910117d260451abefdb0f2de9384d8c365ee","0xfb304b05aa6f6c52a3c19c28720c660a93d9f966":"552d8403188fe0f191f015fbfcc3b871e53f2fe8b9eec37b03f962c6a7563daa","0x3c07073d6e352ac09e58f8ab800b74bb080a5b93":"f573cc8d3219429f4499c426a8a24262a12cbe6042d14847b864421a77ebc941","0xcb65dc5f1d3e2e96fa7ce1e5c4d140131450198d":"9f5d44bbd4beda8107aaad71a61e49ec27c9722471ab38c13f0fd860a289bdb8","0xca018a1b88dd2dbcdf600e6ed1b0ec5721e6f82b":"35e9be6a0426d9696bbc2b4c9cf11c2bb58281784548af17ff9d5935cf715099","0x9ca9d78edb9cbf02f7dfb49627d655b5b8bd5579":"15cd0de2fc5ed9468f8ab586535f6e833d75f7858cf826c1714adf4c38a35250","0x2622de9dbb73e5ce591c912bf3f11d118466d41c":"cfa047b67984054141295b977c5475445d2f7eb11a730f685fece932f6bbc305","0x569ff8986c47f1429e393131e162b3e7ec4146de":"2999b653cd629085f56cd1d2dd518279d07774d47f1a50fbc09fc74b6ac6fce9"}} \ No newline at end of file