Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、简介" w1 V& j8 F1 |: ^, C% V) U+ n
Conflux Studio 是一个帮助开发者快速开发 Conflux 智能合约的集成化开发环境。Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。1 D  ]* ~9 y7 Q. {
通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。
5 E0 ?$ H% f- {$ R  c二、准备工作
& H! G4 M2 `/ e; g7 F2.1 安装 IDE% Y8 _4 R6 c4 {$ t+ V- [4 }
请在 GitHub 的下载页面# T8 g( k/ S: k3 \- G
(github.com/ObsidianLabs/ConfluxStudio/releases) 下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。
. C+ i8 C/ P" c7 O' u正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。
; h% m) P1 A5 A2 g9 u! v7 k2.2 创建钱包9 p/ T5 J) k2 }* ^4 W3 y* |4 c
完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。! {4 N4 Y7 |5 s6 P+ l: [( v
在 Conflux Studio 的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。. [: O6 v# c0 U4 {& H7 l9 N4 u" c4 Y
导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。
8 c9 F- H2 S0 H/ J为了顺利完成教程,首先需要创建三个钥匙对:6 f! C/ I9 h3 s4 H1 v; U
**· **minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对. W; S) e% _. \, M
**· **receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到
: ], Y+ a: l6 Y2 g! }3 ~**· **sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到
( Z' b5 U7 G8 M8 |5 f) ~2.3 连接 Conflux 网络* d7 M( D4 n# g4 Y! Q4 `* `; U' n" Q; e
教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。
) s$ o& T5 _! C9 Y; w4 _8 S切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。
) E6 p0 D/ X) x6 p- j% K0 C2.4 申请测试 CFX
7 Z7 P5 Y2 [5 ~. r* g点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。  |, {7 M9 ~9 ?- z: Z( W/ V
在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。. ]% g- P* H6 s9 X% J
获取 CFX 的方式有两种方式:: [# s) L' z. m) a) h/ W
· 输入地址后点击地址栏右边的水龙头按钮,Conflux Studio 将为地址自动申请 CFX;
1 ~3 d" h( V9 \) K% |: I8 y· 你也可以直接在浏览器中输入 wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX;
4 v' y0 t. z- M3 J3 C2 ]  x使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。
! ?) o  v; C0 r5 I8 h/ T  \目前余额信息为:, l1 U2 J2 X* A  n6 C
**· **minter_key 余额 100 CFX
8 j/ A2 a" }5 a5 T**· **receiver_key 余额 0 CFX
. \1 k* f3 O. c8 i7 f. c0 }**· **sponsor_key 余额 100 CFX! F1 I1 O5 e+ [/ D; o
**三、智能合约创建项目 **' @" E: P) y! N( t$ @
3.1 创建项目
% k6 s' }% g$ m- o0 _点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。: ~) m: h1 e7 r6 `8 |
3.2 合约代码! Y4 r; X* r. o0 ]
Coin 合约是一个简单的代币合约,其中:
" o$ D" o0 g3 h! E1 E/ ^. t: b8 E' X**· **通过 mint 方法可以增发代币数量
7 _% _4 \, Y$ L9 H**· **通过 send 方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息$ @7 p) h8 E9 f8 G! q; o
**· **通过 balanceOf 方法可以查询到指定账户地址的代币余额
) Y- s$ w. ~! L8 C6 h/ M: V4 e**· **通过 add_privilege 方法可以为合约添加代付白名单  {9 r" U2 h6 _' x
**· **通过 remove_privilege 方法可以为合约移除代付白名单9 o% L5 N4 N5 V( G& s
Conflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:
5 }" q" I" x7 D  J// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.0% O1 [% C4 u* E: J. ^
pragma solidity >=0.5.0
' B2 P6 M- @5 O  a// 导入 SponsorWhitelistControl 合约& _$ m, [) R+ g2 H* ?2 L% g
import "./SponsorWhitelistControl.sol";$ g' V+ f6 }9 M) E+ c, |
// 定义 Coin 的合约
. {* A* o' S0 \% O0 X! }$ T; Ocontract Coin {
3 R6 i" o- A6 S/ S// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)3 ?9 G9 G* M, G' b
address public minter;
; N+ x) D+ M- ~5 U! B! W4 {mapping (address => uint) private balances;0 z, n4 E. n7 L- T( z" L( k) B
// 使用 SponsorWhitelistControl 合约连接系统合约% H+ j  I/ c8 X) p6 A
SponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));
* R/ e( @* r) X  W( o2 ~& D7 n// 定义了 `Sent` 的事件,定义了 from / to / amount 列
% y  y, Z3 H8 `4 k' _/ p7 O( l' d9 _event Sent(address from, address to, uint amount);+ K7 j+ {4 L3 z# }( R1 c# g; D+ o
// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址/ U8 o& V' q2 J! Q, p
constructor() public {4 G1 X  D8 d3 @! X9 ~" n4 Y
    // msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter
3 D" q: o4 J& v    minter = msg.sender;
# q% i8 i% R# b8 L$ `}! s0 U6 S  l3 l. H3 o2 i
// 定义 mint 方法,通过此方法来增发代币
% I4 v  z7 `) f' ifunction mint(address receiver, uint amount) public {
3 Y/ N; j2 e% K' P9 s    require(msg.sender == minter);
4 O9 |9 A2 o  q- o1 f- E    require(amount }
; P. w4 L/ k3 \0 M0 h3.3 编译及部署合约; s3 k! G. r4 k6 K
点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。
: Z3 i) U" m8 N在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。
7 ^2 E! a# S: |5 c+ n% l% V3 Q2 @' Z在此我们选择 minter_key 作为部署合约的签名者。
$ v& ?. q2 e# d/ r1 v点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。8 O$ x! \; k. x
四、调用合约5 v; t9 e) b2 [1 }. J3 T3 g
点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。
, B2 V+ \& `7 l2 I: r9 x合约页面由三个部分组成:
4 C; A: V0 O# G% j, {# S% i2 I" H**· **左边为合约调用区域
' i; b+ t" \% H) O& R, T* N0 j**· **中间为合约数据查询区域
0 w$ l  v  Z- l+ H· 右边为事件查询区域. I8 `$ ^5 w; `4 q) }% U
4.1 合约调用及查询
1 c2 s% g% J$ H6 l3 j4.1.1 增发代币3 K. g8 g3 C" Q7 F2 n
点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:
7 o( n7 R4 E# A6 m3 E6 E· receiver 接收代币的地址。填入 minter_key 地址9 A, r# ]  X9 N$ L/ {
· amount 发行的代币总数。填入整数 1000
( `( m2 s+ ]7 b, W' I· Value 选填项,具体可查看 Value 详解。填 0 或者不填
, Q9 ]) u2 P$ Y2 n; c7 e· Signer 这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过 msg.sender 获取到这个地址。填入 minter_key 地址
9 M% `( S" k& ?. }1 I$ B0 ]填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。
5 e3 v! R# N5 Y( D1 @+ q9 p/ J6 m4.1.2 查询代币余额
$ Y" b* a; u' a点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。: ]* }. U! P( T$ S- Q
4.1.3 转账代币6 W! z9 B& D" s; K/ v6 W
在合约调用区域选择 send 方法,在 Parameters 中分别填入:
7 A& ~+ N4 E  T2 L8 e0 _· receiver 收款人地址。填入 receiver_key 地址
: z! H3 N6 s& g. v, G2 X5 A· amount 转账的代币数量。填入整数 200
. Y0 @7 _" d/ z' _$ v6 Q/ r· Signer 这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入 minter_key 地址,
" k8 L6 Z, @/ e6 N点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。
- y$ K* p; d; y- t) m: w4.1.4 Value 参数
8 T% v" r2 A$ l& k7 Z9 ]/ [8 x2 @Conflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约除了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。
8 @* M. f- K8 Q0 E  e/ i后文中的代付功能将会使用到 Value 参数。
8 K, P. K2 M( q3 \, t" v4.2 查询事件
& F+ R5 r6 B) p. ~6 Y# c在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。
2 H9 t; n8 i# C# v! ^% r五、代付功能; Q3 D) b6 e0 i' w+ a  P+ h& I7 m
Conflux Studio 支持 Conflux 系统合约提供的代付功能。
4 K( u) |- p9 M* T通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:
# e, {% N* H. b· add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用1 e0 u% \4 a; t8 j2 {8 @
· remove_privilege 移除合约代付白名单
& c/ r+ u1 _! K& V6 ^) C· set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额6 _7 E  K5 X: x, k4 W; a
· set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限; }5 G1 _& y3 q$ j! z: r* K9 b
启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。  G8 Z( v7 C: t* x1 x1 K3 ^' S& h
5.1 设置代付账户及代付金额
1 A6 R' E: `6 e( i' ^* `% |& i' A# P在 Conflux Studio 中访问系统合约地址
9 D' W# }; ?; l# q3 G0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。/ ]7 d3 D, J" i1 y8 |$ K, q
image选择 set_sponsor_for_collateral 方法,该方法有三个参数:
# z; G$ N4 b0 |· contract_addr 设置代付的合约地址。填入 contract_addr
. k' Y, m( [2 {% F4 ]9 f( e· Value 设置代付金额。填入整数 40- n- ]; d% T) d
· Signer 代付账户地址。填入 sponsor_key 地址- w% q4 j) l9 `8 i1 A& o
填好以上参数并执行运行,系统合约将为 Coin 合约设置好储存费代付账户,此时 sponsor_key 账户将会被扣除 40 CFX。
% X' v; R% K* |% B# @7 y选择 set_sponsor_for_gas 方法,该方法有四个参数:8 d) Y7 n0 \: g! v
· contract_addr 设置代付的合约地址。填入 contract_addr
( n- X" W0 s6 ~+ H· upper_bound 设置每笔交易代付的上限。填入 1000000000000) A2 n3 ^) c% z, x
· Value 设置代付金额。填入整数 40
6 q% X3 {- n% M' x· Signer 代付账户地址。填入 sponsor_key 地址2 |; \4 g7 W  R: @
填好以上参数并再次执行运行,系统合约将为 Coin 合约设置好手续费代付账户,此时 sponsor_key 账户将会再次被扣除 40 CFX。
6 J) z* u7 c- n, O5 i( u6 Y+ l完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。
. h! p9 X; s% R# f& z5.2 添加代付白名单! P! I. T$ f% j6 L
在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。0 d6 j& h8 z! U; b& P2 m  A& R
在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:7 U4 @9 p" j: N' R! N
· account 添加白名单的地址。填入 minter_key 地址
1 W" z" J; k$ Q4 [; D# d  C· Value 不填
: d# ]2 d" F7 l% o$ _· Signer 这笔交易的签名地址。填入 minter_key 地址1 a& d% F' x. n: g8 E, f
运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。; Y9 @2 _6 p. m! J
5.3 代付测试/ N' U& s( |8 U+ \
在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
/ U- z4 U9 T9 c# {回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。
' ]  \/ M, q3 q3 m' H8 y可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。/ A3 E8 q: ?- F, t' x
六、前端项目
, }$ s1 M3 \3 J" K' h前端项目源码可以前往 Conflux 前端。9 |/ \6 D& G% r1 |% @% y) D
6.1 预备
3 A) `; n) M' t" ~0 K6.1.1 下载项目并安装依赖5 L, c/ \* D* H) O* y
· 下载前端项目:git clone github.com/ObsidianLabs/conflux-frontend-react
" P8 d" T' b5 ~0 z  a****·** **使用 npm install 或者 yarn 进行项目依赖安装
1 x1 q7 F: x7 [7 Z% H; p, I  E6.1.2 Conflux Portal 的安装及配置, o0 j' l7 _! a0 d( k
Conflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。
/ w3 y9 o0 N8 ^" R. m前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。
. U- \( c0 [' y3 U在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。
7 V5 V9 e; ?2 h( \' F8 @6.2 运行前端项目( j4 l8 G; a1 b- H& `) D
在运行项目之前,需要修改一些默认的环境变量。+ L! ^! D' g6 |0 b$ {- B- h- ^
在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。
- ^) n  j' h7 [# [- e0 G/ h! K使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 localhost:3000)。& w3 A- U& l: y  Q& N  a0 w
项目运行起来后,页面将显示四个卡片信息,分别为:
& C% f+ ^8 ^' O6 g2 D****·** **左上角 Conflux 网络信息模块: d, W! L  G4 {! \% B  f8 V+ F
****·** **右上角 Conflux Portal 模块
* y. }% A. u2 K9 X$ h9 [( y****·** **左下角 Coin 合约模块, m" S7 t* T/ u3 [, V2 S) i6 t
****·** **右下角 SponsorWhitelistControl 合约模块
* ]; V) c! D- _' q) O8 d6.2.1 连接 Conflux Portal/ H" u. }( U9 S- X! x4 ^
点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。/ q% E% K, V( ]' ?  M6 h
6.2.2 运行 Coin 合约代币增发和代币转账操作
  y0 `. V$ o! K& H左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。( H7 y& H& W, e& v0 ]( `
