高水準言語 Solidityでとりあえず、書いてコンパイルする

solidityというのが最もポピュラーなのでしょう。ちらっと聞いた話だと、これもフルスクラッチで作り直すとか話があるようです。過去を切り捨てていくスタイルなので致し方ないのかも。BSVもライアンがv2という名でゼロから設計しなおしたものが公開されました。

エンジニアあるあるですが、何か作った時もう一度ゼロから作り直すといいものが生まれます。これを何度もやる奴がいて、そういう奴は大抵優秀なエンジニアです。作り直すというのは作っている最中に問題があるなーってパターンと、成長してより良いものが作れるようになったからというものがあります。なのでその点の経緯から大抵優秀です。あとそういうのが趣味って言う点でも優秀と言えます。

なのであまりそこをマイナス評価したり、不安材料と考える必要もないでしょう。いざこざがあるとだめですけどね。

蛇口、フォーセット

はじめbsvで聴いたときに、なんのこっちゃでしたが業界の?英語圏の?標準の言い回しの様です。

contract Faucet {//蛇口っつーコントラクト作るぞ
	function withdraw(uint withdraw_amount) public {//withdrawっつー関数を作るぞ。引数はマイナスなしの整数だ!publicにしてどこからでも呼び出すぞ!
		require(withdraw_amount <= 100000000000000000);//引数の数字がこの数値以下かテストするぞ!

		msg.sender.transfer(withdraw_amount);//引数の金額を送信者アドレスに送金するぞ!
	}

	function () public payable {}//フォールバック、デフォルト関数。
}

コードはすべてgithubにあります。
github.com

と、書いてあるので見に行ったらコードがちょっと違います。どういうこっちゃ!!っこれは欠陥のあるコントラクトらしくてもしかしたらとび先のコードはそれを修正したものなのかも??

コードにはコメントを入れました。要は送金関数で、金額の上限チェックをいれて送金するプログラムです。フォールバック、デフォルト関数はこのコントラクタにはwithdrawって関数があるんですが、それを選ばなかった場合に実行されるらしいです。最初に呼び出されるコンストラクタともちがう、try,catch的な?payableという関数がいるみたいです。たぶん無名関数の中でpayableを実行している?そういう記述だと思う。
medium.com

requireっていうとphp的にはファイル読み込みなんですが、これはテスト処理みたいですね。if文+return(exit)的な。
いろいろ似たような関数があるようです。
y-nakajo.hatenablog.com

remixでコンパイルしよう

で、このプログラムをコンパイルしまして、機械が読む用の言語に変換します。Chromeのmetamaskと連動するようなのでChromeアクセスします。
remix.ethereum.org

これmetamaskのメインネット、テストネットを判断しているっぽいのでテストネット使うつもりならそっちに切り替えておこう!

sCryptに似てる。sCryptが意識して作っているのでしょう。Solidityとremixの両方をsCryptが構築中ってことですね。で、これコンパイル試みていて薄々分かりました。結構バージョンがあります。こんだけ刻んだのか(笑)私のサンプルはver0.4.19。githubは0.6.0。remixをみると0.7.5まで来ています。因みに1.0.0で一般的には正式リリースなのでここまで長い道のりです。なんならまだ触らない方がいいバージョンと言えます。そうですが、そうですね。まぁこの時期に触るっていうことはそういうことです。逆にこれに投資だ!といってトークン売り買いするのははやり歴史上なかったシステムですね。

f:id:online106:20201124191720p:plainf:id:online106:20201124191713p:plainf:id:online106:20201124191710p:plain

バージョンを合わせてコンパイルしたらうまく行きました。pragmaっていうバージョンの指定が必要みたいです。とりまコンパイル出来たら図のあたりポチポチしてみましょう。

Bytecodeはっつけてみました。すると、opcodesってのがEVMバイトコードみたいですね。

