一、简介
ConfluxStudio是一个帮助开发者快速开发Conflux智能合约的集成化开发环境。ConfluxDApp开发教程将使用ConfluxStudio在Oceanus网络下开发一个简单的代币应用Coin。
通过这个开发教程,你将会学习到如何进行Conflux智能合约的编写、调用,配置智能合约的代付以及如何使用Web前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的DApp。
二、准备工作
2.1安装IDE
请在GitHub的下载页面
(github.com/ObsidianLabs/ConfluxStudio/releases)下载ConfluxStudio。目前ConfluxStudio支持macOS和Linux系统,请根据系统下载对应的版本。
正确安装ConfluxStudio并初次启动后,ConfluxStudio将显示欢迎页面,根据提示完成Docker,ConfluxNode以及ConfluxTruffle的下载、安装及启动。
2.2创建钱包
完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。
在ConfluxStudio的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击Create按钮打开新钥匙对弹窗,输入钥匙对的名字并点击Save按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。
导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。
为了顺利完成教程,首先需要创建三个钥匙对:
·minter_key用于Coin合约部署时的签名,是这个教程中最常使用的钥匙对
·receiver_key用于Coin合约接收转账,将在后文中介绍转账时用到
·sponsor_key用于Coin合约代付功能,将在后文中介绍代付功能时用到
2.3连接Conflux网络
教程将在Oceanus网络进行合约的部署以及合约的调用。点击顶部Network标签的倒三角打开下拉菜单,点击选择Oceanus网络进行切换。
切换完成后,可以在主页面中看到当前网络为oceanus。页面左边包括了当前网络的节点URL,ChainID,TPS信息,页面右边包含了当前网络区块的信息。
2.4申请测试CFX
点击顶部Explorer标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的CFX余额信息。
在区块链的世界中,大家通常将申请测试Token的方式称为faucet,目前在Oceanus网络下每次faucet申请到的Token为100CFX。
获取CFX的方式有两种方式:
·输入地址后点击地址栏右边的水龙头按钮,ConfluxStudio将为地址自动申请CFX;
·你也可以直接在浏览器中输入wallet.confluxscan.io/faucet/dev/ask?address={address}来申请CFX;
使用上述方法在ConfluxStudio中为minter_key和sponsor_key申请CFXToken。完成申请后,这两个账户上的余额将会从0CFX更新为100CFX。
目前余额信息为:
·minter_key余额100CFX
·receiver_key余额0CFX
·sponsor_key余额100CFX
三、智能合约创建项目
3.1创建项目
点击顶部左边的Project标签切换至项目列表页面,点击页面中的New按钮打开项目创建窗口,输入项目的名称并选择coin模版,点击CreateProject完成项目的创建。
3.2合约代码
Coin合约是一个简单的代币合约,其中:
·通过mint方法可以增发代币数量
·通过send方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息
·通过balanceOf方法可以查询到指定账户地址的代币余额
·通过add_privilege方法可以为合约添加代付白名单
·通过remove_privilege方法可以为合约移除代付白名单
Conflux智能合约使用Solidity语言进行开发,打开目录下的contracts/Coin.sol文件,这个是本项目的核心代码:
3.3编译及部署合约点击工具栏的Build按钮进行合约的编译,编译的结果将会保存在build/Coin.json文件中。
在部署合约前,首先需要确认在Explorer中选择合约部署所使用的地址,ConfluxStudio会使用这个地址将部署合约这笔交易进行签名。在合约代码的constructor中,minter被赋值为msg.sender,这个msg.sender就是Explorer所选择的地址。
在此我们选择minter_key作为部署合约的签名者。
点击工具栏的部署按钮进行部署,部署完成后,部署结果会在deploys的JSON文件中,在这个文件中可以在contractCreated中找到当前合约部署的地址,后文中使用contract_addr来代表这个合约地址。
四、调用合约
点击顶部的Contract标签切换至合约页面,在地址栏输入contract_addr地址并加载合约。
合约页面由三个部分组成:
·左边为合约调用区域
·中间为合约数据查询区域
·右边为事件查询区域
4.1合约调用及查询
4.1.1增发代币
点击合约调用的下拉菜单中选择mint方法,在下方的参数区域分别填入以下信息:
·receiver接收代币的地址。填入minter_key地址
·amount发行的代币总数。填入整数1000
·Value选填项,具体可查看Value详解。填0或者不填
·Signer这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过msg.sender获取到这个地址。填入minter_key地址
填写完成后点击执行按钮,ConfluxStudio将自动构造交易并推送到网络中。成功执行后可以在下方Result中看到这笔成功的交易。
4.1.2查询代币余额
点击查询区域的下拉菜单并且选择balanceOf方法,这是在代码中定义的查询方法。在下方的tokenOwner填入minter_key地址并点击执行,就可以在下方的Result中看到minter_key账户的Coin代币的余额信息为1000。使用同样方法可以查询到receiver_key账户的代币余额为0。
4.1.3转账代币
在合约调用区域选择send方法,在Parameters中分别填入:
·receiver收款人地址。填入receiver_key地址
·amount转账的代币数量。填入整数200
·Signer这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入minter_key地址,
点击执行完成转账,再次查询代币余额可以看到minter_key账户只剩下800代币,而receiver_key账户则从0变成了200代币。
五、代付功能
ConfluxStudio支持Conflux系统合约提供的代付功能。
通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:
·add_privilege添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址0x0000000000000000000000000000000000000000代表为所有调用该合约的地址代付费用
·remove_privilege移除合约代付白名单
·set_sponsor_for_collateral设置合约储存费(collateralforstorage)的代付账户及代付金额
·set_sponsor_for_gas设置合约手续费(gasfee)的代付账户、代付金额及每笔交易代付金额上限
启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用ConfluxStudio通过系统合约设置代付账户及代付金额,通过Coin合约添加代付白名单。设置完成后,minter_key账户调用Coin合约的方法时将不会被扣除手续费,手续费由sponsor_key账户代付。
5.1设置代付账户及代付金额
在ConfluxStudio中访问系统合约地址
0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。
选择set_sponsor_for_collateral方法,该方法有三个参数:
·contract_addr设置代付的合约地址。填入contract_addr
·Value设置代付金额。填入整数40
·Signer代付账户地址。填入sponsor_key地址
填好以上参数并执行运行,系统合约将为Coin合约设置好储存费代付账户,此时sponsor_key账户将会被扣除40CFX。
选择set_sponsor_for_gas方法,该方法有四个参数:
·contract_addr设置代付的合约地址。填入contract_addr
·upper_bound设置每笔交易代付的上限。填入1000000000000
·Value设置代付金额。填入整数40
·Signer代付账户地址。填入sponsor_key地址
填好以上参数并再次执行运行,系统合约将为Coin合约设置好手续费代付账户,此时sponsor_key账户将会再次被扣除40CFX。
完成这两个方法的调用后Coin合约代付账户便设置好了,sponsor_key账户将为Coin合约的手续费和储存费各提供为40CFXToken的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。
5.2添加代付白名单
在Coin合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。
在ConfluxStudio中访问contract_addr合约,选择add_privilege方法:
·account添加白名单的地址。填入minter_key地址
·Value不填
·Signer这笔交易的签名地址。填入minter_key地址
运行后就成功设置了代付白名单了,至此Coin合约的代付功能设置好了。
5.3代付测试
在进行代付测试前,先查询并记录下minter_key账户的CFX余额。例如本教程中,minter_key的初始余额为97.6210937497093952CFX。
回到Coin合约调用页面,再次调用mint方法并使用minter_key地址增发代币1000,完成代币增发后再次查询minter_key的余额,仍然为97.6210937497093952CFX。
可以看到增发代币的这笔交易,原本应该由minter_key账户支付的手续费,变成了由sponsor_key账户支付。
六、前端项目
前端项目源码可以前往Conflux前端。
6.1预备
6.1.1下载项目并安装依赖
·下载前端项目:gitclonegithub.com/ObsidianLabs/conflux-frontend-react
·使用npminstall或者yarn进行项目依赖安装
6.1.2ConfluxPortal的安装及配置
ConfluxPortal是由Conflux提供的浏览器插件,目前提供了Chrome及Firefox的支持,用户可以使用ConfluxPortal进行私钥的管理以及交易签名。
前往ConfluxPortalGitHub下载安装。项目的源代码在GitHub中可以找到。
在这里需要将ConfluxStudio中生成的地址导入到ConfluxPortal中。完成插件安装后,在ConfluxPortal的页面中选择Import,将ConfluxStudio中的minter_key的私钥粘贴到输入框中,点击Import按钮完成私钥导入。
6.2运行前端项目
在运行项目之前,需要修改一些默认的环境变量。
在前面的教程中部署合约后会生成一个contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到.env文件,这个文件提供了项目的环境变量,将REACT_APP_CONFLUX_COIN_ADDRESS的值修改为contract_addr。
使用yarnstart启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面。
项目运行起来后,页面将显示四个卡片信息,分别为:
·左上角Conflux网络信息模块
·右上角ConfluxPortal模块
·左下角Coin合约模块
·右下角SponsorWhitelistControl合约模块
6.2.1连接ConfluxPortal
点击右上角组件中的ConnecttoConfluxPortal按钮,ConfluxPortal页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的CFX余额。
6.2.2运行Coin合约代币增发和代币转账操作
左下角的组件为Coin合约组件,可以通过这个组件调用代币增发和代币转账功能。
·代币增发:选择mint方法并在receiver中填入增发地址minter_key地址和在amount中填入增发代币的数量100,点击PushTransaction,在弹出的ConfluxPortalNotification窗口中点击Confirm按钮来确认交易。
·代币转账:选择send方法并在receiver中填入收款人地址receiver_key地址和在amount中转账代币的数量20,点击PushTransaction,在弹出的ConfluxPortalNotification窗口中点击Confirm按钮来确认交易。
6.2.3查看Coin合约中的余额
选择balanceOf方法并在tokenOwner输入框中填入查询的地址,点击QueryData按钮可以查询到账户的余额。
6.2.4查看Sent事件
选择Sent事件并点击QueryData可以查询到转账操作所触发的转账事件的记录。
6.3前端项目解析
项目使用React进行开发。主要由三大部分组成:视图组件、js-conflux-sdk以及ConfluxPortal。
项目根目录下的.env环境变量,在这里定义了两个环境变量,分别为:
·REACT_APP_CONFLUX_NODE_RPC:Conflux的网络节点地址,目前默认为Oceanus网络的地址
·REACT_APP_CONFLUX_COIN_ADDRESS:已部署的Coin智能合约地址
6.3.1视图组件
视图组件在项目的src/components中,其中App.js为页面的主入口,负责页面的排列及合约信息的读取。
ConfluxNetwork.js
负责渲染Conflux网络信息,NodeURL的值为.env环境变量文件下的REACT_APP_CONFLUX_NODE_RPC设置的值。
ConfluxPortal.js
负责渲染ConfluxPortal的连接信息,并提供了连接ConfluxPortal的交互按钮。
·connectConfluxPortal调用ConfluxPortal的enable方法启用conflux,完成enable后调用getAccount方法获取到Portal中的账户。
·refreshBalance调用ConfluxSDK的getBalance方法来更新账户余额信息
·renderPortalButton根据当前不同的状态,渲染连接Portal的按钮
ConfluxContract.js
负责渲染Conflux合约信息,本项目中提供了Coin和SponsorWhitelistControl两个合约。
ConfluxContract.js由三个组件组成,分别为:
·ConfluxContract负责根据传入的合约abi来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
·ContractMethods负责渲染合约abi中的方法和事件的表单及相对应的按钮
·ConfluxForm负责根据方法或事件的abi来渲染输入表单
lib
lib在项目的src/lib中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
七、总结
在本开发教程中,我们学习了如何使用ConfluxStudio来完成一个完整的CoinDApp开发,其中包括了:
·使用钥匙对管理器创建账户及导出账户私钥
·切换Oceanus网络,查看网络信息
·账户申请CFXToken
·创建、编译并部署项目
·解析Coin合约代码,学习如何编写合约的读写方法及事件
·使用合约浏览器调用Coin合约的代币增发、转账、查询余额及查询事件
·设置并使用智能合约的代付功能
·将私钥导入ConfluxPortal并连接前端项目
·在前端项目中调用Coin合约的代币增发、转账、查询余额及查询事件
·解析前端项目代码,学习如何通过ConfluxPortal和ConfluxJavaScriptSDK连接网络并实现交易
八、关于ConfluxBounty
Conflux基金会为了鼓励用户参与生态建设,提供了ConfluxBounty赏金平台。通过完成Bounty赏金平台发布的各项任务,参与者可以获得FC(FansToken)作为奖励。
8.1FC的价值
FC,全称FansCoin,是由Conflux基金会与社区成员共同研发的生态代币,用于记录和感谢对Conflux生态建设做出贡献的社区成员。FC目前在Oceanus上运行,Conflux基金会承诺,在主网上线后,锁定和未锁定的FC都可以与主网CFX进行1:1承兑,以此保障所有社区成员的劳动成果都可以获得奖励。
FC赏金分配方案会展示在赏金任务详情页中,包括最高奖金数量、奖金分配人数、奖金数量分布、排行名次确定方式等信息。账号余额中的赏金奖励可以随时申请提现至Conflux钱包。Conflux团队会对所有的提现申请进行审核。
对于已经通过的提现申请,Conflux团队会在每周二中午12点进行提币操作。完成提币操作后,您的Conflux钱包将会收到您提现的赏金奖励。
8.2Bounty的价值
ConfluxBounty(bounty.conflux-chain.org)的宗旨是为每一个通证找到价值。Bounty分为几个板块:技术、品牌、社群、资源、其他等。
·技术板块:分为产品、SDK、教程、开发、测试等;主要是奖励社区的一些技术资源贡献者。
·品牌板块:分为文案、设计、视频、媒体、推广等;主要是奖励在各大网络平台分享Conflux的各种最新动态,扩大Conflux的生态影响力的活跃贡献者;
·社群板块:分为活动、推广等;主要是奖励举办各种Conflux相关线上线下活动,帮助解答社群问题,活跃日常气氛等。
·资源板块:分为政务、商务、人力等;主要是奖励为生态中引进企业资源,扩建Conflux生态等。
·其他板块:分为周边、采购等;主要是奖励一些其他的零散任务。
ConfluxStudio下载地址和更新日志:
https://github.com/ObsidianLabs/ConfluxStudio/releases
ConfluxdApp开发教程:
https://github.com/ObsidianLabs/conflux-dapp-tutorial
ConfluxdApp教程相关建议:
https://github.com/ObsidianLabs/conflux-dapp-tutorial/issues
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。