金融

这个 crate 包含了金融系统的基础组件。

归属

IVesting

use openzeppelin_finance::vesting::interface::IVesting;

实现归属功能的合约的通用接口。

函数

start() → u64 external

返回标记归属期开始的时间戳。

cliff() → u64 external

返回标记悬崖期结束的时间戳。

duration() → u64 external

返回归属期的总持续时间。

end() → u64 external

返回标记归属期结束的时间戳。

released(token: ContractAddress) → u256 external

返回给定 token 的已释放金额。

releasable(token: ContractAddress) → u256 external

返回在调用时可以释放的给定 token 的数量。

vested_amount(token: ContractAddress, timestamp: u64) → u256 external

返回在给定 timestamp 时指定的 token 的总归属金额。

release(token: ContractAddress) → u256 external

释放给定 token 的已经归属的金额,并返回该金额。

可能会发出一个 AmountReleased 事件。

事件

AmountReleased(token: ContractAddress, amount: u256) event

当归属的 token 被释放给受益人时发出。

VestingComponent

use openzeppelin_finance::vesting::VestingComponent;

实现 IVesting 接口的归属组件。

VestingSchedule trait

一个 trait,定义了基于给定时间戳计算归属数量的逻辑。

您可以在 这里阅读更多关于该 trait 的目的以及如何使用它的信息。

calculate_vested_amount(self: @ContractState, token: ContractAddress, total_allocation: u256, timestamp: u64, start: u64, duration: u64, cliff: u64) → u256 internal

基于核心归属参数计算并返回给定 timestamp 的归属数量。

函数

start(self: @ContractState) → u64 external

返回标记归属期开始的时间戳。

cliff(self: @ContractState) → u64 external

返回标记悬崖期结束的时间戳。

duration(self: @ContractState) → u64 external

返回归属期的总持续时间。

end(self: @ContractState) → u64 external

返回标记归属期结束的时间戳。

released(self: @ContractState, token: ContractAddress) → u256 external

返回给定 token 的已释放金额。

releasable(self: @ContractState, token: ContractAddress) → u256 external

返回在调用时可以释放的给定 token 的数量。

vested_amount(self: @ContractState, token: ContractAddress, timestamp: u64) → u256 external

返回在给定 timestamp 时指定的 token 的总归属金额。

release(ref self: ContractState, token: ContractAddress) → u256 external

释放给定 token 的已经归属的金额,并返回该金额。

如果可释放金额为零,则此函数不会发出事件或尝试转移 token。

Requirements:

  • tokentransfer 调用必须返回 true,表明转移成功。

可能会发出一个 AmountReleased 事件。

内部函数

initializer(ref self: ContractState, start: u64, duration: u64, cliff_duration: u64) internal

通过设置归属的 startdurationcliff_duration 来初始化组件。为了防止重新初始化,这应该只在合约的构造函数中使用。

Requirements:

  • cliff_duration 必须小于或等于 duration

resolve_vested_amount(self: @ContractState, token: ContractAddress, timestamp: u64) → u256 internal

返回使用 VestingSchedule 特性实现计算的归属金额。

LinearVestingSchedule

use openzeppelin_finance::vesting::LinearVestingSchedule;

定义了计算归属数量的逻辑,结合了悬崖期。 在悬崖期结束之前,它返回 0。 在悬崖期之后,返回的归属数量与自归属计划开始以来经过的时间成正比。

预设

VestingWallet

use openzeppelin::presets::VestingWallet;

一个利用 VestingComponentOwnableComponent 的不可升级合约。

该合约被有意设计为不可升级,以确保归属发起人和归属受益人都不能在未经另一方同意的情况下修改归属计划。

0x010a786d4e5f74d68e0a500aeadbf7a81486f069c06afa242a050a1a09ac42f0

嵌入式实现
VestingComponent
OwnableComponent

构造函数

constructor(ref self: ContractState, beneficiary: ContractAddress, start: u64, duration: u64, cliff_duration: u64) constructor

通过设置归属的 startdurationcliff_duration 来初始化归属组件。 将 beneficiary 分配为合约所有者和归属受益人。

Requirements:

  • cliff_duration 必须小于或等于 duration