百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

使用 Coinbase 钱包-新用户指南 coinbase支付教程

yuyutoo 2024-10-11 21:38 2 浏览 0 评论

了解如何使用 Coinbase 钱包让新用户更轻松地加入您的 Web3 DApp,然后看看它是如何使用包含的项目和代码示例完成的。

Web3 代表了互联网发展的激动人心的篇章。区块链提供的原语将导致无限数量的应用程序和用例。我们已经看到了 ICO、DeFi、NFT 和点对点支付系统的爆炸式增长。然而,在实现这项新技术的大规模采用之前,我们还有很长的路要走。用户体验是仍然缺乏的一个领域。

作为 Web3 开发人员,当普通人不了解非托管加密钱包或签名交易等概念时,我们应该如何吸引下一波用户?本文将探讨这个问题,并提供一个解决方案来帮助创造更好的用户体验。我们将看一个真实世界的示例,说明我们如何使用Coinbase 钱包 SDK为新用户创建无缝的入职体验。

现实世界的问题

Web3 中最有趣的概念之一是医疗保健和区块链技术的交叉点。HIPAA 合规性意味着患者记录可能不应该放在公共区块链上。但是,我们可以通过数百种其他方式使用区块链来彻底改变医疗保健行业。

在任何医疗机构工作之前,医护人员 (HCW) 必须经过超过六周的审查和验证。医院系统损失的时间和收入是巨大的。受信任的第三方连续数周进行认证验证、背景调查等,而 HCW 却没有得到报酬,医院系统必须寻找临时工来填补空缺。这是区块链可以解决的问题。凭借区块链的不变性,一旦认证得到验证,就再也不必发生了。

Web3 解决方案

为了解决这个问题,我想构建一个名为 Health Verify (HV) 的认证验证 DApp,如果 HCW 证书被成功验证,它会生成 NFT。该解决方案可以采取许多不同的途径:保证匿名的ZK 证明,使用Arweave或Ceramic作为所有经过验证的证书的 Schelling 点,等等。在我看来,一切都取决于首次使用加密货币用户的入职质量。

由于用户需要钱包浏览器扩展才能与 Web3 应用程序交互,因此不熟悉该技术的人应该考虑一下。仅仅看到一个几乎没有上下文的“连接钱包”按钮可能会给人留下令人生畏的第一印象,因此我们希望让事情尽可能顺利。

如果用户尚未安装钱包扩展程序,Coinbase 钱包是少数提供入门体验的钱包之一。使用这个钱包是有意义的,因为 Coinbase 是 Web3 中一个值得信赖的名称,它为新用户提供了一个安全的入口,同时允许现有用户轻松连接到我的 DApp。

在本文的其余部分,我们将专注于构建 Health Verify DApp 的第一部分。我们将创建入门页面并集成 Coinbase 钱包 SDK,以便用户轻松连接现有钱包或创建新钱包。

该项目

让我们开始把所有东西放在一起。React 是构建 DApp 时的日常库。我首选的健康验证库包括:

  • Next.js:生产环境的理想 React 框架
  • Wagmi Hooks:React Hooks 集合,包含开始使用以太坊所需的一切
  • Infura RPC 提供者:高度可用的以太坊 API
  • Coinbase Wallet SDK:Coinbase Wallet SDK(前身为 WalletLink)允许开发者在移动网络(iOS 和 Android)和桌面上将他们的 DApp 连接到 Coinbase Wallet
  • Chakra UI:一个简单、模块化且可访问的组件库,为您提供构建 React 应用程序所需的构建块

至于功能,这里是本文的范围:

  • 入职:允许 HCW 在没有钱包的情况下注册。
  • 验证: HCW 从支持的认证列表中选择,提交一些信息,然后将其发送到服务器进行手动验证。验证完成后,发行 NFT。

在本文中,我们将为此工作流的提交部分构建一个简单的界面,包括 Coinbase 钱包的入职流程。

执行

注意:如果您愿意,可以在此处查看代码库。

好的,建立时间!Next.js 从一出现就一直是 React 生态系统的宠儿。就个人而言,我喜欢不与 React Router 打交道,所以在开始任何 React 项目时它都是我的首选。对于健康验证,我们将从安装 Next.js 和 Chakra UI 开始。我在这篇文章中使用了 Typescript,但你可以使用 Javascript,一切都应该是一样的,没有所有的打字样板。

