Skaalatun käyttöliittymäsumman integrointiopas
Scaled UI Amount -laajennuksen tukeminen Solanassa
Tausta
Skaalattu UI-määrä -laajennus (Scaled UI Amount) antaa tokenien liikkeeseenlaskijoille mahdollisuuden määrittää kertoimen, jota käytetään laskettaessa käyttäjän tokenisaldon UI-määrää. Tämä mahdollistaa liikkeeseenlaskijoille rebasoivien tokenien luomisen ja asioiden kuten osakkeiden splittauksen toteuttamisen. Tämä laajennus, kuten korkoa tuottava 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 ohjelman raakamääriä.
Resurssit:
Tiivistelmä
- Loppukäyttäjien tulisi käyttää UIAmount-arvoa (raakamäärä * kerroin) tokenin hinnalle, tokenisaldolle ja tokenmäärille aina kun mahdollista
- dApp-sovellusten ja palveluntarjoajien tulisi käyttää raakamäärää ja skaalaamattomia hintoja kaikissa laskelmissa ja muuntaa ne käyttäjille vasta lopussa
- Historiallisia hintatietoja tulee tarjota sekä skaalattuina että skaalaamattomina määrinä helpompaa integrointia varten
- Historiallisten kertoimien arvojen tulee olla saatavilla tarkkoja historiatietoja varten
Termien määritelmät
- Kerroin: staattinen päivitettävä kerroin, jota käytetään UI-määrän laskelmissa
- UIAmount: kerroin * raakamäärä (eli: skaalattu määrä)
- Raakamäärä: määrä (eli: skaalaamaton määrä)
Nykyinen saldo
Nykyinen määrä näyttöä varten
- Aina kun näytät määriä loppukäyttäjille tokeneille, jotka käyttävät skaalattua
UI-määrä -laajennusta, sinun tulisi käyttää joko:
- UIAmount/UIAmountString (suositeltu)
- Manuaalista laskelmaa raakamäärä * kerroin
- Suosittelemme katkaisemaan tämän arvon tokenin desimaalien mää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ä tämä data saadaan:
- Käyttäjän reaaliaikaisen saldon päivitetyt tiedot yllä mainituista määristä saat kutsumalla joko getTokenAccountBalance tai getAccountInfo -toimintoa
- Jos tarvitset tietää käyttöliittymämäärän (UI Amount) mielivaltaiselle
määrälle, voit saada tämän laskelman kutsumalla
amountToUiAmountForMintWithoutSimulation
(web3.js v1) -funktiota tai simuloimalla transaktiota käyttäen amountToUiAmount-toimintoa.- Huomaa: amountToUiAmount vaatii transaktiosimulaation, mikä tarkoittaa että se tarvitsee myös kelvollisen maksajan, jolla on saldo. Tämän vuoksi tämän ei pitäisi olla oletustapa saldon hakemiseen.
RPC-kutsut
getTokenAccountBalance
- Palauttaa token-tilin saldon ja mint-tiedot
import { address, createSolanaRpc } from "@solana/kit";const rpc_url = "https://api.devnet.solana.com";const rpc = createSolanaRpc(rpc_url);let tokenAddress = address("2uuvxpnEKw52aTqNerHiQ3WeSqZriCMNVt8LhWfrkbPk");let tokenBalance = await rpc.getTokenAccountBalance(tokenAddress).send();console.log("Token Balance:", tokenBalance);/* Token Balance: {context: { apiVersion: '2.2.14', slot: 381132711n },value: {amount: '10000000',decimals: 6,uiAmount: 20,uiAmountString: '20'}} */
getAccountInfo
- Palauttaa tilin tiedot ja mint-tiedot
import { address, createSolanaRpc } from "@solana/kit";const rpc_url = "https://api.devnet.solana.com";const rpc = createSolanaRpc(rpc_url);const publicKey = address("2uuvxpnEKw52aTqNerHiQ3WeSqZriCMNVt8LhWfrkbPk");const accountInfo = await rpc.getAccountInfo(publicKey).send();console.log("Account Info:",JSON.stringify(accountInfo,(key, value) => (typeof value === "bigint" ? value.toString() : value),2));/* Account Info: {"context": {"apiVersion": "2.2.14","slot": "381133640"},"value": {"data": {"parsed": {"info": {"extensions": [{"extension": "immutableOwner"},{"extension": "pausableAccount"}],"isNative": false,"mint": "BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG","owner": "G7ARQSUCwNrfvTDUCZvM5xdiRdBJiN3qVw2PryD8Wnib","state": "initialized","tokenAmount": {"amount": "10000000","decimals": 6,"uiAmount": 20,"uiAmountString": "20"}},"type": "account"},"program": "spl-token-2022","space": "174"},"executable": false,"lamports": "2101920","owner": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb","rentEpoch": "18446744073709551615","space": "174"}} */
Nykyisen määrän päivittäminen
Koska liikkeeseenlaskijat voivat päivittää kerrointa milloin tahansa, voit harkita säännöllistä kyselyä pitääksesi tilin saldon ajan tasalla. Liikkeeseenlaskijat päivittävät tätä kerrointa todennäköisesti enintään kerran päivässä. Jos kerroin on asetettu tulevalle päivämäärälle, voit automaattisesti tehdä kyselyn tänä päivitysajankohtana
Token-määrät transaktioissa (siirrot / vaihdot jne.)
- Käyttäjien tulisi syöttää määrät, jotka tulkitaan skaalattuina
"UIAmount"-arvoina. Sovelluksen, joka käsittelee tätä, pitäisi muuntaa se
raakatokenmääräksi transaktiota varten.
- Jos pyöristyksessä ilmenee ongelmia, pyöristä alaspäin ja jätä mieluummin pieni määrä pölyä kuin riskeeraa transaktion epäonnistuminen
- Tähän muunnokseen voit käyttää
uiAmountToAmountForMintWithoutSimulation
(web3.js v1) -funktiota tai simuloida transaktiota käyttäen amountToUiAmount-funktiota.
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ää kokonaisraakaarvoa, kun käyttäjä pyytää toimintoa
"maksimi" tai "kaikki" saldostaan. Tämä varmistaa, ettei pölyä jää jäljelle.
- Valinnainen: Voit harkita tilin automaattista sulkemista, kun "maksimia" käytetään, jotta käyttäjä saa tallettamansa säilytyskulut takaisin
Token-hinta
- Token-hinta tulisi aina näyttää skaalattuna hintana aina kun mahdollista.
- Jos olet hintatietopalvelun tarjoaja, kuten oraakkeli, sinun tulisi tarjota
sekä skaalattu että skaalaamaton hinta.
- Tarjoa mahdollisuuksien mukaan SDK/API, joka abstrahoi skaalatun UI-määrän laajennuksen monimutkaisuudet pois.
Nykyinen kerroin
- Nykyinen kerroin voidaan lukea token-mintistä milloin tahansa kutsumalla
getAccountInfo
. Lisäksi, jos tulevaisuuden kerroin on asetettu, tämä tieto on myös saatavilla token-mintistä. Suosittelemme, että tätä kerrointa ei näytetä, sillä se voi sekoittaa käyttöliittymää.
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
- Palveluiden, jotka tarjoavat historiallisia tietoja, tulisi tallentaa ja näyttää sekä skaalatut että skaalaamattomat hinnat skaalattua käyttöliittymämäärän laajennusta varten.
- Odotamme, että skaalattuja määriä käytetään useimmiten, sillä tämä vastaa sitä, miten perinteinen rahoitusmaailma käsittelee tokeneihin liittyviä kaavioita osakkeiden splitin yhteydessä.
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 laskutoimituksen tulevaisuudessa.
Taaksepäin yhteensopivuus
- Oletusarvoisesti lompakot ja sovellukset, jotka eivät ymmärrä skaalattua käyttöliittymämäärän laajennusta, näyttävät toiminnan oikean kokonaishinnan kertomalla skaalaamattoman hinnan * raakamäärän.
- Ne kuitenkin näyttäisivät skaalaamattoman hinnan, mikä voi aiheuttaa käyttäjille hämmennystä.
- Toivomme tämän kannustavan tiimejä päivittämään dapp-sovelluksensa yhteensopiviksi tokenien kanssa, jotka käyttävät skaalattua käyttöliittymämäärän laajennusta, ja autamme mielellämme tässä prosessissa.
Suositellut integraatioprioriteetit alustoittain
Yleiset vaatimukset
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Käyttäjätoimintojen tukeminen UiAmount-arvolla | Kaikkien käyttäjätoimintojen tulisi käyttää UiAmount-arvoa, kun UiAmount on käytössä sovelluksessa. Jos UiAmount ei ole näkyvissä sovelluksessa, tulisi käyttää raakamääriä kunnes sovellus on päivitetty. | P0 |
Lompakot
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Näytä skaalattu saldo | Näytä skaalattu määrä (uiAmount) ensisijaisena saldona. | P0 |
Tuki token-siirroille | Loppukäyttäjien tulisi syöttää siirtomäärät skaalattuina saldoina (raakamäärä * saldo). | P0 |
Näytä spot-hinta | Näytä skaalattu spot-hinta käyttäjille | P0 |
Tapahtumahistorian metatiedot | Näytä skaalattu määrä (UIAmount) jokaiselle siirrolle aina kun mahdollista. | P1 |
Näytä kerroinpäivitykset tapahtumahistoriassa | Kun kerroinpäivityksiä tapahtuu, näytä tämä tapahtumana käyttäjän tapahtumahistoriassa mukaan lukien saatu määrä | P2 |
Näytä hintahistoriakaavio | Heijasta skaalatut hinnat hintakaaviossa | P1 |
Perehdytys/työkaluvihjeet | Tarjoa työkaluvihjeitä tai perehdytystä käyttäjille skaalattua ui-määrälaajennusta käyttävistä tokeneista | P2 |
Selaimet
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Token-tietosivun parannukset | Näytä metatietoja kuten skaalattu markkina-arvo ja nykyinen kerroin | P0 |
Näytä skaalattu saldo saldoille | Näytä skaalatut saldot (UiAmount) nykyisille saldoille. | P0 |
Näytä skaalattu saldo tapahtumille | Näytä skaalatut saldot (UiAmount) siirtomäärille historiallisissa tapahtumissa. | P0 |
Näytä skaalattu hinta tapahtumille | Näytä skaalatut hinnat aiemmille tapahtumille | P1 |
Jäsennä ja näytä kerroinpäivitystapahtumat asianmukaisesti | Näytä asianmukaisesti tiedot kerroinpäivityksestä | P2 |
Markkinadatan kokoajat (esim. CoinGecko)
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
API-päivitykset skaalattua dataa varten | Laajenna API-toiminnallisuutta sisältämään kertoimien muutokset ajan myötä sekä skaalattu hintasyöte. | P0 |
Kokonaistarjonta skaalatulla mukautuksella | Kun näytetään kokonaistarjontaa ja kokonaismarkkina-arvoa, ota huomioon skaalatut saldot | P0 |
Historiallinen hinnan seuranta | Tarjoa historiallinen kaavio hinnoista käyttäen skaalattua hintaa ajan myötä. | P1 |
Historiallinen kertoimen seuranta | Tarjoa historialliset merkinnät kertoimen päivityksistä korkoa tuottaville tokeneille. | P2 |
Opetussisältö tai selitykset | Sisällytä lyhyitä kuvauksia tai työkaluvihjeitä, jotka selittävät miten skaalatut tokenit toimivat. | P2 |
Hintasyötteiden tarjoajat
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Skaalatut & skaalaamattomat hintasyötteet | Tarjoa hintasyötteet sekä skaalattuihin että skaalaamattomiin hintoihin. | P0 |
Historiallinen kerroindata | Tarjoa API:t historiallisilla kertoimen muutoksilla. | P0 |
Historiallinen hintadata | Tarjoa API:t historiallisilla hinnoilla perustuen sekä skaalattuihin että skaalaamattomiin määriin. | P0 |
DEXit
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Näytä uudelleenpohjatut token-saldot | Näytä skaalatut saldot kaupankäyntiä tai likviditeetin tarjoamista varten käyttöliittymässä. (taustajärjestelmä voi silti käyttää raakamääriä) | P0 |
Tuki token-toiminnoille | Loppukäyttäjien tulisi syöttää toimintamäärät UiAmount-saldoillaan (kerroin * raakamäärä). | P0 |
Hintasyötteen mukautus | Kaikkialla missä hintasyötettä käytetään nykyisen hinnan näyttämiseen, tarjoa skaalattu hinta loppukäyttäjille. | P1 |
Näytä hintahistoriakaavio | Heijasta skaalatut hinnat hintakaaviossa | P1 |
Is this page helpful?