[๋ธ”๋ก์ฒด์ธ ์‹ค์Šต] ์†”๋ฆฌ๋””ํ‹ฐ ์–ธ์–ด๋กœ ํˆฌํ‘œ ๊ธฐ๋Šฅ ์ปจํŠธ๋ž™ํŠธ ์ž‘์„ฑ

2024. 6. 19. 04:16ยท๐Ÿ—‚๏ธ Project/BlockChain
728x90

 

์ด solidity ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•œ ํˆฌํ‘œ ์ปจํŠธ๋ž™ํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ํ›„๋ณด์ž ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐ ํ›„๋ณด์ž์— ๋Œ€ํ•œ ๋“ํ‘œ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค

 

 

์ „์ฒด ์ฝ”๋“œ

pragma solidity ^0.4.23;

contract Voting{
	bytes32[] public candidateList;
    
    //์ปจํŠธ๋ž™ํŠธ๊ฐ€ ๋ฐฐํฌ๋  ๋•Œ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ดˆ๊ธฐํ™”๋จ
    constructor(bytes32[] candidateNames) public {
    	candidateList = candidateNames;
    }
    
    //ํ›„๋ณด์ž ๋ชฉ๋ก์˜ ๊ฐ ํ›„๋ณด์— ๋Œ€ํ•ด์„œ ๋“ํ‘œ์ˆ˜๋ฅผ ๊ณ„์† ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ด€๋ฐฐ์—ด ์ƒ์„ฑ -> ๋งคํ•‘
    mapping (bytes32 => unit8) public votesReceived;	//๋“ํ‘œ์ˆ˜ ์ €์žฅ ๋ณ€์ˆ˜
    
    //๊ฐ ํ›„๋ณด์ž์— ๋Œ€ํ•œ ๋“ํ‘œ์ˆ˜ ์ €์žฅ
    function voteForCandidate(bytes32 candidate) public {
    	require(validCandidate(candidate));
        voteReceived[candidate] += 1;
    }
    
    //๋“ํ‘œ์ˆ˜ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜
    //view ์ง€์ €์žฅ : ์ฝ๊ธฐ ์ „์šฉ ํ•จ์ˆ˜ ํ‘œ์‹œ
    function totalVotesFor(bytes32 candidate) view public returns(unit8) {
    	require(validCandidate(candidate));	//require: ์ฐธ์ด ์•„๋‹ ๋•Œ ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœ์ƒํ•˜๊ณ  ์‹คํ–‰ ๋ฉˆ์ถค
        return votesReceived[candidate];
    }
    
    //์œ ํšจํ•œ ํ›„๋ณด์ธ์ง€ ์ฒดํฌํ•˜๋Š” ํ•จ์ˆ˜
    //list์— ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด false ๋ฐ˜ํ™˜
    function valiCandidate(bytes32 candidate) view public returns (bool) {
    	for(uint i=0; i < candidateList.length; i++) {
        	if(candidateList[i] == candidate) {
            	return true;
            }
         }
         return false;
}

 

 

ํ›„๋ณด์ž ๋ชฉ๋ก ๋ฐ ๋“ํ‘œ ์ €์žฅ

bytes32[] public candidateList;
mapping (bytes32 => uint8) public votesReceived;

 

  • candidateList: ํ›„๋ณด์ž๋“ค์˜ ์ด๋ฆ„์„ ์ €์žฅํ•˜๋Š” ๋™์  ๋ฐฐ์—ด์ด๋‹ค.
  • votesReceived: ํ›„๋ณด์ž์˜ ์ด๋ฆ„์„ ํ‚ค๋กœ ํ•˜๊ณ , ํ•ด๋‹น ํ›„๋ณด์ž์— ๋Œ€ํ•œ ๋“ํ‘œ ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋งคํ•‘์ด๋‹ค. uint8 ํƒ€์ž…์œผ๋กœ ๋“ํ‘œ ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

 

์ƒ์„ฑ์ž

constructor(bytes32[] candidateNames) public {
    candidateList = candidateNames;
}

 

  • ์ปจํŠธ๋ž™ํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ƒ์„ฑ์ž์ด๋‹ค.
  • candidateNames ๋ฐฐ์—ด์„ ๋ฐ›์•„ candidateList๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์ด ๋ฐฐ์—ด์€ ํ›„๋ณด์ž๋“ค์˜ ์ด๋ฆ„์„ ํฌํ•จํ•œ๋‹ค.

 

 

 

ํ›„๋ณด์ž์— ๋Œ€ํ•œ ํˆฌํ‘œ ๊ธฐ๋Šฅ

function voteForCandidate(bytes32 candidate) public {
    require(validCandidate(candidate));
    votesReceived[candidate] += 1;
}

 

  • voteForCandidate ํ•จ์ˆ˜๋Š” ํŠน์ • ํ›„๋ณด์— ๋Œ€ํ•ด ๋“ํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • validCandidate ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ›„๋ณด์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•œ ํ›„, ํ•ด๋‹น ํ›„๋ณด์˜ ๋“ํ‘œ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

 

 

ํ›„๋ณด์ž์— ๋Œ€ํ•œ ์ด ๋“ํ‘œ ์ˆ˜ ์กฐํšŒ

function totalVotesFor(bytes32 candidate) view public returns (uint8) {
    require(validCandidate(candidate));
    return votesReceived[candidate];
}

 

  • totalVotesFor ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ํ›„๋ณด์˜ ์ด ๋“ํ‘œ ์ˆ˜๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • validCandidate ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ›„๋ณด์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•ด๋‹น ํ›„๋ณด์˜ ๋“ํ‘œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

ํ›„๋ณด์ž ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•จ์ˆ˜

function validCandidate(bytes32 candidate) view public returns (bool) {
    for (uint i = 0; i < candidateList.length; i++) {
        if (candidateList[i] == candidate) {
            return true;
        }
    }
    return false;
}

 

  • validCandidate ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ํ›„๋ณด๊ฐ€ candidateList์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ํ›„๋ณด๊ฐ€ ๋ชฉ๋ก์— ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—†์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

728x90

'๐Ÿ—‚๏ธ Project > BlockChain' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ธ”๋ก์ฒด์ธ ์‹ค์Šต] RPC ์„œ๋ฒ„ ์—ฐ๊ฒฐ (์˜ค๋ฅ˜:Account unlock with HTTP access is forbidden!)  (0) 2024.06.04
[๋ธ”๋ก์ฒด์ธ ์‹ค์Šต] ์ด๋”๋ฆฌ์›€ ๊ฐ€์ƒํ™”ํ ๋งŒ๋“ค๊ธฐ  (3) 2024.06.04
'๐Ÿ—‚๏ธ Project/BlockChain' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ธ”๋ก์ฒด์ธ ์‹ค์Šต] RPC ์„œ๋ฒ„ ์—ฐ๊ฒฐ (์˜ค๋ฅ˜:Account unlock with HTTP access is forbidden!)
  • [๋ธ”๋ก์ฒด์ธ ์‹ค์Šต] ์ด๋”๋ฆฌ์›€ ๊ฐ€์ƒํ™”ํ ๋งŒ๋“ค๊ธฐ
