본문 바로가기

솔리디티23

레슨 3 챕터 10, 11, 12 - view 함수의 가스 절약/storage와 memory의 가스 소모/반복문(for) 이전에 view함수는 함수 외부것들에 접근은 할 수 있으나 그 값들을 수정할 수는 없다고 배웠다. 그러한 점에 의해 view함수는 외부에서 호출되면 가스를 소모하지 않는다. 이말은 같은 컨트랙트 내에서 사용할 경우에는 가스가 소모된다는 뜻. 여하튼 그래서 view함수는 external과 함께 쓰여 내부에선 사용하지 않게 하여 외부에서만 사용하고, 다른 값들도 수정하지 않는 읽기 전용 함수로 쓰인다. storage는 블록체인에 기록되는만큼 가스 소모가 크다. 그래서 코드 자체가 비효율적이더라도 블록체인에 기록될 필요가 없는것들은 memory로 선언하여 가스를 절약할 수 있다. function getArray() external pure returns(uint[]) { // 메모리에 길이 3의 새로운 배열을.. 2022. 2. 17.
레슨3 챕터7, 8, 9 - 함수 보안, 인수를 받는 함수제어자(modifier) 함수 접근 제어자들에 다시 복습 public 다른 컨트랙트에서도 호출할 수 있게 된다 private 해당 함수가 속해있는 컨트랙트에서만 호출할 수 있고 다른 컨트랙트에서는 사용할 수 없다. internal 해당 함수가 속한 컨트랙트와 해당 컨트랙트를 상속받는 컨트랙트에서만 사용할 수 있고 그외의 상속받지 않은 다른 컨트랙트에서는 사용할 수 없다. external 함수가 있는 컨트랙트 내부에서는 사용할 수 없고 다른 컨트랙트에서만 사용할 수 있다. 함수 제어자도 복습 함수제어자(modifier) 이 함수 제어자를 이용하면 특정 함수가 실행될 때 함수 제어자를 거쳐서 함수된다. 함수제어자의 내부를 보면 _; 라는 문구를 마지막에 넣는데 이건 해당 함수가 실행되기 전에 함수제어자가 먼저 실행되고, _; 를 만.. 2022. 2. 17.
레슨3 챕터4, 5, 6 - 가스(gas) / 시간 단위(Time units) 이더리움에서는 코드에 따라 가스를 사용하고 이 가스는 한도(Limit)도 정해질 수 있으며 이더리움 화폐 ETH로 구매해서 지불하게 된다. 이는 누군가가 악의적으로 네트워크를 방해할 목적으로 반복문같은 자원소모가 큰 연산을 쓰지 못하게 막는 역할을 한다. 아무리 많은 연산을 시켜도 가스 한도 내에서만 작동할 수 있고, 그만큼 자신의 돈(ETH)을 지불해야해서 부자부자하지 않으면 금전적으로 부담이 가기 때문에 악당님이 굳이 그러려고 하지않을거시다 참고로 위의 내용들은 이더리움 메인넷에 해당하고 사이드체인이라는 공간에는 메인넷과는 다른점이 있나보다 아무튼 가스가 소모되는데에는 이것저것 조건이 있는데(storage에 쓰인것인지... 등) 다른 변수들은 uint256이던 uint8이던 같은 비용의 가스를 소모하.. 2022. 2. 17.
레슨3 챕터2, 3 - 소유 가능한 컨트랙트, 함수제어자(modifier) external 함수는 누구든지 사용할 수 있는 함수다. 이것을 소유자만 사용할 수 있도록 만들 수 있다. 이를 위해 만들어져있는 OpenZeppelin라는 솔리디티 라이브러리에 있는 Ownable 컨트랙트를 가져와서 살펴보자 Ownable.sol // Ownerable 계약에는 소유자 주소가 있으며 기본 권한 제어 기능을 제공하므로 // "사용자 권한"의 구현이 간소화됩니다. contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // Ownerable 생성자(constructor)는 계약의 원래 '소유자'를 발신자 계정으로 설정합니다.. 2022. 2. 17.