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 |