Pierwszy krok: inicjalizacja projektu Blocklet
blocklet create my-abt-staking-dapp
# Wybierz szablon React + Node.js
Drugi krok: logika stakowania po stronie serwera (Node.js)
Po stronie serwera musisz obsłużyć żądanie transakcji stakowania od użytkownika.
// server/api/routes/staking.js
const { Wallet } = require('@arcblock/forge-wallet');
const { Mcrypto } = require('@arcblock/mcrypto');
// Załóżmy, że to jest twój adres DApp (do odbierania stakowanych ABT)
const VAULT_ADDRESS = 'z1...your_vault_address';
async function createStakeTx(userDid, amount) {
// Tworzy transakcję transferu, aby użytkownik mógł wysłać ABT do skarbca
// W ArcBlock zazwyczaj odbywa się to poprzez wygenerowanie głębokiego linku, aby portfel DID mógł podpisać
return {
to: VAULT_ADDRESS,
value: amount, // jednostka to najmniejsza jednostka tokenów
memo: 'Staking for Rewards',
};
}
Krok drugi: interfejs użytkownika (React)
Użyj @arcblock/did-connect dostarczonego przez ArcBlock do obsługi połączenia portfela i płatności.
// src/components/StakeButton.jsx
import DidConnect from '@arcblock/did-connect/lib/Connect';
function StakeComponent() {
const [amount, setAmount] = useState(0);
return (
<div className="staking-card">
<h2>Stakuj ABT, aby zarabiać na prawach</h2>
<input
type="number"
onChange={(e) => setAmount(e.target.value)}
placeholder="Wprowadź ilość stakowania"
/>
<DidConnect
action="stake"
checkFn={api.get('/api/check-stake-status')}
onSuccess={() => alert('Stakowanie zakończone sukcesem!')}
// Przygotowanie tutaj wywoła backendową funkcję createStakeTx
prepareFn={api.get(`/api/prepare-stake?amount=${amount}`)}
>
Stakuj teraz
</DidConnect>
</div>
);
}
Krok trzeci: logika obliczania zysków (symulacja)
Ponieważ ABT obecnie nie ma natywnej nagrody za inflację, twoje nagrody za staking mogą być ustawione na:
• Punkty ekosystemu: używane do wymiany na usługi innych Blockletów.
• Odznaki NFT: jako dowód głosowania w przyszłej administracji.