プログラム上達したいな blog

プログラム書けるようになりたいアウトプット用

CryptoZombies レッスン5

cryptozombies.io

 

このレッスンでは

ERC721

いろんな人とのゾンビの

トレードを可能にする

f:id:gjjjjcdssvgg:20180629153036p:plain

ちなみに私のトークンは

ERC20です

 

 

チャプター1

ERC20トーク

通貨のような働きをするトーク

 

ERC721トーク

トークン1つ1つに特徴があり、

相互交換が不可能である

 

 

チャプター2

多重継承

contract ZombieOwnership is ZombieAttack, ERC721 {

}

「、」付けたら

多重に継承も可能

 

 

チャプター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;
  1. 一番目の方法はトークン所有者が送り先のaddress、そして送りたいトークンの_tokenIdを送ってtransfer関数を呼び出すものだ。

     

  2. 二番目の方法は、トークン所有者がまずapprove関数を呼び出し、一番目と同じ情報を関数に送る。すると、コントラクトが誰がトークン受け取りを許可されたのかを、通常はmapping (uint256 => address)にて記録する。さらに誰かがtakeOwnershipを呼び出すと、コントラクトはそのmsg.senderトークンを受け取ることを所有者から承認されているかをチェックし、承認済みの場合は彼にトークンを移転する。

transfertakeOwnershipのどちらも同じ転送ロジックを含むことに気付くことになるだろうが、順序が逆になる。(ひとつはトークンの送り手が関数を呼び出すケース、もうひとつはトークンの受け手が関数を呼び出すケース)。

うーん、

とりあえずいろんな

移転方があるらしい

 

event忘れてるなー

qiita.com

  • イベントは、コントラクト上で発生したことをDAPPなどのクライアントに通知することができる
  • イベントが呼び出されると、実際渡された関数のパラメータをトランザクションのログに保持し、コントラクトのアドレスと関連を付けられる。
    • トランザクションがブロックに保持されるので、イベントも同じく、ブロックが存在している限り、イベントのログもずっと存在している
    • ただ、ログとイベントは、コントラクトから(コントラクトの作成者でも)直接にアクセスできない

logに表示してくれるやつかー

 

 

チャプター6

transfer関数が頑張ってます

 

 

チャプター7

approve関数が頑張り始める

mapping

qiita.com

 

 

チャプター8

takeOwnership関数が

頑張り始める

 

 

チャプター9

スマートコントラクトを

書くときに気をつけなければ

いけないこと

 

・オーバーフロー

・アンダーフロー

 

オーバーフロー

言葉の通りオーバーする

uint8は2の8乗で256の数字しか

(uint8: 0~255の数字が入る)

格納することが出来ない

uint8 i = 255;

i++;

これだと次の値が i =256

ではなく i = 0 となる

これがオーバーフロー

 

askjapan.me

 

アンダーフロー

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

レッスンも終盤

f:id:gjjjjcdssvgg:20180629182205p:plain

 

 

おわりに

倉本が帰ってきました

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

効果的プログラム開発技法の勉強1

 

効果的プログラム開発技法

効果的プログラム開発技法

 

 

これを理解しないと

単位がもらえないそうなので

アウトプットします

 

 

まず、第5版発行にあたって

 

本書の初版を出してから、早くも30年近くの年月が経ちました。...(以下省略) 

 

え、30年!?

やばw という入りです

 

本書で取り上げる対象として、プログラム開発だけにこだわらず、システム開発全般に拡張しています。したがって、内容的には「効果的プログラム開発技法」よりも、むしろ「効果的システム開発技法」とうたった方が相応しいものになっています。ただ、本書のタイトルは、改題せず、従来通りにしてあります。理由は、従来からの読者への混乱を避けるためです。 

 

この本はプログラムを学ぶというより

システム開発を重視しているそう

 

本書が、専門学校や大学で情報処理を学ぼうとしている学生、企業で情報処理の仕事を始めようとしている方々に対して、情報システム開発の指針として、少しでもお役に立つことがあるならば、著者としてこれ以上の喜びはありません。

 

今、学んでおります。

喜びを噛み締めているところでしょう

 

 

 1 情報システム開発の現状と問題点

 1.1 情報システム開発の過去と経緯

 1.2 情報システム開発の現状

 1.3 情報システム開発の問題点

 

1.1 情報システム開発の過去と経緯

初期の情報システム開発

初期の情報システム開発1960年代から事務作業効率化のためにコンピュータを利用して始まった。その当時は処理が単純で情報システムとしては、小規模で開発が容易なものが多かった。なので、現在のような、大人数で参画するプロジェクトチームというものは存在しなかった。(約1970年まで)

この時はシステムいらなかったんだなー

 

 

開発システムの大規模化

