# 背景介绍

本项目的目标是开发一个去中心化应用 (DAPP) 平台,以促进打孔目标发起者和拥有类似目标的个人之间的联系。目标发起者将通过引入与目标相关的共享价值、设置参与存款要求和指定活动截止日期来发起打孔活动。平台用户可以访问所有正在进行或已经完成的打孔活动。如果活动正在进行,用户可以通过存款指定数量的加密货币来加入。为了保持在打孔活动中的积极性,用户必须每天打孔;如果失败,将导致他们的存款被没收。在每次打孔活动结束时,所有存款将平均分配给每天坚持打孔的用户。

我们的项目旨在建立目标发起者和目标追逐者之间的联系,使我们的用户能够在获得金钱奖励的同时实现目标;同时,那些缺乏毅力的人将面临后果。

# 创意来源

从项目一开始,我们就想了解更多关于如何构建 DAPP 的知识。我们首先想要复制一个众筹 DAPP。但在那个众筹项目中,我们创新地增加了在众筹截止日期前申请使用资金的功能。发起人可以在他认为需要的时候申请。但他必须填写一份申请表,并解释这笔资金的用途。然后,赞助者可以在使用详情部分查看此应用程序。发起人可以选择同意或拒绝发起人的申请。如果商定的总百分比超过 50%,那么发起者可以获得这笔资金供他使用。

然后,我们有了 “打拳” 的想法。这是因为我们在准备实习或全职工作面试时经常需要练习 LeetCode。但由于人们有惯性,我们不能坚持练习很长时间。更具体地说,我们中的许多人可能都有这样的情况:我们有一个重要的目标要实现,也许用 LeetCode 更好地编程,或者像外国人一样用托福练习英语,但只是没有足够的内在动力来实现它。在过去,许多新年计划由于缺乏自我控制而被放弃。所以,我们需要一些激励和惩罚。这就是我们的 “Punch Go” DAPP 旨在提供的。“打拳” 这个概念近年来一直是一个热门话题,一群人有一个共同的目标,并相互监督以实现这一目标。在区块链技术的帮助下,我们可以将打卡的想法推向更高的标准。在 “Punch Go” 的典型场景中,存在三个利益相关者:提出共同目标的项目发起人,拥有相同目标并愿意致力于此的一群人,以及将双方联系在一起的平台。

之后,我们发现 “打卡” 与 “众筹” 有着非常紧密的内在联系。本质上,他们都是从参与者 (赞助商) 那里收钱,然后再进行再分配。在 “众筹” 中,资金被重新分配给发起人。但在 “打卡” 中,资金被重新分配给每一个坚持 “打卡” 活动的人。

此外,我们建议必须增加一些 “打卡” 的监督机制。我们不能让用户的 “打卡” 立即得到同意,因为用户可能会作弊。因此,我们增加了 “批准” 和 “拒绝” 功能,以便用户监督其他人的 “打卡”。一旦 “打卡” 得到 50% 以上剩余参与者的认可,即为有效。幸运的是,这与我们在 “众筹” 系统中完成的实现是相似的。

# 开发框架

# 环境配置

技术栈: Nodejs + React + Solidity

前端 UI: bootstrap

要运行这个项目,您需要为这个 DAPP 设置基本环境。你应该安装 React + Web3 + npm + truffle。此外,您应该在 Edge 浏览器中安装 MetaMask。您还应该在 Edge 浏览器中安装 MetaMask Legacy Web3 扩展,以便我们的网站可以与区块链进行交互。

注意:这里你可以使用 Edge 或 Firefox 浏览器来运行我们的项目,Chrome 不受支持,因为它不能安装 MetaMask Legacy Web3 扩展。

# 启动步骤

  1. 使用 Ganache 导入 truffle-config.js

alt text

  1. 使用命令 “truffle migrate” 编译 solidity 的智能合约

  2. 在 Ganache 中找到部署的合同地址,并将该地址复制到 “client/src/eth/punch .js” 第 299 行地址变量中

alt text

  1. 使用 CMD 命令进入客户端目录 "cd client"

  2. 使用 npm 来安装依赖 "npm install"

  3. 运行这个项目 "npm run start"

  4. 如果运行成功,您可以在 “localhost:3000” 上找到我们的项目。

home

# 功能介绍

如前所述,第一个实现的想法是一个众筹应用程序,它支持用户发起融资或参与特定的众筹项目。当一个特定的资金发起者想要花费这笔钱时,需要一半的参与者批准交易,项目发起者才能真正花费所需的金额。

在我们建立了这个众筹平台之后,我们提出了另一个名为 “Punch Go” 的想法来帮助人们完成日常任务。考虑到众筹 DAPP 更像是初学者的启动项目,我们决定用这个新想法来真正动手。背后的理论是非常相似的。在本节中,我们将重点讨论第二个想法的功能。

首先,在我们进入细节之前,需要对 “Punch Go” 的整体情况进行简要介绍。我们的应用程序,顾名思义,是帮助人们摆脱拖延症的监督者。这是一个人们可以发起或参与打拳活动的平台。当然,参加这样的活动需要一些钱来激励个人每天打卡,但如果参与者达到了他们设定的目标,他们就会得到奖励,分享池中的存款。现在我们来看一下详细的功能。

