【教程】Conflux树图区块链生态开发实用教程(跑起来helloworld+NFT范例)

时隔许久,好多老教程逐渐失效了,社区急需入门教程,恰逢社区小聚会,众人一起完成一个,发出来。

下方石墨屏蔽敏感关键词打不开了,先用论坛版本
https://shimo.im/docs/dGxr6RdkpdWDpWqx 《Conflux树图区块链开发入门(持续攥写中)》

==========================论坛版本==========================================

感谢:本教程来自于Vitec.T.O(小南)传授,范例代码来自于Tspace、BoxNFT、神笔马良、熬鹰1.0、宝葫芦、ConfluxStudio、ConfluxBPM等社区生态项目实践和分享,经几位社区朋友验证可行。
文档公开,欢迎社区大家一起进一步填充完善。

第一部分、开发工具准备
1、VSCode (写智能合约项目和进行编译的工具,官网免费下载使用)

2、Conflux Studio (一站式Conflux集成开发平台,集成全套开发/编译/部署/调试和区块浏览器工具,支持web和桌面端使用)https://shimo.im/docs/dGxr6RdkpdWDpWqx
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
参考文档 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 cfxtruffle

5、其他开发者常用工具(知道即可,本次不用安装):
Conflux Portal(官方钱包)
https://portal.confluxnetwork.org/
Conflux Scan 查看区块链信息,申请赞助,地址转换,功能强大,直接访问即可
https://www.confluxscan.io/
Conflux BPM 1.0 快速开发各种传统信息管理系统+区块链


123cfx.com 链接和资料查找
https://123cfx.com/
开发文档:https://github.com/Conflux-Chain/conflux-developer-site
Conflux 开发资料包:https://juejin.cn/post/6940147768535023646
开发者文档:https://develo per.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及合约全部源代码分享-直接能用

第二部分、项目初始化,准备范例代码和库
1、NFT合约的Demo下载链接(使用demo可跳过项目初始化和导入库两步)
NFT1.0链接:https://pan.baidu.com/s/13B5oxa4oV6RFbIjpG1eHgg 提取码:2vz6 (感谢Tspace和宇智波斑分享)
NFT2.0链接:https://pan.baidu.com/s/11FGGELC-A7gcPDbSqXUBhQ 提取码:e4ww (感谢QB、宇智波斑、Vitec等大神的贡献)

1.0可用,社区有些项目用的就是这个,但效能不够好,并只能用在发行数量不太多的情况(例如10000以下)
2.0有初步功能,但缺少一些实用函数,近期会逐步完善,Scan发布后建议后续使用2.0。

社区NFT2.0代码官方规范(更新中)

本次教程使用的是1.0版本发行北京社区活动纪念NFT。

2、项目初始化
cfxtruffle init

3、导入OpenZeppelin库(简称OZ)
Oz提供了绝大部分常用的代码库,包括token、NFT、以及很多工具。
安装openzeppelin依赖库
npm install @openzeppelin/contracts

然后需要改两个地方如下:
1、openzeppelin 中的 token/erc777 的 1820 合约中更改为这个:
IERC1820Registry constant internal _ERC1820_REGISTRY = IERC1820Registry(0x88887eD889e776bCBe2f0f9932EcFaBcDfCd1820);
2、openzeppelin 中的 token/erc1155 合约中uri的函数可能需要加一个virtual关键字(有可能不需要):
function uri(uint256) external view overridereturns (string memory) {
return _uri;
}
改为:
function uri(uint256) external view override virtual returns (string memory) {
return _uri;
}

使用Conflux三种内置合约
Conflux引入了一些内嵌的合约,以便更好的进行系统维护及链上治理。目前Conflux含有三种内置合约:AdminControl 合约,SponsorWhitelistControl 合约以及 Staking 合约。
https://juejin.cn/post/6876330619798814728
用法建议抄范例代码,有问题群里问,在Conflux开发智能合约一定要用。