データ量が多くなるなどして、個人の技量だけではどうしようも出来ない時代がきてしまう。(約1970年頃)この辺りからソフトウェアエンジニアリングの議論が活発となり、開発作業の生産性の向上とシステムの品質改善を実現するための方策が種々提案された

約1970年にこのままじゃやばいと

なったらしい

 

 

1.2 情報システム開発の現状

この1970年から今もなお現在、この開発作業の生産性向上とシステムの品質改善の問題は問題となり続けている。javaとかc言語使ってる人がいたり、pythonrubyを最近?使ってる人がいたりと、情報システムを取り巻く環境が日々ものすごい速度で変化している。

 

 

情報システムの目的の変遷

 

kotobank.jp

 

目的の変遷は3期に集約される

①業務の効率化

②マネジメント支援

③グローバルシステム

 

①業務の効率化

手作業 → 機械化

 

②マネジメント支援

データベース、オンライン技術の発展

 

③グローバルシステム

ICT革命により、国境を超えたグローバルなオープンネットワークシステムが多くなる

www.724685.com

 

 

電子技術の進化

コンピュータの頭脳であるメモリや演算装置を構成する半導体の進歩は驚異的である。

 

半導体が革命的だったからこそ、日本の企業は輝いていたのでしょう。

 

 

ネットワーク技術の発展と環境変化

ICT = コンピュータ技術 + ネットワーク技術

 

 

対象領域の拡大

1990年代に、情報システムは、中央集中型の処理から分散型処理へと移行する。これは、情報システムの主役が、情報システム部門から現場である利用部門へと移行することを意味する。

 タイトル通りシステム構成の対象領域が1990年代以降どんどん大きくなっていき、2000年代にはインターネット技術発展により、個人までもが対象領域内となる。

 

 

影響範囲の拡大

世界です。

 

 

1.3 情報システム開発の問題点

 1.2のように対象範囲が広がりすぎたので情報システム開発時に考慮しなければならない要因が複雑化している。さらに新しい技術を取り入れた効率的な情報システムを構築することが要求されているが、最近の日本はアメリカにまた、中国にインターネット技術の差をかなりつけられているのが現状です。

 

 

開発期間の短縮

ビジネスの変化スピードが早いので、そのスピードに対応するために今までよりもはるかに短い開発期間の設定をしなければいけない。開発環境の厳しい制約がIT技術者に強いられているそう。この先が怖いなー

 

 

Webシステム開発技術の未成熟

大規模システム開発で、開発チームへの変更を伝えるなどのコミュニケーションが多く必要があるので、なかなか新しい技術を取り入れることが出来ないらしい。日本はその結果が国全体で顕著に現れている。

 

 

開発技術者の育成

type.jp

ド、ドラゴンボール??

prog-8.com

aidemy.net

internet.watch.impress.co.jp

 

ドラゴンボール

progate!

Aidemy!

プログラミング必修化!

育成は出来そうですね

少子化が気になりますけど

 

 

おわりに

日本やばいかも...

 

 

 

 

CryptoZombies レッスン4

cryptozombies.io

 

 

ゾンビのバトルシステムを

構築していくらしい

がんばろ

 

 

チャプター1

payable修飾詞

payable関数は、solidityとEthereumをこんなにもクールにしているものの1つといえる。Etherを受け取ることができる特別なタイプの関数なんだ。

ちょっとじっくりと考えてみよう。お主達が通常のウェブサーバー上でAPI関数を呼び出すとき、ファンクション・コール(関数呼び出し)に併せてUSドルを送ることはできない。ビットコインでもダメだ。

だがイーサリアムでは、お金(Ether)もデータ(トランザクションの内容)も、コントラクト・コード自体も全てイーサリアム上にあるから、ファンクション・コール及びお金の支払いが同時に可能だ。

関数を実行するため、コントラクトへいくらかの支払いを要求するというようなすごく面白いこともできてしまうのだ。

 なんか凄そう

 

ファンクションコールとは...

f:id:gjjjjcdssvgg:20180628190809p:plain

デジモン??

ããã¡ã³ã¯ã·ã§ã³ã³ã¼ã«ããã¸ã¢ã³ãã®ç»åæ¤ç´¢çµæ

みんな楽しそうやなー

 

 

プログラムの

ファンクションコールはこんな感じ

https://wa3.i-3-i.info/word12295.html

 

お金(Ether)のやり取りをする時には

payableを使うのかな?

 

 

チャプター2

withdraw関数

の前に

f:id:gjjjjcdssvgg:20180628192226p:plain

画像の中の文章を見ると

コントラクトに送られたEth

なってますわ

まあ、文脈からわかるんで

何の問題もないんですけど

調子乗って指摘してみました

すいません

 

payableを使ってそのままに