{
	"linkReferences": {},
	"object": "6060604052341561000f57600080fd5b60e58061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d146041575b005b3415604b57600080fd5b605f60048080359060200190919050506061565b005b67016345785d8a00008111151515607757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151560b657600080fd5b505600a165627a7a723058201d650e64b50f27a480cbcdd4abf293a829d818cbbee25b39d98f2eecc77990650029",
	"opcodes": "PUSH1 0x60 PUSH1 0x40 MSTORE CALLVALUE ISZERO PUSH2 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xE5 DUP1 PUSH2 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x2E1A7D4D EQ PUSH1 0x41 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH1 0x4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5F PUSH1 0x4 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP2 SWAP1 POP POP PUSH1 0x61 JUMP JUMPDEST STOP JUMPDEST PUSH8 0x16345785D8A0000 DUP2 GT ISZERO ISZERO ISZERO PUSH1 0x77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO ISZERO PUSH1 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x1d PUSH6 0xE64B50F27A4 DUP1 0xcb 0xcd 0xd4 0xab CALLCODE SWAP4 0xa8 0x29 0xd8 XOR 0xcb 0xbe 0xe2 JUMPDEST CODECOPY 0xd9 DUP16 0x2e 0xec 0xc7 PUSH26 0x9065002900000000000000000000000000000000000000000000 ",
	"sourceMap": "28:442:0:-;;;;;;;;;;;;;;;;;"
}

EVM, EOA スマコンの入り口

EVMとEOA

EVMはイーサの仮想マシンとのことでした。EVMはグローバルシングルトンで、簡単に言うと世界で一つみたいな。そんな感じです。
でEOAなるものがあります。それは外部所有アカウント。はい、外部ってパブリックブロックチェーンで逆にどう成立させてるの?って思います。これがどうもそういうわけではなくて、秘密鍵を持つアカウントらしいです。アカウント?とも思うんですが、イーサはどっかでアカウント式と聞いたことがあります。これがビットコインブロックチェーンとは別の設計と思います。
図か何かで覚えたいところですが、EOAが外部で秘密鍵アカウントで、それ以外はコントラクトアカウントと言って、鍵なしの代わりにスマコンのコードを所有します。コンアカはEVMで実行されるプログラムという事になります。
違っているかもしれませんがビットコインは鍵とロッキングスクリプトがあります。この役割を分けたのかな?ビットコインも分けてないだけで分かれている様なもの?まぁいいか。ブロックチェーンを作るエンジニアではなくてブロックチェーンを使うエンジニア視点では、一旦深く考えなくてOK。

コンアカにも

コンアカにもアドレスもあれば、送受信できます。はい、ビットコイン的にいうと、どっちも目的次第で異なる単なるアドレスです。分けてるけど、分けなくても動いているブロックチェーンがあるのでそこらへんの整理が必要ですね。メモリとGPUの関係みたいな。同じまな板だけどGPUは特定の演算処理に特化していますみたいな。でも実はどっちもまな板ですよって。

コンアカとEOAの連携

コンアカはただそこにあるコードです。ビットコインスクリプトみたいな。それを使うのがEOAでトランザクション(tx)を生み出せます。そういう関係との事。EOAがtxを発生させるときに引数を渡して、それをコントラクトが受けて実行します。これがやりやすいETHはライブラリがあるんでしょうか。ちょっとワクワクします。それをBSVにもさっさと導入されて欲しいものです。

コンアカには

dapp感あります。コントラクトには別のコントラクトを呼び出せます。つまり私がビットコインで気にしていたこのビットコインスクリプトをトリガーに別のビットコインスクリプトを実行できるのか?include,import的な。これができるけど便利なそれはないみたいな状況なんだと思いますが、ETH本には文章で出来るって言わずもがな書かれていました。うーん、やっぱり入門に向いているよね。