第三部分、改为自己需要的逻辑
范例是一个NFT智能合约,需要修改的地方一般为:
1、合约文件名
2、合约名
3、合约信息name和symbol
4、baseuri(自己服务器的相应资源的存储路径,后续可以改)
5、自己的业务逻辑(范例中可忽略)
6、中心化的数据,例如NFT是需要准备metadata(格式化的NFT的信息)和资源例如图片

(关于NFT,可查到更多基础教程)

在本教程中,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日”
}
baseuri为:(感谢Tsapce提供中心化存储)
https://tspace-1253470014.cos.ap-hongkong.myqcloud.com/nft/cfxbjgenesis/metadata/
uri由baseuri和uri拼成,uri为id.json,所以拼出来后形如
https://tspace-1253470014.cos.ap-hongkong.myqcloud.com/nft/cfxbjgenesis/metadata/1.json
这个链接可以直接访问,大家复制到浏览器打开,看看里面是什么。
里面的东西就是NFT的metadata,是标准的json,这个json按照通用推荐标准写,其他的平台就能轻易的读取你的NFT的信息,例子中的,已经被Scan,Tsapce等平台自动读取。

本例的资源为大家的合影,从metadata读取到的中心化存储位置为:

第四部分、智能合约编译、部署
一、编译
方法1、cfxtruffle compile 如果装了cfxtruffle,这个比较快(宇智波斑)
方法2、vscode插件solidity编译。(Vitec.,如果没装cfxtruffle也能编译)
先安装插件solidity0.0.114
下载编译器https://github.com/ethereum/solc-bin/blob/gh-pages/bin/soljson-v0.6.9%2Bcommit.3e3065ac.js(需翻墙,根据需要下载或者群里要)。
进入solidity设置,将默认编辑器改为localFile,将下载好的编译器本地路径填上(见下方截图)
在sol文件内点击鼠标右键,compile contract
编译好的文件默认出现在deploys\下面。
编译方法一截图
image
编译方法二截图:vscode编译器配置(指定版本)图片:


编译方法二截图:vscode编译器配置(最新版本)

二、部署
使用Conflux Studio部署(Vitec.)
conflux studio,选择测试网或主网,打开同一个合约项目文件夹,找到编译目录下的 *.json文件,打开找到"bytecode"和"deployedBytecode"。将他们的字节码前面加上0x(见下图)。然后可以在json上右键点击Deploy(部署),稍等后会弹出成功和合约地址。

关于区块链和Conflux Studio的基础:
区块链交互三要素为:链网络,账户,合约。这三个要素就是Conflux Studio的主要功能模块,也是进行所有工作前先需要设置好的参数。(右上角三个下拉选择)

打开conflux studio后,如果未安装docker,则可直接点击下方跳过按钮,进入软件。

1、选择Network。
Tethy正式网,Testnet测试网,Development本地开发节点,Custom自定义网络。我们最简易一般在此使用测试网或正式网,测试网可以申请每小时100个免费的cfx,正式网则自己准备一些cfx。
image

2、选择管理员账户
先在左下角钥匙出新建或导入管理账户。工具提供了快速的新建账户功能(可以导出私钥),也可以导入自己的账户。工具不推荐将生成的当作常用的,生成的仅作调试使用。
然后在右上角Explorer中选择接下来的操作使用的管理账户。
image

3、选择合约
点击合约,可以展开合约浏览器,可以在地址栏输入合约地址搜索。如果是本机部署过的合约将直接进入交互页面,如果是新合约则需要选择提供abi的json文件(如果是其他项目方的合约,可以和他们索要json,如果是通用的合约例如20token或NFT,可以使用自己编译的通用的json)
合约交互区有三个部分。左边是需要花gas的写函数,中间是不用花gas的读函数,右边是返回的监听信息。
在本例中,常用的读函数为:
uri 获得某个id的uri,即metadata信息的超链接
totalSupply 总计发行了多少个
ownerOf 某个id属于谁
tokensOf 某个地址有哪些id的nft
name 合约的名称
symbol 合约的简称
常用的写函数有:
addMiner 管理员添加可以发行的账户
addItem 发行账户给某个地址添加一个uri为某个字符串的nft
batchAddItemByAddress 发行账户给某一些地址,空投NFT(本次用到的空投,教程见第五部分)
batchAddItemByNumber 发行账户给某一个地址空投number个NFT

