Flow Community Rewards are here. Earn points for engaging in the ecosystem, spend points on prizes. Learn more.
开发者生态
2021年6月10日
内部流程:FCL的简单力量
流程
内部流程:FCL的简单力量

背景。 Flow是一个新的区块链,最初由Dapper Labs设计和开发,Dapper Labs是CryptoKitties和NBA Top Shot的制造商。在这个多部分的系列中,我们将从技术角度探讨Flow区块链的不同组成部分。

- Cadence
福禄客户库(FCL),它类似于以太坊上的Web3.js,但为消费者受众考虑而建立
-。 Flow多节点架构, 面向主流采用的面向未来的扩展性

区块链技术为开发者带来了新的能力:创造和编程货币形式(加密货币),铸造和分发限量版的独特资产(NFTs),参与团体治理(DAO),或者简单地调解认证和无密码登录(如Magic)。 

就像你需要一个网络浏览器来访问互联网上的网站一样,你需要一个加密货币钱包来访问、存储、转移和以其他方式与区块链上的资产和信息互动。 

即使在不涉及支付的情况下,加密货币钱包也可用于认证,解决了每个不同服务都有一百万个密码的问题。 

加密货币钱包比社交登录(Facebook、苹果等)更好,因为它们所依赖的基础设施是完全透明的,而且安全性是由用户自己控制的成熟加密技术来执行的。 

因此,应用程序和钱包之间的接口是至关重要的。这就是Flow客户端库(FCL)的作用。 

Flow上的FCL类似于Ethereum上的Web3.js,但是是为消费者建立的。我们没有依赖Web3,而是建立了FCL,因为。 

  1. 我们不希望依赖 "Javascript注入"。Web3的工作方式是,你的钱包向你的浏览器添加代码,以便dapp可以要求你签署交易。这意味着你必须使用一个定制的浏览器(如Brave)或使用一个扩展(如Metamask)。这为消费者规模的采用创造了很高的障碍,此外还引入了安全问题。
  2. 我们不希望应用程序开发人员过早地假设哪些供应商或其目标用户群将利用的平台类型。 我们想确保你可以写一个应用程序,并让它与各种钱包正常工作,托管或自我主权,硬件或软件,移动或桌面。

这第二点怎么强调都不为过:只需一行代码,开发者就可以使他们的应用程序既接受去中心化的、以加密货币为中心的支付方式,也接受每个用户选择的更主流的、以美元或法币为中心的支付方式。

本文在将FCL与区块链开发中其他知名工具和策略进行对比后,教你如何利用FCL的力量和速度。请随时查看文末的资源,深入了解在Flow上开发的可能性。

关于Dapper Labs产品的说明: 他们在FCL出现之前就建立了NBA Top Shot和当前版本的Dapper Wallet。因此,NBA Top Shot目前依赖于通过Go SDK在后端驱动的完全托管的钱包实现。展望未来,所有Dapper Labs的产品将开始迁移到完全使用FCL。这意味着,一旦完整的 "Dapp Store "准备就绪,使用FCL的dapp将领先一步,为Dapper Wallet做好准备和兼容。

驾驭委托信任的三角关系

区块链开发出乎意料地容易上手。当然,有一些基础知识需要你去了解,但一旦你有了最初的启蒙,事情就会迅速发展。有数以千计的优秀教程,指导你如何构建网络的未来的拼图块。

然而,当你开始把这些碎片粘在一起,并开始为真正的用户构建真实世界的应用程序时,真正的挑战就出现了。只有到那时,你才会发现自己处于 委托信任的三角形 的中间应用程序、钱包和区块链之间的通信过程

这个微妙的沟通轴也是用户接受度的决定性时刻--如果这些流程设计得不好,不安全,你将很难入职和留住用户。 

在构建我们受欢迎的基于以太坊的应用程序CryptoKitties时,我们的团队不得不通过艰苦的方式学习。让我们谈谈我们遇到的一些挑战,这些挑战最终激励我们建立了像Flow和FCL这样的产品和工具。

