Created
March 7, 2024 19:37
-
-
Save markcarey/c93c92d8ec7cc7767400bb8c5bbebe76 to your computer and use it in GitHub Desktop.
Farcaster Frame Txn Example POST Handler
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"txn": async function(req) { | |
return new Promise(async function(resolve, reject) { | |
var frame = {}; | |
frame.id = req.params.id; | |
frame.square = true; | |
frame.postUrl = `https://frm.lol/frames/${req.params.id}`; | |
const frameResult = await util.validate(req); // neynar frame validation endpoint | |
if (frameResult.valid == true) { | |
if ("transactionId" in req.body.untrustedData) { | |
// transaction has completed | |
const txnId = req.body.untrustedData.transactionId; | |
frame.imageText = "Your txId is " + txnId; | |
} else { | |
// return txn data | |
// degen contract via ethers | |
const provider = new ethers.providers.JsonRpcProvider(process.env.API_URL_BASE); | |
const degen = new ethers.Contract(process.env.DEGEN_CONTRACT, degenJSON.abi, provider); | |
const SPENDER_CONTRACT = "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5"; // Aave Pool on Base (demo purposes) | |
// calldata for an approve tx | |
const calldata = degen.interface.encodeFunctionData("approve", [SPENDER_CONTRACT, ethers.utils.parseEther("69")]); | |
const tx = { | |
"chainId": "eip155:8453", // Base chainId | |
"method": "eth_sendTransaction", | |
"params": { | |
"to": process.env.DEGEN_CONTRACT, | |
"abi": degenJSON.abi, | |
"data": calldata, | |
"value": "0x0" | |
} | |
}; | |
return resolve(tx); | |
} // if txnId | |
} else { | |
frame.imageText = "I'm sorry, I couldn't validate this frame."; | |
} | |
return resolve(frame); | |
}); // return new Promise | |
}, // txn |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment