EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

CryptoZombiesにSolidityを学ぶ Lesson.2(完)

スマートコントラクトを構築するための言語solidity

言語をブラウザで遊びながら学ぶCryptoZombie

 

前回はLesson2. chapter.8まで

 

tenomeuonome.hateblo.jp

 

続きをやっていきます。

 

目次

 

Lesson2 / Chapter9

ビジビリティを学ぶ。

関数のビジビリティにはpublic と privateの他にinternalexternal がある。

internal

privateと同じだが、コントラクトから継承したコントラクトにもアクセスできる。

external

public と同じだが、コントラクトの外からだけアクセスできる。

-----

contract Sandwich {

  uint private sandwichesEaten = 0;

 

  function eat() internal {

    sandwichesEaten++;

  }

}

 

contract BLT is Sandwich {

  uint private baconSandwichesEaten = 0;

 

  function eatWithBacon() public returns (string) {

    baconSandwichesEaten++;

    ↓ 呼び出し可能

    eat();

  }

}

-----

 

Lesson2 / Chapter10

interface

ブロックチェーン上の他人のコントラクトとやりとりするために、interfaceを定義する。

-----

contract NumberInterface {

  ↓関数の内容は定義していない

  function getNum(address _myAddress) public view returns (uint);

}

-----

 

Lesson2 / Chapter11

Interfaceを使用する。

-----

contract NumberInterface {

  function getNum(address _myAddress) public view returns (uint);

}

-----

↑のInterfaceを使用する。

-----

contract MyContract {

  address NumberInterfaceAddress = 0x...;

  NumberInterface numberContract = NumberInterface(NumberInterfaceAddress);

 

  function someFunction() public {

    ↓コントラクトからInterfaceの関数を呼び出す

    uint num = numberContractgetNum(msg.sender);

  }

}

-----

 

Lesson2 / Chapter12

複数の返り値の処理を学ぶ。

-----

function multipleReturns() internal returns(uint a, uint b, uint c) {

  return (1,2,3);

}

 

function processMultipleReturns() external {

  uint a;

  uint b;

  uint c;

  ↓複数に返却値を割り当てる記述

  (a, b, c) = multipleReturns();

}

 

function getLastReturnValue() external {

  uint c;

  ↓値が不要なパラメータは空欄

  (, , c) = multipleReturns();

}

-----

 

Lesson2 / Chapter13、14

まとめ

javascript とweb3.jsを使用して実行したコントラクトがやりとりする例。

-----

var abi = xxx

var ZombieFeedingContract = web3.eth.contract(abi)

var contractAddress = xxx

var ZombieFeeding = ZombieFeedingContract.at(contractAddress)

 

let zombieId = 1;

let kittyId = 1;

 

let apiUrl = "https://api.cryptokitties.co/kitties/" + kittyId

$.get(apiUrl, function ( data ){

  let imgUrl = data.image_url

})

 

$(".kittyImage").click(function(e) {

  ZombieFeeding.feedOnKitty(zombieId, kittyId)

})

 

ZombieFactory.NewZombie(function(error, result) {

  if( error ) return

  generateZombie(result.zombieId, result.name, result.dna)

})

-----

 

これでLesson.2は終了。

文法的なことは分かってくるが、実装的なことはついてきていない印象。

学んだ文法を使って何ができるのか?がまだわからない。

まだまだLessonは続くので、完全についていけなくなるまで連続してやっていきます。

 

 

続く