Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
一、简介* v  V1 y7 I7 l6 L1 J, t
Conflux Studio 是一个帮助开发者快速开发 Conflux 智能合约的集成化开发环境。Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。/ d/ U1 C+ V8 ^
通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。
1 f: ^4 H3 {; |  \7 U二、准备工作& s8 l# Q( g' Z5 n7 W2 a
2.1 安装 IDE
/ {4 x1 {1 D9 ?) Q请在 GitHub 的下载页面$ ]3 J& w+ g, W# c7 Z
(github.com/ObsidianLabs/ConfluxStudio/releases) 下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。
) Z; Q. r/ |  q2 K  O  Z" I8 S2 s正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。
, E1 h- W0 C8 U7 M% d2.2 创建钱包0 }, s, ^# I% M1 `5 j8 _" o
完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。
1 j& |) a  ?# O: \+ m在 Conflux Studio 的任意界面,点击应用左下?的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。4 C: A: l! |0 L, K* I
导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。% x$ J; y% z4 P+ W
为了顺利完成教程,首先需要创建三个钥匙对:7 i( F+ P- |# X5 Z) t. f5 T
**· **minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对; P4 a! I3 f) A# G) @7 l6 p
**· **receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到; x8 I! v* |! n, v
**· **sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到
7 X- {+ z( l$ \8 ~- ]5 f2.3 连接 Conflux 网络
) w+ q1 K" x: E) l  G2 n1 d教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。2 ^1 T  {( q# o6 L8 _0 l
切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。) S& V" I& Y" ~
2.4 申请测试 CFX- x1 _- T! z4 Z2 g
点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。. ^6 |: w' a8 B4 {0 f+ v
在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。* }8 M6 F1 `1 c# `5 U& }
获取 CFX 的方式有两种方式:% p" T& Z! e+ T+ {
· 输入地址后点击地址栏右边的水龙头按钮,Conflux Studio 将为地址自动申请 CFX;  B+ Z& Q+ ^' I4 I+ ~
· 你也可以直接在浏览器中输入 wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX;- s/ o+ u9 h8 P4 l
使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。) L7 j. m( j$ b& D' G
目前余额信息为:$ E7 T% ?$ t1 ~6 z" I& M! V
**· **minter_key 余额 100 CFX
: C' C3 r! C; q1 x**· **receiver_key 余额 0 CFX
: m" v2 Q/ g' O; o" b**· **sponsor_key 余额 100 CFX) p. \4 y% S0 v# Q* t' Y
**三、智能合约创建项目 **2 c2 D( L% @% g6 J' i* d( L1 ]) I
3.1 创建项目/ s+ J0 z% k  t6 t6 S
点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。
2 N( _# V: L% l9 I8 ~# J3.2 合约代码
1 k, P! n: \$ q+ ^7 G- m# y: f, sCoin 合约是一个简单的代币合约,其中:
# v6 O$ Q( E1 a1 m**· **通过 mint 方法可以增发代币数量
6 N' \& s8 H$ ?**· **通过 send 方法可以将一定数量的代币转账给别的用户,同时会在事件中记录下这笔转账的信息3 X' L1 r& m6 N5 ?0 S# |
**· **通过 balanceOf 方法可以查询到指定账户地址的代币余额" U& |( m( v/ B
**· **通过 add_privilege 方法可以为合约添加代付白名单0 _: Y" @% L" }- l4 l0 R# c
**· **通过 remove_privilege 方法可以为合约移除代付白名单3 ?! A3 o0 P) p  a4 h
Conflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:
+ s  o# V8 V" M4 ]) z* w. [// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.0
4 c% J! }3 r8 k6 z& g3 fpragma solidity >=0.5.0 $ p# N% Q; `1 ~6 t
// 导入 SponsorWhitelistControl 合约- ]1 |: d" E" F0 ^/ o
import "./SponsorWhitelistControl.sol";
5 m8 K8 F4 _0 |" o" u// 定义 Coin 的合约  e: @& C& Z2 B* k4 s, P& M$ T
contract Coin {
0 |, D* E% l) [// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)
. _0 p6 c. Q, n; G: |! z) \address public minter;
$ A; Q7 [0 ?& A1 T9 Jmapping (address => uint) private balances;/ Y; V4 a: d5 {- [/ A: L
// 使用 SponsorWhitelistControl 合约连接系统合约
4 C  s# c/ ]. l$ fSponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));
- ~$ v$ {$ x5 K4 _  ^: O// 定义了 `Sent` 的事件,定义了 from / to / amount 列6 o# J/ H3 q& p. H
event Sent(address from, address to, uint amount);! j; U- f. g7 v' V2 u1 m
// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址
+ L8 v2 l. r8 X% K$ m8 T4 O1 T6 Qconstructor() public {
4 J1 K% x9 v% u    // msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter2 c2 r2 Q% q: J" }8 z4 ?
    minter = msg.sender;
* P8 n8 Y/ ^7 y. B}* I. B) E. [& ~9 @- Z* ]2 \
// 定义 mint 方法,通过此方法来增发代币
. f4 U' t1 a. U  Efunction mint(address receiver, uint amount) public {
3 \! B8 t5 U& N% }" `4 X. L( g    require(msg.sender == minter);
3 j# s/ f  F" E* y    require(amount }3 r# Q+ b9 [# m! ]
3.3 编译及部署合约
" c2 Y$ ^/ \5 C9 W2 J) s' `! k2 A点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。
$ R! r1 b. @9 S在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。
4 D& L( X4 a* G+ b- e5 _在此我们选择 minter_key 作为部署合约的签名者。  A: l) I5 W0 n9 X! _
点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。+ M: N! C! ]# K" e
四、调用合约
9 W9 o+ M- }* s+ L- X: L9 Y9 \点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。
1 ~1 V+ p; P) {6 ~9 N3 `* _! p合约页面由三个部分组成:2 C9 V$ o6 ^/ _
**· **左边为合约调用区域
8 m1 K# i3 N3 l$ I; R  [2 T, p**· **中间为合约数据查询区域
) P8 _7 C" d- Q1 H" I· 右边为事件查询区域
, V* ^; _/ I" Y: ^' I4.1 合约调用及查询9 w: `) E% {% v
4.1.1 增发代币
& m- L3 Q, K  c6 Z! K3 Q点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:) y! g& c$ T) T  e' f9 r7 n1 `1 [
· receiver 接收代币的地址。填入 minter_key 地址
  s, n: f$ \: [* P( Z· amount 发行的代币总数。填入整数 10009 u! {9 E0 ?7 o; N* a
· Value 选填项,具体可查看 Value 详解。填 0 或者不填& d! d% o! P3 v3 I0 o
· Signer 这笔交易的签名地址,如果没有开通代付功能,交易手续费将在这个账户地址中扣除,在合约代码中通过 msg.sender 获取到这个地址。填入 minter_key 地址
5 e! b/ I4 p& l填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。! I9 u% \2 t0 |0 H; n+ Y
4.1.2 查询代币余额8 K: b1 C/ _. X' e; D
点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。" `, l# c; m: J2 k: w; A! E1 K
4.1.3 转账代币
# O% s% D# Y! m1 f0 S$ D  @在合约调用区域选择 send 方法,在 Parameters 中分别填入:+ F- s0 ^5 y# m, Y
· receiver 收款人地址。填入 receiver_key 地址
6 e2 w# ~( L5 v  C' h· amount 转账的代币数量。填入整数 200: x: ^; F* F, N" k- k7 s
· Signer 这笔交易的签名地址,代币转出的数量将会在这个账户中扣除。填入 minter_key 地址,
6 M: |! f9 f& h6 n$ X2 ^点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。: ?! t  F5 z$ H) F; r
4.1.4 Value 参数
$ \# T* J' x7 k( A2 KConflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约除了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。
) v, ], I/ n9 {8 b# X8 |4 _6 P后文中的代付功能将会使用到 Value 参数。
+ {4 M% W6 v# r4.2 查询事件) n- u3 |& {8 r. U: k- i6 i
在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。
' ]0 }+ g8 x# {五、代付功能5 }% f; ^7 }8 R1 f- P7 [8 {
Conflux Studio 支持 Conflux 系统合约提供的代付功能。
/ W7 ~; w) g+ H* I  t通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:7 x/ K% A$ O# x9 G1 D9 ~
· add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用+ T5 Q0 y4 G3 {
· remove_privilege 移除合约代付白名单
' U# `9 L$ w9 f: j; e0 J$ {· set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额
5 j, p6 }  n$ D+ o: L· set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限
, H) W6 r$ P8 |启用一个合约的代付需要设置代付的账户、代付金额及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。: D# I& [: R. N. }* R
5.1 设置代付账户及代付金额9 s8 k# @; x) u: O# V) n. A5 E
在 Conflux Studio 中访问系统合约地址5 P6 |& {# _7 F2 B3 ^* e# `1 b
0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。
; G" O) t2 J- r! W  m+ Z3 q7 u2 nimage选择 set_sponsor_for_collateral 方法,该方法有三个参数:
9 @3 D4 G0 J2 I: S· contract_addr 设置代付的合约地址。填入 contract_addr
* D' J7 V/ `1 e8 e· Value 设置代付金额。填入整数 40& Q+ J' I1 V6 P5 J8 U- i3 b
· Signer 代付账户地址。填入 sponsor_key 地址
! F  g: i7 x* Y/ }# y7 [( ]2 A- ^填好以上参数并执行运行,系统合约将为 Coin 合约设置好储存费代付账户,此时 sponsor_key 账户将会被扣除 40 CFX。/ {1 e/ f& x& X8 Y  ~
选择 set_sponsor_for_gas 方法,该方法有四个参数:
7 }# a  Q: f/ e& }7 D8 S· contract_addr 设置代付的合约地址。填入 contract_addr
$ u$ i. p/ _. V; n' M- x) l· upper_bound 设置每笔交易代付的上限。填入 1000000000000
/ _$ @9 q0 t% Y! S9 d' M· Value 设置代付金额。填入整数 40" _" T* b" P- \& r. `) s
· Signer 代付账户地址。填入 sponsor_key 地址
0 {& e8 ^- f9 S7 G2 l$ K填好以上参数并再次执行运行,系统合约将为 Coin 合约设置好手续费代付账户,此时 sponsor_key 账户将会再次被扣除 40 CFX。% b4 j$ j, e9 {. p6 H# H# q: t7 h1 U
完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。/ C) i3 F3 H1 x
5.2 添加代付白名单
+ ?# ~- v5 s; R8 t在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。: M$ W+ ~9 W3 r
在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:
0 d5 v3 Y3 J% `! a4 u· account 添加白名单的地址。填入 minter_key 地址
5 O$ G7 O' M$ b· Value 不填
/ C: M5 Y8 Y0 y* }% ?: @· Signer 这笔交易的签名地址。填入 minter_key 地址
5 q9 X0 s4 j2 U  L7 J/ @- S运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。
/ T# E# G+ |6 F: a* S7 V5 B5.3 代付测试8 i' A3 _: }* l4 U; \8 H; z
在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
6 j3 ]" @" V$ l2 [回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。/ v7 K, t: y1 Q$ _
可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。
% K( O2 l. V4 w, z4 u六、前端项目
+ a" ?/ V" P9 f, X0 C; n- r  r: f前端项目源码可以前往 Conflux 前端。
3 r; X+ i- P% D( w0 W5 C6.1 预备8 K# ?1 d6 x8 a- G8 u$ P
6.1.1 下载项目并安装依赖+ l2 w" p3 F  d0 I
· 下载前端项目:git clone github.com/ObsidianLabs/conflux-frontend-react
! Q& z% W/ t  i! ~4 ]' E% c9 d4 v****·** **使用 npm install 或者 yarn 进行项目依赖安装
! U% A9 _. _7 H0 j6.1.2 Conflux Portal 的安装及配置. |3 W% D7 E8 H
Conflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。
2 N+ `% [" y7 v& s' F! ]前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。
$ c9 D, C, i5 Z5 l在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。- r6 ~! X- ]6 v4 ]+ G; a0 v1 V
6.2 运行前端项目
3 W2 f. x! U( ~6 o! ?0 J: h! M在运行项目之前,需要修改一些默认的环境变量。8 Z% _7 `5 o3 p6 ]
在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。
: u4 S* t9 O2 e) y使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 localhost:3000)。
2 k  R  X: K2 k1 ?/ V项目运行起来后,页面将显示四个卡片信息,分别为:
2 Q4 g) n: G" I6 M3 V; L****·** **左上角 Conflux 网络信息模块
9 p, Z* c9 J7 ]9 y****·** **右上角 Conflux Portal 模块3 K9 Z" M+ F  W0 @
****·** **左下角 Coin 合约模块
" w$ V" y* ?. q1 l* Y****·** **右下角 SponsorWhitelistControl 合约模块
) M2 J% s+ W9 D6 S( Y3 O6.2.1 连接 Conflux Portal' q* z7 l; u) Q- n# |2 k
点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。- W2 A- e3 _) i2 ^6 }: q, p
6.2.2 运行 Coin 合约代币增发和代币转账操作
$ D, R' t! F& l, I: m左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。8 }1 q% k3 U% R% f0 b, F, r
****·** **代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
% H4 c; V6 S- E' g" V****·** **代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。3 e" T3 M" q. ~, _$ _
6.2.3 查看 Coin 合约中的余额
9 E( E1 Y. u3 P选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。- l/ g+ T/ Y6 S$ _1 V6 u: t
6.2.4 查看 Sent 事件: s( I7 G# N5 H  j. m- \
选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。( A/ ~$ Z: J3 E+ |9 S8 u
6.3 前端项目解析
* ~2 }8 G" c# h4 q+ e9 ]3 J) j项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。+ s8 p/ {: X# g  X
项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为:: o5 X+ G/ j. W3 E
****·** **REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址3 R/ O6 o2 A4 o; N7 s6 _% |, V
****·** **REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址8 M% i7 E  s0 V2 }; J( j
6.3.1 视图组件
% Q% z  w3 H5 u% S( q. v视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。
1 @5 j5 h" [% P" HConfluxNetwork.js! [& Z. s, f8 E$ W
负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。. c$ T8 {' \/ C' W
ConfluxPortal.js
8 d$ u8 u4 a* \负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。8 u8 j8 Q- B0 c# D5 o: R
****·** **connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。
! a6 T% z9 U+ D! J9 v****·** **refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息
9 Q0 ~( R0 w0 ?$ C****·** **renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮* `; e" s, m, c- n' b1 x9 t) F
ConfluxContract.js" ~' C# M3 [+ N7 h  ~& x1 ]; N$ F) M
负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。" v7 H( G5 j3 ^% E& ^
ConfluxContract.js 由三个组件组成,分别为:
, S+ f5 q, t7 X) ^7 D# w- }0 T****·** **ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
- ^8 ~1 H' ?  Q  D****·** **ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮
* v* ]7 M/ l' q& y. ?****·** **ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单
3 ?6 Y3 m* `1 V9 f# w( plib0 I  {9 {( J& g7 A; s2 Y
lib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13