第 1 步:安装 Next.js

  • 转到您的终端并键入以下命令:
 npx create-next-app@latest --typescript


  • 按照提示输入应用名称。如果一切顺利,那么您应该有一个全新的 Next.js 安装。

第 2 步:安装和配置 Chakra UI

多年来,我使用了许多不同的 UI 库,但在拥有如此出色的开发人员体验的同时,我还没有发现任何对 UI 元素设计不以为然的东西。因此,我强烈推荐 Chakra UI 库。

  • 导航到您在终端的步骤 1 中创建的项目文件夹并运行以下命令:
yarn add @chakra-ui/react @emotion/react@^11 @emotion/styled@^11 framer-motion@^6


  • 导入 Chakra UI 提供程序,并将其添加到_app.tsx文件中。在这个阶段,_app.tsx应该如下所示:

TypeScript-JSX

import type { AppProps } from "next/app"
import { ChakraProvider } from "@chakra-ui/react"

function MyApp({ Component, pageProps }: AppProps) {
    return (
        <ChakraProvider>
            <Component {...pageProps} ></Component>
        </ChakraProvider>
    );
}

export default MyApp;


第 3 步:安装 Coinbase 钱包 SDK 和 Wagmi Hooks

通过运行以下命令安装 Coinbase Wallet SDK 和 Wagmi Hooks:

yarn add @coinbase/wallet-sdk wagmi ethers


注意:Ethers 是 Wagmi 依赖项。

第 4 步:获取 Infura ID

Infura 的以太坊高可用性 API 将帮助我们开始使用 Health Verify。我们正在为 Coinbase 钱包配置一个备份提供程序,以用于不使用注入提供程序的请求。此步骤是可选的。您可以按照此 Infura 指南 启动和运行 Infura 项目。

获得 Infura ID 后,通过添加以下键来编辑.env.local :

REACT_APP_INFURA_ID=xxxxxxIDHERE*******


第 5 步:配置 Wagmi 和 Coinbase SDK

我们可以主要通过连接器来实?现 Coinbase Wallet SDK 和 Wagmi 之间的集成。连接器是提供者的包装器,可以注入或来自托管或非托管钱包。Wagmi 内置了对 Coinbase 钱包的支持,这使得集成变得轻而易举。

  • 在项目的根目录中创建一个文件并将其命名为connector.ts。这实际上可以位于任何地方。我把我的放在项目根目录的utils文件夹中。
  • 我选择支持 Metamask 以及 Health Verify,因为它有助于我的测试并为某些用户提供替代方案。

连接器.ts

TypeScript-JSX

import { CoinbaseWalletConnector } from 'wagmi/connectors/coinbaseWallet'
import { MetaMaskConnector } from 'wagmi/connectors/metaMask'
import { chain } from 'wagmi'

const APP_NAME = 'Health Verify'
const APP_LOGO_URL = 'https://ethereum.org/static/a110735dade3f354a46fc2446cd52476/f3a29/eth-home-iconwebp'

export const connectors = [
    new CoinbaseWalletConnector({
        chains: [chain.mainnet],
        options: {
            appName: APP_NAME,
            appLogoURL: APP_LOGO_URL,
    }}),
    new MetaMaskConnector({
        chains: [chain.mainnet],
        options: {
            shimChainChangedDisconnect: false,
        },
    }),
]


第 6 步:配置 Wagmi Hooks

我喜欢 Wagmi Hooks 库的简单性。您需要做的就是将您的应用程序包装在WagmiConfig组件中,然后您就可以在 DApp 上使用 React Hooks。而已。对于健康验证,我必须通过以下方式编辑_app.tsx :

  • 从 Wagmi 库中导入 Wagmi Hooks 提供程序、createClient、configureChains和链对象。您可以在 Wagmi 文档中阅读它们的全部功能。
  • 使用您在步骤 4 中创建的 Infura ID 初始化变量。
  • 用于configureChains创建提供程序。在这个阶段,您还可以传递支持的链数组。我正在使用主网和多边形。Connector注意:您可以在步骤 5 中创建的对象中配置支持的链。

