컨트랙트 내부에서 클레이를 전송하는 코드

안녕하세요. 컨트랙트 내에서 클레이튼을 송금하는 코드에 대해 여쭤보고 싶습니다.

최근 이더리움에서는 이더리움을 송금할 때에

       (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');

와 같은 방식으로 송금을 진행합니다. (transfer와 send는 gas 제한이 걸려있고, 공격자가 악의적으로 공격할 경우 컨트랙트 작동이 멈출 수 있어서 그런 것으로 알고 있습니다.)

하지만, 현재 클레이튼에서 위와 같은 방식으로 배포를 시도하면 아래와 같은 에러 메시지가 뜹니다.

      ParserError: Expected ';' but got '{'
      (bool success, ) = to.call{value: value}("");

질문)

  1. 아래와 같이 [address.transfer] 방식으로 작성해도 gas 공격 등에서 안전할까요?
         to.transfer(value);
  1. 그렇지 않다면 클레이튼 컨트랙트 내부에서 클레이튼을 송금할 때에 어떤 코드를 써야 할까요?
1 Like

솔리디티 컴파일 버전을 몇으로 맞추 셨을가요?

음 딱히 답변이 없으시니 추가 답변 드리기 어렵군요

일단 에러에 대한 질문에 관하여는 스마트 컨트랙트 버전을 높이시면 해당 문제는 클리어 됩니다.
제가 테스트 하였을경우 to.call{value: value}(“”); 문장은 0.8.13 에서는 잘 돌아 갔습니다.
최소버전은 따로 찾아 보시면 좋을거 같습니다.

1.개스 공격에 관하여
개스 어떤 공격을 의미하시는 진 모르겠지만
마이너 입장에서 의 개스 공격의 위협은 개스 수익금? 으로 방어를 합니다
그 외에 논리 오류로 인한 컨트랙트 사용자의 컨트랙트 개스 버닝행위는 컨트랙트 논리적인 오류가 있는지 점검함으로 해결하 실 수 있을거로 보입니다.

  1. 1번 답변으로 설명이 될거 같습니다.

아무도 답변 달지 않으시길래 일단 제 개인의견 달아 드렸습니다.

충분히 틀린 내용이 있을수 있기에 참고만 부탁드립니다~