初心者文系主婦がブロックチェーンを学ぶブログ

IT革命のビッグウェーブに乗り遅れた主婦が、ブロックチェーン革命の波にのるべく、ブロックチェーン技術を学ぶブログです。

【CryptZombies】レッスン4チャプター2:Withdraw関数

Withdraw関数

withdraw関数は、Etherをコントラクトから引き出す関数です。

コントラクトに送られたEtherは、コントラクトのイーサリアム・アカウントに貯められます。コントラクトからEtherを引き出す関数を追加しない限りはそこに閉じ込められたままになってしまいます。

contract GetPaid is Ownable {
  function withdraw() external onlyOwner {
    owner.transfer(this.balance);
  }
}

ownerとonlyOwner修飾詞をOwnableコントラクトから用いています。

transfer関数を使ってEtherをあるアドレスに送ることができ、this.balanceコントラクトに溜まっている残高の総量を返します。なので、もし100人のユーザーが1Etherを私たちのコントラクトに支払ったとしたら、this.balanceは100Etherに等しくなります。

transferを使えば、どんなイーサリアムのアドレスにも送金可能です。例えば下にあるように、あるアイテムに対する支払いが多すぎた場合に、Etherをmsg.senderに送り返す関数を作ることもできます。

uint itemFee = 0.001 ether;
msg.sender.transfer(msg.value - itemFee);

または購入者と販売者間のコントラクトにおいて、販売者のアドレスをストレージに保存しておいて、誰かが販売者のアイテムを購入する際に、購入者が支払った料金を販売者に送金することも可能です。

seller.transfer(msg.value)

このようにして分散型マーケットプレイスを持つことができるのです。

 

テストの実行

①我々のコントラクト内に、上記のGetPaidの例と同一のwithdraw関数を作成せよ。

f:id:nomadomama:20181213005551p:plain

 

コントラクトの所有者として、我々がlevelUpFeeを設定できるような関数を作るのだ。

a.一つの引数uint _feeを受け取るsetLevelUpFeeという名の関数を作成せよ。これはexternalであり、onlyOwner修飾詞を用いることとする。

f:id:nomadomama:20181213005714p:plain

b.作成した関数にlevelUpFeeを設定し、_feeと同等となるようにせよ。

f:id:nomadomama:20181213005756p:plain

 

お疲れさまでした!

 

 

<参考>

CryptoZombies - イーサリアム上でゲームを開発する方法を学習。Powered by Loom Network