Scaled UI Amount -integraatio-opas

Scaled UI Amount -laajennuksen tukeminen Solanassa

Taustaa

Scaled UI Amount -laajennus mahdollistaa tokenien liikkeeseenlaskijoille kertoimen määrittämisen, jota käytetään laskettaessa käyttäjän token-saldon UI-määrää. Tämä mahdollistaa rebasing-tokenien luomisen ja esimerkiksi osakkeiden splittauksen. Tämä laajennus, kuten interest bearing token -laajennus, tarjoaa puhtaasti kosmeettisen UI-määrän, mikä tarkoittaa, että tiimien on tehtävä lisätyötä hyvän käyttökokemuksen tarjoamiseksi. Taustalla olevat laskelmat ja siirrot tapahtuvat kaikki käyttäen raakamääriä ohjelmassa.

Resurssit:

TL;DR

  • Loppukäyttäjien tulisi olla vuorovaikutuksessa UIAmountin (raakamäärä * kerroin) kanssa tokenin hinnan, token-saldon ja token-määrien osalta aina kun mahdollista
  • dAppien ja palveluntarjoajien tulisi käyttää raakamäärää ja skaalaamattomia hintoja kaikissa laskelmissa ja muuntaa käyttäjille reunalla
  • Historiallisia hintasyötteitä on tarjottava sekä skaalatuille että skaalaamattomille määrille helpomman integraation vuoksi
  • Historiallisten kertoimien arvojen on oltava saatavilla tarkkaa historiallista dataa varten

Termien määritelmät

  • Kerroin: staattinen päivitettävä kerroin, jota käytetään UI Amount -laskelmissa
  • UIAmount: kerroin * raakamäärä (tunnetaan myös nimellä: skaalattu määrä)
  • Raakamäärä: määrä (tunnetaan myös nimellä: skaalaamaton määrä)

Nykyinen saldo

Nykyinen määrä näyttöä varten

  • Aina kun näytät määriä tokeneille, jotka käyttävät scaled UI amount -laajennusta loppukäyttäjille, sinun tulisi käyttää joko:
    • UIAmount/UIAmountString (suositeltu)
    • Manuaalinen laskelma raakamäärä * kerroin
    • Suosittelemme tämän arvon katkaisemista tokenin desimaalien lukumäärän perusteella.
      • Esim: jos yUSD:llä on 6 desimaalia ja käyttäjällä on UIAmount 1.123456789, sinun tulisi näyttää “1.123456”

Mistä nämä tiedot saa:

  • Käyttäjän reaaliaikaisen saldon osalta voit saada päivitetyt tiedot yllä olevista määristä kutsumalla joko getTokenAccountBalance- tai getAccountInfo-funktiota
  • Jos sinun täytyy tietää UI Amount mielivaltaiselle määrälle, voit saada tämän laskelman kutsumalla amountToUiAmountForMintWithoutSimulation-funktiota (web3.js v1) tai simuloimalla transaktion käyttäen amountToUiAmount-funktiota.
    • Huomio: amountToUiAmount vaatii transaktiosimulaation, mikä tarkoittaa, että se tarvitsee myös kelvollisen maksajan, jolla on saldoa. Tämän vuoksi tämä ei pitäisi olla oletustapa saldon hakemiseen.

RPC-kutsut

  • getTokenAccountBalance
    • Palauttaa token account -saldon ja mint-tiedot
$ curl http://localhost:8899 -s -X POST -H "Content-Type: application/json" -d '
{"jsonrpc": "2.0", "id": 1, "method": "getTokenAccountBalance", "params": ["2uuvxpnEKw52aTqNerHiQ3WeSqZriCMNVt8LhWfrkbPk"]}' | jq .
{
"jsonrpc": "2.0",
"result": {
"context": {
"apiVersion": "2.2.14",
"slot": 381130751
},
"value": {
"amount": "10000000",
"decimals": 6,
"uiAmount": 20.0,
"uiAmountString": "20"
}
},
"id": 1
}
  • getAccountInfo
    • Palauttaa tilin tiedot ja mint-tiedot
