언어/Solidity(7)
-
Solidity 기초 - 5 (가스비)
가스비 함수를 실행하는 데에 필요한 가스는 그 함수의 로직이 얼마나 복잡한지에 따라 달라집니다. 각각의 연산은 소모되는 가스 비용이 있고, 그 연산을 수행하는 데에 소모되는 컴퓨팅 자원의 양이 비용을 결정합니다. Solidity의 로직은 곧 비용와 직결되기 때문에 코드 최적화에 신경써야할 것입니다. view 함수를 사용해 가스 절약 view 함수는 사용자에 의해 외부에서 호출되었을 때 가스를 소모하지 않습니다. view 함수는 블록체인 상에서 실제로 어떤것도 수정하지 않고 데이터를 읽기만 하기 때문입니다. 이것은 실제로 로컬 노드에게 질의만 날릴 뿐, 블록체인에 트랜잭션을 생성하지 않습니다. view 함수가 아닌, 다른함수 내에서 view 함수를 호출할 경우에는 블록체인에 트랜잭션을 생성하므로 가스비가 ..
2022.01.23 -
Solidity 기초 - 4 (구조체 압축)
Solidity의 데이터 저장 단위 Solidity는 변수를 선언 시, 256비트의 저장 공간을 미리 잡아놓습니다. 즉, uint로 선언하는 것과 uint16으로 선언하는 것은 가스 비용을 줄이는데에 아무 영향이 없습니다. 구조체 압축 구조체 안에서의 변수 타입 선언은 가능한한 작은 크기의 타입을 사용하는 것이 좋습니다. 구조체도 256비트 단위를 맞춰 저장하려고 하지만, 내부에서 선언되는 타입들은 정렬이 가능하기 때문입니다. C언어의 구조체 padding bit와 동일합니다. struct NormalStruct { uint a; //256 uint b; //256 uint c; //256 }//768 struct MiniMe { uint32 a; //32 uint32 b; //32 uint c; //2..
2022.01.23 -
Solidity 기초 - 3 (함수 제어자)
함수 제어자 함수 제어자는 함수처럼 보이지만, function 키워드 대신 modifier 키워드를 사용합니다. 함수 제어자는 function 함수 정의부 끝에 제어자의 이름을 붙여 사용할 수 있습니다. modifier onlyOwner() { require(msg.sender == owner); _; } contract MyContract is Ownable { event LaughManiacally(string laughter); function likeABoss() external onlyOwner { LaughManiacally("Muahahahaha"); } } 위와 같이 function likeABoss() 선언부 뒤에 modifier 함수 제어자를 선언하여 사용합니다. 그리고 likeABos..
2022.01.17 -
Solidity 기초 - 2 (msg.sender, mapping, require)
msg.sender 솔리디티는 모든 함수에서 사용 가능한 전역 변수들이 존재합니다. 그 중 하나인 msg.sender는 호출한 스마트 컨트랙트의 주소를 가리킵니다. 솔리디티에서 함수의 실행은 항상 외부 호출자가 시작하므로 누군가가 컨트랙트의 함수를 호출해야합니다. 이 때, 호출한 컨트랙트의 주소가 msg.sender에 담기게 됩니다. Mapping mapping은 '키 - 값' 구조로 데이터를 저장하거나 검색하는데 이용됩니다. msg.sender와 함께 이용하여 특정 유저의 고유한 데이터를 관리하는 것으로 사용할 수 있습니다. // 금융 앱용으로, 유저의 계좌 잔액을 보유하는 uint를 저장한다: mapping (address => uint) public accountBalance; // 혹은 userI..
2022.01.16 -
Solidity 기초 - 1 (기본 변수, 함수 Keyword)
Version Pragma 모든 solidity 코드는 'version pragma'로 시작해야합니다. 이것은 해당 버전을 이용하여 컴파일러한다는 의미입니다. pragma solidity ^0.4.19; cntract HelloWorld { } ----------------------------- pragma solidity>=0.4.19
2022.01.11 -
Solidity Memory, Storage 차이
메모리 영역 Solidity는 변수를 저장할 수 있는 Storage와 Memory라는 공간이 존재합니다. Storage Storage는 블록체인 상에 영구적으로 저장됩니다. Storage로 저장하는 법은 상태 변수로 선언하거나 명시적으로 Storage를 선언하는 것입니다. - 상태 변수 상태 변수는 컨트랙트 저장소에 영구적으로 저장됩니다. 이것은 곧 블록체인에 저장된다는 의미입니다. 상태 변수는 contract 최상위단에 선언되어 있습니다. contract Example { string strExample = "EXAMPLE"; } - 명시적 선언 변수 선언 시, 명시적으로 storage를 붙여 선언할 수 있습니다. contract Example { string strExample = "EXAMPLE";..
2022.01.11