Skip to content

jhin93/Solidity_CryptoZombie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

289 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Solidity

[ Solidity ν•™μŠ΅ μˆœμ„œ ]

  1. 크립토쒀비
    https://cryptozombies.io/ko/course

  2. μΈν”„λŸ°
    https://www.inflearn.com/course/blockchain-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80-dapp#curriculum

  3. dapp university
    https://www.youtube.com/watch?v=CgXQC4dbGUE&t=783s

[Warm-up reference]

λΈ”λ‘μ²΄μΈμ΄λž€(원리, ν™œμš©, 전망)
http://wiki.hash.kr/index.php/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8#.EC.9E.91.EB.8F.99_.EC.9B.90.EB.A6.AC

블둝체인 ꡬ쑰 μ„€λͺ…
https://brownbears.tistory.com/371?category=281929

μž‘μ—…μ¦λͺ…
https://brownbears.tistory.com/373?category=281929

지뢄증λͺ…
http://wiki.hash.kr/index.php/%EC%A7%80%EB%B6%84%EC%A6%9D%EB%AA%85#cite_note-2
https://www.youtube.com/watch?v=psKDXvXdr7k&t=64s

우둜보둜슀 지뢄증λͺ…
http://wiki.hash.kr/index.php/%EC%9A%B0%EB%A1%9C%EB%B3%B4%EB%A1%9C%EC%8A%A4_%EC%A7%80%EB%B6%84%EC%A6%9D%EB%AA%85

nonce μ„€λͺ…
http://wiki.hash.kr/index.php/%EB%85%BC%EC%8A%A4_(%EC%9E%84%EC%8B%9C%EA%B0%92)

블둝체인은 λ‹€μˆ˜μ˜ κ±°λž˜λ‚΄μ—­μ„ λͺ¨μ•„ ν•˜λ‚˜μ˜ 블둝을 κ΅¬μ„±ν•˜κ³ , κ·Έ 블둝을 λŒ€ν‘œν•˜λŠ” ν•΄μ‹œκ°’μ„ μƒμ„±ν•˜μ—¬ λ‹€λ₯Έ 블둝과 체인처럼 μ—°κ²°λœλ‹€. 이 λ•Œ, 블둝을 λŒ€ν‘œν•˜λŠ” ν•΄μ‹œκ°’μΈ λΈ”λ‘ν•΄μ‹œλ₯Ό μƒμ„±ν•˜λ €λ©΄, μΌμ •ν•œ 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€. κ·Έ μΌμ •ν•œ μ‘°κ±΄μ΄λž€, 블둝 λ‚œμ΄λ„μ— 따라 μžλ™μœΌλ‘œ μ„€μ •λœ 'λͺ©ν‘œκ°’'보닀 더 μž‘μ€ λΈ”λ‘ν•΄μ‹œκ°’μ„ μ°Ύμ•„μ•Ό ν•œλ‹€λŠ” μ œμ•½μ‘°κ±΄μ΄λ‹€. ν•΄μ‹œλŠ” λžœλ€ν•˜κ²Œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ—, μˆ˜μ—†μ΄ λ§Žμ€ 연산을 λ°˜λ³΅ν•΄μ„œ 미리 μ •ν•΄μ§„ λͺ©ν‘œκ°’ μ΄ν•˜μ˜ ν•΄μ‹œκ°’μ΄ λ‚˜μ˜€λ„λ‘ ν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ λžœλ€ν•œ ν•΄μ‹œκ°’μ„ 생성할 수 μžˆλ„λ‘ 맀번 μž„μ‹œκ°’μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”λ°, κ·Έ μž„μ‹œκ°’μ΄ λ°”λ‘œ λ…ΌμŠ€μ΄λ‹€.

일반적으둜 λΈ”λ‘μ˜ ν•΄μ‹œκ°’μ€ ν•΄λ‹Ή λΈ”λ‘μ˜ μƒμ„±μΌμ‹œ, 버전, λΉ„μΈ (bits), λ£¨νŠΈν•΄μ‹œ, 이전 λΈ”λ‘μ˜ ν•΄μ‹œ, 그리고 λ…ΌμŠ€(nonce)라고 λΆˆλ¦¬λŠ” μž„μ‹œκ°’ 등을 μ‘°ν•©ν•œ ν›„ ν•΄μ‹œλ‘œ λ³€ν™˜ν•˜μ—¬ μƒμ„±ν•œλ‹€. ν•΄λ‹Ή λΈ”λ‘μ˜ μƒμ„±μΌμ‹œ, 버전, λ‚œμ΄λ„, λ£¨νŠΈν•΄μ‹œμ™€ 이전 λΈ”λ‘μ˜ ν•΄μ‹œκ°’μ€ 이미 ν™•μ •λ˜μ–΄ μ •ν•΄μ§„ 값을 κ°€μ§€κ³  μžˆμ§€λ§Œ, λ…ΌμŠ€λΌλŠ” μž„μ‹œκ°’μ΄ 달라짐에 따라 ν•΄μ‹œ μ—°μ‚° 결과둜 μƒμ„±λ˜λŠ” 블둝 ν•΄μ‹œκ°’λ„ λ‹€μ–‘ν•˜κ²Œ λ‚˜μ˜¬ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ λ…ΌμŠ€κ°€ 1인 경우의 ν•΄μ‹œκ°’κ³Ό 2인 경우의 ν•΄μ‹œκ°’μ€ μ „ν˜€ λ‹€λ₯΄λ‹€. 이 λ…ΌμŠ€ 값을 μˆ˜μ—†μ΄ λ°”κΏ”κ°€λ©΄μ„œ ν•˜λ‚˜μ”© λŒ€μž…ν•˜λ‹€κ°€ μƒˆλ‘œ μƒμ„±λœ ν•΄μ‹œκ°’μ΄ μΌμ •ν•œ λͺ©ν‘œκ°’보닀 더 μž‘μ„ κ²½μš°μ— μƒˆλ‘œμš΄ 블둝이 μ„±κ³΅μ μœΌλ‘œ μƒμ„±λœλ‹€.

