web3.eth.signを非同期処理にしたい
truffleとInfura - Scalable Blockchain InfrastructureとMetamaskでコントラクトをテストする時に,web3.eth.signでエラーが出たのでメモ.
- infuraとMetamaskを用いて,testnetでテストするとtruffleHDwalletProviderではweb3@0.0.2を使用しているためエラー
- なぜかというと,web3@0.0.2のweb3.eth.signはpromiseで返っていない.
- truffleHDwalletProviderでは非同期的な処理しか認めていなく,弾かれる.
- web3.eth.signをdocumentにしたがってcallbackするように変更
<?JavaScript
web3.eth.sign(organizer,hash, function(error, result){
if(!error)
console.log(JSON.stringify(result));
else
console.error(error);
})
?>
参考
JavaScript API · ethereum/wiki Wiki · GitHub
truffle migrate時のエラー
truffle migrateの時のエラーで,gaslimitなどのエラーを吐いた時は本当にgaslimitのエラーとは限らないので,1つ1つのファイルをmigrateすると良い.
「truffle migrate -f 3」で1つのmigrateファイルを実行できるので,
3_test_deploy.jsなどとして以下をファイルに書いて逐一「truffle migrate -f 3」コマンドを実行する.
gitでsolidityのシンタックスハイライトを有効に
.gitattributesファイルに以下を追記
*.sol linguist-language=Solidity
ecverify()について
solidityの署名検証で使われるecverifyについて引数などのメモ.
ecverifyの引数は以下2つ
- hash
- sig
生成方法
- hash = web3.sha3("VoteToAlice")
- sig = web3.eth.sign(account,hash) , accountはmsg.senderと同じく実行者のアドレス
返り値は,アドレス
ecrecover確認時のgethのコマンド
Solidityの署名機能として,ecrecoverがある.詳しい仕様は以下
引数にhashとsignatureの2つを取るように実装したので,
これが正しく動いているかについてのgethコマンドの流れをメモしておく.
- truffle developでコンソールを開く
-
account = web3.eth.accounts[0]
-
hash = web3.sha3("testmessage")
-
sig = web3.eth.sign(account,hash)
ここで発生した,hashとsigを引数に与えて,accounts[0]のアドレスと一致しているかを確認すれば検証可能
remix-ide のローカルとの同期
npm install -g remixd
remixd -s /Users/andy/evoting_beta
をして,ブラウザのremixの鎖マークをクリックしてコネクト.
そうすればローカルのファイルと同期される.
一回一回コマンド打つ必要あり
※本当はremixをローカルに落とした方が良いが,npm関連のエラーが解けないので一時的な策です
bibファイル作成時のauthorの書き方(複数)
複数authorをbibファイルに書こうと思ったが上手くいかなかったのでメモ.
author = "xxx,yyy and xxx, yyy and aaa, bbb",
で上手く行った.
andが必要
追記(2018/8/28)
{The Project}と書きたいときにThe projectとPが小文字になってしまうときは,
{{The Project}}と書けば良い
追記(2019/1/30)
author = { "taro yamada {,} hanako sakura" }
でコンマが表示された