CryptoZombiesにSolidityを学ぶ Lesson.2(完)
スマートコントラクトを構築するための言語solidity
言語をブラウザで遊びながら学ぶCryptoZombie
前回はLesson2. chapter.8まで
続きをやっていきます。
目次
- Lesson2 / Chapter9
- Lesson2 / Chapter10
- Lesson2 / Chapter11
- Lesson2 / Chapter12
- Lesson2 / Chapter13、14
Lesson2 / Chapter9
ビジビリティを学ぶ。
関数のビジビリティにはpublic と privateの他にinternalとexternal がある。
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は続くので、完全についていけなくなるまで連続してやっていきます。
続く