サンプルが記述されていましたが、マルチシグが典型例とのことです。マルチっつーんは鍵を3つに分散して2/3あればOKっていう仕組みです。1つクラックされても盗まれない。忘れても大丈夫。という安全なウォレットです。BTC,BCHにはこれがなかなか導入されませんでしたがETHにはいつのころからなのかあるようです。特許との兼ね合い、時期は不明ですが、そこはエンジニア視点では置いておきましょう。
鍵が分散していてもコントラクトが各方面に問い合わせにいって2/3あってればOKというのを作ればEtherの移動成立(契約)ってわけですね!

文鎮化BTCがエンジニアをぶった切った。

そして、ここで知れるわけです。やっぱりBTCを文鎮化したときに、マルチシグとか導入するようなエンジニアはETHにながれちまったんだなと。今のところ価格高騰していて売り抜けで利益をだせているならそれは文鎮化もビジネスとしては成功だったと言えるのかもね。エンジニア視点では2016年にBTC is dead的な有名な方の発言がありますが、それはそうなんだなと言えます。

続きは、プログラムサンプルとその修正などを見ていきます。

MetaMask入門

MetaMaskいんすこーる

ロームプラグインでMetaMaskを導入する。このプラグインも正規ではない詐欺プラグインインスコしないように注意が必要の様です。

chrome.google.com

URLにnkbihfbeogaeaoehlefnkodbefgpgknnが含まれているか。
レビューが多いかをチェックせよとの事。今自分が見るとレビューは1700を超えている。

f:id:online106:20201112223443p:plain

ニーモニックって知っている前提で進めますが、単語を覚えてウォレットとかがデバイス故障とかプラグインアンインストールとかしてしまっても、この12単語とその順番を別途記録してれば復活するよというものです。あなたのアドレスはあなたしか分からないので、基本的に他の誰にも触れません。なので忘れてウォレットを失ってしまうと、誰にも開けられない金庫に入ってしまう感じですね。それはもはや価値ゼロ。なんなら状況によっては世の中で使えるものに価値が移管するかも?市場からウォレットに入ってた分が消失したことになるので。

たしかイーサは上限なし無制限と聞いたので必ずしもではないかもしれないですが、その増えるタイミングは今のところわからないの勉強します。

だがしかしこれは学習とテストである

はい、ブロックチェーンにはぶっつけ本番でもいいですが、メインネットとテストネットがあります。今回は実物を入れずにテスト用のイーサを入手します。
ここでETHが入門に適していることがしみじみ分かりました(笑)

f:id:online106:20201112224606p:plain

なんですかこの勘で分かるインタフェースと機能は!すぐにテストネットに切り替えて、外部でテスト用くれるサイトに催促すればゲッツできるのが分かります。私はBSVをぶっつけ本番で、ここらへんをスルーしていますが、ここで以下にウォレット開発会社がエンジニアの間口を広めるかどうか掛かっていることに気づかされます。

切り変えましたか?Buyを押してください。

f:id:online106:20201112224951p:plain

秒で分かりますね。これはすご......なんだこれエラー出るじゃねーか。Goerliってテストネットが0.05ETHくれました。うーむ、急転直下ETHが止まるとか、gasが高いとか。そこらへんの影響なのか、はたまたETHのテストネットをそんな長いこと無償で提供なんぞできなかったのでしょうか。それとも一時的?

一応ネット調べると
qiita.com

うーん、芳しくない。テストもコスト掛かるしただではそんなにくれないってか?時間置いてまたやってみます。どうしてもできない様であればメインネットにお布施するかぁ
逆にテストネットは金払っても手に入らないとかあるんですかね。

テストネットのイーサはテスト用ですが、誰かがどこかで取得して放置するのはマナー的に良くないようです。使ったら返す心持ちが大切。

とりあえずメインネットでいいや

適当に1000円くらい買ってメインネットに送金してみました。話先に進めたいしね。5分以内かな?着金してました。では送り返すところでgas的なものを確認してみます。
f:id:online106:20201112232112p:plain

