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.
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
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| Tue käyttäjätoimintoja käyttäen UiAmountia | Kaikkien 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
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| Näytä skaalattu saldo | Näytä skaalattu määrä (uiAmount) ensisijaisena saldona. | P0 |
| Tuki tokenisiirroille | Loppukäyttäjien tulisi syöttää siirtomäärät skaalattujen saldojensa kanssa (raakamäärä * saldo). | P0 |
| Näytä spot-hinta | Näytä skaalattu spot-hinta käyttäjille | P0 |
| Transaktiohistorian metatiedot | Näytä skaalattu määrä (UIAmount) jokaiselle siirrolle aina kun mahdollista. | P1 |
| Näytä kertoimen päivitykset transaktiohistoriassa | Kun kertoimen päivityksiä tapahtuu, näytä tämä tapahtumana käyttäjän transaktiohistoriassa sisältäen saadun määrän | P2 |
| Näytä hintahistoriakaavio | Heijasta skaalatut hinnat hintakaaviossa | P1 |
| Perehdytys/työkaluvihjeet | Tarjoa työkaluvihjeitä tai perehdytystä kouluttaaksesi käyttäjiä tokeneista, jotka käyttävät skaalattua ui-määrälaajennusta | P2 |
Selaimet
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| Token-tietosivun parannukset | Näytä metatiedot, kuten skaalattu kokonaismarkkina-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ä kertoimen päivitystapahtumat asianmukaisesti | Näytä asianmukaisesti tiedot kertoimen päivityksestä | P2 |
Markkinatietojen kokoajat (esim. CoinGecko, Birdeye)
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| Rajapintapäivitykset skaalattuun dataan | Laajenna 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 huomioon | P0 |
| Historiallinen hintojen seuranta | Tarjoa historiallinen kaavio hinnoista käyttäen skaalattua hintaa ajan mittaan. | P1 |
| Historiallinen kertoimen seuranta | Tarjoa 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 selitykset | Sisällytä lyhyet kuvaukset tai työkaluvihjeet, jotka selittävät, miten skaalatut tokenit toimivat. | P2 |
Hintasyötteen tarjoajat
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| Skaalatut ja skaalaamattomat hintasyötteet | Tarjoa hintasyötteet sekä skaalatuille että skaalaamattomille hinnoille. | P0 |
| Historiallinen kerroindata | Tarjoa 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 hintadata | Tarjoa API:t historiallisilla hinnoilla perustuen sekä skaalattuihin että skaalaamattomiin määriin. | P0 |
DEX:it
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| Näytä rebasoitujen tokenien saldot | Näytä skaalatut saldot kaupankäynnille tai likviditeetin tarjoamiselle käyttöliittymässä. (backend voi edelleen käyttää raakamääriä) | P0 |
| Tuki token-toiminnoille | 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 |
CEX:it
| Vaatimus | Kuvaus | Prioriteetti |
|---|---|---|
| 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 saldot | Näytä skaalatut saldot kaupankäynnille tai likviditeetin tarjoamiselle käyttöliittymässä. (backend voi edelleen käyttää raakamääriä) | P0 |
| Tuki token-toiminnoille | Loppukäyttäjien tulisi syöttää toimintomäärät UiAmount-saldoillaan (kerroin * raakamäärä). | P0 |
| Historiallisia toimintoja ei tule 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 onchain-transaktioita varten skaalattujen saldojen sijaan. Tämä on tarkempaa ja helpompaa 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 skaalaamisen nykyiseen kertoimeen. | P1 |
| Skaalaa hankintahinta | Hinta per osake tulisi skaalata nykyiseen kertoimeen. | P1 |
Is this page helpful?