Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/server/routes/contract/extensions/erc1155/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { erc1155SignatureMint } from "./write/signatureMint";
import { erc1155transfer } from "./write/transfer";
import { erc1155transferFrom } from "./write/transferFrom";
import { erc1155UpdateClaimConditions } from "./write/updateClaimConditions";
import { erc1155UpdateTokenMetadata } from "./write/updateTokenMetadata";

export const erc1155Routes = async (fastify: FastifyInstance) => {
// GET
Expand Down Expand Up @@ -60,4 +61,5 @@ export const erc1155Routes = async (fastify: FastifyInstance) => {
await fastify.register(erc1155SetClaimCondition);
await fastify.register(erc1155SetBatchClaimConditions);
await fastify.register(erc1155UpdateClaimConditions);
await fastify.register(erc1155UpdateTokenMetadata);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { Static, Type } from "@sinclair/typebox";
import { FastifyInstance } from "fastify";
import { StatusCodes } from "http-status-codes";
import { queueTx } from "../../../../../../db/transactions/queueTx";
import { getContract } from "../../../../../../utils/cache/getContract";
import { nftMetadataInputSchema } from "../../../../../schemas/nft";
import {
contractParamSchema,
requestQuerystringSchema,
standardResponseSchema,
transactionWritesResponseSchema,
} from "../../../../../schemas/sharedApiSchemas";
import { walletAuthSchema } from "../../../../../schemas/wallet";
import { getChainIdFromChain } from "../../../../../utils/chain";

// INPUT
const requestSchema = contractParamSchema;
const requestBodySchema = Type.Object({
tokenId: Type.String({
description: "Token ID to update metadata",
}),
metadata: nftMetadataInputSchema,
});

// LOGIC
export async function erc1155UpdateTokenMetadata(fastify: FastifyInstance) {
fastify.route<{
Params: Static<typeof requestSchema>;
Reply: Static<typeof transactionWritesResponseSchema>;
Body: Static<typeof requestBodySchema>;
Querystring: Static<typeof requestQuerystringSchema>;
}>({
method: "POST",
url: "/contract/:chain/:contractAddress/erc1155/token/update",
schema: {
summary: "Update token metadata",
description: "Update the metadata for an ERC1155 token.",
tags: ["ERC1155"],
operationId: "updateTokenMetadata",
params: requestSchema,
body: requestBodySchema,
headers: walletAuthSchema,
querystring: requestQuerystringSchema,
response: {
...standardResponseSchema,
[StatusCodes.OK]: transactionWritesResponseSchema,
},
},
handler: async (request, reply) => {
const { chain, contractAddress } = request.params;
const { simulateTx } = request.query;
const { tokenId, metadata } = request.body;
const walletAddress = request.headers[
"x-backend-wallet-address"
] as string;
const accountAddress = request.headers["x-account-address"] as string;
const chainId = await getChainIdFromChain(chain);
const contract = await getContract({
chainId,
contractAddress,
walletAddress,
accountAddress,
});

const tx = await contract.erc1155.updateMetadata.prepare(
tokenId,
metadata,
);
const queueId = await queueTx({
tx,
chainId,
simulateTx,
extension: "erc1155",
});

reply.status(StatusCodes.OK).send({
result: {
queueId,
},
});
},
});
}
2 changes: 2 additions & 0 deletions src/server/routes/contract/extensions/erc721/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { erc721SignatureMint } from "./write/signatureMint";
import { erc721transfer } from "./write/transfer";
import { erc721transferFrom } from "./write/transferFrom";
import { erc721UpdateClaimConditions } from "./write/updateClaimConditions";
import { erc721UpdateTokenMetadata } from "./write/updateTokenMetadata";

export const erc721Routes = async (fastify: FastifyInstance) => {
// GET
Expand Down Expand Up @@ -58,4 +59,5 @@ export const erc721Routes = async (fastify: FastifyInstance) => {
await fastify.register(erc721SetClaimConditions);
await fastify.register(erc721UpdateClaimConditions);
await fastify.register(erc721SignaturePrepare);
await fastify.register(erc721UpdateTokenMetadata);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { Static, Type } from "@sinclair/typebox";
import { FastifyInstance } from "fastify";
import { StatusCodes } from "http-status-codes";
import { queueTx } from "../../../../../../db/transactions/queueTx";
import { getContract } from "../../../../../../utils/cache/getContract";
import { nftMetadataInputSchema } from "../../../../../schemas/nft";
import {
contractParamSchema,
requestQuerystringSchema,
standardResponseSchema,
transactionWritesResponseSchema,
} from "../../../../../schemas/sharedApiSchemas";
import { walletAuthSchema } from "../../../../../schemas/wallet";
import { getChainIdFromChain } from "../../../../../utils/chain";

// INPUT
const requestSchema = contractParamSchema;
const requestBodySchema = Type.Object({
tokenId: Type.String({
description: "Token ID to update metadata",
}),
metadata: nftMetadataInputSchema,
});

// LOGIC
export async function erc721UpdateTokenMetadata(fastify: FastifyInstance) {
fastify.route<{
Params: Static<typeof requestSchema>;
Reply: Static<typeof transactionWritesResponseSchema>;
Body: Static<typeof requestBodySchema>;
Querystring: Static<typeof requestQuerystringSchema>;
}>({
method: "POST",
url: "/contract/:chain/:contractAddress/erc721/token/update",
schema: {
summary: "Update token metadata",
description: "Update the metadata for an ERC721 token.",
tags: ["ERC721"],
operationId: "updateTokenMetadata",
params: requestSchema,
body: requestBodySchema,
headers: walletAuthSchema,
querystring: requestQuerystringSchema,
response: {
...standardResponseSchema,
[StatusCodes.OK]: transactionWritesResponseSchema,
},
},
handler: async (request, reply) => {
const { chain, contractAddress } = request.params;
const { simulateTx } = request.query;
const { tokenId, metadata } = request.body;
const walletAddress = request.headers[
"x-backend-wallet-address"
] as string;
const accountAddress = request.headers["x-account-address"] as string;
const chainId = await getChainIdFromChain(chain);
const contract = await getContract({
chainId,
contractAddress,
walletAddress,
accountAddress,
});

const tx = await contract.erc721.updateMetadata.prepare(
tokenId,
metadata,
);
const queueId = await queueTx({
tx,
chainId,
simulateTx,
extension: "erc721",
});

reply.status(StatusCodes.OK).send({
result: {
queueId,
},
});
},
});
}