머클루트
http://wiki.hash.kr/index.php/%EB%A8%B8%ED%81%B4%EB%A3%A8%ED%8A%B8

bits μ„€λͺ…(+블둝체인 μž‘λ™ 방식 μ„€λͺ…)
https://homoefficio.github.io/2016/01/23/BlockChain-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90/

슀마트 μ»¨νŠΈλž™νŠΈλž€?
https://medium.com/haechi-audit-kr/smart-contract-a-to-z-79ebc04d6c86

web3.jsλž€?
http://wiki.hash.kr/index.php/Web3.js

node.jsλž€?
http://sblog.netraweb.com/node-js-%EA%B0%95%EC%A2%8C-node-js-%EB%9E%80-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%86%8C%EA%B0%9C/

nftλž€? https://v.kakao.com/v/20210401051201642
코인과 ν† ν°μ˜ 차이 https://www.tokenpost.kr/terms/11550
코인 λ©”μΈλ„·μ΄λž€? https://webruden.tistory.com/530

geth 터미널 λͺ…λ Ήμ–΄
https://geth.ethereum.org/docs/interface/command-line-options

[솔리디티 κ΄€λ ¨ 자료 λͺ¨μŒ]

  • 문법

μ½”λ”© μŠ€νƒ€μΌκ°€μ΄λ“œ
https://solidity-kr.readthedocs.io/ko/latest/style-guide.html#index-0

λͺ…λͺ…κ·œμΉ™
https://solidity-kr.readthedocs.io/ko/latest/style-guide.html#id16

솔리디티 μ½”λ“œ λ ˆμ΄μ•„μ›ƒ(μŠ€νƒ€μΌκ°€μ΄λ“œ)
https://docs.soliditylang.org/en/v0.5.2/style-guide.html#code-layout
https://medium.com/returnvalues/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-v-0-5-2-%EC%8A%A4%ED%83%80%EC%9D%BC-%EA%B0%80%EC%9D%B4%EB%93%9C-19e2686201f6

μ—¬κΈ°λŠ” λ¬Έλ²•κ°œλ…μ„ λΆ„λ₯˜ν•΄μ„œ μ˜ˆμ‹œν•¨μˆ˜λ“€λ‘œ μ„€λͺ…함. visibility, ν•¨μˆ˜ μ œμ–΄μž, 데이터 μœ ν˜•.
https://potensj.tistory.com/18?category=671470

μ ‘κ·Ό μ œμ–΄μž(Visibility)에 λŒ€ν•΄μ„œλ§Œ 닀룬 κΈ€
https://caileb.tistory.com/140

μƒνƒœ μ œμ–΄μž μ„€λͺ… μž˜ν•΄λ†“μ€ κΈ€
https://codemath.github.io/Solidity-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80-%EA%B8%B0%EB%B0%98-Dapp-%EA%B0%9C%EB%B0%9C%EA%B8%B0(2)-Solidity-%EC%96%B8%EC%96%B4-%EC%A0%95%EB%A6%AC/

μ—¬κΈ΄ 슀마트 μ»¨νŠΈλž™νŠΈ ꡬ쑰, λ³€μˆ˜, 데이터 μœ„μΉ˜ λ“± μ „λ°˜μ μœΌλ‘œ 닀룬닀.
https://d2fault.github.io/2018/03/19/20180319-about-solidity-1/

import
https://solidity-kr.readthedocs.io/ko/latest/layout-of-source-files.html#index-3

storage와 memory
https://www.geeksforgeeks.org/storage-vs-memory-in-solidity/

calldata
https://medium.com/day34/solidity-0-5-0-%EC%97%90%EC%84%9C%EC%9D%98-%EB%B3%80%EA%B2%BD%EC%82%AC%ED%95%AD%EC%9D%84-%EC%86%8C%EA%B0%9C%ED%95%A9%EB%8B%88%EB%8B%A4-ab6104296164

https://docs.soliditylang.org/en/v0.5.3/types.html

  • κ°œλ…

modifier
https://intrepidgeeks.com/tutorial/understanding-the-basics-of-entities-2

https://codemath.github.io/Solidity-%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80-%EA%B8%B0%EB%B0%98-Dapp-%EA%B0%9C%EB%B0%9C%EA%B8%B0(2)-Solidity-%EC%96%B8%EC%96%B4-%EC%A0%95%EB%A6%AC/

pragmaλž€?
https://m.blog.naver.com/PostView.nhn?blogId=wnsdnjsjay&logNo=150178059882&proxyReferer=https:%2F%2Fwww.google.com%2F

msgλž€?
msg (tx 와 block 포함)λŠ” μœ μš©ν•œ μ „μ—­ λ³€μˆ˜λ‘œ 블둝체인에 μ ‘κ·Όν•  수 μžˆλŠ” λ‹€μ–‘ν•œ 속성듀을 λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.
msg.sender λŠ” μ™ΈλΆ€μ—μ„œ μ§€κΈˆ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ μ£Όμ†Œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
https://solidity-kr.readthedocs.io/ko/latest/introduction-to-smart-contracts.html?highlight=msg#subcurrency μ—μ„œ 'μœ μš©ν•œ μ „μ—­ λ³€μˆ˜' 검색.

msg 멀버 κ°’.
https://solidity-kr.readthedocs.io/ko/latest/units-and-global-variables.html#index-2

bytes(동적 크기 λ°”μ΄νŠΈ λ°°μ—΄)
https://solidity-kr.readthedocs.io/ko/latest/types.html#id7

μžλ£Œν˜• (κ°•μ² μ˜ 블둝체인 유튜브 채널 운영자의 λΈ”λ‘œκ·Έ)
https://needjarvis.tistory.com/255

