NFT 발행 직후 tokenID값을 가져오고 싶습니다

안녕하세요.

caver-js를 사용해서 NFT 배포, 발행까지 잘 사용하고 있습니다.

지금은 NFT mint(발행) 직후 token ID값을 가져와서 사용해야합니다.

발행 후 리턴받은 transaction info에는 해당 정보가 없어서 검색해봤는데 mint 시 같이 실행되는 Event를 감지하는 리스너를 설정하면 해당 정보를 받을 수 있더군요.

근데 이벤트 리스너는 비동기로 작동해서 함수 내에서 선언하고 리스너에서 값을 리턴해도 함수를 호출한 router에서는 undefiend를 리턴받고 현재 막혀있습니다.

현재 상황에서 리스너에서 리턴받은 값을 router에서 사용하려면 어떻게 해야 될까요? 애초에 리스너를 함수에 선언하는 방식 자체가 문제인 것 같은 느낌이 드는데…답변 및 의견 주시면 감사하겠습니다!

async function mint_klaytn_nft(chain_id, mint_abi, contract_address, mint_arguments)
{
	try
	{
		const caver = new Caver(ws_provider_url[chain_id]);
		const keyring = caver.wallet.add(caver.wallet.keyring.createFromPrivateKey(private_key));

		// Transfer/Mint 이벤트 리스너 컨트랙트
		const event_contract = new caver.Contract(transfer_event_abi, contract_address)
		event_contract.events.allEvents()
		.on('data', (event_info) => 
		{
			console.log('event_info', event_info);
			// 여기의 값을 현재 함수를 호출한 router에서 사용해야합니다.
		})
		.on('error', console.error);
	
		// mint() 실행 컨트랙트
		const contract = new caver.contract(mint_abi, contract_address);

		const send_options = {
			from: keyring['_address'],
			gas: gas_limit,
		};

		const mint_transaction_info = await contract.methods.mint(...mint_arguments).send(send_options);
		console.log('mint_transaction_info', mint_transaction_info);

	}
	catch(e)
	{
		console.error(e);
		return false;
	}
}

우선 router, 즉 controller쪽에서 이벤트 리스너를 만들어놓고 이벤트 감지가 됐을 때 해당 컨트롤러 response 처리를 하는 쪽으로 작업했습니다.

혹시 다른 방법이나 의견 있다면 부탁드리겠습니다.

안녕하세요.

네 이벤트는 비동기로 작동하기 때문에 따로 이벤트감지해서 처리하는 부분을 구현해야 합니다~ :slight_smile:

1개의 좋아요

역시 따로 처리해야하는군요.
답변 감사합니다~