Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、简介
, }) c0 [9 b  ?+ h- K/ x9 z/ XConflux Studio 是一个帮助开发者快速开发 Conflux 智能合约的集成化开发环境。Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。
5 S$ M" p: O4 T6 a' e; g通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。
" ?! y7 s; P1 V/ J3 z& f' ^二、准备工作
! m/ ?0 n5 y( ^* m  _4 |2.1 安装 IDE
$ b1 b+ i0 ^% f! {- V" G' v1 U请在 GitHub 的下载页面
: \, ~+ A% ~, e' P, d(github.com/ObsidianLabs/ConfluxStudio/releases) 下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。
7 q6 m8 [2 }+ S正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。( N) w1 s4 V! B. n7 P9 T2 P2 k
2.2 创建钱包
) D/ Y: Y, Q  S/ g' R完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。
/ q! j: C+ Y# E6 I! D在 Conflux Studio 的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。4 \3 ]7 Y" e# T/ [- O
导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。
4 ]/ c$ F% L  w+ F+ J1 n为了顺利完成教程,首先需要创建三个钥匙对:) X4 h4 C$ l" \' ]
**· **minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对
1 c; E8 c7 M7 D- Q' Q**· **receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到
6 N% a$ }9 H8 S5 B5 k5 ]**· **sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到
5 E2 r- r* C; B. u2.3 连接 Conflux 网络2 z; L& s. b& k7 g; z  E
教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。0 C( w+ |  p+ a0 A: h/ S4 i
切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。# d4 b6 o7 C7 i- V% L& ~8 y' q
2.4 申请测试 CFX
. p$ U; \  G5 y  `  e点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。
) }; N$ x# g* N( N$ K在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。. j: q- }3 i1 g+ I  e1 C* ]
获取 CFX 的方式有两种方式:# q. z! D! X9 F/ f0 w2 O7 E' R7 T
· 输入地址后点击地址栏右边的水龙头按钮,Conflux Studio 将为地址自动申请 CFX;: L7 W+ g; X: j3 ?* T. k! X% s
· 你也可以直接在浏览器中输入 wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX;; ~( U! E4 A" V0 w4 G7 ^
使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。4 l1 m# x) k3 x/ Y0 P
目前余额信息为:
% i, ]  @3 g5 e+ o, v: n0 J**· **minter_key 余额 100 CFX
* j$ p4 i. Y  B' b**· **receiver_key 余额 0 CFX
% B; K" H0 h7 Y1 p  o**· **sponsor_key 余额 100 CFX
  k/ w1 w. `% p( W5 W! E, G8 v0 `**三、智能合约创建项目 **; g3 r/ ?, L5 n* @
3.1 创建项目! F; ~1 ?& e* [
点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。" |: D9 G) z' q* D- g
3.2 合约代码: \% y& O+ ~. d- {  V) v
Coin 合约是一个简单的代币合约,其中:1 [4 n! q! w. a3 l. U
**· **通过 mint 方法可以增发代币数量4 Q, r3 E! k6 o% l  j1 Q
**· **通过 send 方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息
5 P/ N; J5 T% Z9 r; `# ]% [**· **通过 balanceOf 方法可以查询到指定账户地址的代币余额0 R; R  Q/ j9 V% a0 k
**· **通过 add_privilege 方法可以为合约添加代付白名单
1 k" H3 r( ]4 I**· **通过 remove_privilege 方法可以为合约移除代付白名单( q% w# R! S4 v: [2 I
Conflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:7 v  t7 m+ b: P7 o) H
// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.0
8 e% {: y, B2 c9 }$ b+ X; zpragma solidity >=0.5.0 ! ]2 h* u3 [5 b3 x) w' d
// 导入 SponsorWhitelistControl 合约
- F) ?" Q; J4 Y8 ]) Z6 A. vimport "./SponsorWhitelistControl.sol";- M9 O6 o& ^; R3 d9 x# V! c4 D
// 定义 Coin 的合约/ S- H- |7 k) R( n. y
contract Coin {1 n; A3 i% V( F6 }
// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)
/ H1 ^! G# q2 w. [1 @5 ]address public minter;: d5 X0 }6 b0 S- v$ G
mapping (address => uint) private balances;
2 ?0 Y+ I  ^( X. A6 `// 使用 SponsorWhitelistControl 合约连接系统合约7 `3 o8 x% D: G8 Y3 e" M! Z4 T
SponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));
5 ?8 n6 |: ]' Q' T3 w: O" e3 r9 r- I// 定义了 `Sent` 的事件,定义了 from / to / amount 列
& P! w! K2 X) J) z0 Y* @8 [( Cevent Sent(address from, address to, uint amount);
! s% y- b% n% X9 ^  `: V. E// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址
6 V6 W: d* _' R. C/ d8 Y9 y) y% a4 A3 gconstructor() public {* T2 X4 l8 z# p  R+ H
    // msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter  q1 H+ W& }" |+ r* T
    minter = msg.sender;- [" }4 A0 r' @6 v! A. v- ]; E
}
0 ]: O7 I/ t: d8 E' p, I1 b  J// 定义 mint 方法,通过此方法来增发代币% C; [" U7 }5 H  C$ ~6 G
function mint(address receiver, uint amount) public {
& D7 _8 e0 M2 h% N; L* X' {; q. G    require(msg.sender == minter);
( {# s' x+ y+ m, a5 @2 ?1 z    require(amount }; w( E% v( S0 l; W' q! C& F1 R
3.3 编译及部署合约
* L: v( w8 V0 _) v. H% Q' w. ]点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。
6 V5 x+ p5 ^  ^* o- T, N8 L- H在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。, h9 g  C; V  g/ U9 s1 z
在此我们选择 minter_key 作为部署合约的签名者。
$ H: H( v: x0 s, v( p  H* p2 W( p点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。, p& |4 m; `5 J* j" j- g* j' c6 G; C
四、调用合约
5 ]% R2 _% C# B# f" B1 g5 O点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。
# [4 _4 ^2 B' _- r4 R9 y' C: T合约页面由三个部分组成:: h' i) B0 @/ R
**· **左边为合约调用区域
% B2 j" P' M. z+ |" ^2 H**· **中间为合约数据查询区域
) V6 c$ L! s, X! Q· 右边为事件查询区域  a+ f! N0 b' w# w' K" k" G( i
4.1 合约调用及查询  M# @1 g& C( \  z! P( f
4.1.1 增发代币" d: R0 X  k# j( r, r
点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:. D4 @% B; o& e6 Z/ J9 u! E' i, n( z
· receiver 接收代币的地址。填入 minter_key 地址6 J2 s% v( P9 ?1 e
· amount 发行的代币总数。填入整数 1000
# M* I* H9 L/ \, T· Value 选填项,具体可查看 Value 详解。填 0 或者不填
# n# p) U( b1 V* C, k/ O+ e· Signer 这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过 msg.sender 获取到这个地址。填入 minter_key 地址
& b: E1 G" ~3 U7 z, a5 I. u0 i填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。5 A# t8 }$ j9 y, y1 i) G- y2 [% c
4.1.2 查询代币余额
+ X( G: p* v( n. C5 T" U# }5 I点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。- Z) p, v% @( w& b
4.1.3 转账代币
* ?6 G6 O4 H! W+ j) S. B1 [8 {. l' k在合约调用区域选择 send 方法,在 Parameters 中分别填入:. ?; P1 O! q% B% _+ r$ C
· receiver 收款人地址。填入 receiver_key 地址, E' ?& X, [: l# g
· amount 转账的代币数量。填入整数 2000 v+ f% n& b3 {+ s( z( c1 q
· Signer 这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入 minter_key 地址,
/ M# G) `( N9 E! L1 H4 n点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。7 D5 R6 }/ d/ B. I* T
4.1.4 Value 参数& u5 e1 K5 `+ ^/ h* ?! b
Conflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约除了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。* H8 u- E5 Y7 Q- Z. J1 m
后文中的代付功能将会使用到 Value 参数。
& C! b0 R/ i9 A% e$ @! e2 Q5 R4.2 查询事件- F, E  R6 [4 W- a8 V
在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。( J% W! s4 R  Y4 @& D
五、代付功能
* a( \. ]" R/ K8 yConflux Studio 支持 Conflux 系统合约提供的代付功能。
  @# U9 l% Z1 }: Z4 f通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:% w" P$ p. i! t; a  V# v' J0 p* g$ Q
· add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用
9 j- D% Q; F- [) w9 B* h· remove_privilege 移除合约代付白名单  @! M) N0 o; m! l+ e& E8 e+ {4 \' a
· set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额8 H# W: g2 M! H2 F; J5 v; V
· set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限
6 g* u. |/ }8 y( K启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。
6 i8 Q$ K* Q/ h5.1 设置代付账户及代付金额
, h8 X) ~' j$ g! |: q/ R在 Conflux Studio 中访问系统合约地址
8 {  H9 D; C' P' k; L; c" I6 ?0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。
1 ^- Q% h! {( w0 m5 `. S8 J3 z9 ?) c! Ximage选择 set_sponsor_for_collateral 方法,该方法有三个参数:
4 Y5 m- @- ?4 c1 I: x· contract_addr 设置代付的合约地址。填入 contract_addr+ Y- h1 V: \0 h8 b9 Q6 r
· Value 设置代付金额。填入整数 40) ?. ^$ s4 F, m0 o& H
· Signer 代付账户地址。填入 sponsor_key 地址
9 q3 K% k; x+ Y填好以上参数并执行运行,系统合约将为 Coin 合约设置好储存费代付账户,此时 sponsor_key 账户将会被扣除 40 CFX。
+ R) c# V9 X$ R0 e选择 set_sponsor_for_gas 方法,该方法有四个参数:
  i9 t# H, D$ [. g7 @0 s% w: t6 z· contract_addr 设置代付的合约地址。填入 contract_addr8 m4 I8 J& p' @
· upper_bound 设置每笔交易代付的上限。填入 1000000000000+ }7 m8 O4 V6 U' ~% t
· Value 设置代付金额。填入整数 40/ p9 {1 M  ]4 e3 \2 e, P! ?3 W
· Signer 代付账户地址。填入 sponsor_key 地址
  v5 p( @+ G5 o7 v填好以上参数并再次执行运行,系统合约将为 Coin 合约设置好手续费代付账户,此时 sponsor_key 账户将会再次被扣除 40 CFX。
( D0 u- Y6 D9 F( o* N) O! p) C完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。
* l; G3 K( X4 C/ @% t5.2 添加代付白名单+ ]' d, t8 h/ F4 b5 {1 \
在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。- p' C' ^& \1 g, s3 K
在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:
  n/ q8 \( a" ^# w" ]+ e3 r9 s· account 添加白名单的地址。填入 minter_key 地址
, _% b# o# p0 J8 }· Value 不填  W& n  O) Y) T) e$ ?* d0 H3 m
· Signer 这笔交易的签名地址。填入 minter_key 地址; z. Y0 y) b% c7 W: r2 G
运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。
0 j  `3 u5 M8 k2 V7 p/ _6 h% N5.3 代付测试$ P+ d( c  @  f) r
在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
) M$ f. u/ O6 r% s# w回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。2 y6 o3 p" Y( W) d; }
可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。
& _: A; n7 Y) E; k& ]六、前端项目7 B% j5 p$ k- i0 x. z, J
前端项目源码可以前往 Conflux 前端。
( \6 \9 a1 T- f" \6.1 预备
+ ]7 u( I+ {7 C3 f3 N6.1.1 下载项目并安装依赖- ]+ M9 q8 g0 F6 z5 j& I
· 下载前端项目:git clone github.com/ObsidianLabs/conflux-frontend-react
6 A/ C8 k, M, c; z2 x8 g****·** **使用 npm install 或者 yarn 进行项目依赖安装- o) M3 c& C4 _/ W& x" q
6.1.2 Conflux Portal 的安装及配置5 N# B. \7 Y% z$ K9 n# L- _0 Z
Conflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。
4 e7 y# g8 S3 q0 a3 X1 Z前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。! z4 z) M/ I, n  z0 ?4 J5 _
在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。
: a7 L5 n# o  J* v6.2 运行前端项目
7 M4 u+ [- k4 i+ K8 C' Y在运行项目之前,需要修改一些默认的环境变量。
2 W7 K( V2 l! m在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。
+ K# s- K; v" o; M使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 localhost:3000)。
* {2 ~) i, ~3 J9 |5 o项目运行起来后,页面将显示四个卡片信息,分别为:
3 J2 G3 H3 T" H0 o- P****·** **左上角 Conflux 网络信息模块  L# ^% I' C( p: e) U3 B
****·** **右上角 Conflux Portal 模块. O3 q- i) A. ~1 `$ c3 a
****·** **左下角 Coin 合约模块" X( s# Z& C  A- A
****·** **右下角 SponsorWhitelistControl 合约模块+ z! L) \5 {+ m2 x6 z1 [2 d
6.2.1 连接 Conflux Portal
& Y" e: w8 S  s8 @& \点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。
. Y. R4 h, j3 t3 W& N6.2.2 运行 Coin 合约代币增发和代币转账操作
8 G/ C. f2 ?9 C; d/ z, e  x左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。9 x4 N7 [' h; |; A) A
****·** **代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
, u$ ?1 B2 y: }. y  P- m" ?****·** **代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
: X. Y! m7 {8 D5 ~1 `6.2.3 查看 Coin 合约中的余额% g! e, d9 ^0 F0 A. r0 G
选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。
) P/ `/ t0 W& d! D) P3 \6.2.4 查看 Sent 事件' [6 V; D. @4 t
选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。  t( y) J. A1 u$ n( J2 m
6.3 前端项目解析
! {1 A0 g  i* F; S7 p项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。4 J2 m" P+ I0 X5 U
项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为:
8 X8 R3 h1 h- z& `****·** **REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址
2 \2 w0 @2 x7 X9 \  U****·** **REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址
2 A. r% b# v6 U. ?: V5 p4 R+ r6.3.1 视图组件
2 S/ |! \! v$ ^: w4 K; j# v视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。
0 K# `3 q: [" }* ?5 v& KConfluxNetwork.js
: B* O+ P+ j* q. J负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。5 G8 ]1 F7 u+ _
ConfluxPortal.js# ]% i6 }. O. u6 Q# |  V; t( c
负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。- p+ j3 ]  u7 j- z! U
****·** **connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。$ x3 _; T* y0 B! G8 I. A2 g
****·** **refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息
- m" @+ n& P5 N$ K. Z3 h****·** **renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮
! q) L7 }* A+ _5 p1 C% l/ ?8 K0 SConfluxContract.js4 u  g6 ~7 F# j& F1 Z2 A- Z. v8 z2 d
负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。" C. h4 q, E0 h$ V+ _% {6 y( {6 P% Y$ j
ConfluxContract.js 由三个组件组成,分别为:
' U8 q2 n2 K" e# w; Q9 Y****·** **ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
3 {5 ]! a$ g" X7 A2 P****·** **ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮
: L0 _$ @& [: E9 A****·** **ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单
" r# y) G/ R- D6 b; }4 ylib6 g* _; Y# ~$ Z3 u3 t& {( u* c
lib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13