ふむ、詳細って所を見るとgasの相場みたいのが見れます。盛れば早いし、盛らないと遅い。これ結構視覚的に見れて凄いですね。BSVも手数料指定がありますが...まぁそもそもかなり安いのと、だいたい相場一律な空気があっていじるような機能もありません。どっちがいいんでしょう。マイナーが儲けるためにはここら辺が柔軟なウォレットがあってもいい気はしますけどね。

追記

改めてropstenテストネットを試みたところ無事テスト用1ETHGETできました!テスト環境だからか、昨今ETHが止まったとかなんとかの影響なのか分かりませんが、とりあえずdappできればそれでOK!!

送金テストやトランザクションなどはブロックチェーンとは?っていう全体の話と共通なので飛ばします。dappでもないし

イーサの基礎

イーサの単位

Etereumの通貨はイーサ(Ether)と呼ばれ、単位もetherです。最小単位はweiだそうで1ether=1,000,000,000,000,000,000だそうです。すごい単位っすね。

1 wei = 1 wei
1,000 wei = 1 babbage ( kilowei )
1,000,000 wei = 1 lovelace ( megawei )
...
うーん、これ使いこなすのでしょうか?無駄な知識でなければいいですが...
私は省略しますね。必要な場合はネット検索で。国際単位と先輩たちの言ってた単位があって、それぞれ使うみたいです。うーんパブリックカオス。

ウォレットについて

ウォレットは他の仮想通貨と同じようなものです。モバイル、デスクトップWebベースなどあるようです。有名どころ

  • MetaMask
  • Jaxx
  • MyEtherWallet
  • Emerald Wallet

今も存在しているのか、どれが人口多いとかは分かりません。開発学習できればどれでもいいかな。

ウェイだけ覚えておけばOK

送金時のeth,gasの単位はeth,etherとgasのweiです。なのでこれだけ一旦頭にいれるとうぇーぃ。

イーサリアムでは

イーサリアムはざくり二つ

うーん、進めばわかるでしょうけど、フロントエンドをどこでどうもっているんでしょうね。

web3.js

three.js思い出しました。イーサはWEB3.0だ!ってことでjsライブラリをweb3.jsとしているそうです。

web3js.readthedocs.io

なるほど。なんとなくBSVでいうところのマネボ(ライアン)が作っているbsv.jsですね。
これをさらに使いやすくするラッピングライブラリとかあるならETHの方が作りやすいのかもしれません。
Webフロントのインタフェースってライブラリを提供するだけですかね?それならBSVと現状は変わらなくなっちゃいます。

嫌いじゃないカルチャー

BTCは保守的で互換性重視に対して、ETHは未来を重要視して、よりいいものの為には過去をぶっ壊していく方針だそうです。
Apple的な。古いデバイスはぶった切っていくスタイルですね。そのうちETH自体エンジニアは捨ててもおかしくない。
BTCの保守的な面はセカンドレイヤーとかリキッドとかそういったところで開発遅延を慢性化させそうですね。

ちなみに互換性のないDAppを作るという事はユーザの移行などにコストを割かないといけないということです。
BSVの件でも触れましたが、パブリックブロックチェーン上でビジネスしている人は少し頭が逝っちゃってます。
ビジネスになるか起業して成り立つかを考えると勉強はしてもサービスを展開するフェーズに到底到達しておりません。
当然投資してそれに合わせて開発研究している部門はあるでしょうが、B2Cはどどーんとするメリットがありません。
なんちゃってはできるかも。

イーサの評価は開発が早い点と思われているようです。BTCと比較しているのでしょうか。ETHも開発は混乱と鈍化のイメージを持たれています。この点が支持者とどう出ない人の乖離店その1かもしれませんね。

javascriptが出来ればよい。敷居は低い。