浏览器插件的问题

在编写区块链应用程序时,外部钱包将你从管理用户的私钥的责任中解放出来。在以太坊这样的网络中,一个非常流行的解决方案是浏览器插件钱包,如Metamask。如果你以前将Metamask集成到你的应用程序中,你有可能写过这样的代码。 

在这里,我们要检查用户是否已经安装了给定的浏览器插件。如果没有,我们就引导他们去安装;否则,我们就继续这个过程。这种方法在两个方面给开发者带来了问题。我们需要编写额外的代码来检查这两种可能的情况,同时引入了一个我们无法控制的元素--用户那边的钱包初始化。

对于用户来说,这种必须安装和设置外部钱包的额外步骤会构成巨大的进入障碍。这大大增加了流程的摩擦,尤其是在与对区块链不太了解的受众合作时。 

特定供应商实施的问题

许多钱包供应商已经发现并解决了这个问题,特别是那些专注于更简单的入职体验的钱包。像Fortmatic这样的钱包,通过保持基于浏览器的交互和简化设置过程,承诺提供一个更简单的区块链网关。我们可以通过编写以下内容将Fortmatic集成到我们的代码中。

这个实现的问题是,它不是很干净,而且根本不能很好地扩展。我们的if-else语句越来越多,因为我们要检查不同的钱包提供者。此外,我们还必须注意在文件的顶部设置一个特定的Fortmatic提供商,注入一个需要管理的API密钥。想象一下,如果我们在未来增加更多的钱包提供者,这段已经相当冗长的代码会如何激增。 

我们可以很容易地看到,这给开发者团队带来了越来越大的技术负担,因为用户将继续期待对更多钱包的支持。在编写一行特定的应用逻辑之前,必须要创建大量的模板代码。虽然为用户提供了一些便利,但这种解决方案确实导致了开发人员方面的复杂化。 

介绍FCL:用简单的力量颠覆一切

Flow客户端库(FCL)是专门为解决这些挑战而设计的。有了FCL,上述所有的步骤都可以归结为一句话。

就这样了。 从开发者的角度来看,这基本上就是你为验证用户所要做的一切。只需一行,你就可以将任何兼容FCL的钱包连接到你的应用程序 - 无论它是托管的还是自营的,硬件还是软件,移动还是桌面。而且你也可以只用一行就轻松订阅当前用户的所有变化。 

允许这种简单性的法宝是集成的钱包发现协议。当调用验证方法时,FCL将自动发现与FCL兼容的钱包供应商,并为用户选择的服务获取特定的配置。 

从本质上讲,FCL承担了信任通信的重任,将开发人员从管理不同钱包提供商的代码的责任中解放出来。这使你能够专注于真正重要的事情。建立一个人们喜爱的应用程序。

区块链互动的构建块

但FCL远不止是一行的认证。作为一个建立在Flow Javascript SDK之上的高级框架,FCL使你能够与Flow区块链创建丰富的互动。只需使用少量的构建函数,定制区块链上的查询和交易就变得像排列乐高积木一样简单。有一句话需要记住。

你给定的互动的所有细节都插入到这个公式的简单性中,它在一行中处理了你的互动的建立、解决、发送和解码的问题。让我们来发现你可能插入的乐高积木。 

  • 查询数据:脚本
    当你想从区块链中查询数据时,使用脚本。脚本指的是包括公共函数main的Cadence代码,这个函数在执行时将被运行。由于脚本不对区块链上的数据进行变异,你将不必指定任何额外的信息。 
  • 突变数据:交易
    无论何时你想改变区块链上的数据,fcl.transaction都是你要做的。要做到这一点,你需要用Cadence交易提供交易方法,并指定提出、授权和支付该交易的人。Flow的创新之一是这些角色可以分布在不同的账户中,但让我们通过使用当前用户来保持简单。FCL通过fcl.authz提供当前用户的所有授权细节,使事情变得简单。

