Solana Pay -spesifikaatio v1

Yhteenveto

Standardiprotokolla Solana-tapahtumaopyyntöjen koodaamiseen URL-osoitteisiin maksujen ja muiden käyttötapausten mahdollistamiseksi.

Tämä standardi ammentaa inspiraatiota seuraavista: BIP 21 ja EIP 681.

Motivaatio

Standardoitu URL-protokolla natiivin SOL-siirtojen, SPL Token -siirtojen ja Solana-tapahtumien pyytämiseen mahdollistaa paremman käyttökokemuksen sovelluksissa ja lompakoissa Solana-ekosysteemissä.

Nämä URL-osoitteet voidaan koodata QR-koodeihin tai NFC-tageihin, tai ne voidaan lähettää käyttäjien ja sovellusten välillä maksupyyntöjä ja tapahtumien koostamista varten.

Sovellusten tulee varmistaa, että tapahtuma on vahvistettu ja kelvollinen ennen kuin ne luovuttavat myytävät tavarat tai palvelut tai myöntävät pääsyn kohteisiin tai tapahtumiin.

Mobiililompakoiden tulisi rekisteröityä käsittelemään URL-skeemaa saumattoman mutta turvallisen kokemuksen tarjoamiseksi, kun Solana Pay -URL-osoitteita kohdataan ympäristössä.

Standardoimalla yksinkertainen lähestymistapa näiden ongelmien ratkaisemiseen varmistamme sovellusten ja lompakoiden perustason yhteensopivuuden, jotta kehittäjät voivat keskittyä korkeamman tason abstraktioihin.

Spesifikaatio: Siirtopyyntö

Solana Pay -siirtopyyntö-URL kuvaa ei-interaktiivisen pyynnön SOL- tai SPL Token -siirtoon.

solana:<recipient>
?amount=<amount>
&spl-token=<spl-token>
&reference=<reference>
&label=<label>
&message=<message>
&memo=<memo>

Pyyntö on ei-interaktiivinen, koska URL:n parametreja käyttää lompakko tapahtuman suoraan koostamiseen.

Vastaanottaja

Yksi recipient-kenttä vaaditaan polun nimenä. Arvon on oltava natiivin SOL-tilin base58-koodattu julkinen avain. Associated token account -tilejä ei saa käyttää.

Sen sijaan SPL Token -siirron pyytämiseksi spl-token-kenttää on käytettävä SPL Token -mintin määrittämiseen, josta vastaanottajan associated token -osoite on johdettava.

Määrä

Yksittäinen amount-kenttä on sallittu valinnaisena kyselyparametrina. Arvon on oltava ei-negatiivinen kokonaisluku tai desimaaliluku "käyttäjän" yksiköissä. SOL:n tapauksessa tämä tarkoittaa SOL:ia, ei lamportteja. Tokenien osalta käytä uiAmountString, ei amount.

0 on kelvollinen arvo. Jos arvo on desimaaliluku, joka on pienempi kuin 1, sen edessä on oltava 0 ennen .-merkkiä. Tieteellinen notaatio on kielletty.

Jos arvoa ei anneta, lompakon on pyydettävä käyttäjää syöttämään määrä. Jos desimaalien lukumäärä ylittää SOL:n (9) tai SPL-tokenin (minttikohtainen) tukemat desimaalit, lompakon on hylättävä URL virheellisenä.

SPL-token

Yksittäinen spl-token-kenttä on sallittu valinnaisena kyselyparametrina. Arvon on oltava base58-koodattu SPL-tokenin mint-tilin julkinen avain.

Jos kenttä on annettu, on käytettävä Associated Token Program-käytäntöä, ja lompakon on sisällytettävä TokenProgram.Transfer- tai TokenProgram.TransferChecked-käsky tapahtuman viimeisenä käskynä.

Jos kenttää ei ole annettu, URL kuvaa natiivi SOL-siirtoa, ja lompakon on sisällytettävä sen sijaan SystemProgram.Transfer-käsky tapahtuman viimeisenä käskynä.

Lompakon on johdettava ATA-osoite recipient- ja spl-token-kentistä. Siirtoja aputoken-tileille ei tueta.

Viittaus

Useita reference-kenttiä on sallittu valinnaisina kyselyparametreinä. Arvojen on oltava base58-koodattuja 32 tavun taulukoita. Nämä voivat olla tai olla olematta julkisia avaimia, käyrällä tai sen ulkopuolella, ja voivat vastata tai olla vastaamatta Solanan tilejä.

Jos arvot on annettu, lompakon on sisällytettävä ne annetussa järjestyksessä vain luku -muotoisina, ei-allekirjoittajina avaimina SystemProgram.Transfer- tai TokenProgram.Transfer/TokenProgram.TransferChecked-ohjeeseen maksutapahtumassa. Arvot voivat olla maksupyyntöön liittyviä yksilöllisiä tai eivät, ja ne voivat vastata Solanan tiliä tai olla vastaamatta sitä.