最も低いかは分かりませんが、jsさえ知っていれば裏が複雑でも簡単なコードで実行できる。それがイーサで、ブロックチェーンを学習するための最初のプラットフォームとして適しているそうです。それはそんな気がしますね。楽しみです。

イーサリアムとは

イーサリアムとは

イーサリアムはwww、インターネットに近い新しい概念のものです。インクトミみたいな財閥特許のインターネットと違い、BTC同様にOSSなのがより注目を浴びる点です。とはいえOSSって必ずどっかの大手の管理下に収まるのが相場なので、だからすごいみたいのは特にない、あってもなくなると思います。

グローバルなパブリックブロックチェーンであり、誰でも参加することは自由なのがPoW全体に言えますが良いところです。プライベートブロックチェーンは開発運用されている会社と契約(選定される)しないと使えないです。イーサがPoWで居続けるかは不明です。予定ではPoSになりたいそうです。

PoS目指しのPoW

EOSなんかは少数選挙制で、初期に権利を得て手放さない様であれば君臨しつづけたり、財力で投票権を買っちゃうなんてもできます。まぁそれを含めてうまくやれるという算段でEOSは設計されていると思います。PoWも一応競争で50%以上とれるようであれば破壊したければ破壊することもできます。破壊するくらいなら恨みないなら関わる意味ないですが。EOSの選挙制は覇権を握ることができますがこれも結局利用者がそれで逃げるようであれば元も子もないので、なんだかんだで国と同じで強いものがうまくやるのかもしれません。

ETHの問題とそれでも学ぶ価値

ETH界隈でよく言われているのは、そんな仕組みの前に性善説で利用したとしても利用することすら難しい状況に定期的になることです。BTCでもそうですが、gas、手数料が跳ね上がります。でもだから勉強しないとはなりません。高かったら使わなければいいし、価値が上がっても下がっても学ぶ価値はあります。ここがエンジニアの視点の違いかもしれません。

一緒に勉強しとく?

ETHはデジタル通貨を目指していません。そのためお金になりたいxrpやbchと競合しません。bchは通貨目的以外の人も存在しているのでキッチリとは分けられないですが...。

BTC,BCH,BSVよりETHはリッチなプログラミング言語が使えるそうです。そのため入門としてもってこいなのかも?

イーサの誕生理由

BTCは非常に使いづらい制約を載せられてしまいました。送金が遅く、データをほとんど載せられないというものです。そのメリットとしては当時の貧弱なインフラでお金として多少は使えるようにしたいためと思います。そのような背景からLTCなども生まれ一定のニーズを獲得したのかと思います。
そこでBTCでできるはずだったスマコンができなくなったのでETHをつくることになりました。

急遽若いビタリックさんが草案を出して巻き込んでいったようです。BTCの捨てた機能を拾ったとは厳密には違い、参考にしつつ考案したといったニュアンスかなと受け取りました。

さっさと技術的な所に行きたいが

書籍をさらっと読みながらなので序章はこんなことばかりになる。知っていた方がETHな人と話が噛み合うだろうから一応。

フェーズ

フロンティア、ホームテッド、メトロポリス、セレニティと開発フェーズが分かれていて、結構互換性なしのアップデートをしてきたようです。
なんか他にもあるようだけど、そんな感じです。
そう聞くとプロトコルロックをすべきと主張して順当にやってきたBSVは課題に対して有効な対処をしたんだなと感じる。

ちょっとした技術話

ポートは30303でEVMという仮想マシンで処理するそうです。

チューリング完全

イーサリアムビットコインと異なりチューリング完全らしいです。要は止まらずに計算し続けられるよってことですかね。ビットコインはだめなんですかね?ちょっと調べたところ、永遠に動けば必ずしも良い訳でもないようです。よほどの処理をするコンテンツを作れる日がくるまで気にしなくてもよさそう。チューリング完全は凄い訳ではなくて、そういう仕組みにすること自体は別にやろうと思えば他のブロックチェーンでもできるみたい。
またパブリックなブロックチェーンでは危険性も伴うとの事。うーん、ではなぜチューリング完全にしてるのでしょう。