しておくと

コントラクトにEtherが

入ったままになってるから

取り出す必要があるらしいです

 

どこに取り出すんやろ?

 

取り出すには

withdraw関数を使う

 

transfer関数というものも

あるらしい

この関数を使うと

Etherをとあるアドレスに送る

ことができるらしい

 

ãã¨ããç§å­¦ã®è¶é»ç£ç ²sãã®ç»åæ¤ç´¢çµæ

 

楽しそう

 

 

チャプター3

ゾンビバトルの機能追加

contractの外枠の書き方

忘れてたなー

 

 

チャプター4

乱数生成には結構気を

入れないといけなさそう

 

 

チャプター5

ゾンビが戦うよー

 

 

チャプター6

f:id:gjjjjcdssvgg:20180628201217p:plain

思いつきませんでした!

すいません!

require,require,require,require

msg.sender,msg.sender,

msg.sender,msg.sender

 

 

チャプター7

リファクタリング

さらに倍!!!

リファクタリング→制限みたいな

- リファクタリングとは何か?

 

 

ãåå ã®è¡ãã®ç»åæ¤ç´¢çµæ

 

 

チャプター8

zombieAttack.solの設定

 

 

チャプター9

ゾンビの勝敗を決めるよ

構造体 うーむ

忘れてるなー

uint id = zombies.push(Zombie(_name, _dna, 1, uint32(now + cooldownTime), 0, 0)) - 1;
 
引数多すぎません?w
 
 

チャプター10

ゾンビが勝つよ

 

 

チャプター11

ゾンビが負けるよ

 

 

チャプター12

まとめ

f:id:gjjjjcdssvgg:20180628215802p:plain

f:id:gjjjjcdssvgg:20180628215818p:plain

f:id:gjjjjcdssvgg:20180628215833p:plain

ふぅ

 

 

おわりに

 

菅野でも勝てへんかったかー

混セすぎる...

ブロックチェーン Loom SDK

loomx.io

 

これを触ってました。

 

f:id:gjjjjcdssvgg:20180708093322p:plain

 

前提条件と

JavascriptクライアントSDK

にあるやつ

Macに入れてから

Phaser + Websocketsのデモ

 

f:id:gjjjjcdssvgg:20180708093633p:plain

 

(ターミナルに打ち込む内容は

公式ページにあるよ)

 

loomx.io

 

ターミナルに打ち込んだら

f:id:gjjjjcdssvgg:20180626201236p:plain

まあ動いたのは動いたけど

これはSDKいつ使ったんや...

赤色出したかったけど

出ませんでした...

ボタン押すたびに

Macが「デュン」って

悲鳴あげてた

 

Etherboyゲーム 

Phaser SDKのデモ

f:id:gjjjjcdssvgg:20180708094008p:plain

動かないんですけど

 

cp ../genesis.example.json genesis.json

これないよって言われるんですけど

 

 

 

 

 

あ、動きました

 

 

Phaser SDKのデモ

動画アップロードできなかった

ので写真で

f:id:gjjjjcdssvgg:20180626205838p:plain

f:id:gjjjjcdssvgg:20180626205946p:plain

 

追記

 

ja.stackoverflow.com

 

このエラー出てたんですけど

/buildまでcd使って

ディレクトリ移動してから

npm installしたら

動きました!!!

ディレクトリの位置大事!!!

 

 

 

Etherboyゲーム  

f:id:gjjjjcdssvgg:20180626210654p:plain

 

f:id:gjjjjcdssvgg:20180626210814p:plain

$LOOM_BIN init

でエラー出まーす

Loom Unity SDK...

Unityがきついんでギブ

 

 

JS Websocket + EVM Web3 デモ

f:id:gjjjjcdssvgg:20180626212015p:plain

ボタン押した時に

色がすぐに

つかへんかったけど

そんなもんなんかな

 

 

シンプルなソーシャルネットワークのサンプル

 

これを最後にやったせいか

問題なくすんなり

動きました

 

f:id:gjjjjcdssvgg:20180626213232p:plain

 

f:id:gjjjjcdssvgg:20180626213243p:plain

 

f:id:gjjjjcdssvgg:20180626213252p:plain

 

 

おわりに

 

失敗ばっかりしたせいで

めちゃめちゃストレージ使った

あとで削除します

 

8回の裏じゃなくて

7回の裏でした

 

 

 

 

 

 

 

 

 

 

 

ブロックチェーン ropstenネットワーク ちょっとしたこと

あのー

公式のropstenネットワーク

Etherscan ERC20 Tokens Contract Search

触ってて

ふと調べてたら...

f:id:gjjjjcdssvgg:20180625224818p:plain

見えるかな?

自分の作ったトーク

ありました!!

びっくり

 

 

それだけですw