Passo 1: Inizializza il progetto Blocklet
blocklet create my-abt-staking-dapp
# Seleziona il modello React + Node.js
Passo 2: Logica di impegnamento lato server (Node.js)
Nel lato server, devi gestire la richiesta di transazione di impegnamento inviata dall'utente.
// server/api/routes/staking.js
const { Wallet } = require('@arcblock/forge-wallet');
const { Mcrypto } = require('@arcblock/mcrypto');
// Supponiamo che questo sia l'indirizzo di hosting del tuo DApp (utilizzato per ricevere l'ABT impegnato)
const VAULT_ADDRESS = 'z1...your_vault_address';
funzione asincrona createStakeTx(userDid, amount) {
// Costruisci una transazione Transfer, in modo che l'utente invii ABT al tesoro
// Su ArcBlock, questo di solito viene fatto generando un Deep Link per consentire al portafoglio DID di firmare
return {
to: VAULT_ADDRESS,
value: amount, // L'unità è l'unità minima del token
memo: 'Staking per premi',
};
}
Terzo passo: interfaccia utente frontend (React)
Utilizza @arcblock/did-connect fornito da ArcBlock per gestire la connessione del portafoglio e i pagamenti.
// 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>Staking ABT per guadagnare diritti</h2>
<input
type="number"
onChange={(e) => setAmount(e.target.value)}
placeholder="Inserisci la quantità di staking"
/>
<DidConnect
action="stake"
checkFn={api.get('/api/check-stake-status')}
onSuccess={() => alert('Staking completato con successo!')}
// Questi preparativi richiameranno la funzione createStakeTx sul backend
prepareFn={api.get(`/api/prepare-stake?amount=${amount}`)}
>
Staking immediato
</DidConnect>
</div>
);
}
Quarto passo: logica di calcolo dei guadagni (simulazione)
Poiché ABT attualmente non ha un premio nativo di inflazione, i tuoi premi di staking possono essere impostati come:
• Punti ecologici: utilizzati per scambiare altri servizi Blocklet.
• Medaglie NFT: utilizzate come prova per il voto di governance in futuro.