안녕하세요.
제목에서 언급한대로 Returned error: not a program account (e.g., an account having code and storage) 에러를 재현해보고 싶고 해당 에러 원인을 알고 싶습니다.
- 현재 baobab EN v1.5.3 을
state.tries-in-memory=4옵션을 주고 띄웠습니다. CloneFactoryCreate2를 상속한 factory contract를 하나 배포하였고 해당 컨트랙트를 통해 contract account 를 생성합니다.
어떻게 재현해야할지 정확하게 몰라 아래와 같은 시나리오로 스크립트를 작성하여 돌려보다가 도움을 구하게 되었습니다.
테스트 시나리오
- factory contract를 통해 새로운 contract account를 생성합니다. 그리고 해당 account의 주소(이하
addr1)와 블럭넘버 (이하bn1)을 얻습니다. addr1로 klay를 전송합니다. 전송하는 방식은 legacyTransaction을 만들어 sendRawTransaction을 통해 전송합니다. 여기서 블럭 넘버(이하bn2)를 얻습니다.- 그리고
klay_blockNumber를 통해 최신 블럭넘버를 얻습니다. (이하bn3) bn1,bn2,bn3과addr1을 이용하여 baobab EN에klay_getBalance를 통해 잔액을 조회합니다.- 2초간 쉬고 2-4번 과정을 n번 반복합니다.
결과
위와 같은 방식으로 테스트를 돌렸을 때
{
"jsonrpc":"2.0",
"id":"1",
"error": {
"code":-32000,
"message":"missing trie node ...(생략) "
}
}
와 같은 에러밖에 얻지 못했습니다.
질문
- not a program account 에러를 재현하려면 어떻게 하면 좋을까요?
- 제가 아직 not a program account 에러가 발생하는 구체적인 원인을 알지 못해서 헤매고 있는 것 같습니다. 혹시 not a program account이 에러가 발생하는 원인에 대해서 알려주실 수 있을까요? 주로 이 에러가 블럭 싱크가 밀릴 때 자주 발생했던 것 같습니다.