컨트랙트 주소로 송금시 오류가 발생합니다

송금들어온 코인이나 토큰을 처리하는 컨트랙트를 개발중 이상한 현상이 발견되어 문의드립니다.

  1. 카이카스나 클립을 이용하여 클레이를 컨트랙트 주소로 송금할 경우 실패합니다. 현재 개발중인 컨트랙트만이 아니라 어떤 컨트랙트 주소라도 다 실패하는 것으로 보입니다. (ERC20 토큰을 송금하는 것은 성공합니다.) 물론 EOA주소로 송금하면 성공합니다.
  2. 메타마스크를 이용하여 클레이를 송금하면 컨트랙트 주소/EOA주소 모두 성공합니다.

왜 이런 현상이 발생하는지, 혹시 피할 수 있는 방법이 있는지 아시는 분 있다면 조언 부탁드립니다.
많은 말씀 주시면 감사하겠습니다.

일반적으로 컨트랙트가 Klay와 같은 native asset을 받기 위해선 receive 함수를 구현해야합니다. 이에 대해 다음 문서를 참조하시면 좋을 것 같습니다. [링크]

모든 컨트랙트가 Klay를 받는 receive 함수를 가져야하는 것이 아니고 특정 목적을 위한 컨트랙트에서(KLAY를 포함하는 LP토큰 컨트랙트나 KLAY 스테이킹, KLAY를 활용한 presale등) 구현이 되어 있기 때문에 일반적으론 컨트랙트로 KLAY를 보내는 트랜잭션은 실패하게 됩니다.

혹시 더 궁금한 부분있으시면 말씀주세요.

감사합니다.

메타마스크를 이용하면 성공한다는 것으로 보아 receive 함수가 구현된 컨트랙트 일 듯 합니다. 카이카스나 클립 앱의 문제가 아닐까요?

네, 해당 내용을 놓쳤었네요. 메타마스크는 성공한다면 카이카스나 클립 앱 내의 동작에 문제가 있는 게 맞을 것 같습니다.

제가 방금 시도해봤는데 receive함수가 구현된 컨트랙트에는 카이카스/클립또한 정상적으로 전송됩니다. 혹시 해당 상황을 재현할 수 있는 컨트랙트 주소를 공유해주실 수 있으실까요?

감사합니다.

빠른답변 감사 드립니다.
클립에서는 정상 전송이 되는것으로 확인 되었고(안된다고 오해가 있었던 것 같습니다.)
테스트 가능한 Cypress 주소는 0xf6fb7f1d685388c60a73b7a9ef875f8cc2b059d4
입니다.
카이카스의 경우 크롬 플러그인은 전송되고, 아이폰에 설치된 모바일 앱은 안되네요.

관심 감사드립니다. 우선 클립에서는 정상적으로 전송됩니다. 그리고 위의 말씀처럼 안되는 곳은 카이카스 앱이며, 카이카스 크롬 플러그인은 전송 됩니다. 테스트 결과 취합에 미스가 있어서 혼란 드려 죄송합니다.
그리고 컨트랙트는 receive 메소드 구현되어 있는 것을 사용했습니다. 상세히 말씀 드리지 못해 죄송합니다.

추가로 말씀 드리면 그 후 직접 web3js와 caver.js를 이용해서 각각 이더리움 방식의 전통적인 송금 트랜잭션과 클레이튼 방식의 VALUE_TRANSFER 트랜잭션을 일으켜서 컨트랙트로 송금해 본 결과 web3js로 일으킨 트랜잭션은 성공하고 caver.js로 일으킨 VALUE_TRANSFER 트랜잭션은 실패했습니다. 혹시 카이카스 모바일은 VALUE_TRANSFER 트랜잭션을 쓰는 것이 아닐까 하는데요, 그렇게만 보기에는 크롬 플러그인은 된다는 것이 또 이상하군요.
관련해서 아시는 분 있으시다면 많은 말씀 부탁드립니다.

VALUE_TRANSFER는 EOA에게 KLAY를 전송할 때 사용됩니다. 스마트 컨트랙트로 KLAY를 전송할 때는 SMART_CONTRACT_EXECUTION을 사용하시면 정상동작할겁니다. 관련 링크 첨부드립니다. [링크]

말씀주신대로 에러원인이 아마 모바일 카이카스에서는 to address가 contract 인지 확인하는 부분이 없을 수도 있겠네요. 이 부분은 팀에 전달드리고 답변오면 말씀드리겠습니다.

혹시 더 궁금하신 부분 있으시면 말씀주세요.

감사합니다.