---
# System prepended metadata

title: DKPool 运营手册

---

# 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  则说明添加成功