$ curl http://localhost:8899 -s -X POST -H "Content-Type: application/json" -d '
{"jsonrpc": "2.0", "id": 1, "method": "getAccountInfo", "params": ["2uuvxpnEKw52aTqNerHiQ3WeSqZriCMNVt8LhWfrkbPk", {"encoding": "jsonParsed"}]}' | jq .
{
"jsonrpc": "2.0",
"result": {
"context": {
"apiVersion": "2.2.14",
"slot": 381131001
},
"value": {
"data": {
"parsed": {
"info": {
"extensions": [
{
"extension": "immutableOwner"
},
{
"extension": "pausableAccount"
}
],
"isNative": false,
"mint": "BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG",
"owner": "G7ARQSUCwNrfvTDUCZvM5xdiRdBJiN3qVw2PryD8Wnib",
"state": "initialized",
"tokenAmount": {
"amount": "10000000",
"decimals": 6,
"uiAmount": 20.0,
"uiAmountString": "20"
}
},
"type": "account"
},
"program": "spl-token-2022",
"space": 174
},
"executable": false,
"lamports": 2101920,
"owner": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
"rentEpoch": 18446744073709551615,
"space": 174
}
},
"id": 1
}

Nykyisen määrän päivittäminen

Koska liikkeeseenlaskijat voivat päivittää kertoimen milloin tahansa, voit harkita säännöllistä kyselyä tilin saldon pitämiseksi ajan tasalla. Liikkeeseenlaskijat eivät todennäköisesti päivitä tätä kerrointa useammin kuin kerran päivässä. Jos kerroin on asetettu tulevalle päivämäärälle, voit automaattisesti kysellä tätä päivitysaikaa

Token-määrät transaktioissa (siirrot / vaihdot jne.)

  • Käyttäjien tulisi syöttää määrät, jotka tulkitaan skaalatuksi "UIAmount"-arvoksi. Sovelluksen, joka käsittelee tämän, tulisi muuntaa se raakamääräksi transaktiota varten.
    • Jos pyöristysongelmia ilmenee, pyöristä alaspäin ja jätä mieluummin pieni määrä pölyä kuin ota riski transaktion epäonnistumisesta
    • Tämän muunnoksen tekemiseen voit käyttää uiAmountToAmountForMintWithoutSimulation-funktiota (web3.js v1) tai simuloimalla transaktion käyttäen amountToUiAmount-funktiota.
web3js-uiAmountToAmountForMintWithoutSimulation.ts
import { uiAmountToAmountForMintWithoutSimulation } from "@solana/web3.js";
import { Connection, PublicKey, clusterApiUrl } from "@solana/web3.js";
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
const mint = new PublicKey("BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG");
const uiAmount = "20.2";
const rawAmount = await uiAmountToAmountForMintWithoutSimulation(
connection as unknown as Connection,
mint,
uiAmount
);
console.log("Raw Amount:", rawAmount);
/* Raw Amount: 20200000 */
  • Sovellusten tulisi käyttää raakamäärän kokonaissummaa, kun käyttäjä pyytää toimintoa "max" tai "kaikki" saldollaan. Tämä varmistaa, ettei jäljelle jää pölyä.
    • Valinnainen: Voit harkita tilin automaattista sulkemista, kun "max" -toimintoa käytetään palauttamaan käyttäjälle tallennustalletus

Tokenin hinta

  • Tokenin hinta tulisi aina näyttää skaalattuna hintana aina kun mahdollista.
  • Jos olet hintasyötepalvelun tarjoaja, kuten oraakkeli, sinun tulisi tarjota sekä skaalattu että skaalaamaton hinta.
    • Tarjoa aina kun mahdollista SDK/API, joka abstrahoi skaalatun käyttöliittymämäärän laajennuksen monimutkaisuudet pois.

Nykyinen kerroin

  • Nykyinen kerroin voidaan lukea token mintistä milloin tahansa kutsumalla getAccountInfo. Lisäksi, jos tuleva kerroin on asetettu, tämä tieto on myös saatavilla token mintistä. Suosittelemme, ettei tätä kerrointa näytetä, koska se voi hämmentää käyttökokemusta.
import { address, createSolanaRpc } from "@solana/kit";
const rpc_url = "https://api.devnet.solana.com";
const rpc = createSolanaRpc(rpc_url);
const publicKey = address("BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG");
const accountInfo = await rpc
.getAccountInfo(publicKey, { encoding: "jsonParsed" })
.send();
const mintData = accountInfo.value?.data as Readonly<{
parsed: {
info?: {
extensions: {
extension: string;
state: object;
}[];
};
type: string;
};
program: string;
space: bigint;
}>;
const scaledUiAmountConfig = mintData.parsed.info?.extensions?.find(
(extension) => extension.extension === "scaledUiAmountConfig"
) as Readonly<{
state: {
newMultiplierEffectiveTimestamp: number;
newMultiplier: number;
multiplier: number;
};
}>;
const currentMultiplier =
scaledUiAmountConfig?.state &&
Date.now() / 1000 >=
scaledUiAmountConfig.state.newMultiplierEffectiveTimestamp
? scaledUiAmountConfig.state.newMultiplier
: scaledUiAmountConfig.state.multiplier;
console.log("Scaled UI Amount Config:", scaledUiAmountConfig);
console.log("Current Multiplier:", currentMultiplier);
/*
Scaled UI Amount Config: {
extension: 'scaledUiAmountConfig',
state: {
authority: 'G7ARQSUCwNrfvTDUCZvM5xdiRdBJiN3qVw2PryD8Wnib',
multiplier: '2',
newMultiplier: '2',
newMultiplierEffectiveTimestamp: 1743000000n
}
}
Current Multiplier: 2
*/

