안녕하세요.
제목에서 언급한대로 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이 에러가 발생하는 원인에 대해서 알려주실 수 있을까요? 주로 이 에러가 블럭 싱크가 밀릴 때 자주 발생했던 것 같습니다.