SHA-3 λž€?
https://ko.wikipedia.org/wiki/SHA-3

keccak-256μ΄λž€?
http://wiki.hash.kr/index.php/Keccak-256

abiλž€?
https://hucet.tistory.com/46
https://cryptozombies.io/ko/lesson/6/chapter/3

이더리움과 abi κ΄€λ ¨. api와 비ꡐ.
https://medium.com/pocs/ethereum-abi%EC%99%80-%EA%B4%80%EB%A0%A8%EB%90%9C-q-a-%EC%A0%95%EB%A6%AC-40e639ee1a03

abi-encodepackedλž€?
https://frontalnh.github.io/categories/ethereum/blockchain/

μ†”λ¦¬λ””ν‹°μ—μ„œμ˜ event에 λŒ€ν•˜μ—¬ (dApp = 슀마트 μ»¨νŠΈλž™νŠΈ + ν”„λ‘ νŠΈμ—”λ“œ)
솔리디티 μ•ˆμ—λŠ” print κΈ°λŠ₯이 λ”°λ‘œ μ—†λ‹€. λŒ€μ‹  event둜 νŠΉμ • 값을 블둝에 μ €μž₯ν•˜μ—¬ emit으둜 좜λ ₯ν•  수 μžˆλ‹€.
https://nujabes403.medium.com/solidity-event%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-6ed040e12808
https://www.youtube.com/watch?v=fbkt4u4yRzk
https://www.youtube.com/watch?v=P39o5c3J7IA

λ§€ν•‘κ³Ό ꡬ쑰체의 차이
https://m.blog.naver.com/PostView.nhn?blogId=blokorea&logNo=221311000461&proxyReferer=https:%2F%2Fwww.google.com%2F

ꡬ쑰체 λ°°μ—΄ μ‚¬μš©μ˜ˆμ‹œ
https://hatpub.tistory.com/56

virtual

Solidityμ—μ„œ 'virtual' ν‚€μ›Œλ“œλŠ” 상속 관계에 μžˆλŠ” μ»¨νŠΈλž™νŠΈ 간에 ν•¨μˆ˜λ₯Ό μ˜€λ²„λΌμ΄λ”©(μž¬μ •μ˜)ν•˜λŠ” λͺ©μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. 'virtual' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λ  수 μžˆμŠ΅λ‹ˆλ‹€. 'virtual' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έλœ ν•¨μˆ˜λŠ” κΈ°λ³Έ κ΅¬ν˜„μ„ κ°€μ§€λ©°, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•„μš”μ— 따라 ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Solidityμ—μ„œμ˜ λ‹€ν˜•μ„±κ³Ό μœ μ—°μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€. λ‹€μŒμ€ 'virtual' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€:

contract Base {
    function foo() public virtual returns (uint) {
        // κΈ°λ³Έ κ΅¬ν˜„
        return 42;
    }
}