Historialliset tiedot

Historialliset tiedot hintasyötteelle

  • Historiallisia tietoja tarjoavien palveluiden tulisi tallentaa ja tarjota sekä skaalatut että skaalaamattomat hinnat skaalatun käyttöliittymämäärän laajennukselle.
  • Odotamme skaalattujen määrien käyttöä useimmiten, koska tämä vastaa sitä, miten perinteinen rahoitusmaailma käsittelee tokeneihin liittyviä kaavioita osakkeiden splittien yhteydessä.
  • Kertoimien päivitykset voivat sisältää aikaleiman, joka on menneisyydessä. Suosittelemme lohkon aikaleiman käyttöä historiallisille tiedoille.
  • Huomaa, että aktiivinen kerroin voi olla "multiplier" tai "newMultiplier" riippuen nykyisestä aikaleimaasta ja siitä, milloin uuden kertoimen on määrä aktivoitua.

Historialliset tiedot määrille

  • Jos haluat näyttää aiemmin siirretyn saldon, tarvitset pääsyn kertoimeen kyseisessä slotissa. Voit myös tallentaa UiAmount-arvon siirroille käsitellessäsi transaktioita välttääksesi tämän laskelman tekemisen tulevaisuudessa.

Taaksepäin yhteensopivuus

  • Oletuksena lompakot ja sovellukset, jotka eivät ymmärrä skaalattua UI-määrälaajennusta, näyttävät toiminnon oikean kokonaishinnan kertomalla skaalaamaton hinta * raakamäärä.
  • Ne kuitenkin näyttäisivät skaalaamattoman hinnan, mikä aiheuttaa käyttäjille jonkin verran hämmennystä.
  • Toivomme tämän kannustavan tiimejä päivittämään dappinsa yhteensopiviksi tokenien kanssa, jotka käyttävät skaalattua UI-määrälaajennusta, ja olemme valmiita tarjoamaan tukea tämän prosessin aikana.

Suositellut integrointiprioriteetit alustaa kohden

Yleiset vaatimukset

VaatimusKuvausPrioriteetti
Tue käyttäjätoimintoja käyttäen UiAmountiaKaikkien käyttäjätoimintojen tulisi olla syötettynä UiAmountina, kun UiAmount on käytössä koko sovelluksessa. Jos UiAmount ei ole näkyvissä sovelluksessa, niiden tulisi käyttää raakamääriä, kunnes sovellus päivitetään.P0

Lompakot

VaatimusKuvausPrioriteetti
Näytä skaalattu saldoNäytä skaalattu määrä (uiAmount) ensisijaisena saldona.P0
Tuki tokenisiirroilleLoppukäyttäjien tulisi syöttää siirtomäärät skaalattujen saldojensa kanssa (raakamäärä * saldo).P0
Näytä spot-hintaNäytä skaalattu spot-hinta käyttäjilleP0
Transaktiohistorian metatiedotNäytä skaalattu määrä (UIAmount) jokaiselle siirrolle aina kun mahdollista.P1
Näytä kertoimen päivitykset transaktiohistoriassaKun kertoimen päivityksiä tapahtuu, näytä tämä tapahtumana käyttäjän transaktiohistoriassa sisältäen saadun määränP2
Näytä hintahistoriakaavioHeijasta skaalatut hinnat hintakaaviossaP1
Perehdytys/työkaluvihjeetTarjoa työkaluvihjeitä tai perehdytystä kouluttaaksesi käyttäjiä tokeneista, jotka käyttävät skaalattua ui-määrälaajennustaP2

Selaimet

VaatimusKuvausPrioriteetti
Token-tietosivun parannuksetNäytä metatiedot, kuten skaalattu kokonaismarkkina-arvo ja nykyinen kerroinP0
Näytä skaalattu saldo saldoilleNäytä skaalatut saldot (UiAmount) nykyisille saldoille.P0
Näytä skaalattu saldo tapahtumilleNäytä skaalatut saldot (UiAmount) siirtomäärille historiallisissa tapahtumissa.P0
Näytä skaalattu hinta tapahtumilleNäytä skaalatut hinnat aiemmille tapahtumilleP1
Jäsennä ja näytä kertoimen päivitystapahtumat asianmukaisestiNäytä asianmukaisesti tiedot kertoimen päivityksestäP2

