알아두면 쓸모있는 것들/[ 블록체인 ]
Solidity
D269
2023. 3. 23. 16:05
728x90
solidity 언어 문법
- solidity compile version 지정
- 솔리디티 소스파일의 확장자는 sol
- 파일 내에서 pragma solidity를 사용해 컴파일러 버전을 지정 가능하다.
pragma solidity 0.4.22; //complie version
contract MyContract {
uint count; // 상태 변수 - 클래스 멤버 변수
constructor() public { // 생성자
// ...
}
// 함수이름 매개변수 함수타입(public view) 리턴타입(returns(uint))
function numOfStudents(address _teacher) public view returns(uint) {
// ...
}
}
접근 제어자 존재
상태변수 | 내용 |
external | - 상태 변수에서 사용 못함. - 1. 외부 컨트랙트만 호출 가능 - 2. 상태변수는 external 사용 불가 |
internal | - 1. 컨트랙 내부 호출 가능. - 2. 상속받은 컨트랙도 호출 가능. - 3. 상태변수는 디폴트로 internal 선언 |
public | - 1. 컨트랙 내부 호출가능, - 2. 상속받은 컨트랙도 호출 가능. - 3. 외부 컨트랙도 호출 가능. - 가시성 명시 (명시하지 않으면 public으로 인식하지만 complie할때 경고나기때문에 public 으로 쓰기) |
private | - 컨트랙 내부만 호출가능 |
함수 타입 제어자
함수 타입 제어자 | 설명 |
view | 데이터 read-only |
pure | 1. 데이터 읽지 않음 2. 인자 값만 활용해서 반환 값 정함. 3. 가스 비용 없음 |
constant | 0.4.17 버전 이전에는 view/pure 대신 쓰임 |
payable | 1. 함수가 에더(eth)받을 수 있게 함. 2. 가스 비용 있음. |
example code)
function getNumbOfStudent() public view returns () {
// 값을 읽기만 하고 수정할 수 없음.
}
// pure를 붙이면,
// 블록체인값을 리턴하는게 아니라 단순한 메서드 기능 ex) 계산
function safeMul(uint a, uint b) pure internal returns (uint) {
uint c = a * b;
assert(a == 0 || c / a == b);
return c;
}
// 지금은 constant 거의 안씀. 원래 --> view 처럼 쓰이는 것.
function getNumberOfStudents() public constant returns (uint) {
return numOfStudent;
}
// payable
- 돈을 보내고 돈을 받으려면, 함수에 payable이 붙어야 한다.
-
function buy() public payable {
}
값 타입
🎈boolean 형
- 리턴값 : true/false
- 구문 : bool x
🎈정수 형 : 사용할 숫자 범위를 미리 파악하고 정수형을 선언 해놓으면 코드 최적화에 도움이 된다.
타입 | 설명 | 비고 | |
int | int32 x = 1233;양수 음수 저장 가능. | 8bit ~ 256bit | int == int256 |
uint | 양수만 받을 수 있고 저장할 수 있는 값이 더 크다.uint256 x = 25675343; | 8bit ~ 256bit | uint == uint256 |
🎈주소 형
타입 | 설명 | 비고 |
address | 20 byte 이더리움 계정 주소 (40글자)이더리움 계정 주소 형 | 두개의 멤버 소유 : balance, tranfer |
ex)
address x = 0x123;
function send() public {
if (x.balance < 10) {
x.transfer(10);
}
}
🎈고정된 크기의 byte 배열
타입 | 값 | 설명 |
bytes | 1byte ~ 32byte | 아래와 같이 써도 무관.동일byte == bytes1byte에 값을 저장할때는 헥스타입으로 넣어야 한다. |
ex)
bytes32 x = "hello world";
728x90
반응형