contract Derived is Base {
    function foo() public virtual override returns (uint) {
        // κΈ°λ³Έ κ΅¬ν˜„μ„ μž¬μ •μ˜
        return 10;
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ Base μ»¨νŠΈλž™νŠΈμ˜ foo ν•¨μˆ˜λŠ” virtual둜 μ„ μ–Έλ˜μ—ˆμŠ΅λ‹ˆλ‹€. Derived μ»¨νŠΈλž™νŠΈλŠ” Base μ»¨νŠΈλž™νŠΈλ₯Ό 상속받고, foo ν•¨μˆ˜λ₯Ό override ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μž¬μ •μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이제 Derived μ»¨νŠΈλž™νŠΈμ˜ μΈμŠ€ν„΄μŠ€μ—μ„œ foo ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ Derived μ»¨νŠΈλž™νŠΈμ—μ„œ μž¬μ •μ˜λœ κ΅¬ν˜„μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€.

Derived instance = new Derived();
uint result = instance.foo();  // 10을 λ°˜ν™˜

이와 같이 'virtual' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έλœ ν•¨μˆ˜λŠ” 상속 κ΄€κ³„μ—μ„œ μ˜€λ²„λΌμ΄λ”©λ  수 있으며, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜μ˜ λ™μž‘μ„ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Solidityμ—μ„œ λ‹€ν˜•μ„±κ³Ό 상속을 ν™œμš©ν•˜μ—¬ μœ μ—°ν•˜κ³  λͺ¨λ“ˆν™”λœ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€.

μ˜€λ²„λΌμ΄λ“œ(override)
Solidity의 'override' ν‚€μ›Œλ“œλŠ” 상속 관계에 μžˆλŠ” μ»¨νŠΈλž™νŠΈμ—μ„œ ν•¨μˆ˜λ₯Ό μ˜€λ²„λΌμ΄λ”©(μž¬μ •μ˜)ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. 'override' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ ν•΄λ‹Ή ν•¨μˆ˜κ°€ μƒμœ„ 클래슀의 ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 'override' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ λ‹€μŒκ³Ό 같은 쑰건을 μΆ©μ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€

  1. 상속 κ΄€κ³„μ—μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•  λ•Œ 'override' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. ν•¨μˆ˜ 이름, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜μ™€ νƒ€μž… 및 μˆœμ„œ, λ°˜ν™˜κ°’μ˜ νƒ€μž…μ΄ 동일해야 함
contract Base {
    function foo(uint a) public virtual returns (uint) {
        // κΈ°λ³Έ κ΅¬ν˜„
        return a * 2;
    }
}

contract Derived is Base {
    function foo(uint a) public override returns (uint) {
        // μƒμœ„ 클래슀의 ν•¨μˆ˜λ₯Ό μž¬μ •μ˜
        // 좔가적인 λ™μž‘ μˆ˜ν–‰
        return a + 10;
    }
}

// 잘λͺ»λœ μ˜ˆμ‹œ(bλΌλŠ” λ‹€λ₯Έ λ§€κ°œλ³€μˆ˜ 이름을 μ‚¬μš©ν•˜κ³ , λ°˜ν™˜κ°’ νƒ€μž…μ„ number둜 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ˜¬λ°”λ₯Έ μ˜€λ²„λΌμ΄λ”©μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ»΄νŒŒμΌλŸ¬κ°€ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€)
contract Derived is Base {
    function foo(uint b) public override returns (number) {
        // μƒμœ„ 클래슀의 ν•¨μˆ˜λ₯Ό μž¬μ •μ˜
        // 좔가적인 λ™μž‘ μˆ˜ν–‰
        return b + 10;
    }
}

μƒμ„±μž(constructor)
https://caileb.tistory.com/137
https://docs.soliditylang.org/en/v0.7.5/contracts.html?highlight=constructor#constructors

μƒμ„±μžμ˜ κ°€μ‹œμ„±μ— λŒ€ν•œ 이슈 μ—…λ°μ΄νŠΈ - Visibility (public / external) is not needed for constructors anymore:
https://docs.soliditylang.org/en/v0.7.0/070-breaking-changes.html#functions-and-events

κ°€μŠ€λž€?
https://phemex.com/ko/academy/%EC%9D%B4%EB%8D%94%EB%A6%AC%EC%9B%80-%EA%B0%80%EC%8A%A4%EB%9E%80

payable μ œμ–΄μž
https://www.crocus.co.kr/1254

address κ΄€λ ¨ (balance, transfer λ“±)
https://solidity-kr.readthedocs.io/ko/latest/types.html?highlight=balance#address-members
https://solidity-kr.readthedocs.io/ko/latest/units-and-global-variables.html

이더리움 계정(Account), νŠΈλžœμž­μ…˜(Transaction), λ©”μ‹œμ§€(Message) + 슀마트 μ»¨νŠΈλž™νŠΈ
https://brownbears.tistory.com/385

μ•ˆμ „ν•œ λ‚œμˆ˜μƒμ„±
https://ethereum.stackexchange.com/questions/191/how-can-i-securely-generate-a-random-number-in-my-smart-contract

ERC-20(λŒ€μ²΄ κ°€λŠ₯)
http://wiki.hash.kr/index.php/ERC-20
μ‚¬μš©κ·œμΉ™ : http://wiki.hash.kr/index.php/ERC-20#.EA.B7.9C.EC.B9.99

ERC-721(λŒ€μ²΄ λΆˆκ°€λŠ₯)
http://wiki.hash.kr/index.php/ERC-721#OpenZeppelin

ERC-721 ν‘œμ€€μ•ˆ
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md#specification

ERC 정리
https://eips.ethereum.org/erc

좔상 μ»¨νŠΈλž™νŠΈ(abstract contract), μΈν„°νŽ˜μ΄μŠ€.
https://goodgid.github.io/Ethereum-Basic-Solidity-(8)/
https://medium.com/upstate-interactive/solidity-how-to-know-when-to-use-abstract-contracts-vs-interfaces-874cab860c56

μΈν„°νŽ˜μ΄μŠ€
https://www.youtube.com/watch?v=7H9eb_6QRAk
*μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μƒν™©μ—μ„œ, μΈν„°νŽ˜μ΄μŠ€ λ‚΄ ν•¨μˆ˜λ₯Ό μ‚¬μš©(μ •μ˜)ν• λ•ŒλŠ” override ν‚€μ›Œλ“œλ₯Ό λͺ…μ‹œν•΄μ•Ό ν•œλ‹€. https://cryptozombies.io/ko/lesson/2/chapter/10

μ˜€λ²„λΌμ΄λ”©
https://docs.soliditylang.org/en/v0.6.0/contracts.html#function-overriding

μ˜€λ²„λ‘œλ”©
http://wiki.hash.kr/index.php/%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9
https://solidity-kr.readthedocs.io/ko/latest/contracts.html#index-11

데이터 λ‹¨μœ„(λΉ„νŠΈ, λ°”μ΄νŠΈ..) 8bit == 2^8 - 1 == (2^7) + (2^6) + ... + (2^0)
https://kbench.com/?q=node/2635

μ˜€λ²„ν”Œλ‘œμš° λ°œμƒ μ˜ˆμ‹œ
https://steemit.com/kr-dev/@modolee/the-go-programming-language-3-3-1

자주 μ“°μ΄λŠ” νŒ¨ν„΄
https://solidity-kr.readthedocs.io/ko/latest/common-patterns.html

라이브러리(library)
https://www.youtube.com/watch?v=CkQDssQ7EJM
https://solidity-kr.readthedocs.io/ko/latest/contracts.html#libraries

super.
https://solidity-kr.readthedocs.io/ko/latest/miscellaneous.html#index-4
super ν‚€μ›Œλ“œλŠ” 주둜 두 κ°€μ§€ μƒν™©μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€

  1. ν•¨μˆ˜ μ˜€λ²„λΌμ΄λ”© (Function Overriding): λ§Œμ•½ μžμ‹ μ»¨νŠΈλž™νŠΈκ°€ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈλ‘œλΆ€ν„° ν•¨μˆ˜λ₯Ό 상속받아 λ™μΌν•œ μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³ μž ν•  λ•Œ, superλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μžμ‹ μ»¨νŠΈλž™νŠΈμ—μ„œ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ™μž‘μ„ μœ μ§€ν•˜λ©΄μ„œ 좔가적인 λ™μž‘μ„ μˆ˜ν–‰ν•˜κ³ μž ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄
contract Parent {
    function foo() public virtual {
        // λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ™μž‘
    }
}

contract Child is Parent {
    function foo() public override {
        // λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ™μž‘ μœ μ§€ν•˜κ³  좔가적인 λ™μž‘ μˆ˜ν–‰
        super.foo();
        // μΆ”κ°€ λ™μž‘
    }
}

μžμ‹ μ»¨νŠΈλž™νŠΈμ—μ„œ super.foo()λ₯Ό ν˜ΈμΆœν•¨μœΌλ‘œμ¨ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ foo() ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
2. λ³€μˆ˜ 및 modifier μ ‘κ·Ό
superλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ³€μˆ˜μ™€ modifier에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ‹ μ»¨νŠΈλž™νŠΈμ—μ„œ superλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ³€μˆ˜ 값을 κ°€μ Έμ˜¬ 수 있으며, modifierλ₯Ό 상속받은 경우 superλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨ modifierλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

contract Parent {
    uint public x;
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }
}

contract Child is Parent {
    function setX(uint _x) public onlyOwner {
        // λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ³€μˆ˜μ— μ ‘κ·Ό
        super.x = _x
        // λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ modifier μ‹€ν–‰
        super.onlyOwner();
        // μΆ”κ°€ λ™μž‘
    }
}

μžμ‹ μ»¨νŠΈλž™νŠΈμ—μ„œ super.xλ₯Ό 톡해 λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ λ³€μˆ˜μ— μ ‘κ·Όν•˜κ±°λ‚˜, super.onlyOwner()λ₯Ό ν˜ΈμΆœν•˜μ—¬ λΆ€λͺ¨ μ»¨νŠΈλž™νŠΈμ˜ modifierλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Using For
https://solidity-kr.readthedocs.io/ko/latest/contracts.html#using-for

// example 1
library Math {
    function add(uint a, uint b) internal pure returns (uint) {
        return a + b;
    }
}

struct Number {
    uint value;
}

using Math for Number;

function addTwoNumbers(uint a, uint b) public view returns (uint) {
    Number memory num = Number(a);
    return num.add(b);  // Math 라이브러리의 add ν•¨μˆ˜λ₯Ό 호좜
}
pragma solidity >=0.4.16 <0.6.0;

// example 2
// This is the same code as before, just without comments
library Set {
  struct Data { mapping(uint => bool) flags; }

  function insert(Data storage self, uint value)
      public
      returns (bool)
  {
      if (self.flags[value])
        return false; // already there
      self.flags[value] = true;
      return true;
  }

  function remove(Data storage self, uint value)
      public
      returns (bool)
  {
      if (!self.flags[value])
          return false; // not there
      self.flags[value] = false;
      return true;
  }

  function contains(Data storage self, uint value)
      public
      view
      returns (bool)
  {
      return self.flags[value];
  }
}

contract C {
    using Set for Set.Data; // this is the crucial change
    // Set을 Set.DataλΌλŠ” νƒ€μž…μ„ κ°€μ§„ λ³€μˆ˜(Set.Data knownValues;)κ°€ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€. κ·Έλž˜μ„œ Set.Data νƒ€μž…μ˜ λ³€μˆ˜κ°€ 라이브러리 Set μ•ˆμ— μžˆλŠ” insert ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
    Set.Data knownValues;
    // Here, all variables of type Set.Data have
    // corresponding member functions.
    // The following function call is identical to
    // `Set.insert(knownValues, value)`
    function register(uint value) public {
        require(knownValues.insert(value));
    }
}

assert : 쑰건이 μΆ©μ‘±λ˜μ§€ μ•ŠμœΌλ©΄ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ - λ‚΄λΆ€ μ—λŸ¬μ— μ‚¬μš©λ©λ‹ˆλ‹€.
require : 쑰건이 μΆ©μ‘±λ˜μ§€ μ•ŠμœΌλ©΄ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ - μž…λ ₯ λ˜λŠ” μ™ΈλΆ€ μš”μ†Œμ˜ μ—λŸ¬μ— μ‚¬μš©λ©λ‹ˆλ‹€.
https://solidity-kr.readthedocs.io/ko/latest/units-and-global-variables.html?highlight=assert#index-3.

assert : ν•¨μˆ˜ 싀행이 μ‹€νŒ¨ν•΄λ„ 남은 κ°€μŠ€ λŒλ €μ£Όμ§€ μ•ŠμŒ.
require : ν•¨μˆ˜ 싀행이 μ‹€νŒ¨ν•˜λ©΄ 남은 κ°€μŠ€ 되돌렀쀌.
https://cryptozombies.io/ko/lesson/5/chapter/10

블둝체인 λ„€νŠΈμ›Œν¬, λ…Έλ“œ
https://www.youtube.com/watch?v=u4voz9XBbWA

μΊμ‹œλž€
https://ko.wikipedia.org/wiki/%EC%BA%90%EC%8B%9C
https://mangkyu.tistory.com/69

-Web3.js 와 μ»¨νŠΈλž™νŠΈμ˜ 톡신
ν•„μš”ν•œ 것 : μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ, μ»¨νŠΈλž™νŠΈ ABI
μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ - 이더리움에 λ°°ν¬ν•˜λ©΄ 영ꡬ적이고 κ³ μ •λœ μ£Όμ†Œλ₯Ό μ–»κ²Œ 됨. λ³΅μ‚¬ν•΄μ„œ μ‚¬μš©.
μ»¨νŠΈλž™νŠΈ ABI - 이더리움에 이더리움에 λ°°ν¬ν•˜κΈ° μœ„ν•΄ μ»¨νŠΈλž™νŠΈλ₯Ό μ»΄νŒŒμΌν•  λ•Œ, 솔리디티 μ»΄νŒŒμΌλŸ¬κ°€ μžλ„€μ—κ²Œ ABIλ₯Ό 쀌.
(ν•΄λ‹Ή λ‚΄μš© 챕터 : https://cryptozombies.io/ko/lesson/6/chapter/3)

비동기 μ²˜λ¦¬λ°©μ‹
https://joshua1988.github.io/web-development/javascript/javascript-asynchronous-operation/

μžλ°”μŠ€ν¬λ¦½νŠΈ promise
https://joshua1988.github.io/web-development/javascript/promise-for-beginners/

μžλ°”μŠ€ν¬λ¦½νŠΈ setinterval
https://kyounghwan01.github.io/blog/JS/JSbasic/intervalFunction/#setinterval

μžλ°”μŠ€ν¬λ¦½νŠΈ es6 for of(+for in)
https://jsdev.kr/t/for-in-vs-for-of/2938

μžλ°”μŠ€ν¬λ¦½νŠΈ template literal
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals

.on 이벀트 바인딩
http://www.devkuma.com/books/pages/232

μ£Όμš” κΈ°λŠ₯

  1. 둜그 필터링 κ°€λŠ₯
    • indexed둜 ν‘œμ‹œλœ λ§€κ°œλ³€μˆ˜λŠ” 이벀트 둜그λ₯Ό ν•„ν„°λ§ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€
    • νŠΉμ • μ£Όμ†Œλ‚˜ κ°’μœΌλ‘œ 이벀트λ₯Ό 검색할 수 있게 ν•΄μ€λ‹ˆλ‹€
  2. μ €μž₯ λ°©μ‹μ˜ 차이 - indexed λ§€κ°œλ³€μˆ˜: 둜그의 topics에 μ €μž₯ (검색 κ°€λŠ₯) - 일반 λ§€κ°œλ³€μˆ˜: 둜그의 data에 μ €μž₯ (검색 λΆˆκ°€, λ‹¨μˆœ 데이터)
  3. μ΅œλŒ€ 3κ°œκΉŒμ§€ μ œν•œ - ν•˜λ‚˜μ˜ μ΄λ²€νŠΈμ—μ„œ μ΅œλŒ€ 3개의 λ§€κ°œλ³€μˆ˜λ§Œ indexed둜 μ§€μ • κ°€λŠ₯

μ‚¬μš© μ˜ˆμ‹œ

event Transfer(address indexed from, address indexed to, uint256 value);

μ΄λ ‡κ²Œ μ •μ˜ν•˜λ©΄:

  • νŠΉμ • μ£Όμ†Œ(from)κ°€ 보낸 λͺ¨λ“  Transfer 이벀트λ₯Ό 검색 κ°€λŠ₯
  • νŠΉμ • μ£Όμ†Œ(to)κ°€ 받은 λͺ¨λ“  Transfer 이벀트λ₯Ό 검색 κ°€λŠ₯
  • valueλŠ” indexedκ°€ μ•„λ‹ˆλ―€λ‘œ 검색 κΈ°μ€€μœΌλ‘œ μ‚¬μš© λΆˆκ°€ (λ‹¨μˆœ 데이터 μ €μž₯)

μ™œ μ‚¬μš©ν•˜λ‚˜μš”?

  • 효율적인 데이터 쑰회: ν”„λ‘ νŠΈμ—”λ“œλ‚˜ λ°±μ—”λ“œμ—μ„œ νŠΉμ • μ£Όμ†Œμ˜ 거래 λ‚΄μ—­λ§Œ ν•„ν„°λ§ν•΄μ„œ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€
  • λΉ„μš© μ΅œμ ν™”: λͺ¨λ“  이벀트λ₯Ό κ°€μ Έμ™€μ„œ ν•„ν„°λ§ν•˜λŠ” λŒ€μ‹ , 블둝체인 λ ˆλ²¨μ—μ„œ 필터링 κ°€λŠ₯
  • μ‚¬μš©μž κ²½ν—˜: μ‚¬μš©μžλ³„ 거래 λ‚΄μ—­, νŠΉμ • ν† ν°μ˜ 이동 좔적 등이 λΉ λ₯΄κ²Œ κ°€λŠ₯ν•©λ‹ˆλ‹€

Deposit 이벀트 (24번째 쀄): event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);

  • sender와 ownerλŠ” indexed β†’ νŠΉμ • μ‚¬μš©μžμ˜ μž…κΈˆ λ‚΄μ—­ 검색 κ°€λŠ₯
  • assets와 sharesλŠ” 일반 λ§€κ°œλ³€μˆ˜ β†’ λ‹¨μˆœ 데이터 μ €μž₯

Withdraw 이벀트 (34-40번째 쀄): event Withdraw( address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares );

  • 3개의 μ£Όμ†Œκ°€ λͺ¨λ‘ indexed (μ΅œλŒ€ 3개)
  • νŠΉμ • μ‚¬μš©μžκ°€ μΆœκΈˆν•œ λ‚΄μ—­, 받은 λ‚΄μ—­ 등을 각각 필터링 κ°€λŠ₯

μ‹€μ œ μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μ΄λ ‡κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

// νŠΉμ • μ‚¬μš©μž(0x123...)κ°€ 받은 λͺ¨λ“  Deposit 이벀트 쑰회 const deposits = await contract.queryFilter( contract.filters.Deposit(null, "0x123...") );

// νŠΉμ • μ‚¬μš©μžκ°€ 보낸 λͺ¨λ“  Withdraw 이벀트 쑰회 const withdrawals = await contract.queryFilter( contract.filters.Withdraw("0x123...", null, null) );

λ§Œμ•½ indexedκ°€ μ—†μ—ˆλ‹€λ©΄, λͺ¨λ“  이벀트λ₯Ό λ‹€ κ°€μ Έμ™€μ„œ JavaScriptμ—μ„œ 필터링해야 ν•˜λ―€λ‘œ 맀우 λΉ„νš¨μœ¨μ μ΄μ—ˆμ„ κ²λ‹ˆλ‹€!

  • web3jsμ—μ„œ λ©”μ†Œλ“œ, 이벀트λ₯Ό λ‹€λ£¨λŠ” 법
    ex - CryptoZombies.methods.createRandomZombie(name)
    ex - cryptoZombies.events.NewZombie()...

overflow, underflow
https://gjwjdgnsrnlg.tistory.com/201

** Call method

(bool λ³€μˆ˜, bytes memory λ³€μˆ˜) = .call{보낼 이더}("ν•¨μˆ˜ν˜ΈμΆœ").

  1. μ†‘κΈˆλ§Œ ν•˜λŠ” 상황 call{value:보낼 value}(""). ν•¨μˆ˜ν˜ΈμΆœμ„ ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λ’€μ˜ ("")뢀뢄은 λΉ„μ›Œλ‘”λ‹€.
  2. ν•¨μˆ˜ 호좜만 ν•˜λŠ” 상황.("")의 ""μ•ˆμ— λΆ€λ₯΄λ €λŠ” ν•¨μˆ˜λ₯Ό 기재. 이더λ₯Ό 보내지 μ•ŠλŠ”λ‹€λ©΄ .call("")처럼 {}λ₯Ό μƒλž΅ν•œ ν˜•νƒœκ°€ 될 것.
  3. 리턴 νƒ€μž…μ€ (bool λ³€μˆ˜, bytes memory λ³€μˆ˜). λ§Œμ•½ μ†‘κΈˆλ§Œ ν•œλ‹€λ©΄ 콀마(,)λ’€μ˜ 'bytes memory λ³€μˆ˜' 뢀뢄은 λΉ„μ›Œλ‘ . λ°˜λŒ€μ˜ κ²½μš°λ„ https://www.youtube.com/watch?v=ax5lHvxL9dE 6λΆ„ ~ 9λΆ„ https://medium.com/coinmonks/solidity-transfer-vs-send-vs-call-function-64c92cfc878a (bool sent, bytes memory data) = _to.call.gas(10000){value: msg.value}("");

https://solidity-by-example.org/call/
https://ethereum.stackexchange.com/questions/96685/how-to-use-address-call-in-solidity
https://consensys.github.io/smart-contract-best-practices/development-recommendations/general/external-calls/
https://medium.com/coinmonks/solidity-transfer-vs-send-vs-call-function-64c92cfc878a

snapshot. DAOμ—μ„œλŠ” μ–΄λ–€ μ œμ•ˆμ΄ λ“€μ–΄μ˜¬μ§€λ₯Ό 미리 μ•Œκ³  ν•΄λ‹Ή μ œμ•ˆμ— λ€ν•‘ν•˜λŠ” ν˜„μƒμ„ 막기 μœ„ν•΄ snapshot을 μ‚¬μš©ν•œλ‹€.
μŠ€λƒ…μƒ·(snapshot)μ΄λž€ νŠΉμ •ν•œ μ‹œμ μ—μ„œ 각 μ‚¬μš©μžλ“€μ΄ λ³΄μœ ν•˜κ³  μžˆλŠ” μ•”ν˜Έν™”νμ˜ μˆ˜λŸ‰μ„ "마치 사진을 찍듯이" λ³„λ„λ‘œ μ €μž₯ν•΄ λ‘λŠ” ν–‰μœ„λ₯Ό λ§ν•œλ‹€. 블둝체인 λ°μ΄ν„°μ˜ κ²½μš°μ— νŠΉμ •ν•œ 블둝을 κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό λ³΅μ‚¬ν•˜μ—¬ μ €μž₯ν•˜λŠ” ν–‰μœ„λ₯Ό μŠ€λƒ…μƒ·μ΄λΌκ³  ν•œλ‹€.
μŠ€λƒ…μƒ· 일정이 14일이고 μ—μ–΄λ“œλžμ΄ 20일이라고 κ°€μ •ν•œλ‹€λ©΄ 14일 κΈ°μ€€μœΌλ‘œ A코인을 κ°€μ§€κ³  μžˆμ–΄μ•Ό B코인을 20일에 무료둜 받을 수 있게 λœλ‹€. μ΄λ•Œ μŠ€λƒ…μƒ· λ‚ μ§œμΈ 14일뢀터 ν•΄λ‹Ή μ½”μΈμ˜ κ±°λž˜λŠ” μ€‘λ‹¨λ˜κ³  μ—μ–΄λ“œλž μ‹€μ‹œμΌ 20일이 λ˜μ„œμ•Ό κΈ°μ‘΄ 코인과 μΆ”κ°€ 코인이 μ‹œμž₯μ—μ„œ ν™œμ„±ν™”λœλ‹€. http://wiki.hash.kr/index.php/%EC%8A%A4%EB%83%85%EC%83%B7

openzeppelin docs - Contract Wizard
erc20, erc721, erc1155 λ“± ν”„λ‘œν† μ½œμ— μ›ν•˜λŠ” κΈ°λŠ₯(mint, burn...)등을 UI둜 λ„£μ–΄μ„œ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό μ§€ 수 있게 ν•΄μ€€λ‹€. https://docs.openzeppelin.com/contracts/4.x/wizard

Hardhat
Hardhat comes built-in with Hardhat Network, a local Ethereum network node designed for development.
It allows you to deploy your contracts, run your tests and debug your code, all within the confines of your local machine.
μš”μ•½ : ν•˜λ“œν–‡μ€ 자체 둜컬 λ„€νŠΈμ›Œν¬λ₯Ό λ‚΄μž₯ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λΌμ„œ λ°”λ‘œλ°”λ‘œ λ§ˆμ΄λ‹λ˜κ³  λ°°ν¬λœλ‹€. λ…Έλ“œ 1개짜리 λ„€νŠΈμ›Œν¬λΌκ³  보면 될듯 https://hardhat.org/hardhat-network/docs/overview

UTXO κ°œλ…
https://steemit.com/kr/@brownbears/utxo

상속 ν‚€μ›Œλ“œ 'is'
https://merrily-code.tistory.com/103

this

_from == address(this) 쑰건은 ν•¨μˆ˜ λ‚΄μ—μ„œ μ£Όμ†Œ(_from)κ°€ ν˜„μž¬ 슀마트 μ»¨νŠΈλž™νŠΈ(address(this))와 λ™μΌν•œμ§€ ν™•μΈν•˜λŠ” μ‘°κ±΄μž…λ‹ˆλ‹€.  

슀마트 μ»¨νŠΈλž™νŠΈλŠ” 이더리움 블둝체인 상에 λ°°ν¬λ˜λŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œ, 자체적으둜 계약 λ‘œμ§μ„ μ‹€ν–‰ν•˜κ³  μƒν˜Έμž‘μš©ν•  수 μžˆλŠ” 역할을 ν•©λ‹ˆλ‹€. 슀마트 μ»¨νŠΈλž™νŠΈλŠ” μ£Όμ†Œλ‘œ μ‹λ³„λ˜λ©°, address(this) ν‘œν˜„μ€ ν˜„μž¬ μ‹€ν–‰ 쀑인 슀마트 μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.  

λ”°λΌμ„œ _from == address(this) 쑰건은 ν•¨μˆ˜μ— μ „λ‹¬λœ _from μ£Όμ†Œκ°€ ν˜„μž¬ μ‹€ν–‰ 쀑인 슀마트 μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œμ™€ λ™μΌν•œμ§€ ν™•μΈν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, ν•¨μˆ˜ λ‚΄μ—μ„œλŠ” _from μ£Όμ†Œκ°€ 슀마트 μ»¨νŠΈλž™νŠΈ μžμ²΄μ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” νŠΈλžœμž­μ…˜μ΄λΌλ©΄, _currency 토큰을 _to μ£Όμ†Œλ‘œ μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•©λ‹ˆλ‹€. μ΄λŠ” 슀마트 μ»¨νŠΈλž™νŠΈμ—μ„œ νŠΉμ • 토큰을 λ‹€λ₯Έ μ£Όμ†Œλ‘œ μ „μ†‘ν•˜λŠ” λ‘œμ§μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.  

ERC-20 토큰 μ£Όμ†Œ ChatGPTμ—κ²Œ ν•œ 질문 : safeTransferERC20 ν•¨μˆ˜μ˜ 인자 address _currency κ°€ 뭐야?

safeTransferERC20 ν•¨μˆ˜μ˜ 인자 address _currencyλŠ” ν† ν°μ˜ μ£Όμ†Œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이 μ£Όμ†ŒλŠ” ERC-20 토큰 μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.  

ERC-20은 Ethereum 기반의 토큰 ν‘œμ€€μœΌλ‘œ, λ‹€μ–‘ν•œ 토큰듀이 이 ν‘œμ€€μ„ 따라 개발되고 λ°°ν¬λ©λ‹ˆλ‹€. 각각의 ERC-20 토큰은 κ³ μœ ν•œ μ£Όμ†Œλ₯Ό κ°–κ³  있으며, 이 μ£Όμ†ŒλŠ” 토큰 μ»¨νŠΈλž™νŠΈλ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.  

safeTransferERC20 ν•¨μˆ˜μ—μ„œ _currency μΈμžλŠ” 전달받은 ν† ν°μ˜ μ£Όμ†Œλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 이 μ£Όμ†ŒλŠ” _from μ£Όμ†Œμ—μ„œ _to μ£Όμ†Œλ‘œ ν•΄λ‹Ή 토큰을 전솑할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. _currency μ£Όμ†Œμ— ν•΄λ‹Ήν•˜λŠ” 토큰 μ»¨νŠΈλž™νŠΈμ˜ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 토큰을 μ „μ†‘ν•˜κ²Œ λ©λ‹ˆλ‹€.  

λ”°λΌμ„œ address _currencyλŠ” safeTransferERC20 ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœ ERC-20 ν† ν°μ˜ μ£Όμ†Œλ₯Ό λ‚˜νƒ€λ‚΄λ©°, ν•΄λ‹Ή μ£Όμ†Œμ˜ 토큰을 μ „μ†‘ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.  

ERC-20 ν† ν°μ˜ κ³ μœ ν•œ μ£Όμ†Œ μ˜ˆμ‹œλ₯Ό 2개

이더리움 (Ethereum) 토큰 μ£Όμ†Œ:
μ£Όμ†Œ: 0x0ETH
이더리움 메인 λ„· (Mainnet)μ—μ„œ 배포된 ERC-20 ν† ν°μ˜ μ£Όμ†Œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

ν…Œλ” (Tether) 토큰 μ£Όμ†Œ:
μ£Όμ†Œ: 0xdAC17F958D2ee523a2206206994597C13D831ec7
ν…Œλ”(USDT)λŠ” ERC-20 ν‘œμ€€μ„ λ”°λ₯΄λŠ” μŠ€ν…Œμ΄λΈ” μ½”μΈμœΌλ‘œ, μœ„ μ£Όμ†ŒλŠ” 메인 λ„·μ—μ„œ ν…Œλ” 토큰 μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

각각의 ERC-20 토큰은 κ³ μœ ν•œ μ£Όμ†Œλ₯Ό κ°€μ§€λ©°, 이 μ£Όμ†ŒλŠ” ν† ν°μ˜ μ‹λ³„μž 역할을 ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ 토큰 μ»¨νŠΈλž™νŠΈμ— μ ‘κ·Όν•˜κ³  토큰 κ΄€λ ¨ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 
μœ„ μ˜ˆμ‹œλŠ” 토큰 μ£Όμ†Œμ˜ ν˜•μ‹μ„ λ³΄μ—¬μ£ΌλŠ” μ˜ˆμ‹œμΌ 뿐, μ‹€μ œ μ‚¬μš©λ˜λŠ” ERC-20 ν† ν°μ˜ μ£Όμ†ŒλŠ” ν•΄λ‹Ή ν† ν°μ˜ 배포와 κ΄€λ ¨λœ κ²ƒμž…λ‹ˆλ‹€.

solidity import error(@openzeppelin λΉ¨κ°„ 쀄)
juanfranblanco/vscode-solidity#70

settings.json -> "solidity.packageDefaultDependenciesDirectory": "node_modules" μž…λ ₯

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors