# DKPool 运营手册
## OSS 配置
OSS 配置涉及到 OSS 私钥权限的问题,所以就暂时不提供,有需要使用到的情况请联系我,目前需要介绍 OSS 在产品中所负责的职能:
- NFT metadata.json 文件
- NFT 图片文件
- DKP 池子额外的配置信息(poolConfig.json)
- DKP redeem card 列表信息(redeemConfig.json)
### PoolConfig 配置
样例配置,作用域当前 DKP 首页中需要展示的 staking 池子与 pools 页面中的 Pool 列表展示,首页按照 UI 设计做了截断处理(保留三个池子),并且顺序会按照配置的 json 数组的顺序展示。
如果想要添加池子,可以在当前配置文件中新增,隐藏池子则需要删除当前配置对应的数组元素即可。
```
[
{
"id": 2,
"name":"meToken",
"desc":"Staking meTokens for DKP002",
"title":"meTokens pool",
"icon":"https://store.daosquare.io/config/assets/metoken.png",
"token":{
"name":"RICE",
"icon":"https://store.daosquare.io/config/assets/metoken.png"
},
"pointName":"DKP002"
},
{
"id": 3,
"name":"MUSEX",
"desc":"Staking meTokens for DKP003",
"title":"MUSEX pool",
"icon":"https://store.daosquare.io/config/assets/metoken.png",
"token":{
"name":"MUSEX",
"icon":"https://store.daosquare.io/config/assets/metoken.png"
},
"pointName":"DKP003"
}
]
```
- id: 与合约中 poolId 对应
- name: 池子在 UI 中显示的名称
- desc:池子的描述信息,未在产品中显示
- title: 池子的展示信息,未显示
- icon: 池子展示的图标
- token:staking 相关的配置,这里只会配置 token 名称,为了资金安全具体 token 的合约地址和信息等会配置再前端项目中
- name: token 的 symbol
- icon: token 的图标,外链
- pointName: 池子积分名称
### RedeemConfig 配置
用于配置并展示在 redeem 面板的 NFT card, 这里只能配置 OVO 或 普通池子的卡片,不支持 wins 配置,展示的顺序与配置顺序相同,且必须保证 cardId 和 poolId 是相对应的关系,否则会出现无法 redeem 的情况。
```
[{
"cardId":2,
"poolId":1
},
{
"cardId":3,
"poolId":1
},
{
"cardId":1,
"poolId":2
},
{
"cardId":4,
"poolId":2
},
{
"cardId":5,
"poolId":3
}
]
```
- cardId: NFT 卡片的 id
- poolId: 池子的 id
> 注意事项:所有的 json 文件的配置都是大小写敏感的,引号也需要使用 `"` 来作为字符串的包裹内容
### NFT 内容配置
#### metadata
NFT 的 metadata 会保存 NFT 资产的一些元信息,具体的映射关系是按照文件名和 cardId 完成映射,例如当前的 cardId 是 5 ,那么在 oss 中,5.json 就是 cardId 为 5 的 metadata 文件,同理,5.png 就是图片
```
{
"name": "DKP Hunter Meme",
"description": "DKP Hunter Meme",
"external_url": "https://openseacreatures.io/3",
"image": "https://store.daosquare.io/dkptest/1.png"
}
```
- name : 卡片名称
- description: 卡片描述
- external_url: 外部链接
- image: 图片链接,示例中指向了我们的 oss 服务器
#### 图片配置
图片配置可以参考前部分的解释,但图片的大小和尺寸是有一个范围要求的,尽可能的保证图片是 png 的格式,同时大小在 350 * 350 左右。
## 合约配置
合约配置需要准备一些开发环境和脚本的环境,需要提前安装 git node.js 和 yarn
> node.js 安装 推荐使用 [https://github.com/nvm-sh/nvm#installing-and-updating](https://github.com/nvm-sh/nvm#installing-and-updating)
> yarn 安装参考 [yarn install](https://yarn.bootcss.com/docs/install/)
## 环境初始化
首先下载合约仓库
```
git clone git@github.com:DAOSquare/DKPoolContract.git
cd DKPoolContract
```
进入目录之后安装合约编译和执行所需要的依赖
```
yarn install
```
完成之后复制配置文件
```
cp .env.example .env
```
并替换 .env 的内容
```
SAFER_ADDRESS=0x0000
PRIVATE_KEY=0x0000
PROXY_RESISTRY_ADDRESS=0x0000000000000000000000000000000000000000
ERC1155_BASE_URI=https://your_api/
ERC1155_CONTRACT_URI=https://your_api
NETWORK_API=https://you_network_api
TEST_ERC20_Contract_Count=3
ERC20_PREMINT=10000
SUPPORT_TOKEN_ADDRESS=0x0000000000000000000000000000000000000000
NFT_CONTRACT_ADDRESS=0xD4fD25f412DfC2BC61E4ebFC6da5E0dD0A66b82A
DKP_CONTRACT_ADDRESS=0x2EE61DD9f3Bbd021E8061FB414c54dDdE4c05Ea3
POOL_PERIOD_START=0
POOL_MAX_STAKE=1000000000000000000000
POOL_REWARD_RATE=1000000000000000000
POOL_EXCHANGE=1000000000000000000
POOL_SUPPPORT_TOKEN_DECIMALS=18
POOL_MASTER=0x0000000000000000000000000000000000000000
CARD_MAX_SUPPLY=500
CARD_DKP_PRICE=1000000000000000000
CARD_MINT_FEE=0
CARD_FEE_TOKEN=0x0000000000000000000000000000000000000000
CARD_RELEASE_TIME=0
CARD_CLOSE_TIME=0
```
- SAFER_ADDRESS: 管理员地址
- PRIVATE_KEY: 合约部署人的私钥
- NETWORK_API:部署网络的 rpc 节点配置
- SUPPORT_TOKEN_ADDRESS: 池子支持的 stake 或 捐赠的 token 地址
- POOL_MAX_STAKE: 池子最大抵押,包含精度信息
- POOL_REWARD_RATE: 池子收益率,包含精度信息
- POOL_EXCHANGE:捐赠兑换积分的比率
- POOL_SUPPPORT_TOKEN_DECIMALS: 池子支持的 token 的精度,根据具体的 token 精度配置
- POOL_MASTER: 池子的管理员
- CARD_MAX_SUPPLY:卡片最大的供应量
- CARD_DKP_PRICE :卡片所消耗的积分
- CARD_MINT_FEE: redeem 所需要的手续费
- CARD_FEE_TOKEN: 手续费所使用的 token 地址
- CARD_RELEASE_TIME: 卡片开始兑换的时间,时间戳形式
- CARD_CLOSE_TIME: 卡片结束兑换的时间,时间戳形式
## 添加 Pool
添加 pool 需要执行 tools/createPool.js 脚本文件
根据上面的配置信息,需要先完善好 pool 相关的配置信息
- SUPPORT_TOKEN_ADDRESS
- POOL_MAX_STAKE
- POOL_REWARD_RATE
- POOL_EXCHANGE
- POOL_SUPPPORT_TOKEN_DECIMALS
执行
`node tools/createPool.js `
等待执行结果
控制台输出 poolId 则说明成功添加
## 添加 卡片
添加卡片需要设置好对应的变量,之后执行 tools/addCard.js 脚本
- CARD_MAX_SUPPLY:卡片最大的供应量
- CARD_DKP_PRICE :卡片所消耗的积分 ——(100000000000000000000)100 DKP
- CARD_MINT_FEE: redeem 所需要的手续费 —— (1000000000000000000) 1 token
- CARD_FEE_TOKEN: 手续费所使用的 token 地址
- CARD_RELEASE_TIME: 卡片开始兑换的时间,时间戳格式 —— 1626266382 unix 时间戳
- CARD_CLOSE_TIME: 卡片结束兑换的时间,时间戳格式
在文件第 40 行,设置好已经存在的 poolId 参数然后执行
`node tools/addCard.js `
等待执行结果
控制台输出 card 则说明成功添加
## 添加跨池兑换
添加卡片需要设置好对应的变量,之后执行 tools/addCardExpend.js 脚本
在文件第 25 行进行变量的定义
```
const poolId = 2 // card 所在的 poolId
const cardId = 1 // 需要添加跨池信息的 cardId
const expandPool = [1] // 跨池的 poolId
const expandDkp = [ethers.BigNumber.from('10000000000000000000')] // 跨池所需要的 DKP 积分
```
注意这里如果是多个池子和积分的话,需要在数组添加对应的值,且两个数组的顺序配置相同。
`node tools/addCardExpend.js `
等待执行结果
控制台输出 expand info 则说明添加成功
## 添加 Wins NFT 兑换信息
添加 Wins 需要设置好对应的变量,之后执行 tools/addRequireNFTs.js 脚本
在文件第 26 行进行变量的定义
```
const poolId = 4 // card 所在的 poolId
const cardId = 9 // 需要设置的 wins 卡片的 id
const requireNFTContracts = [ // 跨池兑换的 nft 合约地址,这里我们默认使用自己的 nft 地址
'0xD4fD25f412DfC2BC61E4ebFC6da5E0dD0A66b82A',
'0xD4fD25f412DfC2BC61E4ebFC6da5E0dD0A66b82A',
]
const requireNFTIds = [ethers.BigNumber.from(1), ethers.BigNumber.from(2)] // 合约对应的 cardId 按照顺序排列
const requireNFTAmounts = [ethers.BigNumber.from('1'), ethers.BigNumber.from('2')] // 兑换所需要消耗指定的 nft 的数量
```
这里是添加了自有合约中 id 为 1 的 NFT 1 个和 id 为 2 的 NFT 2 个
`node tools/addRequireNFTs.js `
等待执行结果控制台输出 require info 则说明添加成功