Markkinatietojen kokoajat (esim. CoinGecko, Birdeye)

VaatimusKuvausPrioriteetti
Rajapintapäivitykset skaalattuun dataanLaajenna rajapinnan toiminnallisuutta sisältämään kerroinmuutokset ajan mittaan sekä skaalattu hintasyöte.P0
Kokonaistarjonta skaalatulla säädölläKun näytetään kokonaistarjontaa ja kokonaismarkkina-arvoa, ota skaalatut saldot huomioonP0
Historiallinen hintojen seurantaTarjoa historiallinen kaavio hinnoista käyttäen skaalattua hintaa ajan mittaan.P1
Historiallinen kertoimen seurantaTarjoa historialliset merkinnät kertoimen päivityksistä korkoa tuottaville tokeneille. Huomaa, että kerroinpäivitykset saattavat sisältää aikaleiman, joka on menneisyydessä. Suosittelemme käyttämään lohkon aikaleimaa kerroinpäivityksessä ilmoitetun aikaleiman sijaan historiallisissa tiedoissa.P2
Opetussisältö tai selityksetSisällytä lyhyet kuvaukset tai työkaluvihjeet, jotka selittävät, miten skaalatut tokenit toimivat.P2

Hintasyötteen tarjoajat

VaatimusKuvausPrioriteetti
Skaalatut ja skaalaamattomat hintasyötteetTarjoa hintasyötteet sekä skaalatuille että skaalaamattomille hinnoille.P0
Historiallinen kerroindataTarjoa API:t historiallisilla kertoimen muutoksilla. Huomaa, että kerroinpäivitykset voivat sisältää aikaleiman, joka on menneisyydessä. Suosittelemme käyttämään lohkon aikaleimaa päivityksessä ilmoitetun aikaleiman sijaan historiallisessa datassa.P0
Historiallinen hintadataTarjoa API:t historiallisilla hinnoilla perustuen sekä skaalattuihin että skaalaamattomiin määriin.P0

DEX:it

VaatimusKuvausPrioriteetti
Näytä rebasoitujen tokenien saldotNäytä skaalatut saldot kaupankäynnille tai likviditeetin tarjoamiselle käyttöliittymässä. (backend voi edelleen käyttää raakamääriä)P0
Tuki token-toiminnoilleLoppukäyttäjien tulisi syöttää toimintomäärät UiAmount-saldoillaan (kerroin * raakamäärä).P0
Hintasyötteen mukauttaminenKaikkialla, missä hintasyötettä käytetään nykyisen hinnan näyttämiseen, tarjoa skaalattu hinta loppukäyttäjille.P1
Näytä hintahistoriakaavioHeijasta skaalatut hinnat hintakaaviossaP1

CEX:it

VaatimusKuvausPrioriteetti
Seuraa kertoimen päivityksiäSeuraa kertoimen päivityksiä tokeneille, jotka käyttävät skaalattua ui-määrän laajennusta.P0
Näytä rebasoitujen tokenien saldotNäytä skaalatut saldot kaupankäynnille tai likviditeetin tarjoamiselle käyttöliittymässä. (backend voi edelleen käyttää raakamääriä)P0
Tuki token-toiminnoilleLoppukäyttäjien tulisi syöttää toimintomäärät UiAmount-saldoillaan (kerroin * raakamäärä).P0
Historiallisia toimintoja ei tule skaalata uudelleenHistorialliset toiminnot, kuten kaupat, tulisi näyttää käyttäen tarkkaa skaalattua määrää ja hintaa toiminnan ajankohtana.P1
Seuraa sisäisesti raakasaldojaSeuraa raakasaldoja onchain-transaktioita varten skaalattujen saldojen sijaan. Tämä on tarkempaa ja helpompaa hallita pitkällä aikavälillä.P1
Hintasyötteen mukauttaminenKaikkialla, missä hintasyötettä käytetään nykyisen hinnan näyttämiseen, tarjoa skaalattu hinta loppukäyttäjille.P1
Näytä hintahistoriakaavioHeijasta skaalatut hinnat hintakaaviossa. Tämä sisältää historiallisten hintojen skaalaamisen nykyiseen kertoimeen.P1
Skaalaa hankintahintaHinta per osake tulisi skaalata nykyiseen kertoimeen.P1

Is this page helpful?

Hallinnoi

© 2026 Solana Foundation.
Kaikki oikeudet pidätetään.
Yhdistä