本教程为在区块链上发行数字藏品,适用于区块链开发新朋友,适用阶段为从懵圈到入门能干活儿。
建议使用方式是先下载工程,按教程步骤一步步跑通了(下载和打开项目-编译-部署-测试和观察结果),就基本入门了,后续可以自行进一步学习各个相关方面。
如图所示:
但请注意,涉及到合约的开发需特别谨慎,必须知道每一步在做什么,可能引起什么情况。
不当的合约操作,非常容易导致不可逆的bug发生,和财产损失!
做涉及到合约的项目时请多想多问,上线前寻求合约审计。
所以声明:本教程及提供的范例工程,完全公益和开源,同时不对任何可能引起的各种后果负责。
(教程中的合约仅供学习,可能存在未知漏洞,如用于实际生产使用,请仔细审查)
NFT合约的范例工程下载链接(解压后使用Vscode打开文件夹即可)
社区NFT1.0(使用solidity0.6.9,稳定版)
Github链接:https://github.com/conflux-dao-toc/NFT1.0
百度网盘链接:https://pan.baidu.com/s/1A_TVHxMFac9Ug5fdcemnKQ
提取码:798m
(感谢Tspace和宇智波斑分享)
社区NFT2.0(使用solidity0.8.0,推荐版)
Github链接:https://github.com/conflux-dao-toc/NFT2.0
百度网盘链接:https://pan.baidu.com/s/13pHF1QdgJ0u9TXWCXrwnIw
提取码:c21k
(符合CRC社区建议,感谢QB、Pana、宇智波斑、Vitec等大神的贡献)(使用solidity0.8.0)
1.0可用,但是使用0.6.9solidity,各种写法都老了,且有局限性,只能用在发行数量不太多的情况(例如10000以下)
2.0使用0.8.0版本solidity,符合CRC社区建议,同时有20/721/1155,推荐使用2.0。并且2.0版本Core Space和Espace都可用 (辅助合约InternalContractsHandler能自动判断是Espace还是CoreSpace)
2.0工程里面有五个可单独使用的合约,按需选择:
CRC20Nature是发20token的
CRC721NatureAutoId:发721格式的NFT (Metadata在链外,便于维护)
CRC1155NatureAutoId:发1155格式的NFT(Metadata在链外,便于维护)
CRC721NatureAutoIdFixedMetadata:发721格式的NFT(Metadata写在链上合约里不可更改)
CRC1155NatureAutoIdFixedMetadata:发1155格式的NFT(Metadataa写在链上合约里不可更改)
如果使用在链上放metadata方式时,可以把资源的特征码例如MD5放在tokenFeatureCode中,相当于完全的去中心化可信认证。
具体20和721和1155的概念是基础,至少百度先看明白概念再动手。
(NFT基础技术知识如果不清楚,可以先看一下这个介绍很全面,感谢@Forgiven的推荐)
社区NFT2.0代码官方规范
第一部分、开发工具准备
1、VSCode (写智能合约项目和进行编译的工具,官网免费下载使用)
2、Conflux Studio (一站式Conflux集成开发平台,集成全套开发/编译/部署/调试和区块浏览器工具,支持web和桌面端使用)
Conflux-Core版本:
Web 版访问地址 https://conflux.ide.black (无需安装,即刻开发)
Windows 下载链接 https://app.obsidians.io/conflux/win
MacOS 下载链接 https://app.obsidians.io/conflux/mac
Linux 下载链接 https://app.obsidians.io/conflux/linux
Conflux-Espace版本:
https://github.com/ObsidianLabs/Black-IDE
(注:由于工具在持续更新,目前历史版分别有一些已知bug,建议随时更新到最新版本,遇到问题去技术群里问和反馈,私钥自己留好,每次更新版本可能里面的账户会丢失)
参考文档 https://github.com/ObsidianLabs/ConfluxStudio/blob/master/README-CN.md
开发教程 https://github.com/ObsidianLabs/conflux-dapp-tutorial/blob/master/README-CN.md
有个难点可能是docker安装和conflux rust安装,还好这两个不是必须的,这两个是用于自己跑节点用的,自己不跑节点而是直接使用测试网和正式网则不需要安装,
所以本教程中我们暂时不需要安装docker和conflux rust。
3、Nodejs环境(新建工程和下载各种库)
http://nodejs.cn/download/
(附1:廖雪峰的nodejs 安装配置教程https://www.liaoxuefeng.com/wiki/1022910821149312/1023025597810528)
(附2:廖雪峰的nodejs教程,不感兴趣暂时不用看https://www.liaoxuefeng.com/wiki/1022910821149312/1023025597810528)
4、cfxtruffle(编译和调试合约)(可选项)
使用命令安装
npm install -g conflux-truffle
有两点需要注意的地方:
· npm install 的时候需要通过 -g 指定全局安装
· npm install 包的名字为 conflux-truffle, 安装后的命令行程序为 cfxtruffle
5、其他开发者常用工具(知道即可,本次不用安装):
Conflux Portal(2022年以前的官方钱包)(逐渐废弃中,改用fluent)
https://portal.confluxnetwork.org/
Conflux Fluent(2022年3月以后的推荐官方钱包)
https://fluentwallet.com/
Conflux Scan 查看区块链信息,申请赞助,地址转换,功能强大,直接访问即可
https://www.confluxscan.io/ (原生,但目前需科学)
https://www.confluxscan.net/ (新部署的,可直接访问)
Conflux BPM 1.0 快速开发各种传统信息管理系统+区块链
【工具和教程】社区学院教你做支持区块链的OA/BPM/CRM/EMS信息管理系统原型(JAVA)(区块链存证和数据共享)(第一课的视频已更新)
123cfx.com 链接和资料查找
https://123cfx.com/
开发文档:https://github.com/Conflux-Chain/conflux-developer-site
Conflux 开发资料包:https://juejin.cn/post/6940147768535023646
开发者文档:https://developer.confluxnetwork.org/
6、其他早期教程
1、【资源合集】Conflux开发教程/工具/技术文章/视频/漫画等大合集
https://forum.conflux.fun/ /topic/4044
2、更多教程在论坛技术板块
https://forum.conflux.fun/c/Chinese/technique
3、入门HelloWord和拿到Conflux链上cfx的4.08%年化复利的教程和小程序下载
【教程】入门HelloWord和拿到Conflux链上cfx的4.08%年化复利的教程和小程序下载
4、【源代码】纯前端调用Portal及合约全部源代码分享-直接能用 (Portal逐渐废弃中,Fluent前端教程期待有人写一个)
【源代码】纯前端调用Portal及合约全部源代码分享-直接能用
5、Fluent前端教程有人写了如下,感谢社区前端朋友 抚琴之泪/随遇而安
【教程】前端连接插件钱包:Portal迁移Fluent教程及注意事项
第二部分、项目初始化,准备范例代码和库
(使用1.0或2.0的demo工程可跳过下方项目初始化和导入库两步)
1、NFT合约的Demo下载链接
社区NFT1.0(使用solidity0.6.9,稳定版)
Github链接:https://github.com/conflux-dao-toc/NFT1.0
百度网盘链接:https://pan.baidu.com/s/1A_TVHxMFac9Ug5fdcemnKQ
提取码:798m
(感谢Tspace和宇智波斑分享)
社区NFT2.0(使用solidity0.8.0,推荐版)
Github链接:https://github.com/conflux-dao-toc/NFT2.0
百度网盘链接:https://pan.baidu.com/s/13pHF1QdgJ0u9TXWCXrwnIw
提取码:c21k
(符合CRC社区建议,感谢QB、Pana、宇智波斑、Vitec等大神的贡献)(使用solidity0.8.0)
1.0可用,但是使用0.6.9solidity,各种写法都老了,且有局限性,只能用在发行数量不太多的情况(例如10000以下)
2.0使用0.8.0版本solidity,符合CRC社区建议,同时有20/721/1155,推荐使用2.0。并且2.0版本Core Space和Espace都可用 (辅助合约InternalContractsHandler能自动判断是Espace还是CoreSpace)
社区NFT2.0代码官方规范
本次教程以发行北京社区活动纪念NFT为例。(代码解析还是1.0的,2.0也类似)
2、项目初始化(若使用范例工程跳过此步)
新建一个空文件夹,然后在CMD下运行命令(前提是需要安装cfxtruffle)
cfxtruffle init
会自动初始化合约项目,生成目录结构
在进行下一步前,把package-lock.json改名为package.json
3、导入OpenZeppelin库(简称OZ)(若使用范例工程跳过此步)
Oz提供了绝大部分常用的代码库,包括token、NFT、以及很多工具,俗称“造好的轮子”。
安装openzeppelin依赖库
npm install @openzeppelin/contracts
4、导入confluxfans库(Conflux社区提供的实用轮子,符合CRC标准)(若使用范例工程跳过此步)
npm install @confluxfans/contracts
现在我们得到了这样的初始工程。
5、在Conflux树图上开发的特别工作(若使用范例工程跳过此步)
如果在Conflux开发,需要改一个地方如下:
openzeppelin 中的 token/erc777/ERC777.sol 的 _ERC1820_REGISTRY常量中更改为这个:
IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x88887eD889e776bCBe2f0f9932EcFaBcDfCd1820);//Conflux
6、使用Conflux三种内置合约(若使用范例工程跳过此步)
Conflux引入了一些内嵌的合约,以便更好的进行系统维护及链上治理。目前Conflux含有三种内置合约:AdminControl 合约,SponsorWhitelistControl 合约以及 Staking 合约。
https://juejin.cn/post/6876330619798814728
用法建议抄范例代码,或者直接使用这个轮子
ConfluxFans/contracts/InternalContracts/InternalContractsHandler.sol
有问题群里问,在Conflux开发智能合约一定要用。
第三部分、改为自己需要的逻辑
范例1.0是一个NFT智能合约,需要修改的地方一般为:
1、合约文件名
2、合约名
3、合约信息name和symbol
4、baseuri(自己服务器的相应资源的存储路径,后续可以改)
5、自己的业务逻辑(范例中可忽略)
6、中心化的数据,例如NFT是需要准备metadata(格式化的NFT的信息)和资源例如图片
如果使用2.0,则合约内什么都不用修改,直接编译部署即可,参数name、symbol、baseuri在部署时候填写。
(关于NFT和solidity,可查到更多基础教程)
下方链接是solidity官方教程,强烈推荐再成功完成范例教程后,花几个小时仔细看一遍
https://solidity-cn.readthedocs.io/zh/develop/
在本教程中,metadata为:
{
“name”: “Conflux北京社区活动纪念”,
“description”: “2021年7月3日,Conflux北京社区线下Workshop。”,
“image”: “https://tspace-1253470014.cos.ap-hongkong.myqcloud.com/nft/cfxbjgenesis/image/cfxbjgenesis.jpg”,
“token_id”: “1”,
“date”: “2021年7月3日”
}
metadata的json文件可存储在合约中由uri返回,也可存储在链外服务器上,本范例都是存在链外,通过uri返回metadata的json的存放链接。
总之通过nft1155的标准函数uri(id)能让大家获得meta信息即可。
范例中链接uri由baseuri和uri拼成,uri为id.json,
baseuri为:https://tspace-1253470014.cos.ap-hongkong.myqcloud.com/nft/cfxbjgenesis/metadata/
后缀为id.json
所以拼出来后形如
https://tspace-1253470014.cos.ap-hongkong.myqcloud.com/nft/cfxbjgenesis/metadata/1.json
2.0范例的合约中只存放baseuri,当遇到uri(id)请求的时候,自动将id.json拼到baseuri后面进行返回,返回值与上方一样。
有些项目则是将metadata直接放到uri里,返回的直接是metadata。这些方法都可以,根据你的实际业务来选择。
这个链接可以直接访问,大家复制到浏览器打开,看看里面是什么。
里面的东西就是NFT的metadata,是标准的json,这个json按照通用推荐标准写,其他的平台就能轻易的读取你的NFT的信息,例子中的,已经被ConfluxScan,Tsapce等平台自动读取。
关于通用标准建议中,metadata需要提供的信息,name,description,image这几个几乎是必写的,ConfluxScan、tspace、confluxdapp等第三方平台和钱包将自动读取这三个信息进行展示
其他的参数可以根据你的业务需要定制。第一次学习和测试可以先按照范例来跑通了再说。
关于metadata-合约-数字藏品的更详细说明,可以参照Opensea的技术文档如下。
metadata的json需要自己制作。
json可以放到链上合约里的uri中,也可以放到中心化服务器上,也可以放到文件服务器上,也可以放到ipfs等其他第三方服务器上。
只要uri函数能返回让其他人能读取到的符合格式建议规范的资源即可。
本例的资源为大家的合影,从metadata读取到的中心化存储位置为:
第四部分、智能合约编译、部署
一、编译
方法1、cfxtruffle compile 如果装了cfxtruffle,这个比较快(宇智波斑)
编译好的文件默认出现在deploys\下面。
方法2、vscode插件solidity编译。(Vitec.,如果没装cfxtruffle也能编译)
先为vscode安装插件,搜solidity装最新版本,编译好的文件默认出现在bin\下面。
设置编译器
针对范例NFT1.0:使用的0.6.9版本,下载链接为
(需翻墙,根据需要下载或者群里要)。
进入solidity设置,将默认编辑器改为localFile,将下载好的编译器本地路径填上(见下方截图)
在sol文件内点击鼠标右键,compile contract。下方窗口会出现成功或失败的提示
vscode编译器配置(指定版本)
针对范例NFT2.0:使用的0.8.0版本,solidity直接使用默认的远程latest选项,不用手动下载。
然后在sol文件内点击鼠标右键,点击compile contract。下方窗口会出现成功或失败的提示
vscode编译器配置(最新版本)
方法3、ConfluxStudio(需要安装docker,不想装或没装或装不上请用前两种方法)
studio编译也方便。 最新版的studio右下角可以直接选择conflux truffle(需要先安装docker), 然后选择sloc为需要的版本 然后中间参数填好 点击左上角编译图标即可(感谢三豊提供)
二、部署
使用Conflux Studio部署(Vitec.)
Conflux studio,导入或生成一个管理账户,选择测试网或主网,选择账户(关于账户、网络的概念和选择配置是基础概念,如果不清楚可以看一下下方的基础),左上方打开刚才同一个合约项目文件夹,找到刚才编译目录下的 *.json文件,打开找到"bytecode"和"deployedBytecode"。将他们的字节码前面加上0x(见下图)。然后可以在json上右键点击Deploy(部署),稍等后会弹出成功和合约地址。
部署方法:.json文件,如图位置,bytecode和deployedBytecode数据前面加上0x。
然后在文件上点击鼠标右键,点击Deploy。
弹出的页面中,选择一个部署用的账户(他也会变成合约的拥有和管理者),gas也从这个账户出,一般的合约几个cfx就够。点击Estimate和Deploy,然后点击Deploy。等一会儿,就会弹出成功的页面,成功的页面中,有合约地址,点击合约地址进入与合约交互的页面。
(1.0中,参数是直接写在合约里了,需要先修改范例合约,然后再部署)
(2.0中,参数都再部署时候填入:name,symbol和baseuri,所以不需要先修改基础合约,可以直接部署)
记录下你的合约地址。
(Conflux Studio提供对Core Space的部署调试支持。如果是Espace或者其他链,可以使用同一个团队黑曜石出品的BlackIDE,或者另一个团队纯白矩阵出品的ChainIDE,链接可以去123cfx.com找或者群里问。BlackIDE目前有bug,能部署不能调试,得等他们修复)
关于区块链和Conflux Studio的基础:
区块链交互三要素为:链网络,账户,合约。这三个要素就是Conflux Studio的主要功能模块,也是进行所有工作前先需要设置好的参数。(右上角三个下拉选择)
打开conflux studio后,如果未安装docker,则可直接点击下方跳过按钮,进入软件。
1、选择Network。
Tethy正式网,Testnet测试网,Development本地开发节点,Custom自定义网络。我们最简易一般在此使用测试网或正式网,测试网可以申请每小时100个免费的cfx,正式网则自己准备一些cfx。
2、选择管理员账户
先在左下角钥匙出新建或导入管理账户。工具提供了快速的新建账户功能(可以导出私钥),也可以导入自己的账户。工具不推荐将生成的当作常用的,生成的仅作调试使用。
然后在右上角Explorer中选择接下来的操作使用的管理账户。
3、选择合约进行调试
点击合约,可以展开合约浏览器,可以在地址栏输入合约地址搜索。输入合约地址搜索后,如果是本机部署过的合约将直接进入交互页面,如果是新合约则需要选择提供abi的json文件(如果是其他项目方的合约,可以和他们索要json,如果是通用的合约例如20token或NFT,可以使用自己编译的通用的json)
合约交互区有三个部分。左边是需要花gas的写函数,中间是不用花gas的读函数,右边是返回的监听信息。
在范例1.0中,常用的读函数为:
uri 获得某个id的uri,即metadata信息的超链接
totalSupply 总计发行了多少个
ownerOf 某个id属于谁
tokensOf 某个地址有哪些id的nft
name 合约的名称
symbol 合约的简称
常用的写函数有:
addMiner 管理员添加可以发行的账户
addItem 发行账户给某个地址添加一个uri为某个字符串的nft
batchAddItemByAddress 发行账户给某一些地址,空投NFT(本次用到的空投,教程见第五部分)
batchAddItemByNumber 发行账户给某一个地址空投number个NFT
范例2.0的基础函数与oz和confluxfans基本一致,详见教程前面的超链接。
范例额外包装了关于权限、uri返回值以及批量铸造的函数如下:
addMinter/removeMinter :给某个账户授予/收回铸造权限
mint/mintBatch/batchAddItemByAddress :单个铸造/一人多个铸造/多人空投
setURI:更新baseuri
更多函数说明和用法,请学习721和1155的基础。
工具更加详细的用法,请参加Conflux Studio官方教程:
https://blog.csdn.net/weixin_44282220/article/details/108459342
Tips1:有时候合约执行有莫名其妙的错误,有小概率是因为编译部署有奇怪的错误,重新编译部署一次可能就好了。
Tips2:函数传参列表有最大数量限制,一般13-15个参数,可能就会发生无法编译的问题,报错是,堆栈过大之类的。这个时候需要优化代码,减少参数个数
第五部分、申请赞助、接口调试、初始化、发行、空投
每个项目可申请每次600个,总计6000cfx的基金会免费赞助。任意账户都可申请。(近期降低了代付额度)
代付是Conflux Core Space的特性,目的在于让用户账户可以不用进行拥有数字gas,就能使用区块链,gas由赞助方帮用户代付,简化用户学习成本,国内合规化(基金会提供初期小额代付,后期需要平台和项目方给用户提供)
代付的步骤是:
1、先在智能合约中加上代付的代码,nft1.0和2.0工程已经加好了。如果自己做的合约建议直接引入和继承ConfluxFans社区提供的InternalContractsHandler辅助合约,就能拥有代付。
2、ConfluxScan上申请基金会给的初期小额代付
https://www.confluxscan.io/sponsor (申请的账户需要有一点余额)
当基金会免费提供的初始代付用光后,可以向社区技术委员会提出进一步的代付申请,当社区判断项目有意义时,会继续提供代付。
3、现在用户的调用是“免费”的了(注意,每次代付有上限,当使用gasprice设置过高或操作用gas过大时,超出上限的部分还是用户自己付,不过一般的操作很少有超过上限的)
https://www.confluxscan.io/sponsor
新老地址转换
https://www.confluxscan.io/address-converter
初始化和接口调试:普通接口用Conflux Studio调试。含复杂数据结构的需要自己写调用代码。(有需要可找群里要)
Scan右上角可以切换CoreSpace原生空间和EspaceEVM空间。两个空间逻辑基本相似
测试网可将Scan也切换为测试网。
测试网可以免费领取测试cfx,每小时100个,在下图的位置
关于批量空投NFT给很多个账户的做法:
铸造一个NFT,给一个账户铸造X个NFT,都是简单的,直接studio调用函数即可。
但有一个常见的场景是需要空投NFT略复杂,如果手动Conflux Studio手动空投或填写数组比较费时间。这时候需要用代码来解决了。
给出代码如下(感谢Tspace-烤仔城市的代码分享)
链接:https://pan.baidu.com/s/1YI3Fc22tT00sd8QF4HbYEw 提取码:8fqz
这个代码是配合范例合约1.0中的batchAddItemByAddres使用。vscode打开项目文件夹(已配置好),batch.js即是可运行的代码。使用前,需要填写合约管理员私钥,合约地址,准备空投地址Excel表(新建一个待空投地址的Excel,第一列是地址,第二列是uri,uri在本例中是1.json 2.json等)
准备好后,在下方terminal输入运行命令 node batch.js 稍等片刻,就可以在Scan或Conflux Studio查看 totalSuply了。
注意,使用前,请确认你看懂了代码的意思,如果有疑问请及时群里问。因为涉及到上合约,如果写错了,可能会导致空投错误,进而NFT合约可能就坏掉了。
此外,这段代码也可以用来当作学习“使用nodejs与区块链合约交互”的demo,更多关于此的基础教程还可以查看:入门HelloWord和拿到Conflux链上cfx的4.08%年化复利的教程和小程序下载 【教程】入门HelloWord和拿到Conflux链上cfx的4.08%年化复利的教程和小程序下载
关于批量空投,范例1.0和2.0均提供了两个实用空投函数:
batchAddItemByNumber 给一个账户空投N个NFT
batchAddItemByAddress 给N个账户分别空投1个
第六部分、Dapp开发初步:前端调用合约
【源代码】纯前端调用Portal及合约全部源代码分享-直接能用(来自Lm.熬鹰1.0的分享)
【教程】前端连接插件钱包:Portal迁移Fluent教程及注意事项
第七部分、Dapp开发初步:后端调用合约
【源代码】Java和PC端可参照全开源的宝葫芦社区钱包(来自acuilab宝葫芦Gourd的分享)
使用Netbeans8.2打开工程可直接运行。
里面主要可以学习JAVA如何调用合约,例如下图中是调用1155和721的NFT的转账的例子。
【源代码】移动端钱包可参照BoxWallet,IOS+安卓,感谢Baixin开源。
建议使用VsCode打开工程,不能直接运行。但是足够看
【源代码】Lm做的第一个社区移动钱包,安卓,全开源,已暂停维护,但借鉴是可以的。
第八部分、Dapp开发初步:使用已有的开发框架
【源代码】Conflux BPM 1.0 开源的快速开发各种传统信息管理系统(来自黑龙ConfluxBPM的分享)
第九部分、常用信息和常见的坑
主网节点:https://main.confluxrpc.com id为1029
测试网节点:https://testnet-rpc.conflux-chain.org.cn/v2 id为1
或者使用infura-tokenview提供的节点,他们近期会上线,可以先联系。
官方建议给GasPrice为1个亿起。测试网已经强行限制1亿以上。
GasLimit上限为1500万,切记注意,如果超过1500万会无法执行,不要悲剧。
Conflux上的智能合约可以轻易防范合约攻击,判断msg.sender是否为0x8开头即可。
Conflux有过三套地址格式,最初是和以太坊一样的,第二套也就是现在说的旧地址,是将首位置为1或8。合约为8,个人为1。第三套也就是现在说的新地址,是形如cfx:…的地址。用户的眼中只能看到新地址,但实际上智能合约种存储和运行的是第二套地址老地址。
wcfx无代付。
wcfx和cusdt的授权与其他20token不同,他俩授权一次后,如果未用完不能授权第二次,必须先置0,所以为了用户方便,一般是先给一个大值。并且需要判断是否已经有足额授权,如果有足额授权不需要重复授权,如果没有足额授权,则需要先置零。
调试合约如果碰到费用不足,说明函数调用报错了,可以portal里点击高级,给足费用,点过去,失败后去Scan能看到具体的报错信息。
Espace空间与以太坊一致了,各方面和Core不太一样,代付没了,地址都是0x格式,大家都是适应中…
NFT数字藏品合约开发的选择的常见问题:
问:选择721还是1155?
答:一般大部分情况来说,简单选择721妥妥的就够用了,没毛病。
问:要不要加枚举函数?
答:先说结论,既然能看到了这里,就必加枚举!(范例工程代码已默认包含枚举)
枚举函数的优势是可以给第三方应用调用的便利,其他平台和钱包可以轻易的自动读取到你的nft的信息(不需要额外的去遍历区块什么的)。枚举的劣势是消耗额外的存储,消耗额外的主网gas。
个人建议是如果链的gas很便宜(例如Conflux),就极其强烈推荐加上枚举。(两个范例都有枚举),这也是CRC标准的建议。
如果是链比较贵例如以太坊或有其他特殊情况,可以考虑不写枚举。
问:1155里选同质化还是非同质化?(范例工程代码已默认为非同质化)
答:优先按非同质化做,有价值的数字藏品需要设置成非同质化的,如果设置成同质化可能极大影响藏品的价值。
当下如果业务上没有一定必须用同质化(例如不限量发行大量的种类和数量的游戏道具的情景),一般仅有几十万内的发行量情况尽量选择非同质化。大家读起来和交易都方便明了。
问:metadata放在哪里? (范例工程代码同时提供放在链外和放在链上的)
以下三个方式皆有,可根据业务需要自由选择
存在合约的每个nft的uri里:优点是用户看起来不可改也不会丢,缺点是发行方确实不能灵活修改和更多的链上存储花费。
存在中心化服务器上:优点是便于管理以及更新优化,如果崩了或换服务器可以及时更新。缺点是有些专业用户可能质疑中心化程度,但也问题不大,本来大部分数字藏品本质还是中心化站台的。
存在ipfs上:有点是去中心化信任度较高,缺点是可能得科学上网和速度慢,结论是一些人喜欢一些人不喜欢。详见论坛同板块有ipfs教程。
对于海外炒作型项目,大部分是metadata存在链上+资源存ipfs。
对于国内合规项目,大部分是都存服务器上。
混合使用,具体根据业务场景需要选择。
问:选择Conflux Core Space原生空间,还是Espace空间?(范例工程代码2.0两个空间兼容)
答:理论上Core Space是更先进的空间,有一些以太坊的改进优秀特性,例如代付,个人地址与合约地址分开,管理等。
但Espace优势是与以太坊一致,从其他链过来的开发可以更轻易的无修改的的接入Esapce。
举例来说:如果是国内合约法币数字藏品开发,推荐Core Space,代付机制和已有的丰富组件应用让用户可以无感且合规的快速体验区块链。
如果是DeFi,GameFi等含20的应用,以及国外项目和以太坊项目迁移到Conflux,建议直接迁移在Espace上。
第十部分、DeFi+NFT的dapp,了解各种细节常用写法
某个项目考虑开源给大家。
20和nft的授权
合约监听
质押
流动性挖矿
随机抽卡
交易
这个因某些原因目前仅内部开源,想看就直接联系作者吧(论坛私信chy留下微信)
版本更新记录:
2022.5.27 更新:
-增加2.0所有合约的tokenFeatureCode参数,用于存放每一个id的资源的特征码,例如图片的MD5值。
-tokenFeatureCode只能设置一次,设置后不可更改,所有人可读,详情自行查看代码。
-tokenFeatureCode为可选项,可以不使用。
=====================================================================
2022.5.23 更新:
-增加721和1155合约的“metadata固定在合约内不可更改”的范例,注意,这种写法过于去中心化,一旦用了真的不能改metadata,在实际项目中请谨慎使用。
=====================================================================
2022.5.18 更新NFT2.0工程:
-增加721合约范例,普通数字藏品业务推荐优先使用721而非1155。
-将原1155合约范例中的铸造函数,由同时兼容非同质化和同质化的逻辑,都替换为非同质化的逻辑。即在直接使用代码工程的情况下,只能产生非同质化的NFT。(如果真有同质化的需求,可以自行在代码中解开注释和进行调整,再次强调不推荐使用同质化。)
=====================================================================
2022.4.14 更新NFT2.0工程:
-从0开始的id改成从1开始
-增加两个批量空投实用函数,可以给一个账户空投N个,或者给N个账户分别空投1个。
本教程源于Core Space,目前也增加了对Espace的兼容和简要描述更新。符合社区CRC标准建议。
======================================================================
2022.1.4发布2.0工程
符合社区CRC规范建议。(使用solidity0.8.0)
欢迎使用新工程。
此外,根据近期大家的反馈优化了一些细节描述。
==========================================================================
2021年:
时隔许久,好多老教程逐渐失效了,社区急需入门教程,恰逢社区小聚会,众人一起完成一个,发出来。(1.0)
感谢:本教程来自于Vitec.T.O(小南)传授,范例代码来自于Tspace、BoxNFT、神笔马良、熬鹰1.0、宝葫芦、ConfluxStudio、ConfluxBPM等社区生态项目实践和分享,经几位社区朋友验证可行。
文档公开,欢迎社区大家一起进一步填充完善。
==========================================================================