在我们的应用程序的主页上,它显示了网络上所有活动的概述,包括打孔活动的总数、已完成的打孔活动和正在进行的打孔活动。如果用户有兴趣,可以导出所有打孔活动的统计报表。此外,用户的账户地址将显示在页面的右上角,供用户查看和确认钱包中当前的加密货币账户。一旦用户在 MetaMask 中更改帐户,金额将立即在我们的前端更新。此外,还增加了搜索功能,以便用户可以找到任何记录的感兴趣的打孔活动。

其次,启动器的最小功能单元是启动一个新的冲孔活动。在 “打孔发起” 一栏,用户可以填写自己的打孔活动信息,包括活动名称、主要目标、截止时间、参与金额等。将检查每条消息的有效性。一旦所有输入的信息都是有效的,发起者就可以确认这个新的活动,它将更新网络中部署的合约。应用程序将自动连接到 MetaMask,并扣除此类操作的 gas 费用。

在 “All Punches” 部分中,记录中存储的每个活动都将显示为带有其名称和状态标记的块标记。通过点击 “查看详情”,将显示有关这些活动的所有具体信息。“查看详情” 面板包含发起人的信息,以及活动操作过程的必要信息,包括项目状态 (已完成或正在进行),总保证金,参与本次打孔活动的总人数以及剩余参与者 (因为有些人可能会放弃)。如果您不是本次活动的发起者,会有一个 “我想参与” 按钮让您加入当前的活动。一旦你加入了一个活动,右上角会有一个绿色的打孔按钮,你可以在那里打孔。

还有一个界面供用户检查与自己相关的活动。参与者可以在 “参加的出拳次数” 一栏查看出拳情况,以便监督自己参加的所有出拳的过程。发起者也可以在 “发起打孔” 中查看自己发起的活动信息,查看打孔活动情况。

活动通常会在截止日期前结束,只要你完成了你设定的目标,你就会得到一份。但是,如果您在活动期间放弃,您的会议将提前结束,您将被从参与者名单中除名,以防止一些恶意投票。

具体来说,有一种机制让参与者每天打卡。如上图所示,发起者可以提交一个包含打孔日期和打孔内容的表单。此时,项目详情页面将出现一个状态栏 (如下图所示)。
。其他参与者可以根据是否同意而选择批准或拒绝打孔请求。一旦超过 50%的参与者同意这样的请求,你就成功打卡了。如果在一定时间内没有足够的人同意,该请求将被拒绝,该用户将被移出参与者列表。

![](/assets/punch_go/0% approve.png>)

![](/assets/punch_go/100% appove.png)

initiation success

alt text

alt text

alt text

# 效果展示

在本部分中,我们将向您展示应用程序中的一些特定示例。整个主页如图 \ref {fig:home} 所示,展示了账号地址和搜索功能。显示总览统计信息,并显示进程速率。

我们假设有人想要建立一个新的冲孔活动,如图 \ref {fig:Initiate a punch} 所示。应用程序将给出如图 \ref {fig:initiation success} 所示的响应。因此,将设置一个名为 “leetcode” 的冲床,其状态为 “正在进行”,其参与费用和截止日期见图 \ref {fig:activity detail}。当有人有相同的目标,想要加入这样的活动来提高自己时,“我想参与” 按钮位于页面的左下角。用户进入冲床后,通过图 \ref {fig:Punch detail} 中的 “冲床” 功能完成每天的任务并提交内容进行验证。其他用户可以选择同意或拒绝某人的 “工作”,就像图 \ref {fig:Punch-checking} 一样。如果您选择批准穿孔内容,将出现图 \ref {fig:approve respond} 的响应。只要超过 50%的人同意你的 punch,当天的任务就可以确定了。以便参与者可以在第二天继续打孔活动。所有的冲孔都可以在图 \ref {fig:All punches} 上看到。作为发起人,您可以管理您的活动页面 “发起的拳头”,如图 \ref {fig:activity initiated} 所示。而对于参与者,图 \ref {fig:activity participated} 中的信息将为您提供所参加活动的一致更新。

# 结论及未来工作

我们项目的意义在于将拥有相同目标的人们联系在一起。我们使用 Node.js, React 和 Solidity 开发了一个 DAPP 平台,使不同的人之间能够进行共享价值的交流。平台功能包括显示正在进行的冲孔活动进度和完成的冲孔目标的仪表板,启动冲孔活动并提供发起者输入信息,冲孔活动完成后向目标实现者发送费用。

对于未来的工作,我们的目标是增加功能,使我们的平台更容易使用,并具有更丰富的功能。完善监督机制,加强制度安全是我们的首要任务。解决活动被恶意方控制的风险对于保护其他用户非常重要。我们计划为那些认为自己的打卡被拒绝时应该被批准的用户增加申诉机制的功能。此外,给别人打卡 “拒绝” 标签的用户也应该在我们 DAPP 的未来版本中说明他们的理由。另外,我们计划增加活动发起者每天设置一些任务,要求参与者打卡的功能。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Miralce 微信支付

微信支付

Miralce 支付宝

支付宝