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」コマンドを実行する.

 

var mytest = artifacts.require("Owned.sol")

module.exports = function(deployer) {
deployer.deploy(mytest);
};

ecverify()について

solidityの署名検証で使われるecverifyについて引数などのメモ.

 

ecverifyの引数は以下2つ

  • hash
  • sig

 

生成方法

  • hash = web3.sha3("VoteToAlice")
  • sig = web3.eth.sign(account,hash) , accountはmsg.senderと同じく実行者のアドレス

 

返り値は,アドレス

ecrecover確認時のgethのコマンド

Solidityの署名機能として,ecrecoverがある.詳しい仕様は以下

ethereum.stackexchange.com

 

 

 

引数に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" }

でコンマが表示された