D.S.
Übermensch : To a Brighter Future
D.S.
전체 방문자
오늘
어제
  • 분류 전체보기 (109)
    • Lecture Notes (1)
      • CS231n (1)
    • Thoughts on Videos (ToV) (7)
    • Tech (0)
    • 개인 기록 (0)
      • 프로그래밍공부일지 (0)
      • CS Study 한눈에 보기 (0)
    • 프로그래밍 (65)
      • C (35)
      • C++ (0)
      • Python (12)
      • 이코테python (8)
      • 2022군장병AI_SW_Elice (4)
      • 2022군장병AI_SW_Kakao (1)
      • Solidity (2)
      • Web (3)
    • Mental Augmentation (28)
      • Kwik Reading (22)
      • 독서 (0)
      • 갸꿀팁 (2)
      • 3-Part Memory Training (1)
      • Kwik Recall (3)
    • Physical Augmentation (3)
      • Health Journal (2)
      • Sinclair Podcast (1)
    • Others (0)
      • 여행 (0)
    • Idea Bank (0)
      • VBA (0)
      • PLANS (0)
    • 22-2학기 수업 (0)
      • 데이터베이스시스템 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

글쓰기

Kwik Reading

공지사항

인기 글

태그

  • Dandapani
  • ai/sw
  • subvocalization
  • 학습
  • 독서
  • baekjoon
  • 우뇌
  • 기술독서
  • 번역
  • elice
  • 짐 퀵
  • Kwik Reading
  • Infinity Technique
  • 군장병
  • 속독 훈련
  • kwik recall
  • 속발음
  • Kwik Brain
  • brain yoga
  • Eye Fixation
  • brain break
  • 비문학독해
  • 습관
  • 속독
  • 디지털 방해
  • 노화의 종말
  • lifespan
  • 백준
  • Jim Kwik
  • 뇌 요가

최근 댓글

hELLO · Designed By 정상우.
D.S.

Übermensch : To a Brighter Future

Solidity - CryptoZombies - Lesson #2
프로그래밍/Solidity

Solidity - CryptoZombies - Lesson #2

2022. 9. 18. 17:27

Ethereum blockain is composed of accounts(think of it as bank accounts)

Accounts have a balance of Ether(통화)

Ether을 다른 account들과 주고 받을 수 있음.

각 account는 고유의 adress를 지님

하나의 Address는 하나의 고유한 user에 의해 소유(종속)가됨.

 

유저가 zombie를 생성하면, zombie의 소유권은 create함수를 호출한 address에 감.

 

mapping

데이터 저장과 검색을 위한 key-value store

(address=>uint) // 주소-잔고 

(uint=>string) / 아이디-이름

(형식) mapping (key type=>value type) public mapping_name;

(ex1) mapping (uint=>address) (public) zombieToOwner;

(ex2) mapping (address=>uint) (public) ownerZombieCount;

 

msg.sender

refers to the address(or smart contract) that called the current function

**solidity에서는 함수 실행은 항상 외부 호출자(caller)가 필요하므로 msg.sender은 항상 존재

다른 사람의 데이터를 조작할 수 있는 유일한 방법은  address에 대응되는 private key를 훔치는 것.

 

아까 저장해둔 mapping인 zombieToOnwer과 ownerZombieCount을

_createZombie안에 넣어두면 생성즉시 소유권 명시와 zombieCount 갱신 가능.

zombieToOwner[id] = msg.sender;

ownerZombieCount[msg.sender]++; 

 

require(type:boolean)

require 속의 boolean이 false이면 error 발생시키고 작동을 중단시킴. true이면 그냥 실행 지속

*주의* Solidity는 string들을 비교하는 함수가 없으므로 keccak256 hash를 비교해야됨.

require(keccak256(abi.encodePacked(String1)) == keccak256(abi.encodePacked(String2)));

 

inheritance(상속) is

contract Doge{}

contract BabyDoge is Doge{}

를 통해서 BabyDoge는 Doge contract를 상속받게됨.

BabyDoge를 이용하면 BabyDoge 뿐만 아니라 Doge의 public 함수에 접근 가능.

 

Import

.sol 파일이 너무 길어지면, 하나의 .sol 파일을 더 만들고, 

import를 통해서 이에 이어서 쓰면 됨.

(ex) oldFile.sol, newFile.sol이 있으면,

newFile.sol에

import "./oldFile.sol"; 라고 작성하면 import됨.

 

storage & memory

변수를 선언할때, blockchain에 permanent하게 남기고 싶으면 storage라고 선언을하고,

temporary하게 사용하고 싶을 경우에는 memory라고 선언을 함. Storage로 선언하면

일종의 pointer이 됨. 보통 이 과정은 compiler이 자동적으로 하지만, struct(구조체)의

경우에는 명시해주지 않을 경우에는 오류가 남.

 

internal & external

internal은 private과 비슷하지만,

private은 상속받은 contract에서는 접근할 수 없지만,

internal은 상속받은 contract에서 접근할 수 있다.

 

external은 public과 비슷하지만,

external은 public과는 다르게 선언한 contract내 접근 X, contract 밖 접근 O.

 

Interacting with other contracts

외부의 다른 contract와 소통하기 위해서는

contract의 interface를 정의해줘야함.

일반적인 contract를 정의하는 것처럼 contract 키워드를 사용하고,

function 키워드를 사용하는 것은 마찬가지이다.

하지만, {}즉, 함수의 내용은 작성하지 않고, )뒤에 바로 ;(semicolon)으로 마무리한다.

(ex)

contract NumberInterface {
    function getNum(address _myAddress) public view returns (uint);

}

 

contract MyContract {

    address NumberInterfaceAddress = 0xab38... // 이더리움에 있는 소통하려고하는 contract의 주소

    NumberInterface numberContract = NumberInterface(NumberInterfaceAddress);

 

    function someFunction() public {

        uint num = numberContract.getNum(msg.sender);

    }

}

 

 

Function with multiple return values

function function_name (arguments) return (uint _a, uint _b) {}

처럼 return 값이 2개 이상인 경우에는 

uint a,b;

(a,b) = function_name(); 로 받는 것도 가능하고, 특정 값만 받고 싶을 경우에는

(,b) = function_name();

(a,) = function_name(); 처럼 해주면 된다. //(Ocaml과 비슷한듯)

 

 

 

 

'프로그래밍 > Solidity' 카테고리의 다른 글

Solidity - CryptoZombies - Lesson #1  (0) 2022.09.13
    '프로그래밍/Solidity' 카테고리의 다른 글
    • Solidity - CryptoZombies - Lesson #1
    D.S.
    D.S.

    티스토리툴바