Koska Solanan validaattorit indeksoivat tapahtumat näiden tiliavainten mukaan, reference-arvoja voidaan käyttää asiakastunnuksina (tunnuksia, joita voidaan käyttää ennen lopullisen maksutapahtuman tuntemista). getSignaturesForAddress RPC-metodia voidaan käyttää tapahtumien paikantamiseen tällä tavalla.

Tunniste

Yksi label-kenttä on sallittu valinnaisena kyselyparametrina. Arvon on oltava URL-koodattu UTF-8-merkkijono, joka kuvaa siirtopyynnön lähdettä.

Esimerkiksi tämä voi olla pyynnön tekevän brändin, kaupan, sovelluksen tai henkilön nimi. Lompakon tulisi purkaa URL-koodaus ja näyttää purettu arvo käyttäjälle.

Viesti

Yksi message-kenttä on sallittu valinnaisena kyselyparametrina. Arvon on oltava URL-koodattu UTF-8-merkkijono, joka kuvaa siirtopyynnön luonnetta.

Esimerkiksi tämä voi olla ostettavan tuotteen nimi, tilaustunnus tai kiitosviesti. Lompakon tulisi purkaa URL-koodaus ja näyttää purettu arvo käyttäjälle.

Muistiinpano

Yksi memo-kenttä on sallittu valinnaisena kyselyparametrina. Arvon on oltava URL-koodattu UTF-8-merkkijono, joka on sisällytettävä SPL Memo -ohjeeseen maksutapahtumassa.

Lompakon on purettava URL-koodaus ja sen tulisi näyttää purettu arvo käyttäjälle. Validaattorit tallentavat muistiinpanon, eikä sen tule sisältää yksityisiä tai arkaluonteisia tietoja.

Jos kenttä annetaan, lompakon on sisällytettävä MemoProgram-käsky toiseksi viimeiseksi käskyksi transaktiossa, välittömästi ennen SOL- tai SPL-token-siirtokäskyä, jotta vältytään epäselvyyksiltä muiden transaktiokohtaisten käskyjen kanssa.

Esimerkit

URL, joka kuvaa siirtopyyntöä 1 SOL:lle

solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=1&label=Michael&message=Thanks%20for%20all%20the%20fish&memo=OrderId12345

URL, joka kuvaa siirtopyyntöä 0,01 USDC:lle

solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=0.01&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

URL, joka kuvaa siirtopyyntöä SOL:lle (käyttäjältä kysytään summa)

solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?label=Michael

Spesifikaatio: Transaktiopyyntö

Solana Pay -transaktiopyyntö-URL kuvaa interaktiivista pyyntöä mille tahansa Solana-transaktiolle.

solana:<link>

Pyyntö on interaktiivinen, koska URL:n parametrit mahdollistavat lompakolle HTTP-pyynnön tekemisen transaktion koostamiseksi.

Linkki

Yksi link-kenttä vaaditaan polkunimeksi. Arvon on oltava ehdollisesti URL-koodattu absoluuttinen HTTPS-URL.

Jos URL sisältää kyselyparametreja, se on URL-koodattava. Protokollakohtaisia kyselyparametreja voidaan lisätä tähän spesifikaatioon. Arvon URL-koodaus estää ristiriidan protokollaparametrien kanssa.

Jos URL ei sisällä kyselyparametreja, sitä ei tulisi URL-koodata. Tämä tuottaa lyhyemmän URL:n ja vähemmän tiiviin QR-koodin.

Kummassakin tapauksessa lompakon on URL-dekoodattava arvo. Tällä ei ole vaikutusta, jos arvo ei ole URL-koodattu. Jos dekoodattu arvo ei ole absoluuttinen HTTPS-URL, lompakon on hylättävä se virheellisenä.

GET-pyyntö

Lompakon tulisi tehdä HTTP GET JSON-pyyntö URL:iin. Pyynnön ei tulisi tunnistaa lompakkoa tai käyttäjää.

Lompakon tulisi tehdä pyyntö Accept-Encoding-otsikolla, ja sovelluksen tulisi vastata Content-Encoding-otsikolla HTTP-pakkausta varten.

Lompakon tulee näyttää URL-osoitteen verkkotunnus pyynnön tekemisen aikana.

GET-vastaus

Lompakon on käsiteltävä HTTP asiakasvirheet, palvelinvirheet ja uudelleenohjausviestit. Sovelluksen on vastattava näillä tai HTTP OK JSON-vastauksella, jonka sisältö on:

{ "label": "<label>", "icon": "<icon>" }

<label>-arvon on oltava UTF-8-merkkijono, joka kuvaa tapahtumapyynnön lähdettä. Tämä voi olla esimerkiksi pyynnön tekevän brändin, kaupan, sovelluksen tai henkilön nimi.

