مشخصات مقاله
-
0.0
-
782
-
0
-
0
دسترسی محدود در سالیدیتی
دسترسی محدود به قرارداد یک روش معمول است. به طور پیش فرض، یک حالت قرارداد فقط خواندنی (read-only)است مگر اینکه به عنوان عمومی (public)مشخص شود. ما میتوانیم افرادی را که میتوانند وضعیت قرارداد را تغییر دهند یا توابع قرارداد را با استفاده از اصلاحکنندهها(modifiers ) فراخوانی کنند، محدود کنیم. همانطور که در ادامه توضیح داده شده است، چندین اصلاح کننده (modifiers ) ایجاد و استفاده خواهیم کرد:
OnlyBy :
اگر یکبار از یک تابع استفاده شود، فقط صدا کننده Caller ذکر شده می تواند این تابع را فراخوانی کند.
OnlyAfter :
پس از استفاده از یک تابع، می توان آن تابع را پس از یک دوره زمانی خاص فراخوانی کرد.
Costs :
هنگامی که از یک تابع استفاده می شود، Caller یا صدا کننده فقط در صورت ارائه مقدار مشخصی می تواند این تابع را فراخوانی کند.
pragma solidity ^0.5.0;
contract Test {
address public owner = msg.sender;
uint public creationTime = now;
modifier onlyBy(address _account) {
require(
msg.sender == _account,
"Sender not authorized."
);
_;
}
function changeOwner(address _newOwner) public onlyBy(owner) {
owner = _newOwner;
}
modifier onlyAfter(uint _time) {
require(
now >= _time,
"Function called too early."
);
_;
}
function disown() public onlyBy(owner) onlyAfter(creationTime + 6 weeks) {
delete owner;
}
modifier costs(uint _amount) {
require(
msg.value >= _amount,
"Not enough Ether provided."
);
_;
if (msg.value > _amount)
msg.sender.transfer(msg.value - _amount);
}
function forceOwnerChange(address _newOwner) public payable costs(200 ether) {
owner = _newOwner;
if (uint(owner) & 0 == 1) return;
}
}