Solana Pay -määrittely v1.1

Yhteenveto

Standardiprotokolla Solana-transaktiopyynnöt URL-osoitteisiin koodaamiseksi maksuja ja muita käyttötapauksia varten.

Tästä määrittelystä on saavutettu yleinen konsensus, ja toteutuksia on olemassa Phantomissa, FTX:ssä ja Slopessa.

Tämä standardi ammentaa inspiraatiota BIP 21 ja EIP 681 -määrittelyistä.

Tausta

Standardoitu URL-protokolla natiivin SOL-siirtojen, SPL Token -siirtojen ja Solana-transaktioiden pyytämiseksi mahdollistaa paremman käyttäjäkokemuksen sovelluksissa ja lompakoissa Solana-ekosysteemissä.

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

Sovellusten tulee varmistaa, että transaktio 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 ja turvallisen käyttö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.

Määrittely: Siirtopyyntö

Solana Pay -siirtopyynnön URL-osoite kuvaa ei-interaktiivisen pyynnön SOL- tai SPL Token -siirtoa varten.

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

Pyyntö on ei-interaktiivinen, koska URL-osoitteen parametreja lompakko käyttää suoraan transaktion koostamiseen.

Vastaanottaja

Yksi recipient-kenttä vaaditaan polkuna. Arvon on oltava base58-koodattu natiivin SOL-tilin pubkey. Associated token account -tilejä ei saa käyttää.

Sen sijaan SPL Token -siirron pyytämiseen on käytettävä spl-token-kenttää SPL Token mintin määrittämiseen, josta vastaanottajan liitetty 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ä"-yksiköissä. SOL:n osalta se tarkoittaa SOL:ia eikä lamportteja. Tokeneille käytä uiAmountString:ta äläkä amount:ta.

0 on kelvollinen arvo. Jos arvo on desimaaliluku pienempi kuin 1, sen edessä on oltava 0 ennen .:ta. Tieteellinen notaatio on kielletty.

Jos arvoa ei anneta, lompakon on pyydettävä käyttäjältä määrä. Jos desimaalien lukumäärä ylittää SOL:n (9) tai SPL Tokenin (mint-kohtaisen) tukeman määrän, lompakon on hylättävä URL virheellisenä.

SPL Token

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

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

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

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

Viite

Useat reference-kentät ovat sallittuja valinnaisina kyselyparametreinä. Arvojen on oltava base58-koodattuja 32-tavuisia taulukoita. Nämä voivat olla tai olla olematta julkisia avaimia, käyrällä tai sen ulkopuolella, ja ne voivat vastata tai olla vastaamatta tilejä Solanassa.

Jos arvot on annettu, lompakon on sisällytettävä ne annetussa järjestyksessä vain luku -oikeutettuina, ei-allekirjoittavina avaimina SystemProgram.Transfer- tai TokenProgram.Transfer/TokenProgram.TransferChecked-käskyyn maksutapahtumassa. Arvot voivat olla tai olla olematta yksilöllisiä maksupyynnölle, ja ne voivat vastata tai olla vastaamatta Solanan tiliä.

Koska Solanan validaattorit indeksoivat tapahtumat näiden tiliavainten perusteella, reference-arvoja voidaan käyttää asiakastunnuksina (tunnuksia, joita voidaan käyttää ennen varsinaisen maksutapahtuman tuntemista). getSignaturesForAddress RPC-menetelmää voidaan käyttää transaktioiden 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 esittävän brändin, myymälän, sovelluksen tai henkilön nimi. Lompakon tulisi URL-purkaa arvo 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 luonteen.

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

Muistio

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

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

Jos kenttä on annettu, lompakon on sisällytettävä MemoProgram-ohje transaktion toiseksi viimeisenä ohjeena, välittömästi ennen SOL- tai SPL Token -siirto-ohjetta, jotta vältytään epäselvyyksiltä muiden transaktio-ohjeiden 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 määrä)

solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?label=Michael

Määrittely: Transaktiopyyntö

Solana Pay -transaktiopyyntö-URL kuvaa interaktiivisen pyynnön mille tahansa Solana-transaktiolle.

solana:<link>

Pyyntö on interaktiivinen, koska lompakon URL:ssä olevia parametreja käytetään HTTP-pyynnön tekemiseen transaktion muodostamiseksi.

Linkki

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

Jos URL sisältää kyselyparametreja, se on URL-koodattava. Tähän määrittelyyn voidaan lisätä protokollan kyselyparametreja. Arvon URL-koodaus estää ristiriidat protokollan parametrien kanssa.

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

