Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、简介
( e( e& c* e% r& JConflux Studio 是一个帮助开发者快速开发 Conflux 智能合约的集成化开发环境。Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。
4 s$ B8 o. m* E1 D通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。8 j% s0 X) F4 ?2 _! T
二、准备工作
  S3 |# W& b! {* y2.1 安装 IDE; X/ u6 m: c  T
请在 GitHub 的下载页面
4 f* t6 A1 F' s, e* Z8 Z(github.com/ObsidianLabs/ConfluxStudio/releases) 下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。1 V! X/ V; y3 ], ^
正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。
5 {/ f' I$ p  K2.2 创建钱包& V# S! m1 u, |
完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。" U9 `4 _1 z% D# V7 l2 k
在 Conflux Studio 的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。
  }9 ?* C" f/ s( f9 C导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。  v2 ]1 P0 Y# j! x) a* F0 l
为了顺利完成教程,首先需要创建三个钥匙对:
0 f2 ^. h# B4 w: c5 d+ {% Q2 d. n**· **minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对2 D* W/ p* {  w2 d. Z1 H  W0 p
**· **receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到
$ B. D1 Z+ L7 s* \6 [**· **sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到
6 O) d7 f9 v$ O+ H# V( N( Z2.3 连接 Conflux 网络- k5 z" a4 Q+ r: v( b: j! W
教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。
' y" ?& E& D$ U切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。$ U; P$ |0 E1 t$ m7 B3 \  \2 w
2.4 申请测试 CFX
7 ~0 U% a/ A3 T2 y3 D) h! h点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。3 k$ }# v# v' e! u0 A
在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。
! `/ V, K2 \$ F获取 CFX 的方式有两种方式:7 z1 ^6 l4 c/ [( u. _# n
· 输入地址后点击地址栏右边的水龙头按钮,Conflux Studio 将为地址自动申请 CFX;
& R( p3 V) b9 u  H3 P& }· 你也可以直接在浏览器中输入 wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX;) |1 i" F6 g6 s/ Y% o7 g
使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。4 E4 c- E0 A2 E9 S! Q
目前余额信息为:
" u9 J1 U& Q* N7 E0 @$ P/ W$ s) S/ z**· **minter_key 余额 100 CFX
" h0 R: `8 }) }) A3 Q4 Q**· **receiver_key 余额 0 CFX5 M' O2 `: I8 ~  J  N6 \2 L. V
**· **sponsor_key 余额 100 CFX3 e" @/ E* a7 S3 S8 E7 ?$ H/ i
**三、智能合约创建项目 **
. |3 ~8 Z: O9 x$ o3.1 创建项目
* ^+ u: c6 f+ A点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。! F- E7 e) T$ Z0 l3 g
3.2 合约代码  h  o- d8 _9 ?  A  ~6 Y* q
Coin 合约是一个简单的代币合约,其中:
$ t3 g9 m# Q& w' R- _**· **通过 mint 方法可以增发代币数量
( Y3 y3 y" q* a4 X0 Q**· **通过 send 方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息
. Q) Z" |5 ^# K& r+ w**· **通过 balanceOf 方法可以查询到指定账户地址的代币余额# _; h9 p4 G* K* y% _9 b
**· **通过 add_privilege 方法可以为合约添加代付白名单
$ s* B0 \, G1 s( P- ~2 e* |' M+ V% ^& x2 [5 O**· **通过 remove_privilege 方法可以为合约移除代付白名单
* }; y2 |; P/ R6 t4 @: \! a8 ?; jConflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:4 a3 R- q% t% q" \7 w: i; o* m, A
// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.0
! [( X9 I4 r7 C/ c! X2 hpragma solidity >=0.5.0
2 r7 v, s8 Y4 l. Y// 导入 SponsorWhitelistControl 合约; z$ j0 m0 v; g" E
import "./SponsorWhitelistControl.sol";
3 V# X+ I9 _7 ?, O# w// 定义 Coin 的合约6 v) |, z; K& |2 J
contract Coin {
" l: a/ p. u" F6 H- y// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)% J* _/ `3 `. y$ h' e" p
address public minter;
% W6 [) K- s0 l; N( tmapping (address => uint) private balances;
2 r3 ~. G( |) Y( J% g2 G! q// 使用 SponsorWhitelistControl 合约连接系统合约  d1 Y. M* w8 B' |2 B
SponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));+ o! ?* c) d6 H$ _% J
// 定义了 `Sent` 的事件,定义了 from / to / amount 列8 c4 e" M3 x% ^! n7 n' x& ?7 Y
event Sent(address from, address to, uint amount);
$ _" |! d/ Q8 d% Z* q) u// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址
+ F. w) g, r7 [constructor() public {! X+ x9 J9 {/ z% |; |$ r2 V  |) C
    // msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter
* V& S, A) e+ T, K3 e: a    minter = msg.sender;' C' h% ]7 m; }$ v
}
4 G" T! \! [7 Z) F# G0 u// 定义 mint 方法,通过此方法来增发代币3 V! b  X1 \$ s- x2 l4 v! z
function mint(address receiver, uint amount) public {
$ I$ o$ m8 N5 a( |6 a    require(msg.sender == minter);; Q4 s% S! g3 i8 ^) _2 `
    require(amount }
. J4 D% f; @! T# F& j; L3.3 编译及部署合约4 w& m' e$ t1 `5 k0 x
点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。" K' m& M* e* w( H; r
在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。6 A7 h, p9 J7 O
在此我们选择 minter_key 作为部署合约的签名者。
$ T" c# K* K- u8 x  c4 V3 K: n点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。( s8 O; r: U2 `6 |+ ^$ X7 m
四、调用合约, z, v! O5 @, O
点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。
; z: s: q. R5 T1 V0 p合约页面由三个部分组成:
7 B- G. J5 u3 u. q; y7 L, c2 C0 L**· **左边为合约调用区域
# Z$ E' w" C( u& H9 A7 @**· **中间为合约数据查询区域; t% ~. {1 `) B$ G% E2 X: O* P# Y
· 右边为事件查询区域' n: J3 U" }9 ^3 P0 ~8 G4 V; C6 n
4.1 合约调用及查询
% @! r7 ~# t9 g+ h" p% X, {4.1.1 增发代币2 s1 {) d, X$ h% y# \, b% y
点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:) H3 k+ F5 e# O$ S( h* l: j) y
· receiver 接收代币的地址。填入 minter_key 地址
+ q- Q' Y+ h5 _1 i· amount 发行的代币总数。填入整数 10005 n3 P  W/ e9 q) m6 j- ~; x4 M  K
· Value 选填项,具体可查看 Value 详解。填 0 或者不填
4 b! |/ L# s/ s/ S2 b+ V4 R. [· Signer 这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过 msg.sender 获取到这个地址。填入 minter_key 地址) T. d& V& q+ Z% i' M. a6 q; b! q
填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。# A/ ?8 D% I; Q- {6 Z! O2 R
4.1.2 查询代币余额
; {1 u: o1 v4 R0 b) e+ U点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。
/ V# m$ G2 W' d/ S$ Z' A4.1.3 转账代币) g( L$ E; k. e
在合约调用区域选择 send 方法,在 Parameters 中分别填入:
& g1 L: p( i3 ]9 M( `8 O; B· receiver 收款人地址。填入 receiver_key 地址7 E1 i4 y+ N, K; J
· amount 转账的代币数量。填入整数 2008 r  b8 U& {( }$ W; H6 {
· Signer 这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入 minter_key 地址,
* ^. O" v$ k5 J$ q( G. T点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。
! I3 v( `' t7 M/ h$ I: m9 n4.1.4 Value 参数" |6 H: b0 s. u* c8 Q8 d; b
Conflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约除了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。
: T6 B  q8 t" t5 r6 U/ H' n, p后文中的代付功能将会使用到 Value 参数。  I% t" O6 X; ]2 b2 n  ?
4.2 查询事件8 v" N$ A" }/ h
在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。5 T% d% C) ?- I8 b; U4 w: a7 `  k
五、代付功能
2 g1 _! U( L& K  }) r: }* KConflux Studio 支持 Conflux 系统合约提供的代付功能。
4 Y  n- Z$ ^- a# e通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:. r* K& R  R& z7 R
· add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用
8 T& O: }+ f; Y: k& c) w9 }  v· remove_privilege 移除合约代付白名单
) V+ Y) `* n) e$ h· set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额
. G) O5 {3 N# ?) {) J· set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限% [0 _, [& [* U" ?' j3 z
启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。, K- o8 O5 }# t
5.1 设置代付账户及代付金额3 Y7 V6 Q/ D1 M( B& Z
在 Conflux Studio 中访问系统合约地址
, M* d/ Y! A4 [( {+ i8 K0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。4 z0 O3 T- m# v( }2 f! U3 f% |; t5 @
image选择 set_sponsor_for_collateral 方法,该方法有三个参数:9 J1 R4 f" F+ @, e9 g
· contract_addr 设置代付的合约地址。填入 contract_addr
8 J% y/ S& h0 v# b; O# U9 j· Value 设置代付金额。填入整数 40
$ Z3 _: Y" V; ?+ A  ]* D2 h· Signer 代付账户地址。填入 sponsor_key 地址! A: D+ D  d2 h& L7 y  f" J+ ]
填好以上参数并执行运行,系统合约将为 Coin 合约设置好储存费代付账户,此时 sponsor_key 账户将会被扣除 40 CFX。% y) Y  n; a5 T- x
选择 set_sponsor_for_gas 方法,该方法有四个参数:/ l% |9 l8 `$ y4 k1 ~. K  S
· contract_addr 设置代付的合约地址。填入 contract_addr
# z/ P2 z. T7 v& \% U+ @· upper_bound 设置每笔交易代付的上限。填入 1000000000000
+ M' Y/ `% z  d9 X3 ^· Value 设置代付金额。填入整数 40
4 g) r  M7 n2 l, Y! s· Signer 代付账户地址。填入 sponsor_key 地址
2 q' |- E, X3 E7 {- G填好以上参数并再次执行运行,系统合约将为 Coin 合约设置好手续费代付账户,此时 sponsor_key 账户将会再次被扣除 40 CFX。
5 R' x0 z  W* v. i9 ^3 h完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。9 j6 ~" S7 a" h' t, c
5.2 添加代付白名单2 }2 E# {+ M- c" U9 |1 I
在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。5 t9 c* _8 P, ]0 I& ?7 i5 h. o
在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:
" u4 F7 y; H9 T: g. d1 M· account 添加白名单的地址。填入 minter_key 地址; m: t4 Z9 x6 U  l
· Value 不填; u. f8 G, U$ T9 x
· Signer 这笔交易的签名地址。填入 minter_key 地址- n9 h8 \( [9 I) ]6 V+ G/ i
运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。
: K/ @4 z; |! d* j* B5.3 代付测试* d* E1 |) f1 l# G- v  q
在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
# k" O# F. j8 p3 `3 i# @回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。8 p0 r$ ]% C" i0 K# F$ ?
可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。, Y! K# o: O9 P9 ?! g% g& d
六、前端项目
$ V- t7 Y; T: Q; |' z0 `# H- J8 W前端项目源码可以前往 Conflux 前端。
5 s/ H6 B6 c4 G, u# x" Z6.1 预备
, p4 E0 z/ ?4 s' Y* I$ u. T) u& Z6.1.1 下载项目并安装依赖1 {/ s  e$ \4 W, j$ E
· 下载前端项目:git clone github.com/ObsidianLabs/conflux-frontend-react
3 b- V' ]0 A: e! N2 j****·** **使用 npm install 或者 yarn 进行项目依赖安装- \: N1 v! m8 V! [
6.1.2 Conflux Portal 的安装及配置, O: I$ n. |  A
Conflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。* d1 `) c) H, j+ N# N0 ~7 m
前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。
4 P3 D3 F4 K2 S9 C1 s3 \) m! O在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。8 `  }/ r% ^5 k$ F
6.2 运行前端项目. U) e! p- H% v" m
在运行项目之前,需要修改一些默认的环境变量。
+ b) U' L. _( l9 C1 z9 b& t在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。
: l- z& d+ u6 M8 E" h使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 localhost:3000)。6 d3 H$ i: l- y# x, z( S2 j# c  f
项目运行起来后,页面将显示四个卡片信息,分别为:9 M. N  C; i. H" ?* e% |7 z$ x: Q& \4 G
****·** **左上角 Conflux 网络信息模块9 n* L6 v' l; Q- l  M1 v
****·** **右上角 Conflux Portal 模块! C. B3 U& x. {5 v2 i% F- w
****·** **左下角 Coin 合约模块, k# s: b8 V2 ]
****·** **右下角 SponsorWhitelistControl 合约模块' v* d% a& \  c, C1 S
6.2.1 连接 Conflux Portal8 p6 p% Q& P5 |% {1 ?8 `. ]
点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。) y" N; i* T- f. l, f  }) \/ a
6.2.2 运行 Coin 合约代币增发和代币转账操作
' V, Q% s. S$ x左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。' ~* Z' Y% t& w8 d! K, D
****·** **代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。( ]$ g0 J1 ^! P. b- P3 [) n/ {. Q
****·** **代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
/ R/ E+ G) C) Y. i. K3 }6 w6.2.3 查看 Coin 合约中的余额( g: L5 }$ @& W" {- C7 R9 r2 F
选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。" R4 ]0 u! }4 m: j$ C
6.2.4 查看 Sent 事件
5 N9 N/ m% M" H+ f+ L( Y" t2 M2 p选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。
0 r7 p; m5 ~0 c. O2 o/ i6.3 前端项目解析: }3 V4 |$ R; Z! Y
项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。
  h6 E; {) @- S) m+ ^: P4 \8 ]项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为:2 e+ @$ ]# X0 F: Y  {; `
****·** **REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址
4 F/ v2 f# i% B0 X( y, q! M/ ^****·** **REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址
2 e- _; Z# c5 c6.3.1 视图组件
; H8 u' m6 F4 L  x. R: }视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。
. F/ F7 P0 v) BConfluxNetwork.js
' `2 Z2 j6 {, d! _" N$ V/ w: d* Q负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。) J. e: }' I! V
ConfluxPortal.js- g9 F; B  L. e- O7 W1 |
负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。/ Y& a5 n) d0 o  p- ]
****·** **connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。
4 v: k8 K: M- z+ v2 n****·** **refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息* p! \" ~+ C* ^3 b4 C
****·** **renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮
. L- j7 G/ Q& ]% [0 N. W  R9 NConfluxContract.js$ o( K" ^' \: U' M
负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。: Q! {5 C! B, W3 F8 V+ p7 q
ConfluxContract.js 由三个组件组成,分别为:- |  v: u: b& l
****·** **ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
& U' P  g: Z. t* m****·** **ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮
- V8 o0 D/ Q4 x****·** **ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单. N0 P6 y9 D% [
lib! I. T9 z  N' @6 c& x
lib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13