4、部署合约
回到部署合约,我们在左上方选择刚才的工程,在bin目录下可以找到在vscode中编译生成的文件,其中*.json是现在需要的。
部署方法:.json文件,如图位置,bytecode和deployedBytecode数据前面加上0x。
然后在文件上点击鼠标右键,点击Deploy。


弹出的页面中,选择一个部署用的账户(他也会变成合约的拥有和管理者),gas也从这个账户出,一般的合约几个cfx就够。点击Estimate和Deploy,然后点击Deploy。等一会儿,就会弹出成功的页面,成功的页面中,有合约地址,点击合约地址进入与合约交互的页面。
记录下你的合约地址。

更加详细的用法,请参加Conflux Studio官方教程:
https://blog.csdn.net/weixin_44282220/article/details/108459342

Tips1:有时候合约执行有莫名其妙的错误,有小概率是因为编译部署有奇怪的错误,重新编译部署一次可能就好了。
Tips2:函数传参列表有最大数量限制,一般13-15个参数,可能就会发生无法编译的问题,报错是,堆栈过大之类的。这个时候需要优化代码,减少参数个数

第五部分、申请赞助、接口调试、初始化、发行、空投
每个项目可申请每次600个,总计6000cfx的基金会免费赞助。任意账户都可申请。
https://www.confluxscan.io/sponsor
新老地址转换
https://www.confluxscan.io/address-converter
初始化和接口调试:普通接口用Conflux Studio调试。含复杂数据结构的需要自己写调用代码。(有需要可找群里要)

测试网可将Scan也切换为测试网。

关于批量空投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%年化复利的教程和小程序下载
第六部分、Dapp开发初步:前端调用合约
【源代码】纯前端调用Portal及合约全部源代码分享-直接能用(来自Lm.熬鹰1.0的分享)
【源代码】纯前端调用Portal及合约全部源代码分享-直接能用

第七部分、Dapp开发初步:后端调用合约
【源代码】Java可参照全开源的宝葫芦社区钱包(来自acuilab宝葫芦Gourd的分享)
https://forum.conflux.fun/t/2020/

第八部分、Dapp开发初步:使用已有的开发框架
【源代码】Conflux BPM 1.0 开源的快速开发各种传统信息管理系统(来自黑龙ConfluxBPM的分享)

第九部分、常用信息和常见的坑
主网节点:https://main.confluxrpc.com id为1029
测试网节点:https://testnet-rpc.conflux-chain.org.cn/v2 id为1
或者使用infura-tokenview提供的节点,他们近期会上线,可以先联系。

Conflux上的智能合约可以轻易防范合约攻击,判断msg.sender是否为0x8开头即可。

Conflux有过三套地址格式,最初是和以太坊一样的,第二套也就是现在说的旧地址,是将首位置为1或8。合约为8,个人为1。第三套也就是现在说的新地址,是形如cfx:…的地址。用户的眼中只能看到新地址,但实际上智能合约种存储和运行的是第二套地址老地址。

wcfx无代付。
wcfx和cusdt的授权与其他20token不同,他俩授权一次后,如果未用完不能授权第二次,必须先置0,所以为了用户方便,一般是先给一个大值。并且需要判断是否已经有足额授权,如果有足额授权不需要重复授权,如果没有足额授权,则需要先置零。

调试合约如果碰到费用不足,说明函数调用报错了,可以portal里点击高级,给足费用,点过去,失败后去Scan能看到具体的报错信息。

第十部分、DeFi+NFT的dapp,了解各种细节常用写法
某个项目考虑开源给大家。
20和nft的授权
合约监听
质押
流动性挖矿
随机抽卡
交易

第十一部分、

1 Like

显示没有权限查看,咋回事

敏感词了。。已换地址

常用,顶一下