無限ループを防ぐためにある

チューリング完全のせいで高度な計算を永遠にできてしまう。すると非常にノードに負荷が掛かる。みんなでこれをやったら成立しない。そこでgasがあるそうです。ガス代は多めに払っておけば、残りは払い戻されるそうです。ただ価格が固定ではないので相場を適当に算出するんでしょうかね。

スマコンより広いDApp

知りませんでした。スマコンは契約なんで、スマコンで作りたいものあるかなーと思っていましたがDAppはWebアプリみたいなものも含むと。そうですねDApp作りたいです。

本日はこの辺で。追記か新規投稿を行います。

BTC,BCH,ETH,EOSはすべて学ぶ価値がある

仮想通貨として価値があるないは、首を突っ込んでいるエンジニアには最重要事項ではない。なぜならEOSがダメになったとしよう。そしたら生き残っている別のスマコンを触ればいいのです。Win派だからWinがなくなりMacしかなくなったらパソコンは使わない!なんてエンジニアはほぼいない訳です。

BTC,BCHの作り上げてきたサービス、エンジニアの事は知っていて損はない。BTCの時からずっとブロックチェーンを利用したサービスを構築する人は、私にとって先輩にあたる。実際現在BSV上に構築している古株は当然BSVが誕生する前から携わっている。

この点、BTCの汚点だが早々にETHにスマコンエンジニアを流出させてしまった。現在BSVはジェネシスからそこそこ順調に成長しているが、ETHに流れたエンジニアや、そこで培ってきたノウハウは流用すべき点がある。

この点は待てばいいかと避けていたが決定的だったのがsCryptとETHエンジニアの記事を見た時です。まず「ETHのようなことがBSVでもすでにできるんだ!」と言われる訳です。いやETH勉強してないしなーみたいな。業界の先輩はBSV以前からブロックチェーンエンジニアな訳です。BSVもコミュニティはBTC->BCHと来ていて、その中で構築したり、EOS触ってる人だったり、ETH,LTC触ってる人もいます。そもそもBSVしか触ったことないエンジニアは入学したての新入生状態です。
長くなりましたがsCryptの決定打がSolidityです。では以下のサイトを閲覧してみてください。

solidity-jp.readthedocs.io

日本語で冒頭になんて書いてあるでしょう。またフレームワーク(デザイン)はどうでしょう。これsCryptがやろうとしてることよねって。
そうなんです。sCryptにはETHをディスるよりも敬い参考にすべき先輩がいます。いずれ追い越すにしても先駆けて着手している方です。
だからエンジニアほどあまりプロレスをしないのです。畑が違ってもべつに移動できます。いずれその優秀な先輩がウチの畑にくるとしたら、
ディスってるよりテメーの成長を急がないといけません。

そして逆にいうとチャンスでもあります。BSVは根幹の悪い部分を排除して仕切りなおしています。いまブロックチェーンで飯を食っている人は、あまりBSVの仕事はありません。でも仕事が増えたら当然移ってきます。それまでのこの時間は勉強させていただきましょう。

BSVが順調なのは仕切り直しで他所の良いもの悪いものを判断できたからで、道なき道をすすむこれからはこれから参加するエンジニアにかかっています。動画、音声、画像、長文。これらをオンチェーンにまともに安く速く上げられるブロックチェーンはこの世に現存しません。これからBSVが時間と共に目指していく世界なんす。

ちなみにEOSの日本語の(電子)書籍は見当たりませんでした。ネットで探せばあるかもしれません。日本語で優しいブロックチェーン技術を定期的に購読して日記を記す??ノルマにチャレンジします。急がば回れ、KotlinもやりたいがsCryptを最高に使える状態でアプリを作りたいから一旦止めています。