****·** **代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。' n6 e! f. s# z
****·** **代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。. @& X& \6 A3 x$ T! t1 G
6.2.3 查看 Coin 合约中的余额
* L2 w' t0 n+ J$ j" R* t* b选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。1 T! G- ^9 i* U5 R; o
6.2.4 查看 Sent 事件$ a+ q) F5 B* J( J" g- e# ~% a: l
选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。# Y- R0 J0 E( z8 N  l) G. g
6.3 前端项目解析
, D3 S4 n- V$ i4 `+ z7 }项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。9 q1 ^( F# A+ s1 I
项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为:
2 _- @! p$ Q( ^! P! R****·** **REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址+ f5 b- P% ?- R# N, L5 i: i, t
****·** **REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址% o* }3 q, d4 {& o% p% E
6.3.1 视图组件1 a: s& F, W* x. {; K9 }
视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。* j( n+ D, K5 N4 M
ConfluxNetwork.js' O  _, V0 R* v' g" O# `; v  C
负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。
3 r6 B( ?, E$ q$ BConfluxPortal.js
4 X. U" e" e" j负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。
0 m. G$ H) ?* [+ i+ o****·** **connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。
4 |" ^0 f% i0 i3 z" B****·** **refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息& l1 i" P, e* k% X% a& B
****·** **renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮
; J9 d. P' c4 v: l7 EConfluxContract.js
/ p2 K5 N) i% K% Q$ {: r2 i1 W负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。9 n) e4 t+ X6 J, r
ConfluxContract.js 由三个组件组成,分别为:
# F) L+ @: r2 Z****·** **ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
# B1 d! N* l+ h# F1 d6 \# {/ T****·** **ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮: q: c" W3 J0 |0 j, n: m
****·** **ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单
2 ]1 S+ Z! \) J& \- Plib2 a% I7 Z) T) p: w7 t) b
lib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13