Bu dersimizde kontrata ve hesaplara transfer yapmanın yollarını inceledik. Receive ve Fallback fonksiyonları inceledik.
payable
: Ether transfer edebileceğimiz fonskiyon ve adresleri bildirir.
Bir fonksiyona ether göndermek için fonksiyonun payable
olarak nitelenmiş olması gerekir
function fName() public payable {
/// @dev fonksiyonun işlevleri...
}
Bir adrese ether gönderebilmek için adresin payable
olarak nitelenmiş olması gerekir.
function fName() public {
payable(0x...).transfer(amount);
}
Ether göndermenin 3 farklı yolu:
transfer
: 2300 gas, throws errorsend
: 2300 gas, bool döndürürcall
: gas ayarlanabilir, bool döndürür.
Kontratların fonksiyonlar dışında ether alabilmesi için receive
ya da fallback
fonksiyonlarından en az birisinin tanımlanmış olması gerekir.
receive() external payable {}
fallback() external payable {}
Eğer msg.data
boş ise receive
, değil ise fallback
fonksiyonu çalışır.
/*
Hangi fonksiyon çağırılacak, fallback() or receive()?
Ether gönder
|
msg.data boş mu?
/ \
evet hayır
/ \
receive() var mı? fallback()
/ \
evet hayır
/ \
receive() fallback()
*/