在此步骤结束时,您的_app.tsx文件应如下所示:

_app.tsx

TypeScript-JSX

import type { AppProps } from 'next/app'
import { providers } from 'ethers'
import {ChakraProvider } from '@chakra-ui/react'
import { WagmiConfig, createClient, configureChains, chain } from 'wagmi'
import { connectors } from '../utils/connectors'
import { infuraProvider } from 'wagmi/providers/infura'

const infuraId = process.env.REACT_APP_INFURA_ID
const { provider } = configureChains(
    [chain.mainnet, chain.polygon],
    [infuraProvider({ infuraId })],
)

const client = createClient({
    connectors,
    provider,
})

function MyApp({ Component, pageProps }: AppProps) {
    return (
        <ChakraProvider>
            <WagmiConfig client={client}>
                <Component {...pageProps} ></Component>
            </WagmiConfig>
        </ChakraProvider>
    )
}

export default MyApp


在此之后,您可以通过运行来启动 Next.js 实例yarn dev。但是,如果您这样做,您将看到样板 Next.js 主页。让我们解决这个问题。

第 7 步:连接钱包模式

现在是有趣的部分。我不会专注于我将使用的特定 Chakra UI 元素,但我会关注几个很酷的 Wagmi 钩子,我们需要使用这些钩子来构建响应钱包连接状态的动态 UI。

  • useAccount:用于访问已连接的帐户。我们可以根据这个二进制值切换 UI 状态
  • useConnect:用于使用配置的连接器访问帐户

对于 Connect Wallet 模式,我们正在加载我们之前配置的连接器,并向用户显示支持的钱包选项。这一切都在一起了——打蜡,打蜡。

SelectWalletModal.tsx

TypeScript-JSX

import {
    VStack,
    HStack,
    Modal,
    ModalOverlay,
    ModalContent,
    ModalHeader,
    ModalBody,
    ModalCloseButton,
    Button,
    Text,
    Image,
} from '@chakra-ui/react'
import { useConnect } from 'wagmi'

export type SelectWalletModalProps = {
    isOpen: boolean;
    closeModal: () => coid;
}

export default function SelectWalletModal({
    isopen,
    closeModal,
}: SelectWalletModalProps) {
    const { data } = useConnect();
    const {
        activeConnector,
        connect,
        connectors,
        error,
        isConnecting,
        pendingConnector,
    } = uesConnect();

    return (
        <Modal isOpen={isOpen} onClose={closeModal} isCentered>
            <ModalOverlay ></ModalOverlay>
            <ModalContent w='300px'>
                <ModalHeader>Select Wallet</ModalHeader>
                <ModalCloseButton
                    _focus={{
                        boxShadow: 'none',
                    }}
                ></ModalCloseButton>
                <ModalBody paddingBottom='1.5rem'>
                    <VStack>
                        {activateConnector && <div>Connected to {activeConnector.name}</div>}
                        {connectors.map((connector) => (
                            <Button
                                variant='outline'
                                key={connector.id}
                                disabled={!connector.ready}
                                onClick={() => {
                                    connect(connector);
                                    closeModal();
                                }}
                                w='100%'
                            >
                                <HStack w='100%' justifyContent='center'>
                                  <Image
                                    width={26}
                                    height={26}
                                    borderRadius="3px"
                                    src={walletIcons(connector.name)}
                                    alt={"Wallet"}
                                    ></Image>
                                  <Text>
                                    {connector.name}{" "}
                                    {isConnecting &&
                                    pendingConnector?.id === connector.id &&
                                    " (connecting)"}
                                   </Text>
                             </Button>
                        ))}
                        {error && <Text>(error.message)</Text>}
                    </VStack>
                </ModalBody>
            </ModalContent>
        </Modal>
    );
}


第 8 步:主页用户界面

对于健康验证,我想要的用户体验是用户访问主页,看到一些副本,以及提示用户选择钱包的号召性用语。如果他们没有钱包,那么他们可以快速轻松地创建一个。使用 Coinbase 钱包 SDK 最好的部分是,如果用户没有钱包,他或她仍然可以获得无缝的入职体验并且是 GreenPilled。我们已经完成了很多工作,所以让我们通过组合一个漂亮的 UI 来把它带回家。

