Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 92 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Release | 20764043 | 502 days ago | IN | 0 ETH | 0.00086055 | ||||
| Release | 20435733 | 548 days ago | IN | 0 ETH | 0.00074563 | ||||
| Release | 20367195 | 558 days ago | IN | 0 ETH | 0.00031211 | ||||
| Release | 20247285 | 574 days ago | IN | 0 ETH | 0.00015949 | ||||
| Release | 20116344 | 593 days ago | IN | 0 ETH | 0.00031418 | ||||
| Release | 20083142 | 597 days ago | IN | 0 ETH | 0.00086861 | ||||
| Release | 19959160 | 615 days ago | IN | 0 ETH | 0.00067212 | ||||
| Release | 19874027 | 627 days ago | IN | 0 ETH | 0.00092743 | ||||
| Release | 19869027 | 627 days ago | IN | 0 ETH | 0.00081453 | ||||
| Release | 19764326 | 642 days ago | IN | 0 ETH | 0.00042287 | ||||
| Release | 19755172 | 643 days ago | IN | 0 ETH | 0.00076142 | ||||
| Release | 19582712 | 667 days ago | IN | 0 ETH | 0.0021044 | ||||
| Release | 19511106 | 677 days ago | IN | 0 ETH | 0.00154521 | ||||
| Release | 19431870 | 689 days ago | IN | 0 ETH | 0.00328426 | ||||
| Release | 19426978 | 689 days ago | IN | 0 ETH | 0.00500651 | ||||
| Release | 19304471 | 706 days ago | IN | 0 ETH | 0.00196061 | ||||
| Release | 19096161 | 736 days ago | IN | 0 ETH | 0.00084562 | ||||
| Release | 18884906 | 765 days ago | IN | 0 ETH | 0.00349979 | ||||
| Release | 18791640 | 778 days ago | IN | 0 ETH | 0.00361023 | ||||
| Release | 18768029 | 782 days ago | IN | 0 ETH | 0.00187485 | ||||
| Release | 18662721 | 796 days ago | IN | 0 ETH | 0.00250982 | ||||
| Release | 18661571 | 797 days ago | IN | 0 ETH | 0.00219691 | ||||
| Release | 18454463 | 826 days ago | IN | 0 ETH | 0.00098331 | ||||
| Release | 18385169 | 835 days ago | IN | 0 ETH | 0.00145668 | ||||
| Release | 18220090 | 858 days ago | IN | 0 ETH | 0.00117211 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SymbiosisTokenVesting
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
/**
* @title SymbiosisTokenVesting
*
* @dev A token holder contract that can release its token balance gradually like a
* typical vesting scheme, with a cliff and vesting period.
* There are 3 types of vesting schedule: CONTINUOUS, MONTHLY (every 30 days), QUARTERLY (every 90 days).
*/
contract SymbiosisTokenVesting is Ownable {
// The vesting schedule is time-based (i.e. using block timestamps as opposed to e.g. block numbers), and is
// therefore sensitive to timestamp manipulation (which is something miners can do, to a certain degree). Therefore,
// it is recommended to avoid using short time durations (less than a minute). Typical vesting schemes, with a
// cliff period of a year and a duration of four years, are safe to use.
// solhint-disable not-rely-on-time
using SafeERC20 for IERC20;
event ReservedAdded(address indexed beneficiary, uint256 reserved);
event TokensReleased(
address indexed beneficiary,
address indexed transferredTo,
uint256 amount
);
event TokensWithdrawnByOwner(address indexed token, uint256 amount);
// 100% in basis points
uint256 public constant MAX_BPS = 10000;
// private VestingSchedule time constants
uint256 private constant MONTHLY_TIME = 30 days;
uint256 private constant QUARTERLY_TIME = 90 days;
// SymbiosisTokenVesting name
string public name;
// ERC20 token which is being vested
IERC20 public token;
// staking contract address
address public stakingAddress;
// Durations and timestamps are expressed in UNIX time, the same units as block.timestamp.
uint256 public cliff; // the cliff time of the token vesting
uint256 public start; // the start time of the token vesting
uint256 public duration; // the duration of the token vesting
// type of the token vesting
enum VestingSchedule {
CONTINUOUS,
MONTHLY,
QUARTERLY
}
VestingSchedule public immutable schedule;
// basis points of the initial unlock – after the start and before the end of the cliff period
uint256 public immutable cliffUnlockedBP;
// total reserved tokens for beneficiaries
uint256 public reserved;
// reserved tokens to beneficiary
mapping(address => uint256) public reservedForBeneficiary;
// frozen amount for staking
mapping(address => uint256) public frozenForStakeAmount;
// total released (transferred) tokens
uint256 public released;
// released (transferred) tokens to beneficiary
mapping(address => uint256) public releasedToBeneficiary;
// array of beneficiaries for getters
address[] internal beneficiaries;
/**
* @dev Creates a vesting contract that vests its balance of specific ERC20 token to the
* beneficiaries, gradually in a linear fashion until start + duration. By then all
* of the balance will have vested.
* @param _token ERC20 token which is being vested
* @param _cliffDuration duration in seconds of the cliff in which tokens will begin to vest
* @param _cliffUnlockedBP basis points of initial unlock – after the start and before the end of the cliff period
* @param _start the time (as Unix time) at which point vesting starts
* @param _duration duration in seconds of the period in which the tokens will vest
* @param _schedule type of the token vesting: CONTINUOUS, MONTHLY, QUARTERLY
* @param _name SymbiosisTokenVesting name
*/
constructor(
IERC20 _token,
uint256 _start,
uint256 _cliffDuration,
uint256 _cliffUnlockedBP,
uint256 _duration,
VestingSchedule _schedule,
string memory _name
) {
require(
address(_token) != address(0),
"SymbiosisTokenVesting: token is the zero address"
);
require(_duration > 0, "SymbiosisTokenVesting: duration is 0");
require(
_cliffDuration <= _duration,
"SymbiosisTokenVesting: cliff is longer than duration"
);
require(
_start + _duration > block.timestamp,
"SymbiosisTokenVesting: final time is before current time"
);
require(
_cliffUnlockedBP <= MAX_BPS,
"SymbiosisTokenVesting: invalid cliff unlocked BP"
);
token = _token;
duration = _duration;
cliff = _start + _cliffDuration;
start = _start;
schedule = _schedule;
name = _name;
cliffUnlockedBP = _cliffUnlockedBP;
}
modifier onlyStaking() {
require(
msg.sender == stakingAddress,
"SymbiosisTokenVesting: caller is not the staking address"
);
_;
}
function setStakingAddress(address _stakingAddress) external onlyOwner {
stakingAddress = _stakingAddress;
}
/**
* @notice Calculates the total amount of vested tokens.
*/
function totalVested() public view returns (uint256) {
uint256 currentBalance = token.balanceOf(address(this));
return currentBalance + released;
}
/**
* @notice Calculates the amount that has already vested but hasn't been released yet.
* @param _beneficiary Address of vested tokens beneficiary
*/
function releasableAmount(address _beneficiary)
public
view
returns (uint256)
{
uint256 releasable = _vestedAmount(_beneficiary) - releasedToBeneficiary[_beneficiary];
uint256 frozen = frozenForStakeAmount[_beneficiary];
return (releasable > frozen) ? (releasable - frozen) : 0;
}
/**
* @notice Get a beneficiary address with current index.
*/
function getBeneficiary(uint256 index) external view returns (address) {
return beneficiaries[index];
}
/**
* @notice Get an array of beneficiary addresses.
*/
function getBeneficiaries() external view returns (address[] memory) {
return beneficiaries;
}
/**
* @notice Adds beneficiaries to SymbiosisTokenVesting by owner.
*
* Requirements:
* - can only be called by owner.
*
* @param _beneficiaries Addresses of beneficiaries
* @param _amounts Amounts of tokens reserved for beneficiaries
*/
function addBeneficiaries(
address[] memory _beneficiaries,
uint256[] memory _amounts
) external onlyOwner {
uint256 len = _beneficiaries.length;
require(len == _amounts.length, "SymbiosisTokenVesting: Array lengths do not match");
uint256 amountToBeneficiaries = 0;
for (uint256 i = 0; i < len; i++) {
amountToBeneficiaries = amountToBeneficiaries + _amounts[i];
// add new beneficiary to array
if (reservedForBeneficiary[_beneficiaries[i]] == 0) {
beneficiaries.push(_beneficiaries[i]);
}
reservedForBeneficiary[_beneficiaries[i]] =
reservedForBeneficiary[_beneficiaries[i]] +
_amounts[i];
emit ReservedAdded(_beneficiaries[i], _amounts[i]);
}
reserved = reserved + amountToBeneficiaries;
// check reserved condition
require(
reserved <= totalVested(),
"SymbiosisTokenVesting: reserved exceeds totalVested"
);
}
/**
* @notice Withdraws ERC20 token funds by owner (except vested token).
*
* Requirements:
* - can only be called by owner.
*
* @param _token Token address (except vested token)
* @param _amount The amount of token to withdraw
**/
function withdrawFunds(IERC20 _token, uint256 _amount) external onlyOwner {
require(
_token != token,
"SymbiosisTokenVesting: vested token is not available for withdrawal"
);
_token.safeTransfer(msg.sender, _amount);
emit TokensWithdrawnByOwner(address(_token), _amount);
}
/**
* @notice Withdraws ERC20 vested token by owner.
*
* Requirements:
* - can only be called by owner.
*
* @param _amount The amount of token to withdraw
**/
function emergencyWithdraw(uint256 _amount) external onlyOwner {
require(
block.timestamp < start,
"SymbiosisTokenVesting: vesting has already started"
);
token.safeTransfer(msg.sender, _amount);
emit TokensWithdrawnByOwner(address(token), _amount);
}
/**
* @notice Transfers vested tokens to beneficiary.
* @param _beneficiary Address of vested tokens beneficiary
*/
function release(address _beneficiary) external {
_release(_beneficiary, _beneficiary);
}
/**
* @notice Transfers vested tokens of sender to specified address.
* @param _transferTo Address to which tokens are transferred
*/
function releaseToAddress(address _transferTo) external {
_release(msg.sender, _transferTo);
}
function allocateStake(address _beneficiary, uint256 _amount)
external
onlyStaking
returns (bool)
{
require(
reservedForBeneficiary[_beneficiary] - releasedToBeneficiary[_beneficiary] >= _amount,
"SymbiosisTokenVesting: allocation amount exceeds balance"
);
frozenForStakeAmount[_beneficiary] += _amount;
return true;
}
function unlockStake(address _beneficiary, uint256 _amount)
external
onlyStaking
returns (bool)
{
require(
_amount <= frozenForStakeAmount[_beneficiary],
"SymbiosisTokenVesting: amount exceeds frozen amount for this beneficiary"
);
frozenForStakeAmount[_beneficiary] -= _amount;
return true;
}
/**
* @dev Calculates the amount that has already vested.
* @param _beneficiary Address of vested tokens beneficiary
*/
function _vestedAmount(address _beneficiary)
private
view
returns (uint256)
{
uint256 curTimestamp = block.timestamp;
if (curTimestamp < start) {
return 0;
} else if (curTimestamp < cliff) {
return reservedForBeneficiary[_beneficiary] * cliffUnlockedBP / MAX_BPS;
} else if (curTimestamp >= start + duration) {
return reservedForBeneficiary[_beneficiary];
} else {
return
reservedForBeneficiary[_beneficiary] * cliffUnlockedBP / MAX_BPS +
reservedForBeneficiary[_beneficiary] * (MAX_BPS - cliffUnlockedBP) * _vestedPeriod() / (duration - (cliff - start)) / MAX_BPS;
}
}
/**
* @dev Calculates the duration of period that is already unlocked according to VestingSchedule type.
*/
function _vestedPeriod() private view returns (uint256 period) {
period = block.timestamp - cliff; // CONTINUOUS from cliff
if (schedule == VestingSchedule.MONTHLY) {
period = period - (period % MONTHLY_TIME);
} else if (schedule == VestingSchedule.QUARTERLY) {
period = period - (period % QUARTERLY_TIME);
}
}
/**
* @dev Transfers vested tokens.
* @param _beneficiary Address of vested tokens beneficiary
* @param _transferTo Address to which tokens are transferred
*/
function _release(address _beneficiary, address _transferTo) private {
uint256 unreleased = releasableAmount(_beneficiary);
require(unreleased > 0, "SymbiosisTokenVesting: no tokens are due");
releasedToBeneficiary[_beneficiary] =
releasedToBeneficiary[_beneficiary] +
unreleased;
released = released + unreleased;
token.safeTransfer(_transferTo, unreleased);
emit TokensReleased(_beneficiary, _transferTo, unreleased);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}{
"optimizer": {
"enabled": true,
"runs": 2000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_cliffDuration","type":"uint256"},{"internalType":"uint256","name":"_cliffUnlockedBP","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"enum SymbiosisTokenVesting.VestingSchedule","name":"_schedule","type":"uint8"},{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"reserved","type":"uint256"}],"name":"ReservedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":true,"internalType":"address","name":"transferredTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawnByOwner","type":"event"},{"inputs":[],"name":"MAX_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_beneficiaries","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"addBeneficiaries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"allocateStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cliff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cliffUnlockedBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frozenForStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBeneficiaries","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getBeneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"releasableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_transferTo","type":"address"}],"name":"releaseToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"releasedToBeneficiary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reservedForBeneficiary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"schedule","outputs":[{"internalType":"enum SymbiosisTokenVesting.VestingSchedule","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unlockStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040523480156200001157600080fd5b5060405162002233380380620022338339810160408190526200003491620003fe565b6200003f3362000308565b6001600160a01b038716620000b45760405162461bcd60e51b815260206004820152603060248201527f53796d62696f736973546f6b656e56657374696e673a20746f6b656e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b60008311620001125760405162461bcd60e51b8152602060048201526024808201527f53796d62696f736973546f6b656e56657374696e673a206475726174696f6e206044820152630697320360e41b6064820152608401620000ab565b828511156200018a5760405162461bcd60e51b815260206004820152603460248201527f53796d62696f736973546f6b656e56657374696e673a20636c6966662069732060448201527f6c6f6e676572207468616e206475726174696f6e0000000000000000000000006064820152608401620000ab565b426200019784886200053d565b116200020c5760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a2066696e616c2074696d60448201527f65206973206265666f72652063757272656e742074696d6500000000000000006064820152608401620000ab565b612710841115620002795760405162461bcd60e51b815260206004820152603060248201527f53796d62696f736973546f6b656e56657374696e673a20696e76616c6964206360448201526f06c69666620756e6c6f636b65642042560841b6064820152608401620000ab565b600280546001600160a01b0319166001600160a01b0389161790556006839055620002a585876200053d565b6004556005869055816002811115620002c257620002c2620005a1565b6080816002811115620002d957620002d9620005a1565b60f81b9052508051620002f490600190602084019062000358565b50505060a09190915250620005cd92505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620003669062000564565b90600052602060002090601f0160209004810192826200038a5760008555620003d5565b82601f10620003a557805160ff1916838001178555620003d5565b82800160010185558215620003d5579182015b82811115620003d5578251825591602001919060010190620003b8565b50620003e3929150620003e7565b5090565b5b80821115620003e35760008155600101620003e8565b600080600080600080600060e0888a0312156200041a57600080fd5b87516001600160a01b03811681146200043257600080fd5b80975050602080890151965060408901519550606089015194506080890151935060a0890151600381106200046657600080fd5b60c08a01519093506001600160401b03808211156200048457600080fd5b818b0191508b601f8301126200049957600080fd5b815181811115620004ae57620004ae620005b7565b604051601f8201601f19908116603f01168101908382118183101715620004d957620004d9620005b7565b816040528281528e86848701011115620004f257600080fd5b600093505b82841015620005165784840186015181850187015292850192620004f7565b82841115620005285760008684830101525b80965050505050505092959891949750929550565b600082198211156200055f57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200057957607f821691505b602082108114156200059b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a051611c1a62000619600039600081816101d901528181611160015281816111f6015261128101526000818161037b015281816114f201526115480152611c1a6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063c1075329116100a2578063f4e0d9ac11610071578063f4e0d9ac1461040c578063fc0c546a1461041f578063fd967f4714610432578063fe60d12c1461043b57600080fd5b8063c1075329146103b3578063d7b4be24146103c6578063edb08f3f146103d9578063f2fde38b146103f957600080fd5b8063965af6c7116100de578063965af6c714610350578063a961065514610363578063b0604a2614610376578063be9a6555146103aa57600080fd5b80638da5cb5b14610321578063913b722c14610332578063961325211461034757600080fd5b8063302df08311610171578063675ab9b21161014b578063675ab9b2146102c35780636a4e0b30146102e3578063715018a6146102f65780637806de33146102fe57600080fd5b8063302df083146102655780634fd3ed3a146102905780635312ea8e146102b057600080fd5b806313d033c0116101ad57806313d033c01461022c5780631726cbc8146102355780631916558714610248578063199cbc541461025d57600080fd5b806306d44d8b146101d457806306fdde031461020e5780630fb5a6b414610223575b600080fd5b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b610216610444565b60405161020591906119e7565b6101fb60065481565b6101fb60045481565b6101fb6102433660046117f0565b6104d2565b61025b6102563660046117f0565b61053c565b005b6101fb610549565b610278610273366004611924565b6105f8565b6040516001600160a01b039091168152602001610205565b6101fb61029e3660046117f0565b60096020526000908152604090205481565b61025b6102be366004611924565b610628565b6101fb6102d13660046117f0565b60086020526000908152604090205481565b61025b6102f13660046117f0565b61075a565b61025b610764565b61031161030c36600461180d565b6107ca565b6040519015158152602001610205565b6000546001600160a01b0316610278565b61033a610927565b6040516102059190611972565b6101fb600a5481565b61031161035e36600461180d565b610989565b61025b610371366004611839565b610ae8565b61039d7f000000000000000000000000000000000000000000000000000000000000000081565b60405161020591906119bf565b6101fb60055481565b61025b6103c136600461180d565b610e54565b600354610278906001600160a01b031681565b6101fb6103e73660046117f0565b600b6020526000908152604090205481565b61025b6104073660046117f0565b610fb3565b61025b61041a3660046117f0565b611092565b600254610278906001600160a01b031681565b6101fb61271081565b6101fb60075481565b6001805461045190611afd565b80601f016020809104026020016040519081016040528092919081815260200182805461047d90611afd565b80156104ca5780601f1061049f576101008083540402835291602001916104ca565b820191906000526020600020905b8154815290600101906020018083116104ad57829003601f168201915b505050505081565b6001600160a01b0381166000908152600b602052604081205481906104f68461111b565b6105009190611aba565b6001600160a01b03841660009081526009602052604090205490915080821161052a576000610534565b6105348183611aba565b949350505050565b61054681826112c0565b50565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b1580156105aa57600080fd5b505afa1580156105be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e2919061193d565b9050600a54816105f29190611a6f565b91505090565b6000600c828154811061060d5761060d611ba3565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b031633146106875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60055442106106fe5760405162461bcd60e51b815260206004820152603260248201527f53796d62696f736973546f6b656e56657374696e673a2076657374696e67206860448201527f617320616c726561647920737461727465640000000000000000000000000000606482015260840161067e565b600254610715906001600160a01b031633836113fa565b6002546040518281526001600160a01b03909116907f9ded21b3d598bcbd911cdbd22efd30685ee3cfae8b9209896940637d0d3e64729060200160405180910390a250565b61054633826112c0565b6000546001600160a01b031633146107be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6107c8600061147f565b565b6003546000906001600160a01b0316331461084d5760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a2063616c6c657220697360448201527f206e6f7420746865207374616b696e6720616464726573730000000000000000606482015260840161067e565b6001600160a01b0383166000908152600b6020908152604080832054600890925290912054839161087d91611aba565b10156108f15760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a20616c6c6f636174696f60448201527f6e20616d6f756e7420657863656564732062616c616e63650000000000000000606482015260840161067e565b6001600160a01b03831660009081526009602052604081208054849290610919908490611a6f565b909155506001949350505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801561097f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610961575b5050505050905090565b6003546000906001600160a01b03163314610a0c5760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a2063616c6c657220697360448201527f206e6f7420746865207374616b696e6720616464726573730000000000000000606482015260840161067e565b6001600160a01b038316600090815260096020526040902054821115610ac05760405162461bcd60e51b815260206004820152604860248201527f53796d62696f736973546f6b656e56657374696e673a20616d6f756e7420657860448201527f63656564732066726f7a656e20616d6f756e7420666f7220746869732062656e60648201527f6566696369617279000000000000000000000000000000000000000000000000608482015260a40161067e565b6001600160a01b03831660009081526009602052604081208054849290610919908490611aba565b6000546001600160a01b03163314610b425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b815181518114610bba5760405162461bcd60e51b815260206004820152603160248201527f53796d62696f736973546f6b656e56657374696e673a204172726179206c656e60448201527f6774687320646f206e6f74206d61746368000000000000000000000000000000606482015260840161067e565b6000805b82811015610dbd57838181518110610bd857610bd8611ba3565b602002602001015182610beb9190611a6f565b915060086000868381518110610c0357610c03611ba3565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460001415610c9157600c858281518110610c4857610c48611ba3565b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b838181518110610ca357610ca3611ba3565b602002602001015160086000878481518110610cc157610cc1611ba3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054610cf49190611a6f565b60086000878481518110610d0a57610d0a611ba3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550848181518110610d4857610d48611ba3565b60200260200101516001600160a01b03167fc921bf2f0f78af470ec63c910e5a5b117dbbacb71762a893af0ee8c171c03056858381518110610d8c57610d8c611ba3565b6020026020010151604051610da391815260200190565b60405180910390a280610db581611b32565b915050610bbe565b5080600754610dcc9190611a6f565b600755610dd7610549565b6007541115610e4e5760405162461bcd60e51b815260206004820152603360248201527f53796d62696f736973546f6b656e56657374696e673a2072657365727665642060448201527f6578636565647320746f74616c56657374656400000000000000000000000000606482015260840161067e565b50505050565b6000546001600160a01b03163314610eae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6002546001600160a01b0383811691161415610f585760405162461bcd60e51b815260206004820152604360248201527f53796d62696f736973546f6b656e56657374696e673a2076657374656420746f60448201527f6b656e206973206e6f7420617661696c61626c6520666f72207769746864726160648201527f77616c0000000000000000000000000000000000000000000000000000000000608482015260a40161067e565b610f6c6001600160a01b03831633836113fa565b816001600160a01b03167f9ded21b3d598bcbd911cdbd22efd30685ee3cfae8b9209896940637d0d3e647282604051610fa791815260200190565b60405180910390a25050565b6000546001600160a01b0316331461100d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6001600160a01b0381166110895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161067e565b6105468161147f565b6000546001600160a01b031633146110ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60055460009042908110156111335750600092915050565b600454811015611196576001600160a01b03831660009081526008602052604090205461271090611185907f000000000000000000000000000000000000000000000000000000000000000090611a9b565b61118f9190611a87565b9392505050565b6006546005546111a69190611a6f565b81106111c95750506001600160a01b031660009081526008602052604090205490565b6127106005546004546111dc9190611aba565b6006546111e99190611aba565b6111f16114dc565b61121d7f0000000000000000000000000000000000000000000000000000000000000000612710611aba565b6001600160a01b0387166000908152600860205260409020546112409190611a9b565b61124a9190611a9b565b6112549190611a87565b61125e9190611a87565b6001600160a01b038416600090815260086020526040902054612710906112a6907f000000000000000000000000000000000000000000000000000000000000000090611a9b565b6112b09190611a87565b61118f9190611a6f565b50919050565b60006112cb836104d2565b9050600081116113435760405162461bcd60e51b815260206004820152602860248201527f53796d62696f736973546f6b656e56657374696e673a206e6f20746f6b656e7360448201527f2061726520647565000000000000000000000000000000000000000000000000606482015260840161067e565b6001600160a01b0383166000908152600b6020526040902054611367908290611a6f565b6001600160a01b0384166000908152600b6020526040902055600a5461138e908290611a6f565b600a556002546113a8906001600160a01b031683836113fa565b816001600160a01b0316836001600160a01b03167f3737f2a73c794dafe53d8aeea06810a9ebcf7167401b259406960e088e03f830836040516113ed91815260200190565b60405180910390a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261147a90849061158e565b505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000600454426114ec9190611aba565b905060017f0000000000000000000000000000000000000000000000000000000000000000600281111561152257611522611b8d565b14156115445761153562278d0082611b4d565b61153f9082611aba565b905090565b60027f0000000000000000000000000000000000000000000000000000000000000000600281111561157857611578611b8d565b141561158b576115356276a70082611b4d565b90565b60006115e3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116739092919063ffffffff16565b80519091501561147a57808060200190518101906116019190611902565b61147a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161067e565b6060610534848460008585843b6116cc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161067e565b600080866001600160a01b031685876040516116e89190611956565b60006040518083038185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b509150915061173a828286611745565b979650505050505050565b6060831561175457508161118f565b8251156117645782518084602001fd5b8160405162461bcd60e51b815260040161067e91906119e7565b600082601f83011261178f57600080fd5b813560206117a461179f83611a4b565b611a1a565b80838252828201915082860187848660051b89010111156117c457600080fd5b60005b858110156117e3578135845292840192908401906001016117c7565b5090979650505050505050565b60006020828403121561180257600080fd5b813561118f81611bcf565b6000806040838503121561182057600080fd5b823561182b81611bcf565b946020939093013593505050565b6000806040838503121561184c57600080fd5b823567ffffffffffffffff8082111561186457600080fd5b818501915085601f83011261187857600080fd5b8135602061188861179f83611a4b565b8083825282820191508286018a848660051b89010111156118a857600080fd5b600096505b848710156118d45780356118c081611bcf565b8352600196909601959183019183016118ad565b50965050860135925050808211156118eb57600080fd5b506118f88582860161177e565b9150509250929050565b60006020828403121561191457600080fd5b8151801515811461118f57600080fd5b60006020828403121561193657600080fd5b5035919050565b60006020828403121561194f57600080fd5b5051919050565b60008251611968818460208701611ad1565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156119b35783516001600160a01b03168352928401929184019160010161198e565b50909695505050505050565b60208101600383106119e157634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260008251806020840152611a06816040850160208701611ad1565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a4357611a43611bb9565b604052919050565b600067ffffffffffffffff821115611a6557611a65611bb9565b5060051b60200190565b60008219821115611a8257611a82611b61565b500190565b600082611a9657611a96611b77565b500490565b6000816000190483118215151615611ab557611ab5611b61565b500290565b600082821015611acc57611acc611b61565b500390565b60005b83811015611aec578181015183820152602001611ad4565b83811115610e4e5750506000910152565b600181811c90821680611b1157607f821691505b602082108114156112ba57634e487b7160e01b600052602260045260246000fd5b6000600019821415611b4657611b46611b61565b5060010190565b600082611b5c57611b5c611b77565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461054657600080fdfea2646970667358221220b8cacb2c6abb3535b2b8e380cc6915b7bbaffaeb3190e2e2c6cf44623c5cd4cf64736f6c63430008070033000000000000000000000000d38bb40815d2b0c2d2c866e0c72c5728ffc76dd90000000000000000000000000000000000000000000000000000000061a6bb0000000000000000000000000000000000000000000000000000000000009e340000000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000004ca1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001a53796d62696f7369732041647669736f72792056657374696e67000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063c1075329116100a2578063f4e0d9ac11610071578063f4e0d9ac1461040c578063fc0c546a1461041f578063fd967f4714610432578063fe60d12c1461043b57600080fd5b8063c1075329146103b3578063d7b4be24146103c6578063edb08f3f146103d9578063f2fde38b146103f957600080fd5b8063965af6c7116100de578063965af6c714610350578063a961065514610363578063b0604a2614610376578063be9a6555146103aa57600080fd5b80638da5cb5b14610321578063913b722c14610332578063961325211461034757600080fd5b8063302df08311610171578063675ab9b21161014b578063675ab9b2146102c35780636a4e0b30146102e3578063715018a6146102f65780637806de33146102fe57600080fd5b8063302df083146102655780634fd3ed3a146102905780635312ea8e146102b057600080fd5b806313d033c0116101ad57806313d033c01461022c5780631726cbc8146102355780631916558714610248578063199cbc541461025d57600080fd5b806306d44d8b146101d457806306fdde031461020e5780630fb5a6b414610223575b600080fd5b6101fb7f00000000000000000000000000000000000000000000000000000000000001f481565b6040519081526020015b60405180910390f35b610216610444565b60405161020591906119e7565b6101fb60065481565b6101fb60045481565b6101fb6102433660046117f0565b6104d2565b61025b6102563660046117f0565b61053c565b005b6101fb610549565b610278610273366004611924565b6105f8565b6040516001600160a01b039091168152602001610205565b6101fb61029e3660046117f0565b60096020526000908152604090205481565b61025b6102be366004611924565b610628565b6101fb6102d13660046117f0565b60086020526000908152604090205481565b61025b6102f13660046117f0565b61075a565b61025b610764565b61031161030c36600461180d565b6107ca565b6040519015158152602001610205565b6000546001600160a01b0316610278565b61033a610927565b6040516102059190611972565b6101fb600a5481565b61031161035e36600461180d565b610989565b61025b610371366004611839565b610ae8565b61039d7f000000000000000000000000000000000000000000000000000000000000000081565b60405161020591906119bf565b6101fb60055481565b61025b6103c136600461180d565b610e54565b600354610278906001600160a01b031681565b6101fb6103e73660046117f0565b600b6020526000908152604090205481565b61025b6104073660046117f0565b610fb3565b61025b61041a3660046117f0565b611092565b600254610278906001600160a01b031681565b6101fb61271081565b6101fb60075481565b6001805461045190611afd565b80601f016020809104026020016040519081016040528092919081815260200182805461047d90611afd565b80156104ca5780601f1061049f576101008083540402835291602001916104ca565b820191906000526020600020905b8154815290600101906020018083116104ad57829003601f168201915b505050505081565b6001600160a01b0381166000908152600b602052604081205481906104f68461111b565b6105009190611aba565b6001600160a01b03841660009081526009602052604090205490915080821161052a576000610534565b6105348183611aba565b949350505050565b61054681826112c0565b50565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b1580156105aa57600080fd5b505afa1580156105be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e2919061193d565b9050600a54816105f29190611a6f565b91505090565b6000600c828154811061060d5761060d611ba3565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b031633146106875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60055442106106fe5760405162461bcd60e51b815260206004820152603260248201527f53796d62696f736973546f6b656e56657374696e673a2076657374696e67206860448201527f617320616c726561647920737461727465640000000000000000000000000000606482015260840161067e565b600254610715906001600160a01b031633836113fa565b6002546040518281526001600160a01b03909116907f9ded21b3d598bcbd911cdbd22efd30685ee3cfae8b9209896940637d0d3e64729060200160405180910390a250565b61054633826112c0565b6000546001600160a01b031633146107be5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6107c8600061147f565b565b6003546000906001600160a01b0316331461084d5760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a2063616c6c657220697360448201527f206e6f7420746865207374616b696e6720616464726573730000000000000000606482015260840161067e565b6001600160a01b0383166000908152600b6020908152604080832054600890925290912054839161087d91611aba565b10156108f15760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a20616c6c6f636174696f60448201527f6e20616d6f756e7420657863656564732062616c616e63650000000000000000606482015260840161067e565b6001600160a01b03831660009081526009602052604081208054849290610919908490611a6f565b909155506001949350505050565b6060600c80548060200260200160405190810160405280929190818152602001828054801561097f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610961575b5050505050905090565b6003546000906001600160a01b03163314610a0c5760405162461bcd60e51b815260206004820152603860248201527f53796d62696f736973546f6b656e56657374696e673a2063616c6c657220697360448201527f206e6f7420746865207374616b696e6720616464726573730000000000000000606482015260840161067e565b6001600160a01b038316600090815260096020526040902054821115610ac05760405162461bcd60e51b815260206004820152604860248201527f53796d62696f736973546f6b656e56657374696e673a20616d6f756e7420657860448201527f63656564732066726f7a656e20616d6f756e7420666f7220746869732062656e60648201527f6566696369617279000000000000000000000000000000000000000000000000608482015260a40161067e565b6001600160a01b03831660009081526009602052604081208054849290610919908490611aba565b6000546001600160a01b03163314610b425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b815181518114610bba5760405162461bcd60e51b815260206004820152603160248201527f53796d62696f736973546f6b656e56657374696e673a204172726179206c656e60448201527f6774687320646f206e6f74206d61746368000000000000000000000000000000606482015260840161067e565b6000805b82811015610dbd57838181518110610bd857610bd8611ba3565b602002602001015182610beb9190611a6f565b915060086000868381518110610c0357610c03611ba3565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460001415610c9157600c858281518110610c4857610c48611ba3565b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555b838181518110610ca357610ca3611ba3565b602002602001015160086000878481518110610cc157610cc1611ba3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054610cf49190611a6f565b60086000878481518110610d0a57610d0a611ba3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550848181518110610d4857610d48611ba3565b60200260200101516001600160a01b03167fc921bf2f0f78af470ec63c910e5a5b117dbbacb71762a893af0ee8c171c03056858381518110610d8c57610d8c611ba3565b6020026020010151604051610da391815260200190565b60405180910390a280610db581611b32565b915050610bbe565b5080600754610dcc9190611a6f565b600755610dd7610549565b6007541115610e4e5760405162461bcd60e51b815260206004820152603360248201527f53796d62696f736973546f6b656e56657374696e673a2072657365727665642060448201527f6578636565647320746f74616c56657374656400000000000000000000000000606482015260840161067e565b50505050565b6000546001600160a01b03163314610eae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6002546001600160a01b0383811691161415610f585760405162461bcd60e51b815260206004820152604360248201527f53796d62696f736973546f6b656e56657374696e673a2076657374656420746f60448201527f6b656e206973206e6f7420617661696c61626c6520666f72207769746864726160648201527f77616c0000000000000000000000000000000000000000000000000000000000608482015260a40161067e565b610f6c6001600160a01b03831633836113fa565b816001600160a01b03167f9ded21b3d598bcbd911cdbd22efd30685ee3cfae8b9209896940637d0d3e647282604051610fa791815260200190565b60405180910390a25050565b6000546001600160a01b0316331461100d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6001600160a01b0381166110895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161067e565b6105468161147f565b6000546001600160a01b031633146110ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161067e565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60055460009042908110156111335750600092915050565b600454811015611196576001600160a01b03831660009081526008602052604090205461271090611185907f00000000000000000000000000000000000000000000000000000000000001f490611a9b565b61118f9190611a87565b9392505050565b6006546005546111a69190611a6f565b81106111c95750506001600160a01b031660009081526008602052604090205490565b6127106005546004546111dc9190611aba565b6006546111e99190611aba565b6111f16114dc565b61121d7f00000000000000000000000000000000000000000000000000000000000001f4612710611aba565b6001600160a01b0387166000908152600860205260409020546112409190611a9b565b61124a9190611a9b565b6112549190611a87565b61125e9190611a87565b6001600160a01b038416600090815260086020526040902054612710906112a6907f00000000000000000000000000000000000000000000000000000000000001f490611a9b565b6112b09190611a87565b61118f9190611a6f565b50919050565b60006112cb836104d2565b9050600081116113435760405162461bcd60e51b815260206004820152602860248201527f53796d62696f736973546f6b656e56657374696e673a206e6f20746f6b656e7360448201527f2061726520647565000000000000000000000000000000000000000000000000606482015260840161067e565b6001600160a01b0383166000908152600b6020526040902054611367908290611a6f565b6001600160a01b0384166000908152600b6020526040902055600a5461138e908290611a6f565b600a556002546113a8906001600160a01b031683836113fa565b816001600160a01b0316836001600160a01b03167f3737f2a73c794dafe53d8aeea06810a9ebcf7167401b259406960e088e03f830836040516113ed91815260200190565b60405180910390a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261147a90849061158e565b505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000600454426114ec9190611aba565b905060017f0000000000000000000000000000000000000000000000000000000000000000600281111561152257611522611b8d565b14156115445761153562278d0082611b4d565b61153f9082611aba565b905090565b60027f0000000000000000000000000000000000000000000000000000000000000000600281111561157857611578611b8d565b141561158b576115356276a70082611b4d565b90565b60006115e3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116739092919063ffffffff16565b80519091501561147a57808060200190518101906116019190611902565b61147a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161067e565b6060610534848460008585843b6116cc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161067e565b600080866001600160a01b031685876040516116e89190611956565b60006040518083038185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b509150915061173a828286611745565b979650505050505050565b6060831561175457508161118f565b8251156117645782518084602001fd5b8160405162461bcd60e51b815260040161067e91906119e7565b600082601f83011261178f57600080fd5b813560206117a461179f83611a4b565b611a1a565b80838252828201915082860187848660051b89010111156117c457600080fd5b60005b858110156117e3578135845292840192908401906001016117c7565b5090979650505050505050565b60006020828403121561180257600080fd5b813561118f81611bcf565b6000806040838503121561182057600080fd5b823561182b81611bcf565b946020939093013593505050565b6000806040838503121561184c57600080fd5b823567ffffffffffffffff8082111561186457600080fd5b818501915085601f83011261187857600080fd5b8135602061188861179f83611a4b565b8083825282820191508286018a848660051b89010111156118a857600080fd5b600096505b848710156118d45780356118c081611bcf565b8352600196909601959183019183016118ad565b50965050860135925050808211156118eb57600080fd5b506118f88582860161177e565b9150509250929050565b60006020828403121561191457600080fd5b8151801515811461118f57600080fd5b60006020828403121561193657600080fd5b5035919050565b60006020828403121561194f57600080fd5b5051919050565b60008251611968818460208701611ad1565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156119b35783516001600160a01b03168352928401929184019160010161198e565b50909695505050505050565b60208101600383106119e157634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260008251806020840152611a06816040850160208701611ad1565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a4357611a43611bb9565b604052919050565b600067ffffffffffffffff821115611a6557611a65611bb9565b5060051b60200190565b60008219821115611a8257611a82611b61565b500190565b600082611a9657611a96611b77565b500490565b6000816000190483118215151615611ab557611ab5611b61565b500290565b600082821015611acc57611acc611b61565b500390565b60005b83811015611aec578181015183820152602001611ad4565b83811115610e4e5750506000910152565b600181811c90821680611b1157607f821691505b602082108114156112ba57634e487b7160e01b600052602260045260246000fd5b6000600019821415611b4657611b46611b61565b5060010190565b600082611b5c57611b5c611b77565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461054657600080fdfea2646970667358221220b8cacb2c6abb3535b2b8e380cc6915b7bbaffaeb3190e2e2c6cf44623c5cd4cf64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d38bb40815d2b0c2d2c866e0c72c5728ffc76dd90000000000000000000000000000000000000000000000000000000061a6bb0000000000000000000000000000000000000000000000000000000000009e340000000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000004ca1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001a53796d62696f7369732041647669736f72792056657374696e67000000000000
-----Decoded View---------------
Arg [0] : _token (address): 0xd38BB40815d2B0c2d2c866e0c72c5728ffC76dd9
Arg [1] : _start (uint256): 1638316800
Arg [2] : _cliffDuration (uint256): 10368000
Arg [3] : _cliffUnlockedBP (uint256): 500
Arg [4] : _duration (uint256): 80352000
Arg [5] : _schedule (uint8): 0
Arg [6] : _name (string): Symbiosis Advisory Vesting
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000d38bb40815d2b0c2d2c866e0c72c5728ffc76dd9
Arg [1] : 0000000000000000000000000000000000000000000000000000000061a6bb00
Arg [2] : 00000000000000000000000000000000000000000000000000000000009e3400
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [4] : 0000000000000000000000000000000000000000000000000000000004ca1300
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [8] : 53796d62696f7369732041647669736f72792056657374696e67000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$34,627.72
Net Worth in ETH
14.338463
Token Allocations
SIS
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.016937 | 2,044,512.4491 | $34,627.72 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.