Lesson 4 Chapter1 Payable関数
関数修飾詞の種類
可視性修飾詞
internal修飾詞 private修飾詞+そのコントラクトを継承したコントラクトからも呼び出す事ができる。
external修飾詞 コントラクト外からだけ呼び出す事ができる。
public修飾詞 コントラクト内部・外部どちらからでも呼び出せる。
状態修飾詞
関数がブロックチェーンとどのように作用し合うのか示す。
pure修飾詞 関数がブロックチェーンにデータを保存しないだけでなく、ブロックチェーンからデータを読み込むこともない。
カスタム修飾子modifier
onlyOwnerなど修飾詞の関数への影響の仕方を決定するための、カスタムした理論を定義することが可能。
modifier olderThan(uint _age, uint _userId) {
require (age[_userId] >= _age);
_;
}
payable修飾詞
ファンクション・コール及びお金の支払いが同時に可能。
例
function buySomething() external payable {
// Check to make sure 0.001 ether was sent to the function call:
require(msg.value == 0.001 ether);
// If so, some logic to transfer the digital item to the caller of the function:
transferThing(msg.sender);
}
}
web3.js(DAppのJavaScriptフロントエンド)から以下のように関数を呼び出す。
// Assuming `OnlineStore` points to your contract on Ethereum:
{from: web3.eth.defaultAccount, value: web3.utils.toWei(0.001)}
)
もしトランザクションを封筒のようなものと考えると、封筒の中に現金を入れるようなものだ。受取人に手紙とお金が一緒に届けられる。
注:関数にpayable修飾詞がなく、Etherを上記のように送ろうとする場合、その関数はトランザクションを拒否します。
コントラクトを呼び出した一番最初のアドレスを返す
msg.value
送金した金額
address.transfer(送金額)
addressのアカウントに、コントラクトがweiで送金する。失敗したらフェイルバックする。
address.send(送金額)
addressのアカウントに、コントラクトがweiで送金する。
address.balance
weiで残高を返す
送金によって関数が呼び出された際に、msg.valueによってその送金額(単位はwei)を取得できます。
uint levelUpFee = 0.001 ether;
function levelUp(uint _zombieId) external payable {
require(msg.value == levelUpFee);
zombies[_zombieId].level++;
}
prev
-
クリプトゾンビLesson 3 Chapter12 For ループ
Lesson 3 Chapter12 For ループ Array vs Mapping 使用目的は両者とも配列、もしくは Key Value な形で "情報を格納する" ということなので、似ていますが ...
next
-
クリプトゾンビLesson 4 Chapter2 Withdraw関数
Lesson 4 Chapter2 Withdraw関数 コントラクトに送られたEthは、コントラクトのイーサリアム・アカウントに貯められる。 コントラクトからEtherを引き出す関数を追加しない限り ...