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 olla vuorovaikutuksessa UIAmount-arvon (raakasumma * kerroin) kanssa token-hinnan, token-saldon ja token-summien osalta aina kun mahdollista
- dApp-sovellusten ja palveluntarjoajien tulisi käyttää raakasummaa ja skaalaamattomia hintoja kaikissa laskelmissa ja muuntaa ne käyttäjille vasta lopussa
- Historiallisia hintatietoja on tarjottava sekä skaalattuina että skaalaamattomina summina helpompaa integrointia varten
- Historiallisten kerrointen arvojen on oltava saatavilla tarkkoja historiallisia tietoja varten
Termien määritelmät
- Kerroin: staattinen päivitettävä kerroin, jota käytetään UI Amount -laskelmissa
- UIAmount: kerroin * raakasumma (tunnetaan myös nimellä: skaalattu summa)
- Raakasumma: summa (tunnetaan myös nimellä: skaalaamaton summa)
Nykyinen saldo
Nykyinen summa näytettäväksi
- Aina kun näytät loppukäyttäjille summia tokeneista, jotka käyttävät skaalattua
käyttöliittymäsumma-laajennusta, 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ä olevista 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ätä ei pitäisi käyttää oletustapana 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ää kerrointa milloin tahansa, voit harkita ajoittaista kyselyä tilin saldon päivittämiseksi. 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öristysongelmia ilmenee, 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 tuleva 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 skaalattujen määrien olevan yleisimmin käytettyjä, 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 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 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 |
---|---|---|
Tue käyttäjätoimintoja 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ä kertoimen päivitykset tapahtumahistoriassa | Kun kertoimen pä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 historiallisissa 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 skaalattuun dataan | 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 |
CEXit
Vaatimus | Kuvaus | Prioriteetti |
---|---|---|
Seuraa kertoimen päivityksiä | Seuraa kertoimen päivityksiä tokeneille, jotka käyttävät skaalattua ui-määrälaajennusta. | P0 |
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 |
Historiallisia toimintoja ei pidä skaalata uudelleen | Historialliset toiminnot, kuten kaupat, tulisi näyttää käyttäen tarkkaa skaalattua määrää ja hintaa toiminnan ajankohtana. | P1 |
Seuraa sisäisesti raakasaldoja | Seuraa raakasaldoja lohkoketjutapahtumia varten skaalattujen saldojen sijaan. Tämä on tarkempaa ja helpompi hallita pitkällä aikavälillä. | P1 |
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. Tämä sisältää historiallisten hintojen uudelleenskaalauksen nykyiseen kertoimeen. | P1 |
Skaalaa kustannusperuste | Kustannus osaketta kohden tulisi skaalata nykyiseen kertoimeen. | P1 |
Is this page helpful?