Frog.transaction Context
The c
object is the parameter of the route handlers. It contains context for the transaction route.
import { Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
return c.send({/* ... */})
})
address
- Type:
string | undefined
The address of the wallet connected by the user after pressing the button to do the transaction.
This is the wallet address the user executes the transaction with.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
const { address } = c
return c.send({/* ... */})
})
buttonIndex
- Type:
number
The index of the button that was previously clicked.
For example, if the user clicked "Banana"
, then buttonIndex
will be 2
.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.frame('/', (c) => {
return c.res({
image: (
<div style={{ color: 'white', display: 'flex', fontSize: 60 }}>
Select a fruit.
</div>
),
intents: [
<Button.Transaction
target="/send-ether"
value="apple"
>
Apple
</Button.Transaction>,
<Button.Transaction
target="/send-ether"
value="banana"
>
Banana
</Button.Transaction>,
]
})
})
app.transaction('/send-ether', (c) => {
const { buttonIndex } = c
return c.send({/* ... */})
})
buttonValue
- Type:
string
The value of the button that was previously clicked.
For example, if the user clicked "Banana"
, then buttonValue
will be "banana"
.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.frame('/', (c) => {
return c.res({
image: (
<div style={{ color: 'white', display: 'flex', fontSize: 60 }}>
Select a fruit.
</div>
),
intents: [
<Button.Transaction
target="/send-ether"
value="apple"
>
Apple
</Button.Transaction>,
<Button.Transaction
target="/send-ether"
value="banana"
>
Banana
</Button.Transaction>,
]
})
})
app.transaction('/send-ether', (c) => {
const { buttonValue } = c
return c.send({/* ... */})
})
contract
- Type:
TransactionResponseFn<ContractTransactionParameters>
Contract transaction response. See more.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/mint', (c) => {
return c.contract({/* ... */})
})
error
- Type:
(error: BaseError) => TypedResponse
Error response.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/', (c) => {
return c.error({/* ... */})
})
frameData
- Type:
FrameData
Data from the frame that was passed via the POST
body from a Farcaster Client. See more.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
const { frameData } = c
const { castId, fid, messageHash, network, timestamp, url } = frameData
return c.send({/* ... */})
})
initialPath
- Type:
string
Initial/start path of the frame set.
If the user clicks <Button.Reset>
, they will be directed to this URL.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
const { initialPath } = c
return c.send({/* ... */})
})
inputText
- Type:
string
The value of the input that was previously interacted with.
For example, if the user typed "Banana"
, then inputText
will be "Banana"
.
import { Button, Frog, TextInput } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.frame('/', (c) => {
return c.res({
image: (
<div style={{ color: 'white', display: 'flex', fontSize: 60 }}>
Send Ether
</div>
),
intents: [
<TextInput placeholder="Value (ETH)" />,
<Button target="/send-ether">Send</Button>,
]
})
})
app.transaction('/send-ether', (c) => {
const { inputText } = c
return c.send({/* ... */})
})
previousButtonValues
- Type:
string[]
The data of the previous intents.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.frame('/', (c) => {
return c.res({
image: (
<div style={{ color: 'white', display: 'flex', fontSize: 60 }}>
Select your fruit
</div>
),
intents: [
<Button.Transaction
target="/send-ether"
value="apple"
>
Apple
</Button.Transaction>,
<Button.Transaction
target="/send-ether"
value="banana"
>
Banana
</Button.Transaction>,
]
})
})
app.transaction('/send-ether', (c) => {
const { buttonValue, previousButtonValues } = c
console.log(previousButtonValues)
['apple', 'banana'] return c.send({/* ... */})})
previousState
- Type:
State
The state of the previous frame.
import { Button, Frog } from 'frog'
type State = {
values: string[]
}
export const app = new Frog<{ State: State }>({
initialState: {
values: []
}
})
app.frame('/', (c) => {
const { buttonValue, deriveState } = c
const state = deriveState(previousState => {
if (buttonValue) previousState.values.push(buttonValue)
})
return c.res({
image: (
<div style={{ color: 'white', display: 'flex', fontSize: 60 }}>
{values.map(value => <div>{value}</div>)}
</div>
),
intents: [
<Button value="apple">Apple</Button>,
<Button value="banana">Banana</Button>,
<Button.Transaction target="/send-ether">Send</Button.Transaction>,
]
})
})
app.transaction('/send-ether', (c) => {
const { previousState } = c
return c.send({/* ... */})
})
req
- Type:
Request
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
const { req } = c
return c.res({/* ... */})
})
res
- Type:
TransactionResponseFn<TransactionParameters>
Raw transaction response. See more.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
return c.res({/* ... */})
})
send
- Type:
TransactionResponseFn<SendTransactionParameters>
Send transaction response. See more.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
return c.send({/* ... */})
})
var
- Type:
HonoContext['var']
Extract a context value that was previously set via set
in Middleware.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.use(async (c, next) => {
c.set('message', 'Frog is cool!!')
await next()
})
app.transaction('/send-ether', (c) => {
const message = c.var.message
return c.send({/* ... */})
})
verified
- Type:
boolean
Whether or not the frameData
(and buttonIndex
, buttonValue
, inputText
) was verified by the Farcaster Hub API.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
const { verified } = c
return c.send({/* ... */})
})
url
- Type:
string
Current URL.
import { Button, Frog } from 'frog'
export const app = new Frog({ title: 'Frog Frame' })
app.transaction('/send-ether', (c) => {
const { url } = c
return c.send({/* ... */})
})