반응형
Soliditiy에서는 함수 및 State Variable을 다른 Smart Contract에서 액세스 할 수 있도록 Visibility(가시성)를 설정할 수 있습니다.
Visibility 종류
구분 | 설명 |
public | 모든 Smart Contract와 Account에서 접근 가능함 |
private | 기능이 정의된 Smart Contract에서만 접근 가능함 |
internal | 내부 기능을 상속받은 Smart Contract에서만 접근 가능함 |
external | 외부 Smart Contract 및 Account에서만 접근 가능함 |
Sample Code (Solidity)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Base {
// Private function can only be called
// - inside this contract
// Contracts that inherit this contract cannot call this function.
function privateFunc() private pure returns (string memory) {
return "private function called";
}
function testPrivateFunc() public pure returns (string memory) {
return privateFunc();
}
// Internal function can be called
// - inside this contract
// - inside contracts that inherit this contract
function internalFunc() internal pure returns (string memory) {
return "internal function called";
}
function testInternalFunc() public pure virtual returns (string memory) {
return internalFunc();
}
// Public functions can be called
// - inside this contract
// - inside contracts that inherit this contract
// - by other contracts and accounts
function publicFunc() public pure returns (string memory) {
return "public function called";
}
// External functions can only be called
// - by other contracts and accounts
function externalFunc() external pure returns (string memory) {
return "external function called";
}
// This function will not compile since we're trying to call
// an external function here.
// function testExternalFunc() public pure returns (string memory) {
// return externalFunc();
// }
// State variables
string private privateVar = "my private variable";
string internal internalVar = "my internal variable";
string public publicVar = "my public variable";
// State variables cannot be external so this code won't compile.
// string external externalVar = "my external variable";
}
contract Child is Base {
// Inherited contracts do not have access to private functions
// and state variables.
// function testPrivateFunc() public pure returns (string memory) {
// return privateFunc();
// }
// Internal function call be called inside child contracts.
function testInternalFunc() public pure override returns (string memory) {
return internalFunc();
}
}
external로 선언된 externalFunc() 함수는 해당 함수를 선언한 Smart Contract에서 호출할 수 없으나, Account에서는 호출 가능함
private로 선언된 privateFunc() 함수는 해당 함수를 상속받은 Smart Contract에서 호출할 수 없으나, 해당 함수를 선언한 Smart Contract에서는 호출할 수 있음
위 코드를 보다보면, pure라는 속성을 볼 수 있는데요. view와 pure에 대해서도 알아보도록 하겠습니다.
구분 | 설명 |
view | State Variable들을 읽을 수 있으나 변경하지 않을 때 부여함 (보통 get함수가 포함됨) |
pure | State Varaible들을 읽거나 변경하지 않고 함수에 전달된 매개 변수나 그 안에 있는 지역 변수만을 이용하여 값을 반환하는 경우 부여함 |
Sample Code (Soliditiy)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract ViewAndPure {
uint public x = 1;
// Promise not to modify the state.
function addToX(uint y) public view returns (uint) {
return x + y;
}
// Promise not to modify or read from the state.
function add(uint i, uint j) public pure returns (uint) {
return i + j;
}
}
Referecne
'Hack > Cryptocurrency' 카테고리의 다른 글
Ethereum 로컬 개발 환경 구성하기 (with Smart Contract) (0) | 2023.07.23 |
---|---|
stETH (Staked ETH) (0) | 2023.07.15 |
Rollup (Optimistic Rollups, ZK Rollups) (0) | 2023.07.01 |
Contract Application Binary Interface (ABI) (0) | 2023.07.01 |
브릿지와 크로스 체인, 멀티 체인, 옴니 체인을 알아보자 (0) | 2023.06.24 |
댓글