코스모스 블록체인에 프런트엔드를 연결하는 방법
25854 단어 reactjavascriptdappweb3
브라우저에 Keplr 지갑 확장 프로그램을 설치하고 아직 등록하지 않은 경우 계정을 만드십시오.
이미 typescript, eslint, prettier 및 chakra UI가 있는 템플릿strangelove's starter을 사용하여 웹 사이트를 부트스트랩해 보겠습니다.
git clone https://github.com/strangelove-ventures/strangestarter.git cosmos-frontend
pnpm
를 사용하여 패키지 설치cd ./cosmos-frontend
pnpm install
pnpm dev
자 이제 리포지토리를 부트스트랩한 후 지갑과 대시보드에 연결하기 위한 간단한 UI를 만들어 보겠습니다.
// website/pages/index.tsx
import { Box, Button, Center, HStack, Stack, Tag, TagLabel, TagLeftIcon, Text } from "@chakra-ui/react";
export default function HomePage() {
return (
<Center minH="100vh">
<Stack bgColor="whiteAlpha.100" boxShadow="md" maxW="md" p={4} rounded="md" spacing={4} w="full">
<HStack>
<Tag>
<TagLeftIcon as={Box} bgColor="red.500" boxSize={3} rounded="full" />
<TagLabel>Disconnected</TagLabel>
</Tag>
</HStack>
<Text>
Active chain id: <b>Chain</b>
</Text>
<Text>
Name: <b>Kiki</b>
</Text>
<Text noOfLines={1} wordBreak="break-all">
Address: <b>...</b>
</Text>
<HStack align="end" pt={4}>
<Button>Connect Wallet</Button>
</HStack>
</Stack>
</Center>
);
}
당신은 다음과 같은 것을 갖게 될 것입니다 :
Keplr의 API를 사용하려면 해당 APIAPI documentation를 참조할 수 있습니다. 사용자가 이미 연결된 경우와 같이 상태를 관리해야 합니다. offlineSigner 및 기타 복잡한 상태를 생성합니다.
다행히 Strangelove는 Keplr API의 복잡성을 추상화하고 이를 React 후크로 래핑하는 패키지graz를 만들었습니다. documentation website에는 다음과 같은 기능이 있습니다.
ChainInfo
이제 프로젝트에
graz
를 설치해 보겠습니다.pnpm website install graz
GrazProvider
로 앱을 래핑하고 기본 체인을 cosmoshub 또는 원하는 것으로 설정합니다.// website/pages/_app.tsx
import { ChakraProvider } from "@chakra-ui/react";
import type { AppProps } from "next/app";
import { theme } from "styles/theme";
import { Layout } from "ui/layout";
+ import { GrazProvider, mainnetChains } from "graz";
export default function CustomApp({ Component, pageProps }: AppProps) {
return (
<ChakraProvider resetCSS theme={theme}>
+ <GrazProvider
+ grazOptions={{
+ defaultChain: mainnetChains.cosmoshub,
+ }}
+ >
<Layout>
<Component {...pageProps} />
</Layout>
+ </GrazProvider>
</ChakraProvider>
);
}
연결 및 연결 해제
graz
는 연결 및 연결 해제에 사용할 수 있는 돌연변이 후크를 제공하므로 이러한 함수의 논리를 유지할 필요가 없습니다. 간단히 useConnect()
및 useDisconnect()
를 사용하여 연결 기능을 갖습니다.사용자가 이미 연결되어 있는지 확인하기 위해
graz
라는 후크가 있습니다 useAccount()
. 반환 개체 중 하나는 isConnected
입니다.// website/pages/index.tsx
import { Box, Button, Center, HStack, Stack, Tag, TagLabel, TagLeftIcon, Text } from "@chakra-ui/react";
import { useAccount, useConnect, useDisconnect } from "graz";
export default function HomePage() {
const { isConnected } = useAccount();
const { connect } = useConnect();
const { disconnect } = useDisconnect();
return (
<Center minH="100vh">
<Stack bgColor="whiteAlpha.100" boxShadow="md" maxW="md" p={4} rounded="md" spacing={4} w="full">
<HStack>
<Tag>
<TagLeftIcon as={Box} bgColor={isConnected ? "green.500" : "red.500"} boxSize={3} rounded="full" />
<TagLabel>{isConnected ? "Connected" : "Disconnected"}</TagLabel>
</Tag>
</HStack>
<Text>
Active chain id: <b>Chain</b>
</Text>
<Text>
Name: <b>Kiki</b>
</Text>
<Text noOfLines={1} wordBreak="break-all">
Address: <b>...</b>
</Text>
<HStack align="end" pt={4}>
<Button onClick={() => (isConnected ? disconnect() : connect())}>
{isConnected ? "Disconnect" : "Connect Wallet"}
</Button>
</HStack>
</Stack>
</Center>
);
}
연결된 정보 표시
연결 기능이 있으면 연결 정보를 표시해야 합니다.
useAccount()
에서 연결된 계정 정보를, useActiveChain()
에서 현재 활성 체인을 얻을 수 있습니다.// website/pages/index.tsx
import { Box, Button, Center, HStack, Stack, Tag, TagLabel, TagLeftIcon, Text } from "@chakra-ui/react";
import { useAccount, useActiveChain, useConnect, useDisconnect } from "graz";
export default function HomePage() {
const { isConnected, data: account } = useAccount();
const { connect } = useConnect();
const { disconnect } = useDisconnect();
const activeChain = useActiveChain();
return (
<Center minH="100vh">
<Stack bgColor="whiteAlpha.100" boxShadow="md" maxW="md" p={4} rounded="md" spacing={4} w="full">
<HStack>
<Tag>
<TagLeftIcon as={Box} bgColor={isConnected ? "green.500" : "red.500"} boxSize={3} rounded="full" />
<TagLabel>{isConnected ? "Connected" : "Disconnected"}</TagLabel>
</Tag>
</HStack>
<Text>
Active chain id: <b>{activeChain?.chainId}</b>
</Text>
<Text>
Name: <b>{account?.name}</b>
</Text>
<Text noOfLines={1} wordBreak="break-all">
Address: <b>{account?.bech32Address}</b>
</Text>
<HStack align="end" pt={4}>
<Button onClick={() => (isConnected ? disconnect() : connect())}>
{isConnected ? "Disconnect" : "Connect Wallet"}
</Button>
</HStack>
</Stack>
</Center>
);
}
축하합니다. 이제 앱이 코스모스 생태계에 연결되었습니다.
Graz의
connect
와 함께 useConnect()
하면 자동으로 offlineSigners
, Clients
, SigningClients
를 생성합니다. 이러한 것들과 상호 작용하려면 useOfflineSigners()
, useClients()
및 useSigningClients()
에서 세부 정보를 얻을 수 있습니다.graz에는 잔액을 보기 위한 useBalances(), 토큰을 전송하기 위한
useSendTokens()
, 스테이킹된 토큰 수를 확인하기 위한 useBalanceStaked()
등 많은 유용한 후크가 있습니다! 설명서https://graz.strange.love에서 볼 수 있습니다.소스 코드: https://github.com/codingki/cosmos-frontend
미리보기: https://cosmos-frontend-graz.vercel.app/
Reference
이 문제에 관하여(코스모스 블록체인에 프런트엔드를 연결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kikiding/how-to-connect-your-frontend-to-cosmos-blockchain-5fcn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)