Event를 통한 트랜잭션 처리

Klaytn을 통해 개발을 진행하는 과정에서 궁금한 점이 있어서 질문을 남깁니다.

User가 Mint 트랜잭션을 전송하면, 해당 Event를 리스닝 하여 Owner가 mint 트랜잭션을 다시 전송하는 방식으로 구성을 하였습니다.

Test 과정에서, 일반적으로 하나씩 Mint 하는 행위에서는 문제가 발생을 하지 않았지만.

후에 여러개의 트랜잭션을 계속 전송을 하니

known transaction: 546875d2452693f16bbd953f927f5c32dbdcbc2ebae91dac2245da2c2603d02b

해당 에러가 발생을 한뒤 그 이후로 Owner 계정이 전송하는 트랜잭션은 모두 revert가 일어 나게 되더군요.

해당 에러 발생후에는 Owner가 전송할떄마다

Error: evm: execution reverted

에러가 발생을 하고 있습니다.

Instance.events.MintData((err, result) => {
  if (result) {
    console.log("Event 들어옴");
    const randomNumber = Math.floor(Math.random() * 10) * 1000;
    setTimeout(async () => {
      await sendMintTransaction();
    }, randomNumber);
  }
});

이벤트 리스닝 하는 코드는 이와 같으며 랜덤한 숫자 이후에 Mint 하는 형태 입니다. 추가적인 질문 사항있으면 남겨주시면 감사하겠습니다.

감사합니다.

user와 owner가 어떤걸 말씀하시는건가요?
제가 이해하기로는 user는 구현중이신 서비스의 이용자를 의미하는것같고, owner는 서비스 운영자를 의미하는거 같습니다. 토큰 등의 owner와 헷갈려서 질문드립니다.

user는 사용자를 의미하고, owner는 트랜잭션을 송출하는 Contract Owner를 의미합니다.

사용자가 Contract에 mint 요청을 하게 되면 Contract에 Mint 하였다고 데이터를 만들어 준뒤,
Contract Owner가 이벤트를 리스닝하여 해당 데이터를 조회해 Mint 해주는 형태 입니다.

서비스 운영자와, 서비스 이용자로 이해하셔도 무방할것 같습니다.

우선 known transaction이 발생하는 원인은 nonce값이 동일한 트랜잭션이 풀에 존재하거나 이미 처리되었기 때문입니다.
구현하신 트랜잭션 전송함수에서 parameter에 nonce를 caver.rpc.klay.getTransactionCount API로 받아오셔서 설정해주시기 바랍니다.

2개의 좋아요