Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、简介# ~" A# `- K" q: z) h3 Q
Conflux Studio 是一个帮助开发者快速开发 Conflux 智能合约的集成化开发环境。Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。
2 c$ a% s5 `- c- Q通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。+ ^7 \* E! A$ q5 _9 u, o
二、准备工作1 z: u& D# `+ ^, m' N  J$ i
2.1 安装 IDE
4 f0 u5 I* x( q0 m# X请在 GitHub 的下载页面" b9 Y% N7 Q5 g7 T; [
(github.com/ObsidianLabs/ConfluxStudio/releases) 下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。& u/ L6 q$ ~/ c0 {( ^
正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。1 z4 W- I! O2 Y: Z$ `4 x
2.2 创建钱包
6 s  s+ z( D. }* L9 n完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。& E/ |: Q! l- }+ \$ X. T
在 Conflux Studio 的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。1 J* [5 Z3 A$ I; D+ F/ S
导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。/ z0 P9 ^0 ], ~( J9 `
为了顺利完成教程,首先需要创建三个钥匙对:- S: S: L7 b4 T' m9 W. ?2 k6 l
**· **minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对
6 }' ^; F6 u. l; H**· **receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到
0 ^4 T6 g7 p) Z1 ]**· **sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到' S" d7 }4 y7 \1 ]; u
2.3 连接 Conflux 网络
( U' ~8 D5 f6 ?. J教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。3 o9 s. i" [( b+ g2 l. D. N' ^' i
切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。' t6 H/ I' }: j4 I# k7 b
2.4 申请测试 CFX* y  `0 R4 _$ G2 ~
点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。3 {( V2 N" s" Z" Y2 d) N6 \+ O
在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。
2 M$ m# D. T' {) J& P获取 CFX 的方式有两种方式:! r4 `, Y4 e7 f  |
· 输入地址后点击地址栏右边的水龙头按钮,Conflux Studio 将为地址自动申请 CFX;
+ k) ?$ ]* L( J; P$ f! x* ?) x% r· 你也可以直接在浏览器中输入 wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX;
6 W0 J5 E4 x4 B7 B+ _9 c" q) M使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。& ~3 m, C2 o/ v! X; L9 G  w/ i- I6 L
目前余额信息为:9 L, ]: g* j& t0 X2 U
**· **minter_key 余额 100 CFX
/ A: J5 Y  F3 m**· **receiver_key 余额 0 CFX
2 _: `0 h( Q: H, \8 V3 l- b**· **sponsor_key 余额 100 CFX! S, o+ d6 |) G0 Y
**三、智能合约创建项目 **( G' Q* S5 r4 _
3.1 创建项目5 ~% i: L) @( B. y. e+ l* u
点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。+ s- B( U( z9 f' O
3.2 合约代码% ?1 ?2 `' s# h6 ]3 H
Coin 合约是一个简单的代币合约,其中:7 l# M* }* n; |: a; t
**· **通过 mint 方法可以增发代币数量
- _/ U  e& P& \) h. Z( z3 I3 S, {2 |**· **通过 send 方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息
6 E2 m! y: I2 k& I**· **通过 balanceOf 方法可以查询到指定账户地址的代币余额! w: V' c" h8 V" |! z1 G, y. ?: L
**· **通过 add_privilege 方法可以为合约添加代付白名单
" m0 E. ]. {' \# h9 k: l9 [**· **通过 remove_privilege 方法可以为合约移除代付白名单
7 P2 I2 I" o- H$ cConflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:: D9 f1 s( s( a" ~2 w( P* L
// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.0
" O6 _: H) Q4 u4 b; s) Apragma solidity >=0.5.0
1 r2 G. r6 i6 D// 导入 SponsorWhitelistControl 合约  c' m; E7 m- ]
import "./SponsorWhitelistControl.sol";. y' c% I8 \7 k& s. Z- w- a
// 定义 Coin 的合约
% l+ A- E0 p& w) ^; pcontract Coin {
' q  [0 B+ y' R5 }# u- p) r$ s- L' K// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)
+ B# p. @" }4 Y  p# R: zaddress public minter;5 z9 Q& `  Q* ^8 v3 u0 f
mapping (address => uint) private balances;7 G% c6 C# ~  j8 f) H# h8 ~. h
// 使用 SponsorWhitelistControl 合约连接系统合约/ X. ^% K2 N* A) p7 l! n, b
SponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));: H* s% G* q0 B; \  Z
// 定义了 `Sent` 的事件,定义了 from / to / amount 列! ^8 M% F1 x* {( S6 r0 a# I+ Y
event Sent(address from, address to, uint amount);* t. z; d: p2 M9 t" O4 ^
// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址
6 Q9 i5 V) g5 vconstructor() public {, r( O1 S: M$ |7 L+ U! i0 g
    // msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter4 H# B4 s$ C. N8 p5 y8 k# r
    minter = msg.sender;
7 D6 W  o4 L9 u" V}
; f9 s3 G: D7 d// 定义 mint 方法,通过此方法来增发代币
/ ~- u" f7 t7 A6 Xfunction mint(address receiver, uint amount) public {
; M6 F. Q' s% n, j    require(msg.sender == minter);
8 j! ?8 v3 N( b" j2 {    require(amount }0 E/ K# G) q3 Z. L% l) {
3.3 编译及部署合约5 h; u5 |( D; V6 J* K: X
点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。2 r9 X5 G; U) p/ X% l
在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。& d% z( p- h! I& A7 L5 {
在此我们选择 minter_key 作为部署合约的签名者。
; Y9 G! w$ L5 W点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。6 S( |5 ~6 ]- k8 c- E
四、调用合约8 Q6 k% C& S: `
点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。5 G) D; a7 i7 @0 K
合约页面由三个部分组成:
9 `1 y2 k+ P" x4 ]**· **左边为合约调用区域7 U* q6 Y! W/ p  ~5 I
**· **中间为合约数据查询区域2 e* M$ H5 }2 v
· 右边为事件查询区域
' g6 ]3 y& w4 u1 J0 [3 C4.1 合约调用及查询' F% n! d: a- I% [  @: R
4.1.1 增发代币
4 B3 P/ P) _2 |  \点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:. p8 k  \3 `) Y% o2 V
· receiver 接收代币的地址。填入 minter_key 地址
/ o* w$ |  Q3 B) {9 U· amount 发行的代币总数。填入整数 1000) @! ~4 H0 g/ S) V/ S6 h- O
· Value 选填项,具体可查看 Value 详解。填 0 或者不填
8 g  V/ X8 v9 b9 {: E: C, e· Signer 这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过 msg.sender 获取到这个地址。填入 minter_key 地址
) L! Y: N: u5 S填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。
- P/ p; L7 e" @6 e6 D' y  x& r4.1.2 查询代币余额: X6 V- `; q9 [+ T6 d7 i
点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。. g; d2 D3 @1 V! b( D5 U& H4 {9 a
4.1.3 转账代币: D- d2 r. e# R$ g/ S" {# n8 ~1 J
在合约调用区域选择 send 方法,在 Parameters 中分别填入:
1 m8 Y6 n- k: ~' P· receiver 收款人地址。填入 receiver_key 地址
' k6 |1 a8 K: l: W( m3 A6 G5 X% Y· amount 转账的代币数量。填入整数 200  B0 v  `% W# N* [) r: T# o
· Signer 这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入 minter_key 地址,
( ?. J4 ]* i3 q1 ]& |; E点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。
, n; Q2 N, h! j3 s2 R4.1.4 Value 参数
4 v% X; g% X7 e5 U; T% m* K5 QConflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约除了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。0 c$ Y7 Y4 K* Z! b
后文中的代付功能将会使用到 Value 参数。( ?3 C$ Q0 |* d$ K8 P
4.2 查询事件
% Z8 n. [4 [' X% B. |& c0 B在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。$ L, }1 k8 O7 a# p8 u  Z5 |" X
五、代付功能
. |* n! Y: Z$ n3 qConflux Studio 支持 Conflux 系统合约提供的代付功能。8 A7 W3 p( j& s
通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:* A2 z3 m& F/ U& B3 f6 B/ [) F
· add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用
1 v) G/ s  _  Z, t+ O$ {· remove_privilege 移除合约代付白名单  g  \' [8 M4 A) x, f6 }' H
· set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额
* `- f6 }) m2 z· set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限
0 D$ d; g- L# u9 t8 F% k) v启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。4 O5 x# X$ p6 x8 y3 R, P" I
5.1 设置代付账户及代付金额/ d5 t+ [) f7 S6 V) _
在 Conflux Studio 中访问系统合约地址% `% d& O) P+ B7 E5 \8 K! H1 ~
0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。. H4 H0 }4 E2 N! l$ u8 R
image选择 set_sponsor_for_collateral 方法,该方法有三个参数:7 Y. v, S) T& K6 I2 p, b
· contract_addr 设置代付的合约地址。填入 contract_addr4 r+ u2 D5 D9 I. s8 {. Z
· Value 设置代付金额。填入整数 40
7 \8 d, Y7 l/ P( `$ y- l, @! ?· Signer 代付账户地址。填入 sponsor_key 地址. _& }+ I; K# {" N7 T* F( @5 D! P
填好以上参数并执行运行,系统合约将为 Coin 合约设置好储存费代付账户,此时 sponsor_key 账户将会被扣除 40 CFX。
2 y# |" [5 R; A' {选择 set_sponsor_for_gas 方法,该方法有四个参数:* c1 o# O2 Y3 _% C* I
· contract_addr 设置代付的合约地址。填入 contract_addr0 y1 n. i$ Q) R3 I  R, a6 M. p
· upper_bound 设置每笔交易代付的上限。填入 1000000000000; K% M$ Q' @$ \: G
· Value 设置代付金额。填入整数 40' ]  \1 G$ K' G( a1 u/ I
· Signer 代付账户地址。填入 sponsor_key 地址
! F6 g1 G) l9 @6 u+ h$ d填好以上参数并再次执行运行,系统合约将为 Coin 合约设置好手续费代付账户,此时 sponsor_key 账户将会再次被扣除 40 CFX。
$ k( r5 n' e/ u, D" R完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。, R/ d% J- |9 ?
5.2 添加代付白名单- ~  ]; G- R3 K
在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。
7 z5 w; @5 T* K9 d7 C; a2 k2 c在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:2 r# d  i& `% A% I
· account 添加白名单的地址。填入 minter_key 地址& W; l9 @+ Y! x2 h
· Value 不填
( R) L. U% V' z2 }( K) u1 N8 D· Signer 这笔交易的签名地址。填入 minter_key 地址
& o, S0 U* N. P6 n: [+ X运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。
; ]' w: R+ Z& s/ Z5.3 代付测试. h& L$ r8 {/ v! ^
在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
5 C- V% l& M5 ^! j  {回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。, y+ N- G% v  z
可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。) P/ Z6 t1 B8 U& U* H
六、前端项目
) q8 M- I' B2 E" @' |- L0 m. [4 u前端项目源码可以前往 Conflux 前端。( K/ J$ d1 \- h5 M" ?
6.1 预备8 S6 ?- E/ M7 B6 `) q
6.1.1 下载项目并安装依赖/ d: F3 ~6 _( q7 R$ n# O
· 下载前端项目:git clone github.com/ObsidianLabs/conflux-frontend-react
4 `2 C5 ]5 G2 ]: z  c/ o****·** **使用 npm install 或者 yarn 进行项目依赖安装" B/ R$ ^9 M  h+ W9 \1 }2 U
6.1.2 Conflux Portal 的安装及配置
" `" g2 a( m* }. s2 H% \! K9 OConflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。" A: Z* m. i* {3 w& k( v
前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。; ~3 r0 e$ |0 Z
在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。
* P, c* ^  {3 ^; e1 f6.2 运行前端项目( C+ f- L9 E0 r- p/ F2 ?/ V
在运行项目之前,需要修改一些默认的环境变量。( I2 ^7 ^4 W0 r" F( z
在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。
( a( E, V0 Q5 R* [使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 localhost:3000)。
# u5 d( o2 @7 |项目运行起来后,页面将显示四个卡片信息,分别为:
- B9 T+ C; k# K$ e****·** **左上角 Conflux 网络信息模块
/ F& }: V* `7 p* m/ I****·** **右上角 Conflux Portal 模块
2 D5 X4 g; V# E- a" l* S8 w****·** **左下角 Coin 合约模块
+ u; o7 ~8 k. c) ~****·** **右下角 SponsorWhitelistControl 合约模块
) @* ]8 X0 L1 V* W9 u6.2.1 连接 Conflux Portal) e, D" z5 }7 C+ v4 A
点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。
! x  t, G4 C6 @9 ~1 X+ n6.2.2 运行 Coin 合约代币增发和代币转账操作5 Y* Z9 u8 r, h' M: H2 P' {5 b
左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。
$ `: G8 ]$ k; q/ i) X, Y****·** **代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。4 `8 \+ O% J: Y
****·** **代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
; M% N5 P9 D, q6.2.3 查看 Coin 合约中的余额
! ~! Q, e1 c  ]* W# q/ `选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。
4 E0 e3 ?4 t3 K) ~* `! S# G6.2.4 查看 Sent 事件/ a8 o2 E& b7 O% n4 O: q9 [
选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。
4 k7 c9 v" H$ }. W! c, J6.3 前端项目解析& k6 i2 t/ e4 o
项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。
2 R* z! k- O6 N9 E% {% B+ Y项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为:4 y9 s/ s/ I! ]. D
****·** **REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址* H- _& ?4 s4 J& U6 e8 S
****·** **REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址
9 P* ?) X0 J9 M6 n" ^0 \6.3.1 视图组件6 T' J) s' O! M: j5 I( F" m
视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。
% W3 @* @- W# n, \# n) \& |0 KConfluxNetwork.js6 J" D$ t" t0 J, U- [  `
负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。9 W) e2 O! |2 P' a3 p
ConfluxPortal.js
) }, P+ a: {! z+ s负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。
# u8 x$ L* N8 s9 d, X& n****·** **connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。
; [* K- l" j, P: J" {) b7 @****·** **refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息
& U+ |. O. q3 [4 p****·** **renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮
& \; ~% K* D2 r3 bConfluxContract.js8 L8 i, z5 Q# Z& ~  _. g+ U3 X, y
负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。
9 r9 O; l3 e% ^ConfluxContract.js 由三个组件组成,分别为:$ |/ r# D# Q" Z, w9 c) j" Z
****·** **ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
7 Y. P1 X, N, ]7 i/ `" C# t****·** **ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮3 F, g' ]; Y6 L- e& f' [$ c
****·** **ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单
/ `2 b: f/ g0 n! n/ L8 n! K, ?' Dlib( a$ Q4 N( I6 ?6 _1 ^
lib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13