Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、简介- g* G- ?3 v9 [( u  G
Conflux Studio 是一个帮助开发者快速开发 Conflux 智能合约的集成化开发环境。Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。" o( q* h# `0 A' \% z" d
通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。: M' R% ~, K. A/ r4 s6 @! T
二、准备工作
9 p5 F$ t. o7 R2 b; ^2.1 安装 IDE
' S" s% [% o! @  [0 ~+ K请在 GitHub 的下载页面1 Q( _0 k6 O" Q( B
(github.com/ObsidianLabs/ConfluxStudio/releases) 下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。2 R4 r. z' U0 W3 d! o2 B
正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。* H; b/ q9 p6 Z. M8 W
2.2 创建钱包4 m, ~/ ^) ?& E$ {
完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。/ W5 q- H1 g5 }) F" q, b
在 Conflux Studio 的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。
# X! |, d" M! `7 A导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。
" @8 M/ O) u7 ?% ^6 i: i4 r9 F为了顺利完成教程,首先需要创建三个钥匙对:
$ m% h3 t" B! d- I2 d" ~**· **minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对* P% Q5 V( W$ i8 d; D2 T; k
**· **receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到  b* b( {+ e" S% D% {* d
**· **sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到
+ }( Q$ J$ B$ q; n2.3 连接 Conflux 网络
2 j$ h+ p# Z6 j教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。3 l; d: ^/ }" D# A. G
切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。
8 c$ `! O& C4 l: S# {1 f2.4 申请测试 CFX
7 s' V, t6 l+ G0 h* p, K: H) l% ]* `点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。
& [. C$ W5 ^% l6 V2 s) M5 f在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。
9 r7 a1 M1 k$ h. Q  s) n3 F获取 CFX 的方式有两种方式:1 ?/ o# p) g3 A7 @
· 输入地址后点击地址栏右边的水龙头按钮,Conflux Studio 将为地址自动申请 CFX;1 w) u, Z+ o+ C0 O$ b& A. b" f% R
· 你也可以直接在浏览器中输入 wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX;7 D  R( j3 L' Q% K  v* |
使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。
* Z. J) Y  f* e/ M0 }0 Z; N# A4 A目前余额信息为:# `- L) d5 q5 o! c+ s8 n$ Y
**· **minter_key 余额 100 CFX
6 a+ |4 V+ S  s( B8 e$ G# ^**· **receiver_key 余额 0 CFX$ \" }& {! A& t8 G) E" r
**· **sponsor_key 余额 100 CFX9 [: ^5 ^+ N8 t+ m2 _7 t
**三、智能合约创建项目 **: o6 J$ T4 U! ~' O
3.1 创建项目
% p! I2 \" D: g点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。
) Q0 m5 `# W3 u1 F1 A3.2 合约代码
! l3 J( q( m0 O. n2 M/ s1 @Coin 合约是一个简单的代币合约,其中:
& D7 |: P+ [+ `1 b: m8 v2 ?; ^! ^  {**· **通过 mint 方法可以增发代币数量
! G! |* C5 _, _5 y" \7 I9 N**· **通过 send 方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息
$ I! A- U& e! f4 g- }( P# o**· **通过 balanceOf 方法可以查询到指定账户地址的代币余额' l& k% ~# J- Z0 p
**· **通过 add_privilege 方法可以为合约添加代付白名单
  y3 r% c# A* X$ g! i+ e5 [**· **通过 remove_privilege 方法可以为合约移除代付白名单) l/ V7 \& |; J3 V3 P
Conflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:6 ~. x2 C  q. v% I& S5 R( Q" u( z
// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.08 H4 ^. n: `7 i# K" R% k8 ^
pragma solidity >=0.5.0
5 b9 o  V1 a& ?8 P$ w// 导入 SponsorWhitelistControl 合约
  i4 X. l6 s) ~9 ~import "./SponsorWhitelistControl.sol";% p0 h2 m& G, k+ \( R
// 定义 Coin 的合约
/ A; t+ n; b/ G4 H5 z4 N; xcontract Coin {4 ~6 y9 |+ |: v7 |6 c
// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)* @3 w" g+ C# r
address public minter;
, J4 n' u* }# g8 S, D3 ~, M, ^. Cmapping (address => uint) private balances;
( x) a) k% g& v( @) Q1 n8 b) p// 使用 SponsorWhitelistControl 合约连接系统合约0 U5 C* S: |& f3 `8 c
SponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));* _; h% @5 C  ^) i4 N1 {9 Y& c
// 定义了 `Sent` 的事件,定义了 from / to / amount 列
0 X  r) x4 y" y. O$ w; K' wevent Sent(address from, address to, uint amount);
" \0 i+ ]5 J0 U) m0 Z5 }// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址
0 \( y% d2 w. j9 b6 d3 a; N# J# f0 Bconstructor() public {" |2 k9 |3 r: _9 z  ~
    // msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter1 H+ d7 E% P7 O. `, W( q
    minter = msg.sender;
, K: \0 G3 B6 E}5 l+ ~" z$ K, Z  A; p
// 定义 mint 方法,通过此方法来增发代币
) e% i! u4 z" Y. c: R' tfunction mint(address receiver, uint amount) public {
' r8 s9 ?) ^* W2 n/ n    require(msg.sender == minter);
0 i; D& a0 E3 _8 N8 U) ~4 w, k    require(amount }
3 ~: a) u6 i( T( ^3.3 编译及部署合约
+ j  A# L/ t* k点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。* T! b9 k5 S" {
在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。- }1 |$ S1 K# `' y# n+ M5 R6 x
在此我们选择 minter_key 作为部署合约的签名者。
5 C9 u: o# U' ]+ i2 @6 L) E点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。1 l, n( L/ [: i% {( y/ O
四、调用合约7 V* G- C  J$ ]. o9 i! q* P
点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。6 Q. N  p* @# Z* f+ }4 o% c
合约页面由三个部分组成:; u: T+ t7 i) b! Q. L- a2 F
**· **左边为合约调用区域9 T3 O8 l) H9 e0 L: t/ h
**· **中间为合约数据查询区域' h* U! F( t) f1 \' F
· 右边为事件查询区域  l' m! }8 d' L
4.1 合约调用及查询# g# I! T2 _7 |" {" k
4.1.1 增发代币$ o9 Q/ D: T* W! W9 B
点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:7 V7 [/ V% P, [6 m# d! k" |4 e
· receiver 接收代币的地址。填入 minter_key 地址
9 G  E! u/ i6 ]. `  I9 ~3 |· amount 发行的代币总数。填入整数 1000
0 ~8 F, O& v8 l3 |* N1 {· Value 选填项,具体可查看 Value 详解。填 0 或者不填% ~0 h" B) F. K+ [1 _8 X- b: |
· Signer 这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过 msg.sender 获取到这个地址。填入 minter_key 地址
1 Q3 f3 J, r4 q' H填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。+ ^: [$ O# y8 r0 h
4.1.2 查询代币余额
" O: u- l* G, ?* W+ {点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。3 O4 p. Z3 n+ s, I& t; F
4.1.3 转账代币
- s) k6 w6 E3 P/ p/ j5 Z在合约调用区域选择 send 方法,在 Parameters 中分别填入:
/ D5 w8 o% U' v3 e8 b5 D· receiver 收款人地址。填入 receiver_key 地址& w$ A( b2 l# f- p9 v, k6 e8 c  ?% H* R
· amount 转账的代币数量。填入整数 200
: j3 g# a# q/ T9 _" w· Signer 这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入 minter_key 地址,
8 G6 A' I1 D# m/ ~; j点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。
* f% t9 K* E  D( {, R' t4.1.4 Value 参数) q/ t" k4 q3 F* @4 O- K7 g) r
Conflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约除了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。
( p5 I! y3 F0 V6 R( ]6 h+ R+ _6 o后文中的代付功能将会使用到 Value 参数。' Y& M  }6 N: a: d) n0 v! _4 y
4.2 查询事件% [2 v3 \# D( ~) d: L; }
在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。) h5 |8 q2 k4 P; e" @# |/ \
五、代付功能
9 ~7 z- A5 Z3 h6 D: U8 U/ E/ @Conflux Studio 支持 Conflux 系统合约提供的代付功能。1 S( I( i) t5 N6 d- |! g6 Z
通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:
: Y5 ^$ @+ V  C5 ]# g  N/ q· add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用0 I  |2 V) |% U3 ~8 G6 T* r& r4 b
· remove_privilege 移除合约代付白名单
- N& h4 c4 z1 p- N· set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额' x/ P0 B( |7 Z+ _+ B
· set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限
3 u: j; G$ O9 a启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。' c7 j& [( M: j+ F* N
5.1 设置代付账户及代付金额$ }* _. D8 E7 z
在 Conflux Studio 中访问系统合约地址
" e" m5 U# Y1 m* M" A9 j0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。
1 K' k1 M$ K$ o; aimage选择 set_sponsor_for_collateral 方法,该方法有三个参数:3 b' a; _+ L( |1 K
· contract_addr 设置代付的合约地址。填入 contract_addr
; r. f0 t, ^# K. l· Value 设置代付金额。填入整数 40
% a0 |: D$ c/ \· Signer 代付账户地址。填入 sponsor_key 地址
! v  k" x9 ^+ g填好以上参数并执行运行,系统合约将为 Coin 合约设置好储存费代付账户,此时 sponsor_key 账户将会被扣除 40 CFX。9 ?$ t) Y, u1 r+ E' b
选择 set_sponsor_for_gas 方法,该方法有四个参数:( y% p& [' ~% k" {- l/ Z+ {
· contract_addr 设置代付的合约地址。填入 contract_addr
" [4 X3 T3 \( ]· upper_bound 设置每笔交易代付的上限。填入 10000000000000 P( N* ~9 n- v5 R2 }$ G- T
· Value 设置代付金额。填入整数 40
1 y9 a+ s1 h9 G( K9 P· Signer 代付账户地址。填入 sponsor_key 地址8 p( T" F4 ?# z# \, ?* o% M& {# z
填好以上参数并再次执行运行,系统合约将为 Coin 合约设置好手续费代付账户,此时 sponsor_key 账户将会再次被扣除 40 CFX。- t/ h2 `7 N0 f( }, M( r9 v
完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。
) W* `- ^0 j  I. T+ u& j( |/ a5.2 添加代付白名单
. N- m, ^2 G& M6 e; g* [+ J) Z9 Y在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。
% D* D& D# B) t在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:9 c* [. }/ S* P" O5 d" C1 T7 |0 u+ z  R
· account 添加白名单的地址。填入 minter_key 地址  t) M. J( f% \1 r7 m( L
· Value 不填
* ]6 H! l& C- s+ Z" [0 I3 h· Signer 这笔交易的签名地址。填入 minter_key 地址
/ p" d6 n4 b9 x$ |5 J' T( }) B, |运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。1 M; b5 d. ]3 x8 S& ~& c
5.3 代付测试
, D5 u& V* _$ o4 y在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
& H5 J6 K7 ~& W回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。0 ~" s2 o# ~* `8 j2 w, s' Z
可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。
: v6 U: h! _8 [# V4 F" K7 q5 c六、前端项目
# ]" S% ^8 b' X前端项目源码可以前往 Conflux 前端。* _9 w" \# H8 d% i$ ]! z; e
6.1 预备) f; \) \) q0 x% u* U
6.1.1 下载项目并安装依赖
. D0 \! ]' ^" C" z5 i. ~2 p0 M& w· 下载前端项目:git clone github.com/ObsidianLabs/conflux-frontend-react8 J1 h$ c! o2 D, t7 t1 N1 n: q' \
****·** **使用 npm install 或者 yarn 进行项目依赖安装1 e- P2 `# _' p1 t+ L
6.1.2 Conflux Portal 的安装及配置
1 }, s/ Z) a$ hConflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。
- y0 K4 j3 [& W1 }% d! P- t前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。
# S# U& |- s7 ^  ]% [8 m在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。
4 c  S2 p/ o1 H* N! \- f6.2 运行前端项目) a4 ^! f7 b6 f6 e' |) A
在运行项目之前,需要修改一些默认的环境变量。  O6 X8 |8 V" z# W
在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。1 M0 g' j2 ~. K8 J& f. t- r( [+ x. n
使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 localhost:3000)。- v1 R6 i& I' [) M9 b+ t* N
项目运行起来后,页面将显示四个卡片信息,分别为:
  h0 w1 L4 a8 Q5 s+ q( i****·** **左上角 Conflux 网络信息模块
7 L1 o/ e8 D: A8 n% _****·** **右上角 Conflux Portal 模块
, q0 N& \/ @9 \& ~! B****·** **左下角 Coin 合约模块: r7 g2 x6 [" |! J; U- A) x
****·** **右下角 SponsorWhitelistControl 合约模块
" ~" O% g; C! r7 R6.2.1 连接 Conflux Portal
( x  {0 A; K) |点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。
7 M9 J  M4 T+ k- K* S+ X' W6.2.2 运行 Coin 合约代币增发和代币转账操作, V- G) w/ I, u  f! \
左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。
2 _& k& v% ?. L/ V) A****·** **代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
9 ?* O: u1 S, Q  K) f****·** **代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
: d6 n8 F7 F5 P2 k3 }0 g6.2.3 查看 Coin 合约中的余额9 ]) o+ E0 Z3 ~2 e
选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。
3 h% r+ h2 A- h4 B, X9 d8 x( @6.2.4 查看 Sent 事件: U. H* I: ~! q: p8 K
选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。
# w% i: Q8 ^/ T6.3 前端项目解析, K3 b1 r% {7 j. u; G
项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。. ^0 X2 d2 F2 ]: n7 b# Z
项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为:
7 Q8 C! n$ |7 z) x5 s3 s****·** **REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址
- V3 D! x1 Y1 N' a/ F( A****·** **REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址% Z3 _% v, F3 B/ X5 W; S
6.3.1 视图组件2 w+ W( L( w, ]$ \
视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。
" A5 F9 G7 Z( N% h- Q4 WConfluxNetwork.js+ y% J+ _' c) T
负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。
9 a  n$ Z0 n8 DConfluxPortal.js
% B5 I! X+ [+ R! n5 b  i; [负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。
4 u9 Y8 W  K/ M7 D* ?/ E****·** **connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。
+ e+ b$ C8 }! y****·** **refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息
5 Y8 W; q# I' B9 _; J****·** **renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮+ C' i. ?, e* C3 i; P' t1 ^
ConfluxContract.js/ h) ]% ^8 f0 r+ F: |% ?
负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。. f! v* A8 k0 ^0 W- Q* T4 s" s
ConfluxContract.js 由三个组件组成,分别为:, \' h* Y* p% Z7 V6 p9 e
****·** **ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果9 L7 N/ h* S8 N; ]# [$ s, g8 s- S
****·** **ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮
6 h- N1 S9 W8 Q0 {/ E9 ^****·** **ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单
6 z* c$ `) Y& F& d0 F" Slib
- w2 t9 x# y8 j# K, M  M: S6 clib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13