توابع Payableدر قراردادهای هوشمند Solidity
توابع Payableدر قراردادهای هوشمند Solidity مکانیزمی برای دریافت وجوه شما می باشد. این توابع با کلمه کلیدی قابل پرداخت(Payable) حاشیه نویسی می شوند.
موارد زیر را در نظر داشته باشید:
1- برای ارسال و دریافت اتر از کلمه کلیدی قابل پرداخت(Payable) در متغیر تابع یا حالت استفاده کنید.
2- برای انصراف از قرارداد، کلمه کلیدی قابل پرداخت(Payable) را در متغیر حالت قرار دهید.
3- کلمه کلیدی قابل پرداخت(Payable) را در سازنده وارد کنید تا بتوانید هنگام ایجاد/استقرار قرارداد در قرارداد واریز کنید.
- constructor() public payable;
- دکمه Deploy در ریمیکس قرمز خواهد بود زیرا می توانیم هنگام استقرار اتر اضافه کنیم.
4- کلمه کلیدی قابل پرداخت(Payable) را در یک تابع قرار دهید تا امکان سپرده گذاری در قرارداد فراهم شود
- تابع سپرده() قابل پرداخت عمومی {}
در زیر یک مثال ساده از قراردادی است که دارای یک تابع قابل پرداخت(Payable) است. تنظیم این تابع روی قابل پرداخت به قرارداد دیگری اجازه می دهد تا آن را فراخوانی و اتر ارسال کند. این را در ریمیکس تست کنید.
pragma solidity ^0.7.0;
//sample contract is called payableSample
contract payableSample {
uint amount =0;
//payable is added to this function so another contract can call it and send ether to this contract
function payMeMoney() public payable{
amount += msg.value;
}
}
در مثال زیر ما متغیرها و توابع را روی قابل پرداخت(Payable) قرار می دهیم. اگر آدرس را قابل پرداخت نمی کردیم، انتقال به to.transfer کار نمی کرد.
pragma solidity ^0.7.0;
contract payableSample {
//add the keyword payable to the state variable
address payable public Owner;
//set the owner to the msg.sender
constructor () public {
Owner = msg.sender;
}
//create a modifier that the msg.sender must be the owner
modifier onlyOwner() {
require(msg.sender == Owner, 'Not owner');
_;
}
//the owner can withdraw from the contract because payable was added to the state variable above
function withdraw (uint _amount) public onlyOwner {
Owner.transfer(_amount);
}
//to.transfer works because we made the address above payable.
function transfer(address payable _to, uint _amount) public onlyOwner {
_to.transfer(_amount); //to.transfer works because we made the address above payable.
}
}
در صورتی که تجربه خاصی در خصوص برنامهنویسی ندارید میتوانید از دورههای رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دورههای پیشرفتهتری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.
نقشه راه
راهنما آکادمی فرازمان
برای یادگیری برنامه نویسی بلاکچین…
در این باره بیشتر بخوانید
دیدگاهتان را بنویسید