Receive
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract TuitionPayment {
address public school;
uint public tuitionFee;
mapping(address => uint) public studentBalances;
event TuitionReceived(address payer, uint amount);
constructor(uint _tuitionFee) {
school = msg.sender;
tuitionFee = _tuitionFee;
}
// 定義 receive 函式來接收學費
receive() external payable {
require(msg.sender != school, "School cannot pay tuition");
require(msg.value == tuitionFee, "Incorrect tuition fee amount");
studentBalances[msg.sender] += msg.value;
emit TuitionReceived(msg.sender, msg.value);
}
// 提取合約中的以太幣
function withdraw(uint amount) public {
require(msg.sender == school, "Only school can withdraw");
require(amount <= address(this).balance, "Insufficient balance");
payable(school).transfer(amount);
}
}
receive
函式來實現這一功能。TuitionPayment
合約用於收取學費。在合約創建時,設定了學校的地址和學費的金額。receive
函式被定義為外部函式,用於接收以太幣。TuitionReceived
,用於通知外部觀察者。withdraw
函式,用於將合約中的以太幣提取到學校地址。