본문으로 건너뛰기
0%

Solidity call 함수란?

Alchemy team headshot

작성자 Alchemy

2022년 10월 4일에 게시됨2분 읽기

Solidity 프로그래밍 언어는 주로 Ethereum 블록체인에서 스마트 컨트랙트를 만드는 데 사용됩니다. 이 글에서는 Solidity call 함수에 대해 알아야 할 모든 내용을 다룹니다.

Solidity call 함수란 무엇인가?

Solidity의 call** 함수는 개발자가 다른 컨트랙트와 상호작용할 때 사용하는 저수준 함수입니다.**

Solidity 스마트 컨트랙트를 빌드할 때, 자신의 컨트랙트에서 다른 컨트랙트와 상호작용하고자 할 때는 언제든 call 메서드를 사용해야 합니다.

call은 호출자가 제공한 Ether를 사용해 트랜잭션 비용을 지불하면서, 수신 측 스마트 컨트랙트의 다른 함수를 실행하는 데에도 사용할 수 있습니다. 또한 call 함수는 트랜잭션 상태를 boolean으로 반환하며, 반환값이 변수로 전달된다는 장점이 있습니다.

calldata란 무엇인가?

Calldata는 함수의 인자에 지정된 데이터를 담는 임시 저장소의 한 형태입니다. 또 다른 임시 저장소 형태인 memory와의 차이점은, _calldata_는 불변이라는 점입니다—calldata 안에 저장된 내용은 변경할 수 없습니다.

Solidity call 함수는 어떻게 동작하는가?

Solidity call 함수는 calldata를 받아—네이티브 ETH 전송의 경우 0이 될 수 있습니다—저수준 EVM opcode CALL을 기반으로 해당 calldata을 의도한 수신자에게 실행하는 방식으로 동작합니다.

data(즉, 수신 측 스마트 컨트랙트에서 호출할 함수)와 gas가 제공되면, call 메서드는 이 두 가지를 사용해 스마트 컨트랙트 내부의 함수를 실행할 수 있습니다.

call 메서드로 ether를 보내는 방법

Solidity 함수 중 하나로, 원하는 Solidity IDE에 다음 코드를 사용하고 address payable _to을 수신자 주소로 교체하면 됩니다.

아래는 call로부터 Ether를 받을 수 있는 컨트랙트를 생성하는 코드입니다.

call과 delegatecall의 차이는 무엇인가?

calldelegatecall의 차이는, delegatecall은 호출된 함수의 코드가 마치 호출을 수행하는 스마트 컨트랙트의 일부인 것처럼 실행한다는 점입니다. 반면 call 메서드는 다른 스마트 컨트랙트의 일부로서 함수를 있는 그대로 호출합니다. 실무적으로 이는 호출된 함수가 호출자의 storage, msg.sender, msg.value를 사용한다는 것을 의미합니다.

call과 transfer의 차이는 무엇인가?

Transfer는 gas 한도가 고정되어 있으며 실패 시 취소됩니다. Call은 일반적인 call 대신 someAddress.call.value(ethAmount).gas(gasAmount)()를 사용하여 gas 한도를 커스터마이징할 수 있으며, 트랜잭션이 실패하면 false를 반환합니다.

transfer 메서드는 더 이상 사용이 권장되지 않습니다. 하지만 과거에는 transfer이 gas에 내장된 한도를 사용하기 때문에 선호되었는데, 이는 재진입 공격 방지에 도움이 되었기 때문입니다. transfer 메서드의 고정된 gas 한도는 또한 2300 gas라는 상한선을 설정하고자 하는 연산에 더 나은 선택이 되게 했습니다.

Solidity call 메서드에 대해 더 알아보기

Solidity call에 대해 계속 알아보려면, Alchemy University의 무료 온라인 Solidity 개발자 크래시 코스에 자리를 확보하세요. 이 7주 과정의 비동기식 Ethereum 부트캠프는 Alchemy가 선도적인 Ethereum 교육 기업인 ChainShot을 인수한 후 새롭게 개편되었습니다.

개발이 처음인 개발자라면, Ethereum 부트캠프를 시작하기 전에 Alchemy University의 3주 JavaScript 크래시 코스를 선행 과정으로 수강하는 것이 좋습니다.

Background gradient

블록체인 매직을 만드세요

Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.