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