CryptoZombies レッスン5
このレッスンでは
ERC721
いろんな人とのゾンビの
トレードを可能にする
ちなみに私のトークンは
ERC20です
チャプター1
ERC20トークン
通貨のような働きをするトークン
ERC721トークン
トークン1つ1つに特徴があり、
相互交換が不可能である
チャプター2
多重継承
「、」付けたら
多重に継承も可能
チャプター3
balanceOf関数
addressを受け取り、
そのaddressのトークン量を返す
ownerOf
トークンIDを受け取り、
そのトークン所有者のaddressを
返す
チャプター4
同じ関数名を作ってしまうと
良くないよ
チャプター5
注意してほしいが、ERC721規格は2つの異なるトークン移転法を持つ:
function transfer(address _to, uint256 _tokenId) public; function approve(address _to, uint256 _tokenId) public; function takeOwnership(uint256 _tokenId) public;
一番目の方法はトークン所有者が送り先の
address
、そして送りたいトークンの_tokenId
を送ってtransfer
関数を呼び出すものだ。
二番目の方法は、トークン所有者がまず
approve
関数を呼び出し、一番目と同じ情報を関数に送る。すると、コントラクトが誰がトークン受け取りを許可されたのかを、通常はmapping (uint256 => address)
にて記録する。さらに誰かがtakeOwnership
を呼び出すと、コントラクトはそのmsg.sender
がトークンを受け取ることを所有者から承認されているかをチェックし、承認済みの場合は彼にトークンを移転する。
transfer
とtakeOwnership
のどちらも同じ転送ロジックを含むことに気付くことになるだろうが、順序が逆になる。(ひとつはトークンの送り手が関数を呼び出すケース、もうひとつはトークンの受け手が関数を呼び出すケース)。
うーん、
とりあえずいろんな
移転方があるらしい
event忘れてるなー
logに表示してくれるやつかー
チャプター6
transfer関数が頑張ってます
チャプター7
approve関数が頑張り始める
mapping
チャプター8
takeOwnership関数が
頑張り始める
チャプター9
スマートコントラクトを
書くときに気をつけなければ
いけないこと
・オーバーフロー
・アンダーフロー
オーバーフロー
言葉の通りオーバーする
uint8は2の8乗で256の数字しか
(uint8: 0~255の数字が入る)
格納することが出来ない
uint8 i = 255;
i++;
これだと次の値が i =256
ではなく i = 0 となる
これがオーバーフロー
アンダーフロー
uint8 i = 0;
i--;
の時に、i = -1 になるのではなく
i = 255 となってしまう
これがアンダーフロー
チャプター10
SafeMathライブラリと
いうものがあるらしい
using SafeMath for uint;
// now we can use these methods on any uint
uint test = 2;
test = test.mul(3); // test now equals 6
test = test.add(5); // test now equals 11
詳しいことは
わかりませんが
とりあえず
SafeMathライブラリの
add関数、sub関数
mul関数、div関数
の四則演算をするための関数を
使うと
オーバーフロー、
アンダーフロー対策になるので
便利だよみたいな
チャプター11
safemath.solの中の
ライブラリに
SafeMath16と
SafeMath32もある
それぞれ
SafeMath16 = uint16
SafeMath32 = uint32
に対応
チャプター12
今まで
i ++;
と表現していたところを
i = i.add(1);
に変える
チャプター13
コメントの仕方
方法1
// コメントだよ
方法2
/*
コメントだよ
コメントだよ
コメントだよ
*/
solidityではnatspecという
フォーマット(表現方法)が
良く用いられるとのこと
使うメリットは
このソースコードは何を
意味しているかを
他の人に理解しやすくして
いること
/// @title A contract for basic math operations /// @author H4XF13LD MORRIS 💯💯😎💯💯 /// @notice For now, this contract just adds a multiply function contract Math { /// @notice Multiplies 2 numbers together /// @param x the first uint. /// @param y the second uint. /// @return z the product of (x * y) /// @dev This function does not currently check for overflows function multiply(uint x, uint y) returns (uint z) {
// This is just a normal comment,
// and won't get picked up by natspec z = x * y; } }
@で始まっているのがnatspec
@title: タイトル
@author: 作った人
@notice: このコントラクト、
関数が何をするのか
@param: 変数
@return: 返す値
@dev: 各関数の説明?
チャプター14
レッスンも終盤
おわりに
倉本が帰ってきました
【AbemaTIMES】横浜DeNAラミレス監督、連敗ストップへ1軍復帰のロペスを5番一塁で即スタメン「戻ってきてくれてうれしい」倉本も1軍昇格 https://t.co/fDc3nx92V5 #baystars
— ベイスターズ情報 (@bay_bot) 2018年6月29日
効果的プログラム開発技法の勉強1
これを理解しないと
単位がもらえないそうなので
アウトプットします
まず、第5版発行にあたって
本書の初版を出してから、早くも30年近くの年月が経ちました。...(以下省略)
え、30年!?
やばw という入りです
本書で取り上げる対象として、プログラム開発だけにこだわらず、システム開発全般に拡張しています。したがって、内容的には「効果的プログラム開発技法」よりも、むしろ「効果的システム開発技法」とうたった方が相応しいものになっています。ただ、本書のタイトルは、改題せず、従来通りにしてあります。理由は、従来からの読者への混乱を避けるためです。
この本はプログラムを学ぶというより
システム開発を重視しているそう
本書が、専門学校や大学で情報処理を学ぼうとしている学生、企業で情報処理の仕事を始めようとしている方々に対して、情報システム開発の指針として、少しでもお役に立つことがあるならば、著者としてこれ以上の喜びはありません。
今、学んでおります。
喜びを噛み締めているところでしょう
1 情報システム開発の現状と問題点
1.1 情報システム開発の過去と経緯
1.2 情報システム開発の現状
1.3 情報システム開発の問題点
1.1 情報システム開発の過去と経緯
・初期の情報システム開発
初期の情報システム開発は1960年代から事務作業効率化のためにコンピュータを利用して始まった。その当時は処理が単純で情報システムとしては、小規模で開発が容易なものが多かった。なので、現在のような、大人数で参画するプロジェクトチームというものは存在しなかった。(約1970年まで)
この時はシステムいらなかったんだなー
・開発システムの大規模化
データ量が多くなるなどして、個人の技量だけではどうしようも出来ない時代がきてしまう。(約1970年頃)この辺りからソフトウェアエンジニアリングの議論が活発となり、開発作業の生産性の向上とシステムの品質改善を実現するための方策が種々提案された
約1970年にこのままじゃやばいと
なったらしい
1.2 情報システム開発の現状
この1970年から今もなお現在、この開発作業の生産性向上とシステムの品質改善の問題は問題となり続けている。javaとかc言語使ってる人がいたり、pythonやrubyを最近?使ってる人がいたりと、情報システムを取り巻く環境が日々ものすごい速度で変化している。
・情報システムの目的の変遷
目的の変遷は3期に集約される
①業務の効率化
②マネジメント支援
③グローバルシステム
①業務の効率化
手作業 → 機械化
②マネジメント支援
データベース、オンライン技術の発展
③グローバルシステム
ICT革命により、国境を超えたグローバルなオープンネットワークシステムが多くなる
・電子技術の進化
コンピュータの頭脳であるメモリや演算装置を構成する半導体の進歩は驚異的である。
半導体が革命的だったからこそ、日本の企業は輝いていたのでしょう。
・ネットワーク技術の発展と環境変化
ICT = コンピュータ技術 + ネットワーク技術
・対象領域の拡大
1990年代に、情報システムは、中央集中型の処理から分散型処理へと移行する。これは、情報システムの主役が、情報システム部門から現場である利用部門へと移行することを意味する。
タイトル通りシステム構成の対象領域が1990年代以降どんどん大きくなっていき、2000年代にはインターネット技術発展により、個人までもが対象領域内となる。
・影響範囲の拡大
世界です。
1.3 情報システム開発の問題点
1.2のように対象範囲が広がりすぎたので情報システム開発時に考慮しなければならない要因が複雑化している。さらに新しい技術を取り入れた効率的な情報システムを構築することが要求されているが、最近の日本はアメリカにまた、中国にインターネット技術の差をかなりつけられているのが現状です。
・開発期間の短縮
ビジネスの変化スピードが早いので、そのスピードに対応するために今までよりもはるかに短い開発期間の設定をしなければいけない。開発環境の厳しい制約がIT技術者に強いられているそう。この先が怖いなー
・Webシステム開発技術の未成熟
大規模システム開発で、開発チームへの変更を伝えるなどのコミュニケーションが多く必要があるので、なかなか新しい技術を取り入れることが出来ないらしい。日本はその結果が国全体で顕著に現れている。
・開発技術者の育成
ド、ドラゴンボール??
progate!
Aidemy!
プログラミング必修化!
育成は出来そうですね
少子化が気になりますけど
おわりに
日本やばいかも...
【速報 JUST IN 】サッカーW杯 後半14分 日本がポーランドに先制許す #nhk_news https://t.co/iTGXUDqGoZ
— NHKニュース (@nhk_news) 2018年6月28日
CryptoZombies レッスン4
ゾンビのバトルシステムを
構築していくらしい
がんばろ
チャプター1
payable修飾詞
payable
関数は、solidityとEthereumをこんなにもクールにしているものの1つといえる。Etherを受け取ることができる特別なタイプの関数なんだ。ちょっとじっくりと考えてみよう。お主達が通常のウェブサーバー上でAPI関数を呼び出すとき、ファンクション・コール(関数呼び出し)に併せてUSドルを送ることはできない。ビットコインでもダメだ。
だがイーサリアムでは、お金(Ether)もデータ(トランザクションの内容)も、コントラクト・コード自体も全てイーサリアム上にあるから、ファンクション・コール及びお金の支払いが同時に可能だ。
関数を実行するため、コントラクトへいくらかの支払いを要求するというようなすごく面白いこともできてしまうのだ。
なんか凄そう
ファンクションコールとは...
デジモン??
みんな楽しそうやなー
プログラムの
ファンクションコールはこんな感じ
https://wa3.i-3-i.info/word12295.html
お金(Ether)のやり取りをする時には
payableを使うのかな?
チャプター2
withdraw関数
の前に
画像の中の文章を見ると
コントラクトに送られたEthに
なってますわ
まあ、文脈からわかるんで
何の問題もないんですけど
調子乗って指摘してみました
すいません
payableを使ってそのままに
しておくと
コントラクトにEtherが
入ったままになってるから
取り出す必要があるらしいです
どこに取り出すんやろ?
取り出すには
withdraw関数を使う
transfer関数というものも
あるらしい
この関数を使うと
Etherをとあるアドレスに送る
ことができるらしい
楽しそう
チャプター3
ゾンビバトルの機能追加
contractの外枠の書き方
忘れてたなー
チャプター4
乱数生成には結構気を
入れないといけなさそう
チャプター5
ゾンビが戦うよー
チャプター6
思いつきませんでした!
すいません!
require,require,require,require
msg.sender,msg.sender,
msg.sender,msg.sender
チャプター7
さらに倍!!!
リファクタリング→制限みたいな
チャプター8
zombieAttack.solの設定
チャプター9
ゾンビの勝敗を決めるよ
構造体 うーむ
忘れてるなー
チャプター10
ゾンビが勝つよ
チャプター11
ゾンビが負けるよ
チャプター12
まとめ
ふぅ
おわりに
【 #巨人 】中5日の菅野、5回に2発食らい逆転負け!高橋昂にプロ初白星献上 https://t.co/4MDlPrpubJ pic.twitter.com/KA6VVrC9rh
— スポーツ報知・野球取材班 (@hochi_baseball) 2018年6月28日
菅野でも勝てへんかったかー
混セすぎる...
ブロックチェーン Loom SDK
これを触ってました。
前提条件と
JavascriptクライアントSDK
にあるやつ
Macに入れてから
Phaser + Websocketsのデモ
(ターミナルに打ち込む内容は
公式ページにあるよ)
ターミナルに打ち込んだら
まあ動いたのは動いたけど
これはSDKいつ使ったんや...
赤色出したかったけど
出ませんでした...
ボタン押すたびに
Macが「デュン」って
悲鳴あげてた
Etherboyゲーム
と
Phaser SDKのデモ
動かないんですけど
cp ../genesis.example.json genesis.json
これないよって言われるんですけど
あ、動きました
Phaser SDKのデモ
動画アップロードできなかった
ので写真で
追記
— オストルぃ なんかアプリ作りたい (@KEIBADEIKKAKU) 2018年6月26日
このエラー出てたんですけど
/buildまでcd使って
ディレクトリ移動してから
npm installしたら
動きました!!!
ディレクトリの位置大事!!!
Etherboyゲーム
$LOOM_BIN init
でエラー出まーす
Loom Unity SDK...
Unityがきついんでギブ
ボタン押した時に
色がすぐに
つかへんかったけど
そんなもんなんかな
シンプルなソーシャルネットワークのサンプル
これを最後にやったせいか
問題なくすんなり
動きました
おわりに
失敗ばっかりしたせいで
めちゃめちゃストレージ使った
あとで削除します
8回の裏じゃなくて
7回の裏でした
\ #大田泰示 タイムリー /#大田 選手、貴重な追加点となるタイムリー!
— GAORA SPORTS ファイターズ (@gaora_fighters) 2018年6月26日
ファイターズみるなら #GAORA SPORTS#北海道日本ハム 🆚 #ソフトバンク#lovefighters #いちばん青い空にしよう #ホームランシリーズ #ニッポンハム pic.twitter.com/edNShCQvGH
ブロックチェーン ropstenネットワーク ちょっとしたこと
あのー
公式のropstenネットワーク
Etherscan ERC20 Tokens Contract Search
触ってて
ふと調べてたら...
見えるかな?
自分の作ったトークン
ありました!!
びっくり
それだけですw