- 创建Nft艺术品
pub fn create(
origin,
title: Vec<u8>, // 标题
url: Vec<u8>, // 链接
desc: Vec<u8> // 详情
)
- 移除Nft
pub fn remove(
origin,
nft_id: T::NftId // 艺术品Id
)
- 转移Nft艺术品
pub fn transfer(
origin,
target: T::AccountId, // 转移目标
nft_id: T::NftId // 艺术品Id
)
- 下拍卖单出售艺术品
pub fn order_sell(
origin,
nft_id: T::NftId, // 艺术品Id
start_price: BalanceOf<T>, // 起拍价格
end_price: BalanceOf<T>, // 结拍价格
keep_block_num: T::BlockNumber // 拍卖最大保留区块数量
)
- 竞拍Nft艺术品
pub fn order_buy(
origin,
order_id: T::OrderId, // 订单Id
price: BalanceOf<T> // 竞拍价格
)
- 主动结算拍卖 // 用于到期结算
pub fn order_settlement(
origin,
order_id: T::OrderId // 订单Id
)
- 进行投票质押
pub fn vote_order(
origin,
order_id: T::OrderId, // 订单Id
amount: BalanceOf<T> // 质押数量
)
- NftId: Nft艺术品Id
- OrderId: 订单Id
- MinKeepBlockNumber: 拍卖订单最小保留区块数
- MaxKeepBlockNumber: 拍卖订单最大保留区块数
- MinimumPrice: 最小拍卖价格
- MinimumVotingLock: 最小质押投票数量
- FixRate: 用于分润算法的固定利润常数
- ProfitRate: 参与质押的分润比例
pub struct Nft {
pub title: Vec<u8>, // 标题
pub url: Vec<u8>, // 链接
pub desc: Vec<u8>, // 详情
}
pub struct Order<OrderId, NftId, AccountId, Balance, BlockNumber> {
pub order_id: OrderId, // 订单Id
pub start_price: Balance, // 起拍价格
pub end_price: Balance, // 结拍价格
pub nft_id: NftId, // nftId
pub create_block: BlockNumber, // 创建时区块数
pub keep_block_num: BlockNumber, // 最大保留区块数
pub owner: AccountId, // nft所有者
}
pub struct Bid<OrderId, AccountId, Balance> {
pub order_id: OrderId, // 订单Id
pub price: Balance, // 竞拍价格
pub owner: AccountId, // 竞拍人
}
pub struct Vote<OrderId, AccountId, Balance, BlockNumber> {
pub order_id: OrderId, // 订单Id
pub amount: Balance, // 质押数量
pub keep_block_num: BlockNumber, // 通过拍卖单生成的质押区块长度
pub owner: AccountId, // 质押者
}
- Map nftId -> nft详情, 用于存储所有nft
pub Nfts: map hasher(twox_64_concat) T::NftId => Option<Nft>;
- Map nftId -> 账户Id, 用于记录nft所有者
pub NftAccount: map hasher(twox_64_concat) T::NftId => T::AccountId;
- Map nftId -> 订单Id, 用于记录Nft对应的订单数据
pub NftOrder: map hasher(twox_64_concat) T::NftId => Option<T::OrderId>;
- Map 订单Id -> 订单详情, 用于存储所有待完成的拍卖订单
pub Orders: map hasher(twox_64_concat) T::OrderId => Option<OrderOf<T>>;
- Map 订单Id -> 当前最大出价,用于存储当前订单的最大出价
pub Bids: map hasher(twox_64_concat) T::OrderId => Option<BidOf<T>>;
- Map 订单Id -> 质押投票列表, 用于存储质押列表
pub Votes: map hasher(twox_64_concat) T::OrderId => Vec<VoteOf<T>>;
- NftId生成器,递增
- 拍卖订单Id生成器,递增
pub NextOrderId: T::OrderId;