创建文章

We are looking for publications that demonstrate building dApps or smart contracts!
See the full list of Gitcoin bounties that are eligible for rewards.

Solution Thumbnail

使用 Algorand 开发一个众筹应用

简介

众筹

众筹是指通过互联网向多人筹集项目资金的方式。众筹的概念出现于 1997 年,当时,一支英国乐队通过粉丝的网络捐款举办了一场重聚巡演。2011 年,美国《创业企业融资法案》为股权众筹提供了法律依据。诸如 Kickstarter 和 Fundable 之类的公司已经构建了一个价值数十亿美元的众筹市场,这使许多原本没有资金的项目得以启动。2019 年,KickStarter 帮助 187,010 个项目获得了来自 560 万名投资者的 52.3 亿美元的投资。

尽管互联网使众筹成为可能,但还存在许多亟待解决的问题。大多数众筹系统使用信用卡支付。信用卡手续费平均为 3.5%。对于一个 100 万美元的项目来说,信用卡手续费就高达 3.5 万美元,这将由项目创建者来承担。此外,世界上大约 80% 的成年人没有信用卡,因此无法参与众筹。众筹管理费也会消耗一部分融资费用。例如,KickStarter 收取 5% 的管理费。

许多众筹系统都是经过精心设计的,能够集中控制创建众筹项目的人选以及可接受的项目类型。

本文主要阐述如何应用 Algorand 区块链来构建开放、安全、可扩展、自动化且经济高效的下一代去中心化众筹服务。

Algorand

Algorand 是第 3 代区块链,使用高效的权益证明共识协议。它具有开放、安全、可扩展、节能和快速等特点,吞吐量高达每秒 1,000 次交易 (TPS)。交易在 5 秒内处理和完成,目前,名义交易费还不到 0.1 美分。Algorand 能够为资产、原子交换和智能合约提供第 1 层支持。将这些特点结合起来,就诞生了一个适合创建复杂和高效的去中心化金融系统的完美平台。

Algorand 还具有开放和无国界的特点。任何智能手机用户都可以加入 Algorand 网络中,目前用户人数已超过 600 万。

众筹要求

众筹系统要求如下:

项目多样性

众筹系统应面向任何类型的项目或事业开放。项目创建者包括农民、艺术家、学生、企业家、政治家、政府、企业、环保人士等。

全球性和无国界

众筹系统必须面向世界各地的项目创建者和投资者(即支持者)开放。

高效

众筹系统应具备高效的特点。加入系统的成本和收费应为名义费用。

安全

众筹系统必须具备安全性和公平性,能够保护筹集的资金。

工作流

遵循常规的解决方案做法。

定义众筹项目

定义众筹项目是第一步。由项目创建者指定项目的名称、描述、筹款目标和时间线。

时间线

众筹项目时间线应确定开始日期、结束日期和关闭日期。开始日期表示项目何时开始接受投资。结束日期表示不再接受追加投资,同时可分配已筹资金。如果筹款目标达成,资金将提供给项目创建者,否则个人投资者可以收回投资。下方的状态机描述了众筹状态。

EditorImages/2020/10/19 18:10/image2.png

众筹状态机图

托管账户

每个众筹项目将使用一个托管账户来持有为该项目筹集的投资。托管账户将累计存放从开始日期至结束日期筹集的投资。

完成筹款

在结束日期后,如果筹款目标达成,项目创建者可申领托管账户中筹集的资金。否则,投资者可以收回自己的投资。到了关闭日期,项目创建者可申领托管账户中剩余的任何资金。

请注意,资金分配方式可能产生变化。例如,即使未达到筹款目标,也要将筹集到的所有资金分配给项目创建者。

设计

众筹系统采用模块化设计,具体组件如下。

EditorImages/2020/10/19 18:12/image12.png

Ignite 众筹组件图

Ignite Web 应用为众筹应用提供用户界面。Ignite Web 服务实现应用逻辑,以支持众筹工作流。交易网关统筹安排交易签名。签名钱包为投资者提供安全的交易签名。Algorand 区块链支持资金的安全管理,包括创建资产、管理账户、处理智能合约和提交交易。

Ignite Web 应用

该 Web 应用提供了一个直观易用的界面。下方的用例图显示了参与者和受支持的用例。

EditorImages/2020/10/19 18:13/image11.png

众筹用例图

项目创建者是指创建众筹项目的人。项目创建者创建项目,完成众筹后,如果达到筹款目标,则可申领从投资者处筹集的资金。投资者评估正在寻求投资机会的可用项目,然后进行投资。如果项目未能达到筹款目标,投资者可以收回自己对该项目的投资(在关闭日期前)。在项目的生命周期中,项目创建者和投资者均可随时查看项目状态。

下方的屏幕截图显示了项目创建页面,项目创建者可以在这里定义一个新项目,并指定项目的名称、描述和筹款目标。该 Web 应用支持设置不同货币单位的筹款目标,包括 Algo、USDC 和 USDT。USDC 和 USDT 均为受美元支持的稳定币,可在 Algorand 区块链上使用。对于众筹系统而言,美元稳定币的稳定性十分重要,它能够避免与加密数字货币相关的波动性。最后是指定项目账户,即 Algorand 账户,由该账户发布创建项目的交易,然后在项目成功结束时申领资金。时间限制指定了众筹的持续时间,用于根据当前日期来计算结束日期。关闭日期按照 2 倍的持续时间计算。

EditorImages/2020/10/19 18:11/image8.png

项目创建

用户可以在项目页面上查看活动项目。

