@dumbdevs/scaffold-move
Version:
Scaffold generator for Movement Labs DApps in TypeScript
150 lines (137 loc) • 4.54 kB
JSX
/* 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;