ذخیره‌ی اتر در قرارداد هوشمند


pragma solidity 0.8.7;
contract Deposit {
    receive() external payable {
    }
    function balance() public view returns(uint) {
        return address(this).balance;
    }
}

من قصد دارم در از طریق مقداردهی در فیلد value در remix، اتر در قراردادم ذخیره کنم اما با خطای زیر مواجه می‌شم:

The called function should be payable if you send value and the value you send should be less than your current balance.

کامپایل ارور هم ندارم. زمان دیپلوی کردن با این خطا مواجه می‌شم
مشکل کجاست؟

چون شما میخواین موقع دیپلوی قرارداد فاند ارسال کنید، باید کانستراکتور قرارداد به صورت payable تعریف شده باشه به صورت زیر:

constructor () payable{}

به این دلیل که در هنگام دیپلوی قرارداد، کانستراکتور فراخوانی میشه. ولی اگه بعد از دیپلوی میخواین فاند رو ارسال کنید به قرارداد؛ همین کدی که الان دارین اوکیه.

1 پسندیده