Skip to content

Commit 8111007

Browse files
authored
feat: Add update token metadata endpoints (#453)
* feat: Add update token metadata endpoints * update path * fix path
1 parent 25229e6 commit 8111007

File tree

4 files changed

+170
-0
lines changed

4 files changed

+170
-0
lines changed

src/server/routes/contract/extensions/erc1155/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { erc1155SignatureMint } from "./write/signatureMint";
2727
import { erc1155transfer } from "./write/transfer";
2828
import { erc1155transferFrom } from "./write/transferFrom";
2929
import { erc1155UpdateClaimConditions } from "./write/updateClaimConditions";
30+
import { erc1155UpdateTokenMetadata } from "./write/updateTokenMetadata";
3031

3132
export const erc1155Routes = async (fastify: FastifyInstance) => {
3233
// GET
@@ -60,4 +61,5 @@ export const erc1155Routes = async (fastify: FastifyInstance) => {
6061
await fastify.register(erc1155SetClaimCondition);
6162
await fastify.register(erc1155SetBatchClaimConditions);
6263
await fastify.register(erc1155UpdateClaimConditions);
64+
await fastify.register(erc1155UpdateTokenMetadata);
6365
};
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { Static, Type } from "@sinclair/typebox";
2+
import { FastifyInstance } from "fastify";
3+
import { StatusCodes } from "http-status-codes";
4+
import { queueTx } from "../../../../../../db/transactions/queueTx";
5+
import { getContract } from "../../../../../../utils/cache/getContract";
6+
import { nftMetadataInputSchema } from "../../../../../schemas/nft";
7+
import {
8+
contractParamSchema,
9+
requestQuerystringSchema,
10+
standardResponseSchema,
11+
transactionWritesResponseSchema,
12+
} from "../../../../../schemas/sharedApiSchemas";
13+
import { walletAuthSchema } from "../../../../../schemas/wallet";
14+
import { getChainIdFromChain } from "../../../../../utils/chain";
15+
16+
// INPUT
17+
const requestSchema = contractParamSchema;
18+
const requestBodySchema = Type.Object({
19+
tokenId: Type.String({
20+
description: "Token ID to update metadata",
21+
}),
22+
metadata: nftMetadataInputSchema,
23+
});
24+
25+
// LOGIC
26+
export async function erc1155UpdateTokenMetadata(fastify: FastifyInstance) {
27+
fastify.route<{
28+
Params: Static<typeof requestSchema>;
29+
Reply: Static<typeof transactionWritesResponseSchema>;
30+
Body: Static<typeof requestBodySchema>;
31+
Querystring: Static<typeof requestQuerystringSchema>;
32+
}>({
33+
method: "POST",
34+
url: "/contract/:chain/:contractAddress/erc1155/token/update",
35+
schema: {
36+
summary: "Update token metadata",
37+
description: "Update the metadata for an ERC1155 token.",
38+
tags: ["ERC1155"],
39+
operationId: "updateTokenMetadata",
40+
params: requestSchema,
41+
body: requestBodySchema,
42+
headers: walletAuthSchema,
43+
querystring: requestQuerystringSchema,
44+
response: {
45+
...standardResponseSchema,
46+
[StatusCodes.OK]: transactionWritesResponseSchema,
47+
},
48+
},
49+
handler: async (request, reply) => {
50+
const { chain, contractAddress } = request.params;
51+
const { simulateTx } = request.query;
52+
const { tokenId, metadata } = request.body;
53+
const walletAddress = request.headers[
54+
"x-backend-wallet-address"
55+
] as string;
56+
const accountAddress = request.headers["x-account-address"] as string;
57+
const chainId = await getChainIdFromChain(chain);
58+
const contract = await getContract({
59+
chainId,
60+
contractAddress,
61+
walletAddress,
62+
accountAddress,
63+
});
64+
65+
const tx = await contract.erc1155.updateMetadata.prepare(
66+
tokenId,
67+
metadata,
68+
);
69+
const queueId = await queueTx({
70+
tx,
71+
chainId,
72+
simulateTx,
73+
extension: "erc1155",
74+
});
75+
76+
reply.status(StatusCodes.OK).send({
77+
result: {
78+
queueId,
79+
},
80+
});
81+
},
82+
});
83+
}

src/server/routes/contract/extensions/erc721/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { erc721SignatureMint } from "./write/signatureMint";
2626
import { erc721transfer } from "./write/transfer";
2727
import { erc721transferFrom } from "./write/transferFrom";
2828
import { erc721UpdateClaimConditions } from "./write/updateClaimConditions";
29+
import { erc721UpdateTokenMetadata } from "./write/updateTokenMetadata";
2930

3031
export const erc721Routes = async (fastify: FastifyInstance) => {
3132
// GET
@@ -58,4 +59,5 @@ export const erc721Routes = async (fastify: FastifyInstance) => {
5859
await fastify.register(erc721SetClaimConditions);
5960
await fastify.register(erc721UpdateClaimConditions);
6061
await fastify.register(erc721SignaturePrepare);
62+
await fastify.register(erc721UpdateTokenMetadata);
6163
};
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { Static, Type } from "@sinclair/typebox";
2+
import { FastifyInstance } from "fastify";
3+
import { StatusCodes } from "http-status-codes";
4+
import { queueTx } from "../../../../../../db/transactions/queueTx";
5+
import { getContract } from "../../../../../../utils/cache/getContract";
6+
import { nftMetadataInputSchema } from "../../../../../schemas/nft";
7+
import {
8+
contractParamSchema,
9+
requestQuerystringSchema,
10+
standardResponseSchema,
11+
transactionWritesResponseSchema,
12+
} from "../../../../../schemas/sharedApiSchemas";
13+
import { walletAuthSchema } from "../../../../../schemas/wallet";
14+
import { getChainIdFromChain } from "../../../../../utils/chain";
15+
16+
// INPUT
17+
const requestSchema = contractParamSchema;
18+
const requestBodySchema = Type.Object({
19+
tokenId: Type.String({
20+
description: "Token ID to update metadata",
21+
}),
22+
metadata: nftMetadataInputSchema,
23+
});
24+
25+
// LOGIC
26+
export async function erc721UpdateTokenMetadata(fastify: FastifyInstance) {
27+
fastify.route<{
28+
Params: Static<typeof requestSchema>;
29+
Reply: Static<typeof transactionWritesResponseSchema>;
30+
Body: Static<typeof requestBodySchema>;
31+
Querystring: Static<typeof requestQuerystringSchema>;
32+
}>({
33+
method: "POST",
34+
url: "/contract/:chain/:contractAddress/erc721/token/update",
35+
schema: {
36+
summary: "Update token metadata",
37+
description: "Update the metadata for an ERC721 token.",
38+
tags: ["ERC721"],
39+
operationId: "updateTokenMetadata",
40+
params: requestSchema,
41+
body: requestBodySchema,
42+
headers: walletAuthSchema,
43+
querystring: requestQuerystringSchema,
44+
response: {
45+
...standardResponseSchema,
46+
[StatusCodes.OK]: transactionWritesResponseSchema,
47+
},
48+
},
49+
handler: async (request, reply) => {
50+
const { chain, contractAddress } = request.params;
51+
const { simulateTx } = request.query;
52+
const { tokenId, metadata } = request.body;
53+
const walletAddress = request.headers[
54+
"x-backend-wallet-address"
55+
] as string;
56+
const accountAddress = request.headers["x-account-address"] as string;
57+
const chainId = await getChainIdFromChain(chain);
58+
const contract = await getContract({
59+
chainId,
60+
contractAddress,
61+
walletAddress,
62+
accountAddress,
63+
});
64+
65+
const tx = await contract.erc721.updateMetadata.prepare(
66+
tokenId,
67+
metadata,
68+
);
69+
const queueId = await queueTx({
70+
tx,
71+
chainId,
72+
simulateTx,
73+
extension: "erc721",
74+
});
75+
76+
reply.status(StatusCodes.OK).send({
77+
result: {
78+
queueId,
79+
},
80+
});
81+
},
82+
});
83+
}

0 commit comments

Comments
 (0)