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.
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ää 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

VaatimusKuvausPrioriteetti
Tue käyttäjätoimintoja UiAmount-arvollaKaikkien 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

VaatimusKuvausPrioriteetti
Näytä skaalattu saldoNäytä skaalattu määrä (uiAmount) ensisijaisena saldona.P0
Tuki token-siirroilleLoppukäyttäjien tulisi syöttää siirtomäärät skaalattuina saldoina (raakamäärä * saldo).P0
Näytä spot-hintaNäytä skaalattu spot-hinta käyttäjilleP0
Tapahtumahistorian metatiedotNäytä skaalattu määrä (UIAmount) jokaiselle siirrolle aina kun mahdollista.P1
Näytä kertoimen päivitykset tapahtumahistoriassaKun kertoimen päivityksiä tapahtuu, näytä tämä tapahtumana käyttäjän tapahtumahistoriassa mukaan lukien saatu määräP2
Näytä hintahistoriakaavioHeijasta skaalatut hinnat hintakaaviossaP1
Perehdytys/työkaluvihjeetTarjoa työkaluvihjeitä tai perehdytystä opettaaksesi käyttäjiä tokeneista, jotka käyttävät skaalattua ui-määrän laajennustaP2

Tutkijat

VaatimusKuvausPrioriteetti
Token-tietosivun parannuksetNäytä metatiedot kuten kokonaismarkkina-arvo ja nykyinen kerroinP0
Skaalatun saldon näyttäminen saldoilleNäytä skaalatut saldot (UiAmount) nykyisille saldoille.P0
Skaalatun saldon näyttäminen transaktioilleNäytä skaalatut saldot (UiAmount) siirtosummille historiallisissa transaktioissa.P0
Skaalatun hinnan näyttäminen transaktioilleNäytä skaalatut hinnat aiemmille transaktioilleP1
Kertoimen päivitystransaktioiden oikea jäsennys ja näyttöNäytä asianmukaisesti tiedot kertoimen päivityksestäP2

Markkinatietojen kokoajat (esim. CoinGecko)

VaatimusKuvausPrioriteetti
API-päivitykset skaalattuun dataanLaajenna 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 saldotP0
Historiallinen hinnan seurantaTarjoa historiallinen kaavio hinnoista käyttäen skaalattua hintaa ajan myötä.P1
Historiallinen kertoimen seurantaTarjoa historialliset merkinnät kertoimen päivityksistä korkoa tuottaville tokeneille.P2
Opetussisältö tai selityksetSisällytä lyhyitä kuvauksia tai työkaluvihjeitä, jotka selittävät miten skaalatut tokenit toimivat.P2

Hintasyötteiden tarjoajat

VaatimusKuvausPrioriteetti
Skaalatut & skaalaamattomat hintasyötteetTarjoa hintasyötteet sekä skaalattuihin että skaalaamattomiin hintoihin.P0
Historiallinen kerroindataTarjoa API:t historiallisilla kertoimen muutoksilla.P0
Historiallinen hintadataTarjoa API:t historiallisilla hinnoilla perustuen sekä skaalattuihin että skaalaamattomiin määriin.P0

DEXit

VaatimusKuvausPrioriteetti
Näytä uudelleenpohjatut tokenisaldotNäytä skaalatut saldot kaupankäyntiä tai likviditeetin tarjoamista varten käyttöliittymässä. (taustajärjestelmä voi silti käyttää raakamääriä)P0
Tuki tokenitoiminnoilleLoppukä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

CEXit

VaatimusKuvausPrioriteetti
Seuraa kertoimen päivityksiäSeuraa kertoimen päivityksiä tokeneille, jotka käyttävät skaalattua ui-määrälaajennusta.P0
Näytä uudelleenpohjatut tokenisaldotNäytä skaalatut saldot kaupankäyntiä tai likviditeetin tarjoamista varten käyttöliittymässä. (taustajärjestelmä voi silti käyttää raakamääriä)P0
Tuki tokenitoiminnoilleLoppukäyttäjien tulisi syöttää toimintomäärät UiAmount-saldoillaan (kerroin * raakamäärä).P0
Historiallisia toimintoja ei pidä 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 lohkoketjutapahtumia varten skaalattujen saldojen sijaan. Tämä on tarkempaa ja helpompi 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 uudelleenskaalauksen nykyiseen kertoimeen.P1
Skaalaa kustannusperusteKustannus osaketta kohden tulisi skaalata nykyiseen kertoimeen.P1

Is this page helpful?