만약 ABI와 contract 주소를 알고 있다면 caver에서 무조건 함수를 호출할 수 있나요?

사실 제가 만든 contract이 인터넷에서 쉽게 찾을 수 있는 정보로 caver에서 접근 가능하기 때문에 질문 올립니다

klayScope에서 contract 주소나 owner의 주소등을 쉽게 알 수 있고, ABI의 경우도 오픈된 abi나 깃헙에 올라온 패턴화된 포맷을 보면서 유추할 방법이 있을 것 같은데요

이 경우에 new caver.klay.Contract 으로 내부 함수를 호출 하여 오남용 가능할 것 같습니다

ABI를 비공개하는 것만이 방법인가요? (혹은 함수 이름 어렵게 작성) 방지할 수 있는 다른 방법이 있나요?

1 Like

@our

안녕하세요.
internal 키워드로 정의된 함수가 아니고 ABI와 Contract Address를 알고 있다면 말씀하신 것처럼 외부에서 누구든 호출이 가능합니다.

그래서 보통은 openzeppelin-contracts/Ownable.sol at master · OpenZeppelin/openzeppelin-contracts · GitHub 와 같이 허가된 계정만 해당 함수를 호출할 수 있게끔 조치를 하고 있습니다. 호출은 누구나 할 수 있지만 내부 로직에 의해 실행은 되지 않는 구조로.
오픈 제플린 측 자료들을 참고하시면 원하는 로직을 구현하시는 데 도움을 받으실 수 있을 거 같습니다.

누구도 호출할 수 없게 만드는 게 목적이라면 애초에 블록체인을 사용해야 하는가? 에 대해 고민해보셔야할 거 같습니다.
블록체인과 스마트 컨트랙트의 존재 의의는 모두가 접근하고 확인할 수 있어 의미가 있는 거니까요.

2 Likes

친절하면서도 허를 찌르는 답변 감사합니다…! 함수 호출은 누구나 가능하되 내부 로직에 의해 실행되지 않도록 할 수 있군요. 다시 배웁니다 감사합니다!

1 Like