Prerequisites
- Remix running on an Express server.
- A seller wallet address for
payTo. - A buyer wallet with deposited collateral.
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Use 4Mica with a Remix Express server.
payTo.npm install @remix-run/express express @4mica/x402 @x402/fetch viem
pnpm install @remix-run/express express @4mica/x402 @x402/fetch viem
yarn add @remix-run/express express @4mica/x402 @x402/fetch viem
bun add @remix-run/express express @4mica/x402 @x402/fetch viem
PRIVATE_KEY=0xYourPrivateKey
PAY_TO=0xYourSellerAddress
PAY_TO as the seller
address advertised by protected routes.import express from "express";
import { createRequestHandler } from "@remix-run/express";
import { paymentMiddlewareFromConfig } from "@4mica/x402/server/express";
import * as build from "./build/server/index.js";
const server = express();
server.use(express.json());
server.use(
paymentMiddlewareFromConfig(
{
"GET /api/premium-content": {
accepts: {
scheme: "4mica-credit",
price: "$0.10",
network: "eip155:84532",
payTo: process.env.PAY_TO ?? "0xYourAddress",
},
description: "Access to premium Remix content",
},
},
),
);
server.get("/api/premium-content", (req, res) => {
res.json({ message: "Paid content from Remix" });
});
server.all("*", createRequestHandler({ build }));
server.listen(3000);
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { FourMicaEvmScheme } from "@4mica/x402/client";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const scheme = await FourMicaEvmScheme.create(account);
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:84532", client: scheme }],
});
const response = await fetchWithPayment("http://localhost:3000/api/premium-content");
const data = await response.json();