티스토리 뷰
1. 배열
Person[] public people
uint[] memory result = new uint[](3)
2. 랜덤문자 생성
keccak256("aaaa")
3. 형변환
uint a = 5;
uint b = 6;
uint8 c = a*uint8(b)
3.1 uint
3.2 캐스팅
- uint32(uint256 변수)
4. 이벤트
5. Address
0x0cE446255506E92DF41614C46F1d6df9Cc969183
6. Mapping
- 솔리디티 Storage에서 구조화된 데이터를 저장하는 또다른 방법, 오직 상태변수로만 선언
- 기본적으로 키 - 값(key - value) 저장소로 데이터를 저장하고 검색하는데 이용됨
- key는 실제로 저장되지 않고 키의 keccak256 해시값이 검색에 사용됨
- python의 {} dictionary와 같다고 해야하나?
ex) mapping (uint => address) public zombieToOwner;
ex) mapping (address => uint) ownerZombieCount;
솔리디티에는 모든 함수에서 이용 가능한 특정 전역 변수들이 있음
- 그 중 하나가 현재 함수를 호출한사람( 혹은 스마트컨트랙트)의 주소를 가리키는 msg.sender
- 솔리디티에서 함수 실행은 항상 외부 호출자가 시작
7. Msg.sender
- 솔리디티에서 함수 실행은 항상 호출을 해야지 실행이 되는 구조
- 실행하는 계정 msg.sender
8. require
- 특정 도건이 참이 아닐때 함수가 에러 메세지를 발생하고 실행 멈추게 될때
- python에서는 assert와 같음
function sayHitoVitalik(string _name) public{
require(keccak256(_name) == keccak256("Vitalik"));
return "Hi" ;
}
9. 상속
contract Doge{
function catchphrase() public returns (string){ {
return "So WoW CryptoDoge";
}}
contract BabyDoge is Doge{
function anotherCatchphrase() public returns (string){
return "Such Moon BabyDoge"
}
}
9. Import
- 코드가 길어지고 있기 때문에 파일로 나누어서 정리
- 솔리디티 프로젝트 긴코드 처리
ex) import "./zombiefactory.sol";
10. Storage & Memory
- Contract가 배포된 후 다음 블록체인에 계속 작동한다면, 그 Contract의 데이터도 블록체인에 저장되어 있어야 한다.
- Stroage : 블록체인 상에 영구적으로 저장되는 변수
- Memory : 임시적으로 저장되는 변수, 컨트랙트 함수에 대한 외부 호출들이 일어나는 사이에 지워짐
= 함수 내에 선언된 변수는 memory로 자동 선언되어서 함수 호출이 종료되면 사라짐
- 두 변수는 각각 컴퓨터 하드 디스크와 RAM과 같음
11. 접근 제어자
Internal, External, public, private
- public과 private 이외에도 솔리디티에는 internal과 External라는 함수접근제어자가 있음
- internal은 함수가 정의된 컨트랙트를 상속하는 컨트랙트 내에서도 접근이 가능함
- external은 함수가 컨트랙트 바깥에서만 호출이될수 있고 컨트랙트 내의 다른 함수에 의해 호출될 수 없음
function _createZombie(string _name, uint _dna) internal {
uint id = zombies.push(Zombie(_name, _dna)) -1;
zombieToOwner[id] = msg.sender;
ownerZombieCount[msg.sender]++;
NewZombie(id, _name, _dna);
}
12. Ownable
- 계약에 대해 소유권을 적용할 수 있는 라이브러리
modifier onlyOwner() { require(msg.sender == owner); _ }
13. Gas
- 솔리디티에서는 사용자들이 만든 Dapp의 함수를 실행할때마다 가스라고 불리는 화폐를 지불하는것이 필요
14. 시간단위( Time units)
- seconds, minutes, hours, days, weeks, years 제공
15. if문
16. for문
- for (uint i=1 ; i<=10; i++) {}
17. Pure 함수
- 해당 함수가 어떤 데이터도 블록체인에 저장하지 않을 뿐 아니라, 블록체인으로부터 어떤 데이터도 읽지 아 ㄶ음을 알려줌
18. View 함수
- 상태 제어자(state modifier)
- 블록체인과 상호작용 하는 방법에 대해서 알려줌
- 해당함수를 실행해도 어떤 데이터도 저장/변경되지 않음을 알려줌
19. onlyOwner, aboveLevel
- 사용자 정의 제어자
- 제어자를 사용해서 함수에 이 제어자들이 어떻게 영향을 줄지를 결정하는 논리를 구성할 수 있음
20. paypable
- 이더를 받을 수 있는 특별한 함수 유형
- 일반적인 API로는 보낼수 없지만 payable
- 이더리움에서는 돈(이더), 데이터(transaction payload) 그리고 컨트랙트 코드 자체 모두 이더리움위에 존재하기 때문에 함수를 실행하는 동시에 컨트랙트에 돈을 지불하는 것이 가능함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
pragma solidity ^0.4.19l
contract ZombieFactory{
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
uint x = 5**2 ; // 5^2
//구조체
struct Zombie{
string name;
uint dna;
}
//구조체 배열
Zombie[] public zombies; // 동적배열, 원소를 계속 추가할 수 이음
//함수선언 public
function createZombie(string_name, uint_dna){
zombies.push(Zombie(_name,_dna))
}
//함수선언 private
function _createZombie(string _name, uint _dna) private {
zombies.push(Zombie(_name, _dna));
}
//
function _generateRandomDna(string _str) private view returns(uint){
uint rand = uuint(keccak256(_str));
return rand % dnaModulus;
}
//
function createRandomZombie(string _name) public {
uint randDna = _generateRandomDna(_name);
_createZombie(_name, randDna);
//Event 생성
event NewZombie(uint zombieId, string name, uint dna);
}
|
cs |
'인공지능 > 블록체인' 카테고리의 다른 글
geth 란? (0) | 2020.04.05 |
---|---|
블록체인 합의알고리즘(Consensus algorithms) (0) | 2020.03.17 |
블록체인 - ECDSA 알고리즘 (0) | 2019.11.02 |
블록체인 - 이더리움 네트워크 구축 (0) | 2019.11.02 |
블록체인 개발환경 만들기 (0) | 2019.11.02 |