Actions & Blinks程式實踐

更新於 發佈於 閱讀時間約 10 分鐘

上篇瞭解完整個工作流程後,我們就來學習如何用程式碼構建屬於自己的Actions & Blinks吧!其實身為開發者,需要做的只有一件事:部署自己的後端伺服器用來接收GET/POST requests!這邊提供簡單的範例程式碼可以參考!

因為Actions & Blinks是一個有特定規範的服務,所以在接下來的程式碼講解中我不會帶到太多邏輯,只會介紹格式該怎麼設置。首先我們來講解GET函式中的架構。

在GET中我們主要是希望Actions Provider回傳要顯示的精美小視窗內容,而這必須符合特定格式(ActionGetResponse)的Response如下,其中每個欄位的意義寫在註解中:

const requestUrl = new URL(req.url);

const payload: ActionGetResponse = {

title: "Your title",

icon: new URL("/path-of-the-icon-file ", requestUrl.origin).toString(), // the path of icon should be the path under /public

description: "Your description",

label: "Does not matter", // this value will be ignored since `links.actions` exists

links: {

actions: [

{

label: "", // button text

href: `${baseHref}&amount=${"1"}`, //when user click the button, send a POST req to this url

},

{

label: "Send SOL", // button text

href: `${baseHref}token_amount={amount}`, // this href will have a text input and bring the variable

parameters: [ // if we have multiple parameters, there will be multiple lines of input, but only one button

{ // the input value will be the value of variable

name: "amount", // variableconst body: ActionPostRequest = await req.json();

// Validate to confirm the user publickey received is valid before use

let account: PublicKey;

try {

account = new PublicKey(body.account);

} catch (err) {

return new Response('Invalid "account" provided', {

status: 400,

headers: ACTIONS_CORS_HEADERS, //Must include CORS HEADERS

});

} name in the `href` above

label: "Enter the amount of SOL to send", // placeholder of the text input

required: true,

},

],

},

],

},

};

最終將payload包起來傳回去即可:

return Response.json(payload, {

headers,

});

在GET的外面要記得加上下面這段!不然會遇到CORS問題導致瀏覽器阻擋(不知道CORS是什麼沒關係,記得加上就對了!後面有一些其他設定也都是為了CORS)

export const OPTIONS = async (req: Request) => {

return new Response(null, { headers });

};

至此我們就成功建好GET的形式啦~其實很多地方都照抄格式即可,是不是很容易呀~


接著來看POST,我們知道在GET中的action在使用者點擊後會發送一POST req到對應的href(用同一個url帶入參數即可),所以我們的POST就是要處理使用者點擊後我們希望他的錢包做的事情,首先會用以下程式碼獲取使用者的錢包地址(account):

const body: ActionPostRequest = await req.json();

let account: PublicKey;

try {

account = new PublicKey(body.account);

} catch (err) {

return new Response('Invalid "account" provided', {

status: 400,

headers: ACTIONS_CORS_HEADERS, //Must include CORS HEADERS

});

}

接著我們要獲取透過url傳過來的參數值(此範例中是password),用以下的程式碼即可:

const params = new URL(req.url).searchParams;

const password = params.get("password");

在獲使用者選擇的參數後,我們就可以任意的編寫我們的程式碼,如同一般我們用@solana/web3.js製造transaction一樣。在範例程式中我們根據已經部署好的鏈上合約創建了一連串的instructions(airdropInstruction),至於中間如何創建instruction就不在今天的範圍內,是需要根據不同的鏈上合約來變化的。總之包完instructions後利用下面這段程式碼包成transaction,並設定好recentBlockhash & feePayer

const transaction = new Transaction().add(airdropInstruction);

transaction.recentBlockhash = (

await connection.getLatestBlockhash()

).blockhash;

transaction.feePayer = account;

最後回傳Response如下格式即可:

const payload: ActionPostResponse = await createPostResponse({

fields: {

transaction,

message: "Successfully claimed!",

},

});

return Response.json(payload, {

headers: ACTIONS_CORS_HEADERS,

});

到此我們終於建立好我們API entry了。最後別忘了加入 /app/actions.json/route.ts這也是為了避免CORS問題,可以照範例程式碼直接複製貼上就好!

至此我們終於大功告成。如果要測試我們的程式碼是否正確,可以到此網址,記得修改API route和port number:https://dial.to?action=solana-action : http:/ localhost: 3000/api/actions/your_api_route,還有一個重點是如果你的合約是部署在devnet上的話,要改用這個domain:https://dial.to/devnet才會正常呼叫到合約喔!


留言
avatar-img
留言分享你的想法!
avatar-img
巫竑儒的沙龍
1會員
5內容數
巫竑儒的沙龍的其他內容
2024/08/15
近期Solana重點推出了PayFi觀念以及Token Extension,兩者之間有什麼關係呢?PayFi跟DeFi又有什麼不同?看完這篇文相信你也會跟我一樣對Solana的未來充滿期待!
2024/08/15
近期Solana重點推出了PayFi觀念以及Token Extension,兩者之間有什麼關係呢?PayFi跟DeFi又有什麼不同?看完這篇文相信你也會跟我一樣對Solana的未來充滿期待!
2024/08/14
在上篇我們看到了幾種常見的Token Extensions,現在我們來看看如何組織這些Token Extensions來做到更特殊的應用吧!
2024/08/14
在上篇我們看到了幾種常見的Token Extensions,現在我們來看看如何組織這些Token Extensions來做到更特殊的應用吧!
2024/08/13
你有聽過Solana上新推出的超強功能 「Token Extension」嗎?有了Token Extension,工程師能夠更快速的在Solana上建立專案,並且大幅增強了各個專案之間融合的便利性。如果你還不知道什麼是Token Extension,這篇文章你必須看完!
2024/08/13
你有聽過Solana上新推出的超強功能 「Token Extension」嗎?有了Token Extension,工程師能夠更快速的在Solana上建立專案,並且大幅增強了各個專案之間融合的便利性。如果你還不知道什麼是Token Extension,這篇文章你必須看完!
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
接續上一篇 Step2:VC#專案建立 Step3:IIS新建站台 Step4:VC#架設到IIS中
Thumbnail
接續上一篇 Step2:VC#專案建立 Step3:IIS新建站台 Step4:VC#架設到IIS中
Thumbnail
Function的使用方式
Thumbnail
Function的使用方式
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News