EditorImages/2020/10/19 18:14/image4.png

查看可用项目

选择某个项目即可对该项目进行投资。

EditorImages/2020/10/19 18:14/image3.png

投资项目

如果筹款项目在结束日期达到筹款目标,则项目创建者可以申领资金。申领资金时,筹集到的投资会从资金的托管账户转入项目创建者的账户,并可立即供项目使用。

EditorImages/2020/10/19 18:15/image7.png

项目创建者在结束日期后申领资金

Ignite Web 服务

Ignite Web 服务是一种基于 REST 的服务,旨在为项目筹款生命周期提供支持,包括创建项目、处理投资以及申领或收回资金。该 Web 服务借助 DropWizard 框架用 Java 实现。Algorand Java SDK 用于与 Algorand 区块链集成。

该 Web 服务支持 Web 应用工作流。它能够创建所需的交易并将其提交至交易网关。下方的类图显示了服务 API(蓝色)和域类(黄色)。Fund 类表示某个项目实例。Investment 类表示从投资者处筹集到的投资。

EditorImages/2020/10/19 18:15/image5.png

众筹服务和域模型

交易网关

交易网关负责将交易路由到钱包,以便进行签名。签名完毕后,交易网关将交易提交给区块链,并通知发送方和接收方。

交易网关将交易路由到投资者的签名钱包。投资者使用签名钱包来签署需要投资的交易。鉴于 Algorand 区块链具有高效和低成本的特性,交易费用可以忽略不计(低于 0.1 美分)。

签名钱包

签名钱包能够安全地管理用户账户和密钥,并支持签署交易。当收到需要签名的新交易时,签名钱包会通知用户。待用户审核并签署交易后,钱包会将已签署的交易返回至交易网关。

EditorImages/2020/10/22 19:26/Signing_Wallet.png

投资者用于签署投资交易的手机签名钱包

Algorand 区块链

Algorand 区块链支持定义资产 (ASA) 和表示可替代资产,包括 Algo、USDT 和 USDC。资产为筹款项目提供投资货币。

有状态 TEAL 是一种智能合约语言,可用于维护全局和本地应用的状态。有状态 TEAL 应用将状态作为账户信息的一部分进行管理。在众筹应用中,与该应用关联的账户维护全局状态,包括资金配置(目标、开始日期、结束日期、关闭日期和接收方账户)和总投资价值。与每个投资者账户相关的本地状态用于跟踪投资情况。

EditorImages/2020/10/22 19:28/Crowdfunding_TEAL_diagram_2.png

众筹有状态 TEAL 应用组件

关于本项目中所用的有状态 TEAL 合约的更多详情,请参阅本解决方案文章。

https://developer.algorand.org/solutions/example-crowdfunding-stateful-smart-contract-application/

工作流

下方的活动图显示了众筹工作流。

EditorImages/2020/10/22 19:31/CrowdfundActivityDiagram.png

达成筹款目标的项目众筹工作流

步骤:

  1. 项目创建者使用 Web 应用来创建新的众筹项目。
  2. Web 应用调用 Web 服务来创建新的众筹项目。
  3. Web 服务创建新的托管账户,并将其关联至 Algorand 区块链中的有状态 TEAL 应用。
  4. 投资者使用 Web 应用进行投资。
  5. Web 应用调用 Web 服务来创建投资。
  6. Web 服务创建投资交易并将其发送至交易网关。
  7. 交易网关通知与该投资账户关联的签名钱包,表示有交易待签署。
  8. 投资者使用签名钱包查看并签署交易。
  9. 签名钱包向交易网关返回已签署的交易。
  10. 交易网关将交易提交至 Algorand 区块链。
  11. 有状态 TEAL 合约逻辑将投资数额从投资者账户转移到托管账户中。
  12. 最后,筹款成功结束后,项目创建者申请获得托管账户中累积的资金。有状态 TEAL 合约将资金从托管账户转入项目创建者账户。

总结

本文主要阐述了如何应用 Algorand 区块链来构建开放、安全、去中心化、可扩展、自动化且经济高效的下一代众筹服务。

Algorand 区块链在整个网络中分配信任;无需依赖中央权威机构即可妥善管理众筹托管账户。该系统具有开放性;任何拥有智能手机和 Algorand 区块链账户的人都可以创建或投资项目。该系统可扩展到 1000 TPS(Algorand 网络当前的吞吐量)。有状态 TEAL 应用(智能合约)实现了众筹项目的自动化管理,包括控制项目集资何时处于活动状态,以及何时申领或收回资金。该系统具有安全性;投资者通过手机签名钱包与交易网关相结合的形式,签署和实施出资交易。有状态 TEAL 应用跟踪托管账户的总额和各个账户的出资。自动化技术与高效的 Algorand 区块链相结合,最大限度地降低了交易费用和开支。只需支付名义上的管理费用,所筹集到的资金几乎可以全部投入到项目之中。

未来改进

本文描述了投资者以捐款形式为项目出资的用例。未来的投资领域可扩展到股权和贷款。

参考资料

Ignite Web 应用源代码

https://github.com/bricerisingalgorand/ignite

Ignite 应用服务源代码

https://github.com/algorand/app-service

众筹有状态智能合约应用示例

https://developer.algorand.org/solutions/example-crowdfunding-stateful-smart-contract-application/

最佳众筹网站

https://www.thebalancesmb.com/best-crowdfunding-sites-4580494

众筹的发展历程

https://www.fundable.com/crowdfunding101/history-of-crowdfunding