UNPKG

@dumbdevs/scaffold-move

Version:

Scaffold generator for Movement Labs DApps in TypeScript

150 lines (137 loc) 4.54 kB
/* eslint-disable @typescript-eslint/ban-ts-comment */ import razorLogo from './assets/logo.png'; import './App.css'; import { ConnectButton, useAccountBalance, useWallet, ErrorCode, formatCurrency, } from '@razorlabs/razorkit'; import { InputEntryFunctionData } from '@aptos-labs/ts-sdk'; function App() { const wallet = useWallet(); const { balance } = useAccountBalance(); function uint8arrayToHex(value: Uint8Array | undefined) { if (!value) return ''; // @ts-ignore return value.toString('hex'); } async function handleSignMsg() { if (!wallet.account) return; try { const msg = 'Hello world!'; const result = await wallet.signMessage({ message: msg, nonce: '0', }); console.log('verify signedMessage', result); if (!result.status) { alert(`signMessage succeed, but verify signedMessage failed`); } else { alert(`signMessage succeed, and verify signedMessage succeed!`); } } catch (e) { console.error('signMessage failed', e); alert('signMessage failed (see response in the console)'); } } async function handleSignTransaction() { if (!wallet.account) return; try { const recipient = '0xfaded96b72a03b2ed9e2b2dc0bef0642d63e07fd7b1eeeac047188eb1ef34dd6' const payload: InputEntryFunctionData = { function: '0x1::aptos_account::transfer', functionArguments: [recipient, 100000000], typeArguments: [], }; const result = await wallet.signAndSubmitTransaction({ payload: payload }); if (result.status === 'Approved') { alert(`signTransaction succeed, hash: ${result.args.hash}`); } else { alert('signTransaction failed'); } } catch (e) { console.error('signTransaction failed', e); } } const getWalletStatus = () => { if (wallet.connecting) return 'connecting'; return wallet.connected ? 'connected' : 'disconnected'; }; return ( <div className="App"> <div> <a href="https://vitejs.dev" target="_blank"> <img src="/vite.svg" className="logo" alt="Vite logo" /> </a> <a href="https://github.com/razorlabsorg/razorkit" target="_blank"> <img src={razorLogo} className="logo" alt="Razor logo" /> </a> </div> <h1>Vite + Razor Kit</h1> <div className="card"> <ConnectButton style={{ marginTop: '16px', background: 'linear-gradient(180deg, #FFD800 0%, #FDAB32 100%)', }} onConnectSuccess={(name) => { console.log('connect success: ', name); }} onConnectError={(err) => { //@ts-ignore if (err.code === ErrorCode.WALLET__CONNECT_ERROR__USER_REJECTED) { console.warn( 'user rejected the connection to ' + err.details?.wallet, ); } else { console.warn('unknown connect error: ', err); } }} onDisconnectSuccess={(name) => { console.log('disconnect success: ', name); }} onDisconnectError={(err) => { console.log('disconnect error: ', err); }} /> {!wallet.connected ? ( <p>Connect DApp with Razor wallet from now!</p> ) : ( <div> <div> <p>current wallet: {wallet.adapter?.name}</p> <p>wallet status: {getWalletStatus()}</p> <p>wallet address: {wallet.account?.address}</p> <p>current network: {wallet.chain?.name}</p> <p> wallet balance:{' '} {formatCurrency(balance ?? 0, { withAbbr: false, decimals: 8, })}{' '} MOVE </p> <p> wallet publicKey: {uint8arrayToHex(wallet.account?.publicKey)} </p> </div> <div className={'btn-group'} style={{ margin: '8px 0' }}> <button onClick={handleSignMsg}>signMessage</button> </div> <div className={'btn-group'} style={{ margin: '8px 0' }}> <button onClick={handleSignTransaction}>signTransaction</button> </div> </div> )} </div> <p className="read-the-docs"> Click on the Vite and Razor logos to learn more </p> </div> ); } export default App;