Kummassakin tapauksessa lompakon on poistettava URL-koodaus arvosta. 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 aikana.

GET-vastaus

Lompakon on käsiteltävä HTTP asiakasvirheet, palvelinvirheet ja uudelleenohjausvastaukset. Sovelluksen on vastattava näillä tai HTTP OK JSON-vastauksella, jonka runko 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, liikkeen, sovelluksen tai henkilön nimi.

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

Lompakon ei tule tallentaa vastausta välimuistiin, ellei HTTP-välimuisti -vastausotsikot toisin määrää.

Lompakon tulee näyttää tunniste ja renderöidä kuvake käyttäjälle.

POST-pyyntö

Lompakon on tehtävä HTTP POST JSON-pyyntö URL-osoitteeseen, jonka runko on:

{ "account": "<account>" }

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

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

Lompakon tulee näyttää URL-osoitteen verkkotunnus pyynnön aikana. Jos GET-pyyntö on tehty, lompakon tulee myös näyttää tunniste ja renderöidä vastauksesta saatu kuvake.

POST-vastaus

Lompakon on käsiteltävä HTTP asiakasvirheet, palvelinvirheet ja uudelleenohjausvastaukset. Sovelluksen on vastattava näillä tai HTTP OK JSON-vastauksella, jonka runko on:

{ "transaction": "<transaction>" }

<transaction>-arvon on oltava base64-koodattu sarjallistettu transaktio. Lompakon on purettava transaktion base64-koodaus ja deserializoitava se.

Sovellus voi vastata osittain tai kokonaan allekirjoitetulla transaktiolla. Lompakon on validoitava transaktio epäluotettavana.

Tyhjät allekirjoitukset

Jos transaktion signatures ovat tyhjiä:

  • Sovelluksen tulisi asettaa feePayer pyynnön account-arvoksi tai nolla-arvoksi (new PublicKey(0) tai new PublicKey("11111111111111111111111111111111")).
  • Sovelluksen tulisi asettaa recentBlockhash viimeisimmäksi lohkohasiksi tai nolla-arvoksi (new PublicKey(0).toBase58() tai "11111111111111111111111111111111").
  • Lompakon on jätettävä huomiotta transaktion feePayer ja asetettava feePayer pyynnön account-arvoksi.
  • Lompakon on jätettävä huomiotta transaktion recentBlockhash ja asetettava recentBlockhash viimeisimmäksi lohkohasiksi.

Jos transaktion signatures eivät ole tyhjiä:

Lompakon on allekirjoitettava transaktio ainoastaan pyynnön account-arvolla, ja se saa tehdä sen vain, jos pyynnön account-arvolle odotetaan allekirjoitusta.

Jos mitä tahansa muuta allekirjoitusta kuin pyynnön account-arvolle odotettua allekirjoitusta odotetaan, lompakon on hylättävä transaktio haitallisena.

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

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

<message>-arvon tulee olla UTF-8-merkkijono, joka kuvaa transaktion vastauksen luonnetta.

Esimerkiksi tämä voi olla ostettavan tuotteen nimi, ostoon sovellettu alennus tai kiitosviesti. Lompakon tulisi näyttää arvo käyttäjälle.

Lompakon ja sovelluksen tulisi sallia lisäkentät pyynnön rungossa ja vastauksen rungossa, jotka voivat tulla tulevan määrittelyn mukaisesti.

Esimerkki

URL, joka kuvaa transaktiopyynnön.
solana:https://example.com/solana-pay
URL, joka kuvaa transaktiopyynnön kyselyparametreilla.
solana:https%3A%2F%2Fexample.com%2Fsolana-pay%3Forder%3D12345
GET-pyyntö
GET /solana-pay?order=12345 HTTP/1.1
Host: example.com
Connection: close
Accept: application/json
Accept-Encoding: br, gzip, deflate
GET-vastaus
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-pyyntö
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-vastaus
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 määrittelyyn voidaan sisällyttää lisämuotoja ja -kenttiä uusien käyttötapausten mahdollistamiseksi varmistaen samalla yhteensopivuus sovellusten ja lompakoiden kanssa.

Ole hyvä ja avaa Github-issue ehdottaaksesi muutoksia määrittelyyn, jotta saat palautetta sovellus- ja lompakkokehittäjiltä.

Todellinen esimerkki tällaisesta ehdotuksesta.

Is this page helpful?

Hallinnoi

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