<icon>-arvon on oltava absoluuttinen HTTP- tai HTTPS-URL kuvakekuvaan. Tiedoston on oltava SVG-, PNG- tai WebP-kuva, tai lompakon on hylättävä se virheellisenä.

Lompakon ei tule tallentaa vastausta välimuistiin muutoin kuin HTTP-välimuistin vastausotsikkojen ohjeiden mukaisesti.

Lompakon tulee näyttää otsikko ja renderöidä kuvakekuva käyttäjälle.

POST-pyyntö

Lompakon on tehtävä HTTP POST JSON-pyyntö URL-osoitteeseen sisällöllä:

{ "account": "<account>" }

<account>-arvon on oltava base58-koodattu julkinen avain tilistä, joka voi allekirjoittaa tapahtuman.

Lompakon tulisi tehdä pyyntö Accept-Encoding-otsikolla, ja sovelluksen tulisi vastata Content-Encoding-otsikolla HTTP-pakkausta varten.

Lompakon tulee näyttää URL-osoitteen verkkotunnus pyynnön tekemisen aikana. Jos GET-pyyntö tehtiin, lompakon tulee myös näyttää otsikko ja renderöidä kuvakekuva vastauksesta.

POST-vastaus

Lompakon on käsiteltävä HTTP asiakasvirheet, palvelinvirheet ja uudelleenohjausviestit. Sovelluksen on vastattava näillä tai HTTP OK JSON-vastauksella, jonka sisältö on:

{ "transaction": "<transaction>" }

<transaction>-arvon on oltava base64-koodattu sarjallistettu transaktio. Lompakon on base64-dekoodattava transaktio ja sarjallistettava se.

Sovellus voi vastata osittain tai kokonaan allekirjoitetulla transaktiolla. Lompakon on validoitava transaktio ei-luotettavana.

Tyhjät allekirjoitukset

Jos transaktion signatures ovat tyhjiä:

Ei-tyhjät allekirjoitukset

Jos transaktion signatures eivät ole tyhjiä:

Lompakon on allekirjoitettava transaktio vain pyynnön account-arvolla, ja sen on tehtävä niin vain, jos pyynnön account-arvon allekirjoitusta odotetaan.

Jos mitä tahansa allekirjoitusta paitsi pyynnön account-arvon allekirjoitusta odotetaan, lompakon on hylättävä transaktio haitallisena.

Valinnainen viestikenttä

Sovellus voi myös sisällyttää valinnaisen message-kentän vastauksen runkoon:

{ "message": "<message>", "transaction": "<transaction>" }

<message>-arvon on oltava UTF-8-merkkijono, joka kuvaa tapahtumavastauksen luonteen.

Tämä voi olla esimerkiksi ostettavan tuotteen nimi, ostokseen sovellettu alennus tai kiitosviesti. Lompakon tulee näyttää arvo käyttäjälle.

Lompakon ja sovelluksen tulee sallia lisäkentät pyynnön rungossa ja vastauksen rungossa, jotka voidaan lisätä tulevissa spesifikaatioissa.

Esimerkkejä

URL, joka kuvaa tapahtumakyselyä

solana:https://example.com/solana-pay

URL, joka kuvaa tapahtumakyselyä kyselyparametreilla

solana:https%3A%2F%2Fexample.com%2Fsolana-pay%3Forder%3D12345

GET-pyynnön esimerkki

GET /solana-pay?order=12345 HTTP/1.1
Host: example.com
Connection: close
Accept: application/json
Accept-Encoding: br, gzip, deflate

GET-vastauksen esimerkki

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Content-Length: 62
Content-Encoding: gzip
{"label":"Michael Vines","icon":"https://example.com/icon.svg"}

POST-pyynnön esimerkki

POST /solana-pay?order=12345 HTTP/1.1
Host: example.com
Connection: close
Accept: application/json
Accept-Encoding: br, gzip, deflate
Content-Type: application/json
Content-Length: 57
{"account":"mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN"}

POST-vastauksen esimerkki

HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Content-Length: 298
Content-Encoding: gzip
{"message":"Thanks for all the fish","transaction":"AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAECC4JMKqNplIXybGb/GhK1ofdVWeuEjXnQor7gi0Y2hMcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAAAMAgAAAAAAAAAAAAAA"}

Laajennukset

Tähän spesifikaatioon voidaan sisällyttää lisämuotoja ja -kenttiä uusien käyttötapausten mahdollistamiseksi samalla varmistaen yhteensopivuus sovellusten ja lompakoiden kanssa.

Avaa Github-issue ehdottaaksesi muutoksia spesifikaatioon palautteen keräämiseksi sovellus- ja lompakkokehittäjiltä.

Todellinen esimerkki tällaisesta ehdotuksesta.

Katso myös

Is this page helpful?

Hallinnoi

© 2026 Solana Foundation.
Kaikki oikeudet pidätetään.
Yhdistä