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


この記事が気に入ったらサポートをしてみませんか?