Ethereum入門学習備忘
Ethereum入門 をまずは学習しています。記述が古いのか、また、素人にとってみると躓くところがあるので、備忘していきます。
リンク集:
Ethereum入門:https://book.ethereum-jp.net/
Solidity Document:https://solidity-jp.readthedocs.io/ja/latest/index.html
環境:ubuntu 20.04
プライベート・ネットに接続する
Tipsに、バックグラウンドでコンソールを実行して attach によりコンソールを開く記述あるが・・・うまく行かない。バックグラウンドでコンソール実行しても、geth.ipc が生成されない(みつけられない)。
後々、メインネットに接続する 際にハマってしまった。
実際にうまく行ったのは・・・
geth --datadir "/home/ubuntu/mainnet_data" 2>> /home/ubuntu/mainnet_data/e01.logさ
最後&をつけない(&をつけると、バックグラウンドでコンソール実行になるというが、それだと、geth.ipc がみつけられなかった)
ターミナルに、凄い勢いで、ブロックチェーンが作られていく。/mainnet_data にも 大量のブロックチェーン履歴がたまる(本書は数ギガというが、年数も経過していて 20G くらい持っていかれるから注意)
別のターミナルを起動して、geth.ipc を探す( find するまでもなく、/mainnet_data 下に生成されている。一時ファイルだそうで、↑のコンソール止めると消えるので、そのままにして)、新しいターミナルから以下を実行
geth --datadir "/home/ubuntu/mainnet_data" attach ipc:/home/ubuntu/mainnet_data/geth.ipc
めでたく コンソール起動 (>が出てくる)
etherを送金する
送金でエラーになる。対処は、ココで教えてもらった。
> eth.sendTransaction({from: eth.coinbase, to: eth.accounts[1], value: web3.toWei(10, 'ether')})
Error: invalid sender
at web3.js:3104:20
at web3.js:6191:15
at web3.js:5004:36
プライベート・ネットに接続するで、書いた myGenesis.json の記述が足りないそうな・・・。
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0
},
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit": "0x8000000",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
これで、送金がエラーでなくなる。(マイニングしないと送金実行されないから注意)。
スマートコントラクトを作成し実行する
solitidy でのコントラクト SingleNumRegister 記述をどこにしてよいのか・・・もわからない。チュートリアルじゃなくて、参考に見ろということなのか・・・前提すぎてすっとばしているのか・・・ 結論どこでもよかったっぽいけど /eth_private_net の下に sol ディレクトリをつくって そこに記述した。
$ cd /home/ubuntu/eth_private_net
$ mkdir sol
$ vi ./sol/SingleNumRegister // vim 使ってないなら gedit あたりで
内容だけど、バージョン違いがでて、記述の変更も必要
// SPDX-License-Identifier: MIT //この行足せとアラートされる
pragma solidity ^0.8.4; //バージョン古いだろとエラーになる
contract SingleNumRegister {
uint storedData;
function set(uint x) public{
storedData = x;
}
function get() public view returns(uint retVal){ // var は この位置では、もうつかっちゃだめみたい。viewに書き換え
return storedData;
}
}
コントラクト実行だんかいでは、account のロック外せとでてくる。
>personal.unlockAccount(eth.accounts[0])
前出だけど・・・なかなかのスパルタ具合w
この記事が気に入ったらサポートをしてみませんか?