Skaalatun käyttöliittymäsumman integrointiopas
Scaled UI Amount -laajennuksen tukeminen Solanassa
Tausta
Scaled UI Amount -laajennus mahdollistaa token-liikkeeseenlaskijoille kertoimien määrittämisen, joita käytetään laskettaessa käyttäjän token-saldon käyttöliittymäsummaa. Tämä mahdollistaa liikkeeseenlaskijoille rebasing-tokenien luomisen ja asioiden kuten osakkeiden splittauksen. Tämä laajennus, kuten korkoa tuottava token-laajennus, tarjoaa puhtaasti kosmeettisen käyttöliittymäsumman, 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 raakasummia ohjelmassa.
Resurssit:
TL;DR
- Loppukäyttäjien tulisi käyttää UIAmount-arvoa (raakasumma * kerroin) tokenin hinnalle, tokenin saldolle ja tokenin summille aina kun mahdollista
- dApp-sovellusten ja palveluntarjoajien tulisi käyttää raakasummaa ja skaalaamattomia hintoja kaikissa laskelmissa ja muuntaa ne käyttäjille vasta lopussa
- Historialliset hintatiedot on tarjottava sekä skaalattuina että skaalaamattomina summina helpompaa integrointia varten
- Historiallisten kertoimien arvot on oltava saatavilla tarkkoja historiallisia tietoja varten
Termien määritelmät
- Kerroin: staattinen päivitettävä kerroin, jota käytetään käyttöliittymäsumman laskelmissa
- UIAmount: kerroin * raakasumma (eli: skaalattu summa)
- Raakasumma: summa (eli: skaalaamaton summa)
Nykyinen saldo
Nykyinen summa näyttöä varten
- Aina kun näytät summia tokeneille, jotka käyttävät skaalattua
käyttöliittymäsumma-laajennusta loppukäyttäjille, sinun tulisi käyttää joko:
- UIAmount/UIAmountString (suositeltu)
- Manuaalista laskelmaa raakasumma * 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ä voidaan hakea kutsumalla joko getTokenAccountBalance tai getAccountInfo
- 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 transaktion simulointia, mikä tarkoittaa, että se tarvitsee myös kelvollisen maksajan, jolla on saldo. Tämän vuoksi tätä ei pitäisi käyttää oletustapana saldon hakemiseen.
RPC-kutsut
getTokenAccountBalance
- Palauttaa token accountin 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 tuskin päivittävät tätä kerrointa useammin kuin 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 skaalatuksi
"UIAmount"-arvoksi. Sovelluksen, joka käsittelee tätä, tulisi 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ämän muunnoksen tekemiseen voit käyttää
uiAmountToAmountForMintWithoutSimulation
(web3.js v1) -funktiota tai simuloida transaktiota käyttäen amountToUiAmount-toimintoa.
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ää kokonaisraakamäärää, kun käyttäjä pyytää toimintoa
"maksimi" tai "kaikki" saldostaan. Tämä varmistaa, ettei jäljelle jää pölyä.
- Valinnainen: Voit harkita tilin automaattista sulkemista, kun "maksimi" käytetään palauttamaan käyttäjälle heidän talletuksensa
Tokenin hinta
- Tokenin 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 käyttöliittymä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, ettei tätä kerrointa näytetä, sillä se voi sekoittaa 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 hintatiedoille
- Palveluiden, jotka tarjoavat historiallisia tietoja, tulisi tallentaa ja tuoda esiin 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 UI-määrän laajennusta, näyttävät toiminnon oikean kokonaishinnan kertomalla ei-skaalatun hinnan * raakamäärän.
- Ne näyttäisivät kuitenkin ei-skaalatun hinnan, mikä voi aiheuttaa käyttäjille hämmennystä.
- Toivomme tämän kannustavan tiimejä päivittämään dappinsa yhteensopiviksi sellaisten tokenien kanssa, jotka käyttävät skaalattua UI-määrän laajennusta, ja autamme mielellämme tässä prosessissa.
Suositellut integraatioprioriteetit alustoittain
Yleiset vaatimukset
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Käyttäjätoimintojen tuki 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 päivitetään. | 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ä opettaaksesi käyttäjiä tokeneista, jotka käyttävät skaalattua ui-määrän laajennusta | P2 |
Tutkijat
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Token-tietosivun parannukset | Näytä metatiedot kuten kokonaismarkkina-arvo ja nykyinen kerroin | P0 |
Skaalatun saldon näyttäminen saldoille | Näytä skaalatut saldot (UiAmount) nykyisille saldoille. | P0 |
Skaalatun saldon näyttäminen transaktioille | Näytä skaalatut saldot (UiAmount) siirtosummille aiemmissa transaktioissa. | P0 |
Skaalatun hinnan näyttäminen transaktioille | Näytä skaalatut hinnat aiemmille transaktioille | P1 |
Kertoimen päivitystransaktioiden oikea jäsennys ja näyttö | Näytä asianmukaisesti tiedot kertoimen päivityksestä | P2 |
Markkinatietojen kokoajat (esim. CoinGecko)
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
API-päivitykset skaalattua dataa varten | Laajenna API-toiminnallisuutta sisältämään kertoimen muutokset ajan myötä sekä skaalattu hintasyöte. | P0 |
Kokonaistarjonta skaalatulla säädöllä | Kun näytetään kokonaistarjonta ja kokonaismarkkina-arvo, 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 tokenisaldot | Näytä skaalatut saldot kaupankäyntiä tai likviditeetin tarjoamista varten käyttöliittymässä. (taustajärjestelmä voi silti käyttää raakamääriä) | P0 |
Tuki tokenitoiminnoille | Loppukäyttäjien tulisi syöttää toimintomäärät UiAmount-saldoillaan (kerroin * raakamäärä). | P0 |
Hintasyötteen mukauttaminen | 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?