Mnemonic


ブロックチェーンに関する新しい内容を頭に詰め込むのに忙しく、かなり精神的に悪くなり、実習段階に入った.でも文字だけ見て表現で勉強するよりは理解しやすいこれまでブログの内容を書くことができなかったので、実習の内容を書いて勉強するつもりです.

newmnemonic APIの作成

router.post("/newMnemonic", async(req, res) => {
	let mnemonic;
	try {
		mnemonic = lightwallet.keystore.generateRandomSeed();
		res.json({mnemonic});
	} catch(err) {
		console.log(err);
	}
});

Postmanテストを使用してアニメーションコードを取得

http://localhost:3000/wallet/newMnemonicにPOSTリクエストを送信すると、以下のように応答が受信されます.
{ 
"mnemonic": 
"laugh vendor crucial length cup surface practice toilet license easy dash rug"
}

mnemonic codeとpasswordを使用してnewWallet APIを作成する


passwordとmnemonicを入力値とするリクエストがサーバに入ります.
router.post("/newWallet", async(req, res) => {
	let password = req.body.password;
	let mnemonic = req.body.mnemonic;

	try {
		lightwallet.keystore.createVault(
			{
				password: password,
				seedPhrase: mnemonic,
				hdPathString: "m/0'/0'/0'"
			},
			function (err, ks) {
				ks.ketFromPassword(password, function (err, pwDerivedKey) {
					ks.generateNewAddress(pwDerivedKey, 1);

					let address = ks.getAddresses().toString();
					let keystore = ks.serialize();

					res.json({keystore: keystore, address: address});
				});
			}
		);
	} catch (exception) {
		console.log("NewWallet ==>>>> " + exception);
	}
});
lightwallet.keystore.createVaultを使用してベースを生成します.
最初のパラメータ(options)はpassword、seedPhrase、およびhdPathStringを含む.
2番目のパラメータ(callback)で、keystoreをパラメータとして使用する関数を作成します.eth-lightwallet 모듈keystore.keyFromPassword(password, callback)内蔵関数を使用します.最初のパラメータにpasswordを作成し、2番目のパラメータにpwDerivedKeyをパラメータの関数として作成します.
2番目のコールバック関数が実行される場合、eth-lightwallet 모듈keystore.generateNewAddress(pwDerivedKey, [num])を使用して新しいアドレス生成関数が実行される.
address変数を作成し、keystore.getAddresses()を文字列に割り当てます.
keystore変数を作成し、keystore.serialize()を割り当てます.

Postmanを使用してkeystoreとaddressの応答APIをテスト

http://localhost:3000/wallet/newWalletにおいて、上記プロセスによって得られたNIMONICコードおよびパスワードは、POST要求とともに送信される.
応答はkeystoreとaddressです.

生成したkeystoreをjsonファイルとしてローカルサーバに保存


応答ではなくFS.writeFileまたはfs.writeFileSyncを使用してkeystoreをJSONファイルローカルサーバに保存します.
router.post("/newWallet", async(req, res) => {
	let password = req.body.password;
	let mnemonic = req.body.mnemonic;

	try {
		lightwallet.keystore.createVault(
			{
				password: password,
				seedPhrase: mnemonic,
				hdPathString: "m/0'/0'/0'"
			},
			function (err, ks) {
				ks.ketFromPassword(password, function (err, pwDerivedKey) {
					ks.generateNewAddress(pwDerivedKey, 1);

					let address = ks.getAddresses().toString();
					let keystore = ks.serialize();

					fs.writeFile('wallet.json',keystore,function(err,data){
            if(err) {
                res.json({code:999,message:"실패"});
            } else {
                res.json({code:1,message:"성공"});
            }
          });
				});
			}
		);
	} catch (exception) {
		console.log("NewWallet ==>>>> " + exception);
	}
});
POSTリクエスト時に以下の内容を含むJSONファイルが生成されます.
{"encSeed":{"encStr":"xeqc9REtweRhjs6WsJYiNUaFGn2pbSAdvAPO3TO4uU6c6Z34uMbpyQnRljp82fCbaOSbfGSarV/8+NV9DPGvszmHM4RLc85cU7Da+hsL2UP8Bh7brZVCqMLFeQ8+WwCMzZyU+i2t1cB5pM2921oYjkJ5IAnhnAg1REP8ABHGsMEh+m1HldUY1Q==","nonce":"QL7ZKkDwDeNCMuS0rFC61E7Sq8ehS0ir"},"encHdRootPriv":{"encStr":"2ntcEGH5T27CO0kNsifSZHrcfEN2Xx3SDo4VDiMihYg4n+gcG3NM8uhaszpeFCMXUiDguzX7QXAGEcf7HF25D9JLO94luxlp/+QIg39iC3jtJ1bOKU8pL5fkWdR+prCrs82B5MZM8ciakVMY0Duv4hzTtw/16OLyA33ampgvnw==","nonce":"1py2CkO+g62b3bi/xcNIDJ0DG0nDNSeP"},"addresses":["372a17eabadc3b37563d435f73eef3f8cef02891"],"encPrivKeys":{"372a17eabadc3b37563d435f73eef3f8cef02891":{"key":"CJ0C2RpSB2L0mNMTc8fv9x1g7cCrfL4fBubVOw3za5MNSzkARR11ryCMLx1J0zqM","nonce":"RpmSBKthq9x5Mnuenf71f2lZBo828XDV"}},"hdPathString":"m/0'/0'/0'","salt":"fHNeQi1HlGrUnRg84QHcodEgQIUZ8kikSEb0/LuuD2I=","hdIndex":1,"version":3}

キースト語


通貨財布の秘密鍵を暗号化し、パスワードで暗号化されたテキストまたはファイルを使用します.Kistoreはテクスチャやファイルを保存しており、別の財布に入れられたときに適切なパスワードを入力すると、エクスポート秘密鍵を解読して暗号化されたファイルになるので、Kistoreファイルは安全にパソコンや手帳などに保存できます.しかし、パスワードが簡単すぎると、無差別で攻撃しやすくなります.

ニモニック号


BIP 39では、12個の英単語に数字を符号化する英単語群が提案されている.既存のシードキーは数字と文字からなる乱数なので、ユーザーは覚えにくいが、ニモニック語の利点は、ユーザーが覚えやすく使用できる形式で構成されていることだ.

ニモニック語コード単語


ウォレットを使用するウォレットアプリケーションでは、ユーザーがウォレットを生成すると、ウォレットに作成された数字から英語の単語のシーケンスが生成され、ユーザーに提供されます.次に、この単語シーケンスにシーケンスキーを生成します.
ユーザがこの単語シーケンスを覚えている場合、シード鍵およびすべての派生秘密鍵は、他の互換性のある財布アプリケーションから復元することができる.