调用 /mint_nft NEAR REST API 时出现 500 内部服务器错误
Getting 500 Internal Server Error when calling /mint_nft NEAR REST API
我已将此 NEAR REST API SERVER 存储库克隆到我的本地系统中,并且未对其原始代码进行任何更改。仅添加用于调试目的的控制台日志。使用它的 API,我已经成功地将一个合约部署到测试网帐户并调用了该合约。
但是说到 NFT 部分,它不起作用。
我正在调用 /mint_nft
API 并收到 500 内部服务器错误。
这里坏了:
let create_token = await token.ViewNFT(tokenId, contract);
create_token 为空。
如果我使用 NEAR CLI 进行铸造,它工作正常,我可以在我的测试网钱包中看到 NFT..
near call $ID nft_mint '{"token_id": "02", "receiver_id": "'$ID'", "token_metadata": { "title": "Design #2", "description": "Art Design", "media": "https://ipfs.io/ipfs/Qme7ss3ARVgxv6rXqVPiikMJ8u2NLgmgszg13pYrDKEoiu", "copies": 1}}' --accountId $ID --deposit 0.1
近-api-server.config.json
{
"server_host": "localhost",
"server_port": 9000,
"rpc_node": "https://rpc.testnet.near.org",
"init_disabled": false,
"master_account_id": "parimal9.testnet",
"master_key": "ed25519:2bUSD2v88RiwznraL1ZYtduH2rsJqbrE8K6QT2asnsPnXHc171Qj4khvxFxZqb6AN6zyiZzo4j7f9amooFi7kJX1",
"nft_contract": "nft.parimal9.testnet"
}
我也尝试过这种方式,但仍然无法正常工作。
server.route({
method: 'POST',
path: '/mint_nft',
handler: async (request) => {
console.log('\n\n\nMINT_NFT_PAYLOAD:', request.payload);
let {min, max} = request.payload;
if (!min || !max) min = max = 0;
let response = [];
request = processRequest(request);
for (let i = min; i <= max; i++) {
const tokenId = request.payload.token_id.replace('{inc}', i);
console.log('tokenId:', tokenId);
let {account_id, private_key, metadata, contract} = request.payload;
const tx = await token.MintNFT(
tokenId,
metadata,
contract,
account_id,
private_key
);
if (tx) {
if (min === max) {
console.log('tokenId:', tokenId);
let create_token = await token.ViewNFT(tokenId, contract);
console.log('create_token:', create_token, '\n\n\n');
create_token.token_id = tokenId;
console.log('create_token.token_id:', tokenId, '\n\n\n');
response.push({token: create_token, tx: tx});
} else {
response.push({tx: tx});
}
} else {
response.push({text: 'Error. Check backend logs.'});
}
}
return response;
},
});
/mint_nft
的现有存储库中存在几个问题。
实施的 REST-API 在铸造 NFT 时没有遵循正确的格式。
我创建了一个 PR to address the issue
简而言之,铸造 NFT 的函数调用缺少一个参数 receiver_id
,并且 metadata
的格式和名称不正确。应该是 token_metadata: {} // type is object, not string
.
如果我们将 postData 更改为
{
"token_id": "foo",
"token_metadata": {
"media": "https://ipfs.io/ipfs/Qme7ss3ARVgxv6rXqVPiikMJ8u2NLgmgszg13pYrDKEoiu"
},
"account_id": "parimal9.testnet",
"private_key": "yourPrivateKey",
"contract": "parimal9.testnet"
}
并对服务器代码进行一些更改,您可以在 PR I made 中看到,我们应该能够从服务器调用 /mint_nft
。
我已将此 NEAR REST API SERVER 存储库克隆到我的本地系统中,并且未对其原始代码进行任何更改。仅添加用于调试目的的控制台日志。使用它的 API,我已经成功地将一个合约部署到测试网帐户并调用了该合约。
但是说到 NFT 部分,它不起作用。
我正在调用 /mint_nft
API 并收到 500 内部服务器错误。
这里坏了:
let create_token = await token.ViewNFT(tokenId, contract);
create_token 为空。
如果我使用 NEAR CLI 进行铸造,它工作正常,我可以在我的测试网钱包中看到 NFT..
near call $ID nft_mint '{"token_id": "02", "receiver_id": "'$ID'", "token_metadata": { "title": "Design #2", "description": "Art Design", "media": "https://ipfs.io/ipfs/Qme7ss3ARVgxv6rXqVPiikMJ8u2NLgmgszg13pYrDKEoiu", "copies": 1}}' --accountId $ID --deposit 0.1
近-api-server.config.json
{
"server_host": "localhost",
"server_port": 9000,
"rpc_node": "https://rpc.testnet.near.org",
"init_disabled": false,
"master_account_id": "parimal9.testnet",
"master_key": "ed25519:2bUSD2v88RiwznraL1ZYtduH2rsJqbrE8K6QT2asnsPnXHc171Qj4khvxFxZqb6AN6zyiZzo4j7f9amooFi7kJX1",
"nft_contract": "nft.parimal9.testnet"
}
我也尝试过这种方式,但仍然无法正常工作。
server.route({
method: 'POST',
path: '/mint_nft',
handler: async (request) => {
console.log('\n\n\nMINT_NFT_PAYLOAD:', request.payload);
let {min, max} = request.payload;
if (!min || !max) min = max = 0;
let response = [];
request = processRequest(request);
for (let i = min; i <= max; i++) {
const tokenId = request.payload.token_id.replace('{inc}', i);
console.log('tokenId:', tokenId);
let {account_id, private_key, metadata, contract} = request.payload;
const tx = await token.MintNFT(
tokenId,
metadata,
contract,
account_id,
private_key
);
if (tx) {
if (min === max) {
console.log('tokenId:', tokenId);
let create_token = await token.ViewNFT(tokenId, contract);
console.log('create_token:', create_token, '\n\n\n');
create_token.token_id = tokenId;
console.log('create_token.token_id:', tokenId, '\n\n\n');
response.push({token: create_token, tx: tx});
} else {
response.push({tx: tx});
}
} else {
response.push({text: 'Error. Check backend logs.'});
}
}
return response;
},
});
/mint_nft
的现有存储库中存在几个问题。
实施的 REST-API 在铸造 NFT 时没有遵循正确的格式。 我创建了一个 PR to address the issue
简而言之,铸造 NFT 的函数调用缺少一个参数 receiver_id
,并且 metadata
的格式和名称不正确。应该是 token_metadata: {} // type is object, not string
.
如果我们将 postData 更改为
{
"token_id": "foo",
"token_metadata": {
"media": "https://ipfs.io/ipfs/Qme7ss3ARVgxv6rXqVPiikMJ8u2NLgmgszg13pYrDKEoiu"
},
"account_id": "parimal9.testnet",
"private_key": "yourPrivateKey",
"contract": "parimal9.testnet"
}
并对服务器代码进行一些更改,您可以在 PR I made 中看到,我们应该能够从服务器调用 /mint_nft
。