Trong Solidity, biến thời gian staked là một biến dùng để lưu trữ thời gian mà người dùng đã stake (đặt cọc) trong một smart contract. Thời gian này có thể được dùng để xác định thời gian hết hạn của stake hoặc để tính toán số tiền lãi tương ứng với thời gian stake.
Ví dụ sau cho thấy cách sử dụng biến thời gian staked trong một smart contract để tính toán số tiền lãi tương ứng với thời gian stake:
pragma solidity ^0.8.0;
contract Staking {
address payable public owner;
mapping (address => uint256) public stakes;
mapping (address => uint256) public stakeTime;
function stake(uint256 _value) public payable {
require(msg.value == _value);
stakes[msg.sender] += _value;
stakeTime[msg.sender] = now;
}
function release() public {
require(stakes[msg.sender] > 0);
uint256 stakeDuration = now - stakeTime[msg.sender];
uint256 interest = stakeDuration * (1 ether / 365 days);
msg.sender.transfer(interest + stakes[msg.sender]);
stakes[msg.sender] = 0;
stakeTime[msg.sender] = 0;
}
}
Trong ví dụ trên, smart contract có tên là Staking và có hai biến mapping là stakes
và stakeTime
, để lưu trữ số tiền người dùng đã stake và thời gian tương ứng. Hàm stake(uint256 _value)
được gọi khi người dùng muốn stake, nó sẽ cập nhật số tiền và thời gian stake vào các biến mapping tương ứng. Hàm release()
được gọi khi người dùng muốn rút stake, nó sẽ tính toán số tiền lãi tương ứng với thời gian stake và gửi số tiền lãi và số tiền stake đã rút về tài khoản người dùng.
Đoạn code: uint256 interest = stakeDuration * (1 ether / 365 days);
tính toán số tiền lãi tương ứng với thời gian stake.
stakeDuration
là biến được tính bằng cách lấy thời gian hiện tại (now
) trừ đi thời gian stake (stakeTime[msg.sender]
).1 ether / 365 days
là tỷ lệ lãi suất mà người dùng sẽ nhận được mỗi ngày. Vì vậy, nếu người dùng stake 1 ether và thời gian stake là 365 ngày, thì số tiền lãi mà người dùng sẽ nhận được sẽ bằng 1 ether.
Cụ thể, stakeDuration
là số ngày người dùng stake, và 1 ether / 365 days
là số ether người dùng nhận được mỗi ngày. Nhân lại với nhau sẽ cho ra số tiền lãi người dùng nhận được trong thời gian stake.
Lưu ý rằng, đây chỉ là một ví dụ và các giá trị và tỷ lệ lãi suất có thể thay đổi tùy thuộc vào yêu cầu của smart contract mà bạn đang xây dựng.
Digital Marketing Specialist