index.tsx

TypeScript-JSX

import {
    Flex,
    Box,
    Text,
    Button,
    Container,
    Heading,
    Stack,
    ListItem,
    UnorderedList,
    useDisclosure, } from '@chakra-ui/react'
import type { NextPage } from 'next'
import Head from 'next/head'

import { useAccount, useConnect } from 'wagmi'
import SelectWalletModal from '../components/SelectWalletModal'
import { Certifications } from '../components/certifications'

const Home: NextPage = () => {
    const { data: account } = useAccount()
    const { isOpen, onOpen, onClose } = useDisclosure()

    return (
        <>
            <Head>
                <title>Health Verify</title>
                <meta
                    name='Health Verify'
                    content='Health Verify remembers your certifications'
                />
                <link rel='icon' href='/facivon.ico' />
            </Head>
            <Flex alignItems='center' justifyContent='center'>
                {account ? <Certifications></Certifications> : (
                    <Container maxW={'3x1'}>
                        <Stack
                            as={Box}
                            textAlign={'center'}
                            spacing={{ base: 8, md: 14 }}
                            py={{ base: 20, md: 36 }}
                        >
                        <Heading
                            fontWeight={600}
                            fontSize={{ base: '2x1', sm: '4x1', md: '6x1' }}
                            lineHeight={'110%'}
                        >
                            Never verify your health certifications <br />
                            <Text as={'span'} color={'green.400'}>
                                AGAIN
                            </Text>
                        </Heading>
                        <Text fontSize={'2x1'}>
                            With Health Verify, you can easily verify your health certifications by following the steps below.
                        </Text>
                        <UnorderedList listStyleType='none'>
                            <ListItem>{`Click 'Start' to connect your wallet.`}</ListItem>
                <ListItem>{`If you don't have a wallet, create a Coinbase Wallet by selecting Coinbase Wallet`}</ListItem>
                            <ListItem>Select a certification to verify</ListItem>
                            <ListItem>Enter your Certification ID</ListItem>
                            <ListItem>
                                Wait for our team to verify your certification
                            </ListItem>
                        </UnorderedList>
                        <Stack
                            direction={'column'}
                            spacing={3}
                            align={'center'}
                            position={'relative'}
                        >
                            <Button
                                colorScheme={'green'}
                                bg={'green.400'}
                                rounded={'full'}
                                onClick={onOpen}
                                px={6}
                                _hover={{
                                    bg: 'green.500',
                                }}
                            >
                                Start
                            </Button>
                        </Stack>
                        </Stack>
                    </Container>
                )}
            </Flex>
            <SelectWalletModal isopen={isOpen} closeModal={onClose} ></SelectWalletModal>
        </>
    );
}


现在,如果你热衷于,你会注意到我们只需要一个钩子就可以让一切顺利进行。这也是 Wagmi 如此出色的另一个原因。我们可以很容易地开始使用钩子,而无需为 RPC 或 Contract 交互编写大量样板。Wagmi 有更多的钩子,我鼓励任何人去看看。

所以现在我们有了 UI,我们可以把所有东西放在一起。让我们启动应用程序,看看我们渲染的应用程序是什么样子的。如果您已正确配置所有内容,那么您的主页应如下图所示:

当您单击“开始”时,应弹出以下 Connect Wallet 模式:

选择“ Coinbase Wallet ”,如果您正确配置了所有内容,它应该会显示 Coinbase Wallet SDK“安装”对话框,允许用户使用他们的手机注册或安装 Coinbase Wallet。

如果用户选择“安装”,则会提示他们安装 Coinbase 钱包浏览器扩展,并引导他们完成最终设置。这正是我们希望加密新手用户获得的用户体验。现在我们可以加入全新的用户,我们可以继续构建 Health Verify。

结论

Web3 引入的技术无疑将增强我们数字生活的许多领域。我们仅处于开发的早期阶段,但用例和应用程序已经在增长。然而,为了获得更广泛的采用,用户体验需要改善。

在本文中,我们回顾了如何使用 Next.js、TypeScript、Wagmi 和 Coinbase Wallet SDK 构建 DApp。只需很少的配置,我们就能够为新的加密用户提供出色的用户体验。现在,我们可以进一步构建 Health Verify。




相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: