Los contratos inteligentes de Solana Rust tienen acceso a
solana_program::clock::Clock::get()?.unix_timestamp
que está a segundos de epoch (medianoche del 1 de enero de 1970 GMT) pero tiene una desviación significativa de cualquier zona horaria del mundo real como producto de las ralentizaciones de Solana a lo largo del tiempo. Muchos contratos tienen en cuenta esta marca de tiempo de Unix al calcular los montos de las recompensas (en particular, Step Finance y, por lo tanto, Gem Farm, que reutiliza la lógica). ¿Cómo puedo reconstruir esta marca de tiempo de Solana unix en el front-end en JavaScript sin requerir ninguna transacción / firma de billetera? Las llamadas a un RPC de nodo de Solana están bien.
Puede usar el punto final getBlockTime
de JSON RPC. Primero necesitará la ranura más alta usando getSlot
. Eso se convertiría en:
const connection = new Connection('https://api.testnet.solana.com', 'processed'); const slot = await connection.getSlot(); const timestamp = await connection.getBlockTime(slot);
Más información en https://docs.solana.com/developing/clients/jsonrpc-api#getblocktime y https://docs.solana.com/developing/clients/jsonrpc-api#getslot