在这些构建器函数中注入参数也很容易。只需在任何需要指定额外参数的脚本或事务中添加以下几行。

请注意,你指定的任何参数也需要命名一个特定的类型。你可以从包@onflow/types中导入这些类型。

如果你想看看所有这些部件的组合效果,请看Flow应用快速入门教程,你将在Flow上建立你的第一个应用。

流动应用快速入门

开始建设 docs.onflow.org

从这些例子中你可以看到,FCL架构的简单性使你能够快速移动,同时在途中写出干净、可预期和安全的代码。

有主见但可定制。两个世界的最佳选择

FCL作为一个框架,通过以意见的方式利用底层的Flow Javascript SDK,大大加快了区块链的开发速度,提供了一个抽象层,简化了互动并执行了安全的最佳实践。然而,它仍然为开发人员提供了灵活性,以定制任何应用程序可能需要的细枝末节 - 这是两个世界的最佳选择。 

在FCL中暴露了原Javascript SDK的各种方法,允许你使用较低级别的操作,如按地址查找账户、获得特定交易的状态或查询其他交互发出的事件。此外,像解码 这样的方法可以让你传入你自己的自定义函数,让你完全控制如何为你的应用程序解析一个响应。 

由于这种多功能性,你应该尽可能地选择FCL而不是Javascript SDK,因为它大大降低了开发时间和复杂性,同时还能考虑到高级场景。直接使用Javascript SDK应该是你在频繁进行低级区块链交互的复杂用例中的最后手段。例如,当建立一个处理创建用户账户的托管应用程序时,或编写经常消耗协议层技术指标的开发者工具时。

为钱包供应商建立一个明确的标准

在Flow,我们相信能够使创造者和创新者得到授权的建设者。钱包提供商很适合这个类别,因为他们使其他创造者能够建立良好的用户体验,而不需要管理私钥。然而,这是以增加这些供应商的责任为代价的,因为他们被期望安全地支持许多不同的使用案例。

为了减轻钱包供应商的压力,FCL提供了一个明确的区块链认证和授权标准,使与FCL兼容的钱包和由FCL驱动的应用程序之间的通信过程正常化。就像其他授权协议,如OAuth,它通过澄清各方之间的期望来执行安全的最佳做法,从而使通信程序更快、更安全。

对于钱包供应商来说,这种标准化使得与Flow的合作变得简单明了,使他们能够专注于其关键工具的性能和安全性。同时,这也是对未来的一个承诺。他们的钱包将在每一个由FCL驱动的应用程序中得到支持,而开发者无需编写供应商的特定代码。通过这种方式,钱包应用程序可以更快地进入市场,同时不断增加他们对更多潜在用户的影响力。

结论。流动客户端库(FCL)使区块链应用开发更快、更容易、更安全 


FCL是一种更好的方法,可以让dapp和钱包之间相互交流,因为。 

  1. FCL不需要浏览器扩展或额外的安装来让用户加入。
  2. FCL与托管型和非托管型钱包同样适用,包括移动钱包。
  3. FCL让开发者写出更干净、更简明、更少错误的代码。


既然如此,最好的还在后面。结合Flow的第一个稳定币FUSD和Moonpay或Ramp等第三方供应商,FCL将成为你的网关,使你的用户能够比以往更快、更容易地与你的应用程序充分接触。 

FCL是一个符合Flow整体理念的工具。我们希望为用户、开发者和合作伙伴提供一个简单而精致的体验。这是关于克服摩擦和激发创造性的协同作用,以帮助你为你的区块链驱动的应用程序带来下一个百万用户。

FCL & Flow资源

如果你想更深入地了解FCL和Flow的细节,请参考下面的附加资源。如果你在使用FCL和Flow构建应用程序时遇到困难,请随时通过以下渠道与我们联系,我们非常乐意提供帮助。