🐬 Solidity 1κ°• 🐬

ν™μœ μ§„Β·2021λ…„ 9μ›” 25일
0

solidity

λͺ©λ‘ 보기
1/5

'CryptoZombies' μ‚¬μ΄νŠΈλ₯Ό μ΄μš©ν•˜μ—¬ 블둝체인 ν”Œλž«νΌμ—μ„œ μ‚¬μš©λ˜λŠ” 객체 μ§€ν–₯ 언어인 'Solidity'의 곡뢀λ₯Ό μ‹œμž‘ν–ˆλ‹€!!!


πŸ“Œ μ»¨νŠΈλž™νŠΈ

  • 솔리디티 μ½”λ“œλŠ” μ»¨νŠΈλž™νŠΈ μ•ˆμ— μŒ“μ—¬ μžˆλ‹€.

  • μ»¨νŠΈλž™νŠΈλŠ” 이더리움 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 기본적인 ꡬ성 μš”μ†Œμ΄λ‹€.

  • λͺ¨λ“  λ³€μˆ˜μ™€ ν•¨μˆ˜λŠ” ν•œ μ»¨νŠΈλž™νŠΈμ— μ†ν•˜κ²Œ λœλ‹€.

pragma solidity ^0.4.19;
λͺ¨λ“  솔리디티 μ†ŒμŠ€ μ½”λ“œμ˜ 처음!
ν•΄λ‹Ή μ½”λ“œκ°€ μ΄μš©ν•΄μ•Ό ν•˜λŠ” 솔리디티 버전 적어주기

