Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 리액트를 다루는 기술
- 전역설치
- 자바스크립트
- 벨로포터
- 블록체인
- 우분투
- Docker
- npm
- 리액트
- 이더리움
- centos
- 환경변수
- 일반유저
- MariaDB
- wget
- immer
- 깃허브
- 솔리디티
- 머클트리
- 리눅스
- 노드
- 변수
- 머클루트
- Sequelize
- node.js 교과서 따라하기
- 라우터
- wsl
- 쉘스크립트
- 설치
- 시퀄라이즈
Archives
- Today
- Total
코드코코
[솔리디티][디앱] lottery - Lottery Domain 및 Queue 설계 본문
https://caileb.tistory.com/147
solidity - payable (1) 개념
Payable (1) payable concept Solidity 언어는 코인(coin) 혹은 토큰(token)이라는 가상화폐를 다루는 언어이다. 다른 언어들(ex, C, Java, HTML)은 오로지 프로그램을 만들기 위한 언어로 탄생했지만, Solidity..
caileb.tistory.com
짚고 넘어갈 개념
payble
pragma solidity >=0.4.22 <0.9.0;
contract Lottery {
struct BetInfo {
uint256 answerBlockNumber;
address payable bettor; //payable : 해당 주소로 트랜스퍼 하기 위해서 붙임.
bytes challenges; // 0Xab..
}
//tail이 증가하면서 값을 넣어줌
uint256 private _tail;
//값을 검증할 때는 _head 부터 차례대로 값을 가져와서 검증
uint256 private _head;
//자료구조 queue
mapping(uint256 => BetInfo) private _bets;
//주소를 오너로 설정
//public : 자동으로 getter를 만들어 준다, 스마트 컨트랙트 외부에서 바로 오너의 값을 알 수 있다.
address public owner;
// 블록해시로 확인할 수 있는 제한 256으로 고정
uint256 constant internal BLOCK_LIMIT = 256;
// +3 번째블럭으로 고정
uint256 constant internal BET_BLOCK_INTERVAL = 3;
// 배팅금액 0.005eth 고정
uint256 constant internal BET_AMOUNT = 5 * 10 ** 15;
//팟머니
uint256 private _pot;
//스마트 컨트랙트가 생성될 때,, 배포가 될때, 가장 먼저 실행되는 함수.
constructor() public {
owner = msg.sender;
// 배포가 될 때, 보낸사람을 오너로 저장하겠다.
// msg.sender : 스마트 컨트랙트에서 사용하는 전역변수
}
function getSomeValue() public pure returns (uint256 value){
return 5;
}
// view : 스마트 컨트랙트에 있는 변수를 조회할 때
function getPot() public view returns (uint256 pot){
return _pot;
}
// Bet : 베팅
// save the bet to the queue
// Distribute : 검증
// check the answer
//getter
function getBetInfo(uint256 index) public view returns (uint256 answerBlockNumber, address bettor, bytes memory challenges){
BetInfo memory b = _bets[index];
answerBlockNumber = b.answerBlockNumber;
bettor = b.bettor;
challenges = b.challenges;
}
//queue 이용하니 puch와 pop의 개념이 필요
function pushBet(bytes memory challenges) public returns (bool) {
BetInfo memory b;
//베터는 보낸사람
b.bettor = msg.sender;
//block.number : 현재 트랜잭션에 들어가는 블럭의 수를 가져옴
b.answerBlockNumber = block.number + BET_BLOCK_INTERVAL;
b.challenges = challenges;
_bets[_tail] = b;
_tail++;
return true;
}
function popBet(uint256 index) public returns (bool){
//매핑 이기때문에 리스트에서 삭제하기보다는 단순히 값을 초기화 하자.
//맵에 있는 값을 delete하게 되면, gas를 돌려받게 된다. 이것의 의미는 더이상 데이터를 블록체인 데이터에 저장하지 않겠다의 의미. state database에 저장된 값을 그냥 없앤다
delete _bets[index];
return true;
}
}
'블록체인 > 솔리디티' 카테고리의 다른 글
[솔리디티][디앱] lottery - Lottery Distribute 함수 설계 (0) | 2022.02.15 |
---|---|
[솔리디티][디앱] lottery - Lottery Bet 함수 구현 (0) | 2022.02.14 |
[솔리디티] 스마트 컨트랙트 배포하기 (0) | 2022.02.14 |
[솔리디티][디앱] lottery - Dapp 서비스 설계 및 Lottery 규칙 (0) | 2022.02.13 |
[솔리디티][디앱] lottery - truffle을 활용한 테스트 (0) | 2022.02.13 |