WISHee
WISHee
IT์™€ ๋ณด์•ˆ์— ๋Œ€ํ•œ ๊ณต๋ถ€ ๊ธฐ๋ก์„ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๊ฐ€๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๐Ÿ›ก๏ธ๐Ÿ’ป
  • WISHee
    DevwithWish
    WISHee
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐ŸŒณ ROOT (128)
      • โ›“๏ธ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ (10)
        • ๊ธฐ๋ณธ ๊ฐœ๋… (9)
        • ํŒจํ‚ท ๋ถ„์„ (1)
        • ์นจ์ž… ํƒ์ง€ ๋ฐ ๋ฐฉ์ง€ (0)
      • โš™๏ธ ์‹œ์Šคํ…œ ๋ณด์•ˆ (0)
        • ์šด์˜์ฒด์ œ ๋ณด์•ˆ (0)
        • ์ทจ์•ฝ์  ๋ถ„์„ (0)
        • ๋กœ๊ทธ ๋ถ„์„ (0)
      • ๐ŸŒ ์›น ๋ณด์•ˆ (1)
        • OWASP TOP 10 (1)
        • ์›น ์„œ๋ฒ„ ๋ณด์•ˆ (0)
        • ์›น ์ทจ์•ฝ์  ๋ถ„์„ (0)
      • โ˜๏ธ ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ (3)
        • AWS (3)
      • ๐Ÿ” ์•”ํ˜ธํ™” & ์ธ์ฆ (3)
        • ์•”ํ˜ธํ™” ๊ฐœ๋… (2)
        • TLS,SSL (0)
        • ์ธ์ฆ & ์ ‘๊ทผ์ œ์–ด (1)
      • ๐Ÿšจ ๋ณด์•ˆ ์‹ค๋ฌด (30)
        • ๋ณด์•ˆ ๊ด€์ œ (14)
        • ๋ชจ์˜ ํ•ดํ‚น (12)
        • ์ทจ์•ฝ์  ์ง„๋‹จ (3)
        • ๋””์ง€ํ„ธํฌ๋ Œ์‹ (1)
      • ๐Ÿ“š ISMS & ISO27001 (9)
        • ISMS, ISMS-P ์ธ์ฆ (2)
      • ๐Ÿ“ฐ ๋ณด์•ˆ ๋‰ด์Šค & ํŠธ๋ Œ๋“œ (1)
        • ์ตœ์‹  ๋ณด์•ˆ ์ด์Šˆ (1)
        • ์‚ฌ์ด๋ฒ„ ์œ„ํ˜‘ ์ •๋ณด (0)
        • ๋ณด์•ˆ ์ปจํผ๋Ÿฐ์Šค ๋ฆฌ๋ทฐ (0)
      • ๐Ÿ”ฅ SKShieldusRookies (15)
        • Review (3)
        • PBL (0)
        • ๊ณผ์ œ (4)
        • ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ (8)
        • ์ตœ์ข… ํ”„๋กœ์ ํŠธ (0)
      • ๐Ÿ—‚๏ธ Project (3)
        • SOAR (0)
        • BlockChain (3)
      • ๐Ÿงฉ Language (23)
        • Java (1)
        • Python (16)
        • Programmers (6)
      • ๐Ÿ‘ฅ ๋ฒ„์ „๊ด€๋ฆฌ & ํ˜‘์—…๋„๊ตฌ (9)
        • Git, GitHub (4)
        • etc (5)
      • ๐Ÿ’œ ์ผ์ƒ (21)
        • Boot Camp (4)
        • Study (6)
        • Travel (8)
        • Study Abroad (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

    • ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค!
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ˜‘์—…๋„๊ตฌ
    ์œ ๋Ÿฝ์—ฌํ–‰
    ๋ฆฌ๋ˆ…์Šค๋ณด์•ˆ
    VSCode
    ๋Ÿฐ๋˜์—ฌํ–‰
    ๋ธ”๋ก์ฒด์ธ์‹ค์Šต
    ์™€์ด์–ด์ƒคํฌ
    sk์‰ด๋”์Šค๋ฃจํ‚ค์ฆˆ
    ์ •๋ณด๋ณด์•ˆ
    ์œˆ๋„์šฐ๋ณด์•ˆ
    ๊นƒํ—ˆ๋ธŒ
    ํŒŒ๋ฆฌ์—ฌํ–‰
    ํŒŒ์ด์ฌ
    ๋ชจ์˜ํ•ดํ‚น
    ์นผ๋ฆฌ๋ฆฌ๋ˆ…์Šค
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ํ•ด์™ธ์—ฌํ–‰
    ๋ณด์•ˆ์‹ค์Šต
    ๋ชฝ์ƒ๋ฏธ์…ธ
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ํ”„๋ž‘์Šค์—ฌํ–‰
    ์˜นํ”Œ๋ขฐ๋ฅด
    slack
    ์œ ๋Ÿฝํ•œ๋‹ฌ์—ฌํ–‰
    flask
    Github
    ํ”Œ๋ผ์Šคํฌ
    git
    ํ•œ๋‹ฌ์—ฌํ–‰
    Python
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • 160x600
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
WISHee
[๋ธ”๋ก์ฒด์ธ ์‹ค์Šต] ์†”๋ฆฌ๋””ํ‹ฐ ์–ธ์–ด๋กœ ํˆฌํ‘œ ๊ธฐ๋Šฅ ์ปจํŠธ๋ž™ํŠธ ์ž‘์„ฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”