Kas 통한 이벤트 수집 기능 구현 과정에서의 질문

import CaverExtKAS from 'caver-js-ext-kas';
import { accessKeyId, secretAccessKey, cypressId, contractAddressCLKToken, ABIAddressCLKToken } from './config.js';
//const CaverExtKAS = require('caver-js-ext-kas');
const chainId = cypressId
const caver = new CaverExtKAS();
caver.initNodeAPI(chainId, accessKeyId, secretAccessKey, false)
caver.initWalletAPI(chainId, accessKeyId, secretAccessKey);

//Test : Invoke Event
const contractCLK = caver.contract.create(ABIAddressCLKToken, contractAddressCLKToken);

const keyringContainer = new caver.keyringContainer();
const keyring = keyringContainer.add(keyringContainer.keyring.createFromPrivateKey('0xmyprivatekeyishere'));
contractCLK.setWallet(keyringContainer);
contractCLK.events.Transfer(
  {
    fromBlock: 63206106,
    toBlock: 'latest',
  },(error, data) => {
    console.log(`Transfer: ${data}`)
  });

const contractOwner = '0xabcdefghijklmnopqrstuvwxyz1234567890abcd';
const options = {
  from: contractOwner,
  gas: 30000,
};

async function transfer(toAddress, amount) {
  await contractCLK.methods.transfer(toAddress, String(amount*Math.pow(10,18))).send(options)
};
transfer('toAddress',10);

안녕하세요, 저는 디파이 서비스의 주요 이벤트(Swap, AddLiquidity 등)를 Listen 하는 것을 목적으로 참고자료 글을 Reference 삼아 일단 Baobab에 배포한
Kip7 토큰의 Event를 조회하기 위한 코드를 상기와 같이 작성해보았습니다.
비전공자이다 보니 질문이 많이 무식할 수 있는 점 먼저 양해 부탁드리겠습니다…

그래서 위 코드 작성 과정에서 마주했던 오류나 혹은 의문들을 나열하고 질문 드려보고자합니다…

  1. 과거의 Event들을 수집하려면 어떻게 해야하나요?

  2. 위의 코드는 제가 직접 transfer를 발생시키고 emit된 Transfer 이벤트를 출력하는 건가요?

  3. 해당 컨트랙트에서 발생되는 추후의 모든 이벤트를 수집하기 위해서는 어떻게 해야하나요?

  4. 현재 위의 코드에서 transfer함수를 호출할때 ,value 인자를 integer로 주면 overflow 오류(Error: overflow (fault=“overflow”, operation=“BigNumber.from”, value=10000000000000000000, code=NUMERIC_FAULT, version=bignumber/5.3.0))가 발생됩니다. 원래 default가 string 형태인가요?

  5. 최종적으로 위 코드를 실행시켰을 때, Error: Returned error: not a program account (e.g., an account having code and storage) 에러를 반환합니다. 이건 무슨 에러인가요?

미리 감사드립니다.

안녕하세요, 클레이튼 포럼에 질문을 올려주셔서 감사드립니다.

아래 각 항목별로 답변을 드리도록 하겠습니다.

  1. 과거의 Event들을 수집하려면 어떻게 해야하나요?
    → contractCLK.events.Transfer()함수의 fromBlock에 적는 값이 이벤트 추적을 시작하는 블록 넘버입니다. 다만 아주 오래된 블록 넘버에 대해서는 데이터가 제공되지 않을 수 있습니다.

  2. 위의 코드는 제가 직접 transfer를 발생시키고 emit된 Transfer 이벤트를 출력하는 건가요?
    → contractCLK.events.Transfer 이 함수는 contractCLK라는 컨트랙트에서 Transfer event가 발생할 때마다 해당 함수가 호출됩니다.

  3. 해당 컨트랙트에서 발생되는 추후의 모든 이벤트를 수집하기 위해서는 어떻게 해야하나요?
    → contractCLK.events.Transfer 대신 contractCLK.events.allEvents를 사용하시면 됩니다. 더 자세한 내용은 KlaytnDocs 를 참고 부탁드립니다.

  4. 현재 위의 코드에서 transfer함수를 호출할때 ,value 인자를 integer로 주면 overflow 오류(Error: overflow (fault=“overflow”, operation=“BigNumber.from”, value=10000000000000000000, code=NUMERIC_FAULT, version=bignumber/5.3.0))가 발생됩니다. 원래 default가 string 형태인가요?
    → 해당하는 값은 javascript에서의 integer로 처리하기에 너무 큰 값입니다. 큰 숫자를 입력하실 때에는 스트링으로 입력하셔야 합니다.

  5. 최종적으로 위 코드를 실행시켰을 때, Error: Returned error: not a program account (e.g., an account having code and storage) 에러를 반환합니다. 이건 무슨 에러인가요?
    → not a program account라는 에러는 컨트랙트가 아니고 일반 사용자 계정에 해당 이벤트를 호출하셔서 발생하는 에러입니다. 컨트랙트 주소가 맞게 설정되었는지 확인 부탁드립니다.

감사합니다.