🐬 Solidity 4κ°• 🐬

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

solidity

λͺ©λ‘ 보기
4/5

πŸ“Œ Payable

μ ‘κ·Ό μ œμ–΄μž : public/private external/internal

μƒνƒœ μ œμ–΄μž : view, pure

μ‚¬μš©μž μ •μ˜ μ œμ–΄μž : onlyOwner, aboveLevel

payable?!
ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 것과 λ™μ‹œμ— μ»¨νŠΈλž™νŠΈμ— 돈 μ§€λΆˆ κ°€λŠ₯!!

contract OnlineStore {
  function buySomething() external payable {
    // ν•¨μˆ˜ 싀행에 0.001이더가 λ³΄λ‚΄μ‘ŒλŠ”μ§€ ν™•μ‹€νžˆ ν•˜κΈ° μœ„ν•΄ 확인:
    require(msg.value == 0.001 ether);
    // λ³΄λ‚΄μ‘Œλ‹€λ©΄, ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ μžμ—κ²Œ 디지털 μ•„μ΄ν…œμ„ μ „λ‹¬ν•˜κΈ° μœ„ν•œ λ‚΄μš© ꡬ성:
    transferThing(msg.sender);
  }
}

msg.value : ν•¨μˆ˜ 싀행에 0.001이더가 λ³΄λ‚΄μ‘ŒλŠ”μ§€ ν™•μ‹€νžˆ ν•˜κΈ° μœ„ν•΄ 확인
ether : 기본적으둜 ν¬ν•¨λœ λ‹¨μœ„

πŸ“Œ 좜금

transfer ν•¨μˆ˜ μ‚¬μš©ν•΄μ„œ 이더λ₯Ό νŠΉμ • μ£Όμ†Œλ‘œ 전달할 수 μžˆλ‹€
this.balance μ»¨νŠΈλž™νŠΈμ— μ €μž₯λΌμžˆλŠ” 전체 κΈˆμ•‘λ°˜ν™˜

// μ΄ˆκ³Όμ§€λΆˆμ„ ν–ˆμ„ λ•Œ 이더λ₯Ό msg.sender둜 λŒλ €μ£ΌλŠ” ν•¨μˆ˜

uint itemFee = 0.001 ether;
msg.sender.transfer(msg.value - itemFee);

πŸ“Œ λ‚œμˆ˜

μ†”λ¦¬λ””ν‹°μ—μ„œ λ‚œμˆ˜λ₯Ό λ§Œλ“€κΈ° κ°€μž₯ 쒋은 방법 : keccak256 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ“°λŠ” 것

// Generate a random number between 1 and 100:
uint randNonce = 0;
uint random = uint(keccak256(now, msg.sender, randNonce)) % 100;
randNonce++;
uint random2 = uint(keccak256(now, msg.sender, randNonce)) % 100;

이 μ˜ˆμ‹œμ—μ„œλŠ” now의 νƒ€μž„μŠ€νƒ¬ν”„ κ°’, msg.sender, μ¦κ°€ν•˜λŠ” nonce(λ”± ν•œ 번만 μ‚¬μš©λ˜λŠ” 숫자, 즉 λ˜‘κ°™μ€ μž…λ ₯으둜 두 번 이상 λ™μΌν•œ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  수 μ—†κ²Œ 함)λ₯Ό λ°›κ³  μžˆλ‹€.

κ·Έλ¦¬κ³ μ„œ keccak을 μ‚¬μš©ν•˜μ—¬ 이 μž…λ ₯듀을 μž„μ˜μ˜ ν•΄μ‹œ κ°’μœΌλ‘œ λ³€ν™˜ν•˜κ³ ,
λ³€ν™˜ν•œ ν•΄μ‹œ 값을 uint둜 λ°”κΎΌ ν›„,
% 100을 μ¨μ„œ λ§ˆμ§€λ§‰ 2자리 숫자만 받도둝 함.
이λ₯Ό 톡해 0κ³Ό 99 μ‚¬μ΄μ˜ μ™„μ „ν•œ λ‚œμˆ˜λ₯Ό 얻을 수 μžˆλ‹€.

μ΄λ”λ¦¬μ›€μ—μ„œλŠ” μ»¨νŠΈλž™νŠΈμ˜ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ νŠΈλžœμž­μ…˜μœΌλ‘œμ„œ λ„€νŠΈμ›Œν¬μ˜ λ…Έλ“œ ν•˜λ‚˜ ν˜Ήμ€ μ—¬λŸ¬ λ…Έλ“œμ— 싀행을 μ•Œλ¦¬κ²Œ λœλ‹€.
κ·Έ ν›„ λ„€νŠΈμ›Œν¬μ˜ λ…Έλ“œλ“€μ€ μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ„ λͺ¨μœΌκ³ 
계산이 λ³΅μž‘ν•œ μˆ˜ν•™μ  문제 "μž‘μ—… 증λͺ…" λ¨Όμ € ν’€κΈ° μœ„ν•œ μ‹œλ„λ₯Ό ν•˜κ²Œ λœλ‹€
그리고 ν•΄λ‹Ή νŠΈλžœμž­μ…˜ 그룹을 κ·Έλ“€μ˜ μž‘μ—… 증λͺ…(PoW)κ³Ό ν•¨κ»˜ 블둝 으둜 λ„€νŠΈμ›Œν¬μ— 배포

ν•œ λ…Έλ“œκ°€ μ–΄λ–€ PoWλ₯Ό ν’€λ©΄, λ‹€λ₯Έ λ…Έλ“œλ“€μ€ κ·Έ PoW ν‘ΈλŠ” κ±Έ λ©ˆμΆ”κ³  ν•΄λ‹Ή λ…Έλ“œκ°€ 보낸 νŠΈλžœμž­μ…˜ λͺ©λ‘μ΄ μœ νš¨ν•œ 것인지 κ²€μ¦ν•˜κ²Œ λ˜λŠ”λ°,
-> μ΄λŠ” λ‚œμˆ˜ ν•¨μˆ˜ μ·¨μ•½ν•˜κ²Œ λ§Œλ“€κ²Œ λœλ‹€

μ „νˆ¬μ˜ κ²°κ³Όλ₯Ό κ²°μ •ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” λ‚œμˆ˜ 생성기 κ΅¬ν˜„

πŸ“Œ 곡톡 둜직 ꡬ쑰 κ°œμ„ ν•˜κΈ°(Refactoring)

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ‚¬λžŒμ΄ κ·Έκ°€ μ‚¬μš©ν•œ _zombieId의 μ†Œμœ μžμΈμ§€ 확인할 방법

modifier둜 λ”°λ‘œ λΉΌλƒˆμŒ. κ·Έ ν›„ μ’€λΉ„ 곡격 κΈ°λŠ₯ ν•¨μˆ˜ κ΅¬ν˜„

πŸ“Œ μ’€λΉ„ μŠΉλ¦¬μ™€ 패배

쒀비듀이 μ–Όλ§ˆλ‚˜ 많이 이기고 μ‘ŒλŠ”μ§€ μΆ”μ ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜ κ΅¬ν˜„

0개의 λŒ“κΈ€

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