You can send Ether to other contracts by
너는 이더를 다른 계약(스마트 컨트랙트)로 보낼 수 있다.
A contract receiving Ether must have at least one of the functions below
Ether를 받는 스마트 컨트랙트에는 아래 기능 중 하나 이상이 있어야 합니다
receive() is called if msg.data is empty, otherwise fallback() is called.
msg.data가 비어 있으면 receive()를 호출하고, 그렇지 않으면 fallback()을 호출합니다.
call in combination with re-entrancy guard is the recommended method to use after December 2019.
2019년 12월 이후에 재-진입(re-entrancy) 가드와 결합된 콜을 사용하는 것이 권장된다.
Guard against re-entrancy by
다음과 같은 방법으로 재-진입(re-entrancy)을 방지합니다
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ReceiveEther {
/*
Which function is called, fallback() or receive()?
//fallback() 또는 receive() 중 어떤 함수를 호출합니까?
send Ether
|
msg.data is empty?
/ \
yes no
/ \
receive() exists? fallback()
/ \
yes no
/ \
receive() fallback()
*/
// Function to receive Ether. msg.data must be empty
// 이더를 받는 함수, msg.data가 비어있어야 합니다.
receive() external payable {}
// Fallback function is called when msg.data is not empty
// // Fallback 함수, msg.data가 비어있지 않아야 합니다.
fallback() external payable {}
function getBalance() public view returns (uint) {
return address(this).balance;
}
}
contract SendEther {
function sendViaTransfer(address payable _to) public payable {
// This function is no longer recommended for sending Ether.
// 이 함수는 Ether를 보내는 데 더 이상 권장되지 않습니다.
_to.transfer(msg.value);
}
function sendViaSend(address payable _to) public payable {
// Send returns a boolean value indicating success or failure.
// This function is not recommended for sending Ether.
// 보내기는 성공 또는 실패를 나타내는 bool 값을 반환합니다.
// Ether 전송에는 이 함수를 사용하지 않는 것이 좋습니다.
bool sent = _to.send(msg.value);
require(sent, "Failed to send Ether");
}
function sendViaCall(address payable _to) public payable {
// Call returns a boolean value indicating success or failure.
// This is the current recommended method to use.
// 호출은 성공 또는 실패를 나타내는 bool 값을 반환합니다.
// 현재 권장되는 사용 방법입니다.
(bool sent, bytes memory data) = _to.call{value: msg.value}("");
require(sent, "Failed to send Ether");
}
}