contract μ»¨νŠΈλž™νŠΈμ΄λ¦„ {
μ»¨νŠΈλž™νŠΈμ˜ 선언은 μ΄λ ‡κ²Œ!

πŸ“Œ μƒνƒœ λ³€μˆ˜&μ •μˆ˜

  • μƒνƒœ λ³€μˆ˜λŠ” μ»¨νŠΈλž™νŠΈ μ €μž₯μ†Œμ— 영ꡬ적으둜 μ €μž₯λœλ‹€.
    이더리움 블둝체인에 κΈ°λ‘λœλ‹€λŠ” 것!

uint λ³€μˆ˜λͺ…; λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜. μŒμˆ˜κ°€ μ•„λ‹ˆμ–΄μ•Ό ν•œλ‹€!

πŸ“Œ μˆ˜ν•™ μ—°μ‚°

  • λ§μ…ˆ : x + y
  • λΊ„μ…ˆ : x - y
  • κ³±μ…ˆ : x * y
  • λ‚˜λˆ—μ…ˆ : x / y
  • λ‚˜λ¨Έμ§€/λͺ¨λ“ˆλ‘œ : x % y
  • μ§€μˆ˜ μ—°μ‚° : uint x = 5 ** 2;

πŸ“Œ ꡬ쑰체

struct 이름 { μ’€ 더 λ³΅μž‘ν•œ ꡬ쑰체.

string λ³€μˆ˜λͺ…; μž„μ˜μ˜ 길이λ₯Ό κ°€μ§„ UTF-8 데이터λ₯Ό μœ„ν•΄ ν™œμš©

πŸ“Œ λ°°μ—΄

  • 정적배열

    uint[2] fixedArray; 2개의 μ›μ†Œλ₯Ό 담을 수 μžˆλŠ” 정적 λ°°μ—΄
    string[5] fixedString; 5개의 μ›μ†Œλ₯Ό 담을 수 μžˆλŠ” 정적(κ³ μ •)λ°°μ—΄

  • 동적배열

    uint[ ] dynamicArray; μ›μ†Œμ˜ κ³ μ •λœ 길이가 μ—†λŠ” 동적배열. 계속 크기가 컀질 수 μžˆλ‹€

    Person[ ] people; ꡬ쑰체의 동적배열. λ°μ΄ν„°λ² μ΄μŠ€μ²˜λŸΌ μ»¨νŠΈλž™νŠΈμ— κ΅¬μ‘°ν™”λœ 데이터 μ €μž₯ν•˜λŠ” 데 μœ μš©ν•¨.

  • Public λ°°μ—΄

    Person[ ] public people; λ‹€λ₯Έ μ»¨νŠΈλž™νŠΈλ“€μ΄ 이 배열을 읽을 수 있게 λ˜μ§€λ§Œ, μ“Έ μˆ˜λŠ” μ—†μŒ. μ»¨νŠΈλž™νŠΈμ— 곡개 데이터 μ €μž₯ν•  λ•Œ 유용!

πŸ“Œ ν•¨μˆ˜ μ„ μ–Έ

  • ν•¨μˆ˜ 선언은 μ–΄λ–»κ²Œ?
    function eatHamburgers(string_name, uint_amount) {
  • ν•¨μˆ˜ ν˜ΈμΆœμ€ μ–΄λ–»κ²Œ?
    eatHamburgers("vitalik", 100);

πŸ“Œ ꡬ쑰체와 λ°°μ—΄ ν™œμš©ν•˜κΈ°

  • Person ꡬ쑰체 ν™œμš©ν•˜κΈ°
struct Person {
	uint age;
	string name;
   }
 
Person[ ] public people;

/// μƒˆλ‘œμš΄ μ‚¬λžŒμ„ μƒμ„±ν•΄λ³΄μž!
Person satoshi  = Person(172, "Satoshi");

/// 배열에 μΆ”κ°€ν•΄λ³΄μž!
people.push(satoshi);

/// 이걸 합쳐보면!
people.push(Person(172, "Satoshi"));

array.push() 무언가λ₯Ό λ°°μ—΄μ˜ 끝에 μΆ”κ°€ν•΄μ„œ μˆœμ„œλ₯Ό μœ μ§€ν•˜λ„λ‘ 함

πŸ“Œ private/public ν•¨μˆ˜

기본적으둜 solidity의 ν•¨μˆ˜λŠ” public.

ν•˜μ§€λ§Œ μ΄λŠ” 곡격에 μ·¨μ•½ν•  수 μžˆμœΌλ―€λ‘œ 기본적으둜 ν•¨μˆ˜λ₯Ό private으둜 μ •μ˜ν•œ λ‹€μŒ, κ³΅κ°œν•  ν•¨μˆ˜λ§Œ public으둜 λŒλ¦¬λŠ” 게 λ°”λžŒμ§ν•¨!

  • private ν•¨μˆ˜ μ„ μ–Έ 방법

function _addToArray(uint _number) private {
	numbers.push(_number);
}
  • private ν•¨μˆ˜λͺ…은 _(언더바)둜 μ‹œμž‘ν•˜λŠ” 것이 κ΄€λ‘€!

πŸ“Œ ν•¨μˆ˜ 더 μ•Œμ•„λ³΄κΈ°

  • λ°˜ν™˜κ°’?

function sayHello() public returns (string) {
	return greeting;
}
  • μ†”λ¦¬λ””ν‹°μ—μ„œ ν•¨μˆ˜ 선언은 λ°˜ν™˜κ°’ μ’…λ₯˜λ₯Ό ν¬ν•¨ν•œλ‹€!

μœ„ sayHello()λŠ” μ†”λ¦¬λ””ν‹°μ—μ„œ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒ.
값을 λ³€κ²½ν•˜κ±°λ‚˜, 무언가λ₯Ό μ“°μ§€ μ•ŠλŠ”λ‹€.
이와 같은 ν•¨μˆ˜λ₯Ό viewν•¨μˆ˜ 둜 μ„ μ–Έ !
데이터λ₯Ό 보기만 ν•˜κ³ , λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 의미

fuction sayHello () public view returns (string) {

  • pureν•¨μˆ˜ : ν•¨μˆ˜κ°€ μ•±μ—μ„œ μ–΄λ–€ 데이터에도 μ ‘κ·Όν•˜μ§€ μ•ŠμŒ
function _multiply(uint a, uint b) private pure returns (uint) {
	return a*b;
    } 

μœ„ ν•¨μˆ˜λŠ” 였직 λ°˜ν™˜κ°’μ΄ ν•¨μˆ˜μ— μ„€μ •λœ μΈμžκ°’μ— 따라 달라짐.

πŸ“Œ Keccak256κ³Ό ν˜• λ°˜ν™˜

  • keccak256 : μ΄λ”λ¦¬μ›€μ˜ λ‚΄μž₯ ν•΄μ‹œν•¨μˆ˜
    기본적으둜 μž…λ ₯ μŠ€νŠΈλ§μ„ 랜덀 256λΉ„νŠΈ 16μ§„μˆ˜λ‘œ λ§€ν•‘

  • ν˜• λ°˜ν™˜ν•˜κΈ°

uint8 a = 6;
uint b = 5;
// 였λ₯˜λ‚¨!
uint8 c = a*b;

uint8 c = a * uint8(b); bλ₯Ό uint8ν˜•μœΌλ‘œ λ³€ν™˜ν•΄μ„œ μ œλŒ€λ‘œ λ°˜ν™˜λ˜κ²Œ 해야함

πŸ“Œ 이벀트

  • 이벀트 : λ‚΄ μ»¨νŠΈλž™νŠΈκ°€ 블둝체인 μƒμ—μ„œ μ•‘μ…˜μ΄ λ°œμƒν–ˆμ„ λ•Œ μ˜μ‚¬μ†Œν†΅ν•˜λŠ” 방법

이벀트 μ„ μ–Έ

function add(uint _x, uint _y) public {
	uint result = _x + _y;
    // 이벀트 μ‹€ν–‰ν•΄μ„œ μ•±μ—κ²Œ add ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ—ˆμŒμ„ μ•Œλ¦°λ‹€
    IntegersAdded(_x, _y, result);
    return result;
}

πŸ“Œ Web3.js

μ•žμœΌλ‘œ μ»¨νŠΈλž™νŠΈμ™€ μƒν˜Έμž‘μš©ν•˜λŠ” μ‚¬μš©μž λ‹¨μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€!

이더리움은 Web3.js λΌλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 라이브러리λ₯Ό κ°€μ§€κ³  있음

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보