728x90
반응형


 

안녕하세요 "코인투자 1000만시대"... 주변에 해외거래소를 이용하시는 분들이 정말 많은거같아요.

저는 2022년부터 선물거래를 투자해오고 있습니다.(하루1% 목표로 데이트레이딩 하고있어요)

 

선물거래를 하면서 최근에 셀퍼럴 시스템에 대해 알게되었는데요 

제가 셀퍼럴 시스템을 이용하면서 진짜 후기, 셀퍼럴의 문제점, 셀퍼럴 가입방법에 대해 알려드리려고 합니다.

 


셀퍼럴이란?

일반적으로 암호화폐를 거래하면 수수료를 지불하게 됩니다. 거래소마다 수수료는 다르겠지만 일반적으로 시장가 거래 기준

0.05%가 평균적인 수수료입니다.

 

A 라는 트레이더가 별도 추천코드없이 "거래소 가입"을 해서 거래를 할 경우 거래 수수료 0.05%를 지불하게되고, 거래소측에서 이 수수료를 모두 가져가게 됩니다. 

 

그러나 추천코드를 통해 거래소가입을 했을 경우 A라는 트레이더는 거래수수료 할인을 받을수있고, 추천코드를 뿌린 사람은 A라는 사람의 거래수수료 일부를 가져가게 됩니다. (나머지 거래수수료는 거래소가 가져감)

 

이때 추천코드를 뿌린사람이 A트레이더로부터 발생한 거래수수료를 A에게 돌려주는것을 셀퍼럴이라고 합니다.

* 단 거래소 규정으로 A라는 유저가 추천코드를 발급받고 자신의 추천코드를 통해 가입할 경우 계정이 정지당합니다.

 

현재 수많은 셀퍼럴 사이트가 있지만, 대부분 여러분을 속이고있습니다... 


<기존 셀퍼럴 시스템 문제점>

 

1. 테더XX의 링크를통해 가입할경우 페이백을 평생해준는게 아니라, 일정기간(ex. 6달) 만 해준다던지

2. 테더X 의 경우 A트레이더가 거래금액이 높아 수수료할인을 원래 더 받아야되는데, 테더X의 가입링크를 통해 가입할 경우 거래수수료 할인이 없습니다...

 

공통적으로 자동출금이 안된다던지, 일정금액을 도달해야 출금을 해준다던지, 출금수수료가 있기도하고, 무엇보다 정보가 투명하게 공개안되는 셀퍼럴 사이트가 정말 많습니다.

 

 

저는 사실 테더XX 사용하다가 어느순간 페이백금액이 이상한거같아서 직접 계산해봤더니.... 셀퍼럴사이트에서 약속한 금액만큼 페이백을 안해주고 있더라구요

 

그래서 거래소계정을 삭제하고 새로운 셀퍼럴 사이트로 가입했는데, 여기가 정말 제일 좋은듯합니다.

 

제가 시드가 약 10,000$ 정도인데, 평균적으로 하루 100$, 많으면 1000$정도까지도 들어오네요.

대략 페이백금액은 사람마다 레버리지, 거래횟수가 달라서 크게 차이나겠지만... 평균적으로 시드의 1%가 매일 들어온다고 생각하시면 됩니다.

 


제가 이번에 알게된 셀퍼럴사이트(테더몬스터) 장점

 

1. 투명하게 페이백이 된다.(마이페이지에 들어가면 자신의 페이백금액과, 페이백율을 다 볼수있어요)

 

2. 자동페이백이 된다.(이게 정말 큽니다. 셀퍼럴 사이트 들어가서 출금하기 누르는것도 귀찮아요... 인증하기도 귀찮고) 

   * 자신의 코인거래소 계정으로 자동으로 들어옵니다.

 

3. 최소출금액이 없다. -> 대부분 셀퍼럴사이트는 최소출금액이 50$인데, 테더몬스터라는 사이트는 매일매일 거래수수료가 1$ 이상 쌓일경우 자동으로 페이백이 됩니다.

 

 

코인선물하시는분들은 셀퍼럴 가입하기 정말 귀찮을거에요... 그러나 우리가 내고 있는 거래수수료는 생각보다 엄청나게 많다는걸 느껴보세요....  (저는 시드 10000$ 로 현재 1800$ 페이백 받았습니다 ㅎㅎ)

 

현재 페이백받은 금액

 

https://tethermonster.com/

 

테더몬스터 - 최고의 암호화폐 페이백 서비스

테더몬스터는 최고 수준의 암호화폐 거래 페이백을 제공하는 서비스입니다. 실시간 자동 출금, 투명한 정산, 업계 최고 페이백율을 경험하세요.

tethermonster.com

 

셀퍼럴 방법이 어려우신분들이나 관심있으신 분들은 개인카카오톡 주시면 친절하게 알려드릴게요.

 

그 이유는 제가 이 글을 통해 가입하신 분들의 거래수수료 1%를 받거든요.(전 사실만 이야기합니다.)

 

그렇다고 해서 이 글을통해 가입하시는 분들의 페이백금액이 줄어드는건 절대 아닙니다.

 

 

https://open.kakao.com/o/sYdiOO1h

 

비트코인 선물거래 자동셀퍼럴

비트코인 선물거래 자동셀퍼럴

open.kakao.com

 

728x90
반응형

728x90
반응형

<!doctype html>

 

“워렌 버핏 같은 수익률 좋은 사람에게 그냥 내 돈을 맡기고 싶다?”
이제는 ‘잘하는 사람을 그대로 따라하는’ 방법이 있습니다.

오늘은 위 질문에 대한 해답이 될 만한 서비스 하나를 살펴보려 합니다. 제가 직접 사용해 본 경험을 바탕으로, 사용방법부터 장단점까지 정리해 드립니다.

 

바이낸스 거래소, 왜 중요한가?

바이낸스는 전 세계에서 손꼽히는 규모의 암호화폐 거래소입니다. (매출·이용자 수치는 시기와 출처에 따라 다르지만, 매출 수십 조원대, 누적 가입자 2억 명대로 추정되는 등 시장 지배력이 매우 큽니다.)

특히 암호화폐 시장의 특징은 데이터의 투명성입니다. 전통 주식시장과 달리, 온체인(블록체인)과 일부 거래소 데이터는 실시간에 가깝게 공개됩니다. 그 결과, 상위 유저(프로 트레이더)가 무엇을 사고파는지, 어떤 수익률을 내고 있는지를 확인할 수 있습니다.

 

 

카피트레이딩이란? — “검증된 사람을 그대로 따라하기”

카피트레이딩은 말 그대로 성과가 검증된 트레이더의 매매 전략을 그대로 복제하는 방식입니다. 차트를 하루 종일 보지 않아도, 누가 무엇을 어떻게 샀는지/팔았는지를 바탕으로 동일한 전략을 실행할 수 있습니다.

장점

  • 시간 절약: 차트 학습/뉴스 탐색에 매몰되지 않음
  • 데이터 기반: 실제 실적과 포지션을 보고 판단
  • 학습 효과: 상위 유저의 리스크 관리 방식을 체득

유의점

  • 미래 수익 보장 없음 (시장 변동성 존재)
  • 분산·비중·손절/익절 등 기본 원칙 필요
  • 신뢰 가능한 데이터 소스/플랫폼 선택 중요

Copy-Coin으로 할 수 있는 일

  • 바이낸스 리더보드 연동 — 상위 트레이더의 실시간 포지션/성과 접근 (워뇨띠 카피트레이딩도 가능합니다)
  • 온체인 고래 지갑 트래킹 — 대형 지갑·기관성 자금의 선물거래 흐름 파악
  • 원클릭 카피트레이드 — 비율·레버리지·최대 수량·슬리피지 등 내 규칙으로 자동 실행
  • 거래내역/성과 대시보드 — PnL, ROI, 진입가·청산가, 히스토리까지 투명 확인
  • 커뮤니티/채팅 — 전략 토론, 질문/답변으로 지식 공유
중요: Copy-Coin은 고객 자산을 직접 보관하지 않으며, 사용자가 본인 계정(거래소/지갑)을 통해 거래가 실행되도록 설계된 도구/플랫폼입니다.

실제 사용 방법 (Step-by-Step)

  1. 사이트 접속: copy-coin.com
  2. 발견(Discover): 리더보드에서 관심 트레이더를 고릅니다. ROI, 누적 PnL, 포지션 스타일(스캘핑/스윙) 확인
  3. 분석(Analyze): 트레이더 상세 페이지에서 현재 포지션, 진입/청산, 과거 히스토리를 검토합니다.
  4. 설정(Copy): 카피 비율, 레버리지,  
  5. 모니터링(Manage): 대시보드에서 실시간 PnL/ROI를 확인하고, 필요 시 비중/전략을 조정합니다.

이렇게 사용해 보세요 (예시 시나리오)

시나리오 A — “바쁜 직장인”

  • 하루에 투자에 쓸 수 있는 시간: 10~20분
  • 상위 트레이더 2~3명만 선정, 소액부터 카피 시작
  • 주간 단위로 성과/리스크 점검 → 비중 조절

시나리오 B — “보수적 성향”

  • 레버리지 낮춤, 최대 손실/익절 폭 사전 설정
  • 고변동 코인 비중 제한, 포지션 분산
  • 온체인 고래 흐름이 동시에 잡힐 때만 카피 강화

자주 받는 질문 (FAQ)

Q1. 수익이 보장되나요?

아닙니다. 어떤 투자도 미래 수익은 보장할 수 없습니다. 다만 Copy-Coin은 검증된 데이터리스크 관리 설정을 통해 합리적인 의사결정을 돕습니다.

Q2. 자산은 안전한가요?

Copy-Coin은 고객 자산을 보관하지 않으며, 사용자의 거래는 각자 보유한 거래소/지갑을 통해 이루어지도록 설계되어 있습니다. 보안은 각 거래소/지갑의 정책을 따릅니다. 또한 주문은 Copy-Coin 서버에서 주문을 넣는게 아닌, 

유저들의 PC에서 주문을 직접 넣게됩니다. 따라서 PC 또는 핸드폰이 켜져있어야 됩니다.

Q3. 시작 금액은 어느 정도가 적당할까요?

처음에는 소액으로 시작해 서비스 사용법과 트레이더 스타일을 파악한 후, 점진적으로 비중을 조절하는 것을 권장드립니다.

 

지금 바로 Copy-Coin 살펴보기

잘하는 사람을 그대로 따라하는 데이터 기반 투자를 경험해 보세요. 👉 copy-coin.com

문의 & 피드백

사용 방법, 가입 문의, 개선 아이디어 등은 언제든지 오픈채팅 으로 편하게 연락 주세요. 빠르게 도와드리겠습니다.

 

 

면책 고지: 본 글은 투자 권유가 아니며, 정보 제공 목적입니다. 가상자산 투자는 원금 손실 가능성이 높습니다. 모든 투자 판단과 책임은 투자자 본인에게 있습니다.

 

 

 

https://open.kakao.com/o/gktk8yCe

 

CopyCoin(카피트레이딩 플랫폼)

비밀번호: copy1234

open.kakao.com

 

 

 
 

Copy Coin — 실시간 트레이더 포지션 추적

우수 트레이더의 포지션과 거래내역 및 수익률을 실시간으로 확인하세요. 하이퍼리퀴드 지갑주소·바이낸스 UID 기반.

copy-coin.com

 

실제 카피트레이딩 수익률 공개

저는 한국의 전설트레이더 워뇨띠 카피트레이딩을 진행중인데요, 10만달러 시작하여 약 60일동안 카피트레이딩을 돌린결과

188,641$ 로 약 80% 수익률을 기록했어요(일평균 1.2%) 중간에 -10%도 발생하긴했었는데, 정말 안정적으로 트레이딩이 되더라구요

 

https://open.kakao.com/o/gktk8yCe

 

CopyCoin(카피트레이딩 플랫폼)

비밀번호: copy1234

open.kakao.com

 

 

실제 매매내역

728x90
반응형
728x90
반응형

<!doctype html>

🚀 Copy Coin — 쉽고 스마트한 카피트레이딩

고수 트레이더를 실시간으로 따라가며, 누구나 손쉽게 수익 기회를 잡을 수 있는 플랫폼

 

Copy Coin이란?

copy-coin.com은 온체인 데이터 분석을 통해 고래유저, 기관투자자의 지갑주소를 추적하고, 그 중 우수한 트레이더의 거래내역포지션을 제공합니다. 또한 클릭 몇 번으로 동일한 전략을 그대로 복사할 수 있는 카피트레이딩 플랫폼입니다.

나아가 바이낸스 UID를 기반으로 실제 유저 지갑까지 분석하여, 바이낸스 상위 트레이더의 선물거래 포지션도 손쉽게 카피할 수 있습니다.

기존 카피트레이딩의 문제점

  • 허위 수익률: 트레이더가 여러 계정을 운영하며 가장 잘된 계정만 보여주어 과장된 수익률을 내세움
  • 투명성 부족: 거래 내역이나 포지션을 공개하지 않아 검증 불가, 손실 포지션은 비공개 가능
  • 위험 관리 미흡: 무제한 레버리지와 비현실적 전략으로 팔로워가 큰 손실을 경험

Copy Coin은 이런 문제를 해결하기 위해 실계좌 기반 투명한 성과실시간 데이터만 제공합니다.

주요 기능

  • 실시간 추적: 고래(대형 투자자)들의 거래를 실시간으로 확인
  • 투명한 데이터: 리드 트레이더의 모든 거래내역 수집
  • 맞춤형 설정: 레버리지와 비율을 내 투자 성향에 맞게 조절
  • 리스크 관리: 손실 시에만 추가 진입, 자동 포지션 정리 등 안전장치 제공
  • 커뮤니티: 의견 공유와 우수 트레이더 추천
  • \n
  • 수수료 없음: 카피 수수료가 없으며, 카피당하는 고래유저도 이를 알지 못합니다.

 

워뇨띠 거래내역 및 포지션

한국의 전설적인 코인러 워뇨띠의 실시간 거래내역과 포지션 또한 Copy Coin에서 확인하고 카피할 수 있습니다.

실제 수익 인증

저도 Copy Coin을 통해 실제로 트레이딩을 따라가며 수익을 얻고 있습니다. 100,000$로 워뇨띠를 카피트레이딩 한 결과, 불과 5일 만에 100,000$ → 107,479$ (약 7% 수익)을 달성했습니다. (이 과정은 유튜브 라이브 영상으로 녹화했습니다.)

바이비트 연동

Copy Coin은 바이비트(Bybit) API를 통해 자동 카피트레이딩을 지원합니다.

왜 Copy Coin인가?

  • 📊 투명한 데이터: 실시간 성과와 거래 내역 공개
  • 즉각적인 실행: 시장 움직임을 놓치지 않는 빠른 동기화
  • 🛡️ 안전한 투자: 리스크 관리 기능으로 손실 최소화

사용 방법

  1. Copy Coin 홈페이지 접속
  2. Copy-Coin 바이비트 가입코드로 회원가입 후 API 발급
  3. 카피할 트레이더 선택 → 카피 옵션 설정 후 시작
  4. 대시보드에서 내 포지션과 수익 실시간 확인

📺 관련 영상: 유튜브 바로가기

 

 

https://open.kakao.com/o/gktk8yCe

 

CopyCoin(카피트레이딩 플랫폼)

비밀번호: copy1234

open.kakao.com

 

728x90
반응형
728x90
반응형

문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

 

def solution(participant, completion):
    hashDict = {}
    print(type(hashDict))
    sumHash = 0
    # 결론 : 참가자목록을 {해시값:"사람이름"}으로 정의하고 참가자목록의 해시값 총합을 더해놓음
    #        참가자_총_해시값 - 완주자_총_해시값 = 미완주자의_해시값
    #        참가자목록[미완주자_해시값] = 미완주자 이름이 나오게됨 
    
    # 1. Hash : Participant의 dictionary 만들기
    # 2. Participant의 sum(hash) 구하기
    
    for part in participant:
        hashDict[hash(part)] = part
        sumHash += hash(part)

    print(hashDict)
    
    # 3. completion의 sum(hash) 빼기
    for comp in completion:
        sumHash -= hash(comp)
    
    # 4. 남은 값이 완주하지 못한 선수의 hash 값이 된다
    return hashDict[sumHash]
728x90
반응형

'알고리즘' 카테고리의 다른 글

알고리즘) 퀵 정렬(Quick Sort) 개념과 C구현  (0) 2021.05.19
728x90
반응형

버전이 4.x.x일때는 잘 작동되던 코드가 truffle 버전이 5.x.x 되고나서 나타나는 에러이다.

 

해결방법 1. require -> import 로 바꾸면 해결된다.

 

해결방법 2. Truffle 다운그레이드

npm uninstall -g truffle

npm install -g truffle@4.x.x

 

 

It is esm only in 5.x
You can still use a dynamic import to import it in node at least afaik, but should probably just stick to 4.x until you can migrate to esm (feature set shouldn't be much different)

 

https://github.com/chaijs/chai/issues/1561

 

ERR_REQUIRE_ESM in v5 · Issue #1561 · chaijs/chai

Hi there, I don't have all the details, as I don't have access to my workstation right now, but our CI is failing with this error for all our projects using chai when trying an upgrade to chai@5. T...

github.com

 

728x90
반응형
728x90
반응형

Solidity Docs를 보면서 공부하는데 생소한 문법들이 많이보인다. 아래 2가지정도를 위주로 공부하였다

  • 함수제어자(접근제어,상태제어,사용자 정의제어,payable제어자)
  • 예외처리

 


함수제어자(function modifier) 

위 test함수 뒤에 있는

external , view , customModifier payable 은 모두 함수제어자이다.

 

1.접근제어자 (visibility modifier)

해당 함수가 언제,어디서 호출될 수 있는지 제어한다.

 

접근제어자는 함수를 정의할때 (param) 뒤에 쓰이기도 하고 변수 앞에 쓰이기도 하는데

보통은 (param)뒤에 쓴다.

이 접근제어자는 함수나 변수에 대한 접근을 제한하는 역할을 한다.

접근제어자는 기본적으로 public , private, internal, external 등이 있다. 

 

  • public : 변수나 함수가 어디에서든 접근 가능
  • private : 오직 private이 정의된 Contract 에서만 사용이 가능(private로 정의된 Contract에 get , set함수를 만들어야 접근가능 )
  • internal : 오직 internal이 정의된 contract 안에서, 상속받은 자식 smart contract 에서 접근 가능하다. private과 유사하나 상속받은 자식 contract에서 접근이 가능하다는것이 추가되었다고 보면 된다.
  • external : 오직밖에서만 접근이 가능하다. public과 유사하나 , external이 정의된 contract내에서는 사용이 불가능 

 

2. 상태 제어자(state modifier)

블록체인과 상호작용 하는 방법에 대한 것이다.

 

  • view, constant : 해당 함수를 실행해도 어떤 데이터도 저장/변경되지 않음
  • pure : 해당함수가 어떤 데이터도 블록체인에 저장하지 않을뿐만아니라, 블록체인으로부터 어떤 데이터도 읽지않는다.

 

3. 사용자 정의 제어자

직접 원하는 논리대로 제어자를 정의하여 함수에 적용할 수 있다.

 

// 메시지를 보낸 사람이 owner와 같은지 확인하는 제어자 정의

modifier onlyOwner () {
	require(msg.sender == owner);
  	_; // _;와 항상 함께 쓰인다.
}

 

require 는 예외처리이다. 예외처리는 아래와 같다. 

  • require : 조건이 false 에러를 발생하고 gas를 환불해줌
  • revert : 조건없이 에러를 발생시키고 gas를 환불
  • assert : gas를 다소비한 후 조건이 false일때 에러를 발생 

4. payable 제어자 

함수 호출을 통해 이더리움을 받을 수있는 특별한 함수 유형을 정의한다.

함수가 실행되는 동시에 컨트랙트 계정(CA)에 돈을 지불할 수 있다. payable을 작성하지 않은 함수에서는 이더를 보낼 수 없다.

 

contract OnlineStore {
  function buySomething() external payable {
    require(msg.value == 0.001 ether);
    transferThing(msg.sender);
  }
}

 

위 코드를 정리해 보면 

1. OnlineStore라는 Contract를 정의하고

2. buySomething()라는 함수를 정의하고 함수제어자로 external(external로 정의된 함수 밖에서만 접근가능)이고 

payable라는 함수제어자가 있다.

3. buySomething()는 msg.value(이 함수를 호출할 떄 보낸 wei(이더)의 양을 나타낸다) 가 0.001이더가 아닐 경우 종료한다. 참일경우(value == 0.001eth) 이더를 전송한다.


 

msg 는 솔리디티에서 제공하는 전역변수로서 현재 함수호출에 대한 정보를 담고있다. 

msg.sender 현재 함수를 호출한 주소를 나타냅니다.
msg.value 이더리움 네트워크에서, 이 함수를 호출할 때 보낸 wei의 양을 나타냅니다.
msg.data 함수를 호출할 때 보낸 데이터를 나타냅니다.
msg.gas 함수를 호출할 때 사용할 수 있는 가스의 양을 나타냅니다. (v0.4.21 이후로는 더 이상 사용되지 않습니다.)
msg.sig 함수를 호출할 때 사용한 함수 서명을 나타냅니다.
728x90
반응형
728x90
반응형

 

Solidity는 이더리움 가상머신을 대상으로 설계된 언어이며 Smart Contrat  을 구현하기 위한 언어이다.

Solidity을 이해하려면 Smart Contrat 이 무엇인지 먼저 알아야되고, Smart Contrat  을 이해하기 위해서는 블록체인이 뭔지 알아야된다. (추가로 EVM 까지...)

 

도움받은 자료(블록체인과 스마트컨트랙을 이해하는데 도움이 됨. 본인은 사실 코인투자를 해왔기에 이미 두루뭉실하게 알고있었음) 

1.  https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE10531916

 

블록체인 기술과 활용 연구 | DBpia

이새봄, 박아름, 송재민 | 한국컴퓨터정보학회논문지 | 2021.2

www.dbpia.co.kr

2. https://goldsystem.tistory.com/347

 

스마트컨트랙 제대로 이해하기

정의 스마트 계약 또는 스마트 컨트랙이란 블록체인 기반으로 금융거래, 부동산 계약, 공증 등 다양한 형태의 계약을 체결하고 이행하는 것을 말합니다. 블록체인 2.0이라고도 합니다. Hashgraph에

goldsystem.tistory.com


Solidity 언어 특징

  • 절차적 프로그래밍 언어(C++ , 자바스크립트, 자바)
  • 정적타입 (자바와 비슷) : 컴파일 시에 타입이 결정, 오류가 있다면 컴파일 에러 발생
  • 객체 지향언어
  • 확장자 : .sol 

예제 코드 

실습환경 : https://remix.ethereum.org/ 

Compiler : 0.8.24

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

SPDX-LIcense-Identifier

스마트 컨트랙트에 대한 신뢰를 높이고, 저작권 문제를 해소하기 위해 코드 최상단에 꼭 SPDX라이센스를 주석으로

명시해야된다. 

https://spdx.org/licenses/

 

SPDX License List | Software Package Data Exchange (SPDX)

SPDX License List The SPDX License List is an integral part of the SPDX Specification. The SPDX License List itself is a list of commonly found licenses and exceptions used in free and open or collaborative software, data, hardware, or documentation. The S

spdx.org

 

SPDX(Software Packgae Data Exchange)는 소프트웨어 명세서에 대한 개방형 표준

SPDX는 소프트웨어와 관련된 구성요소,라이센스,저작권,보안 참조 및 기타 메타데이터의 표현을 허용하며

원래목적은 라이센스 준수를 개선하는 것이었고 이후 공급망 투명성과 같은 추가 사용사례를 촉진하기 위해 확장됨


Pragma

컴파일러의 특정 기능을 활성화 하는데 사용됨

위 예제코드에서는 solidity 버전을 0.4.16 ~ 0.9.0을 사용한다고 설정 


Contrat

객체지향언어(Java)에서 class와 유사 위 예제코드에서는 Contrat SimpleStorage를 만들고, 이 Contract 안에는

storedData라는 상태변수(storage에 저장되어있는 데이터)와  set과 get의 함수들이 정의되어있다.


상태변수(State Variables)

Contract 내부에서 선언된 변수 중 function 외부에서 선언된 변수를 상태변수(state Variables)라고 함

contract storage에 저장됨 -> 모든 function이 접근가능, function이 변경한 값은 계속해서 저장됨,,

 

1. Storage : 블록체인에 기록되는 영구적으로 값이 유지되는 데이터 영역

2. Memory : 프로그램이 동작되는 동안에만 값이 저장되고, 종료되는 값이 사라짐


값형 데이터 타입 (Value types)

  • Boolean
    true(default)/false
  • 정수(int, uint)
    signed integers: 부호 있음
    unsigned integer: 부호 없음
    8bit ~ 256bit까지 지원 (예: int8: -128 ~ 127, uint16: ~65,535)
  • Byte
    데이터를 바이너리 형태로 저장하기 위해 byte타입을 지원함.
    bytes1 ~ bytes32까지 정해져 있음.
    크기가 정해져 있기 때문에 fixed-sized byte array라고도 불림.
    정해진 바이트 크기와 다르면 에러가 남.
  • cf.) bytes 타입: dynamically sized byte array - 참조형(reference) 타입임
  • 주소(Address)
    20byte 크기의 이더리움 어드레스
    balance property를 갖고 있어 이더 잔액을 확인할 수 있음.
    이더를 옮기는 transfer, send 메소드 지원(address.transfer(amount), address.send(amount))
  • 열거형 (Enumerations)
    내부적으로는 정수 값으로 구현됨.

 

참조

.https://velog.io/@mae-zung/Solidity-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95

 

.https://docs.soliditylang.org/en/v0.8.24/introduction-to-smart-contracts.html#simple-smart-contract

 

.https://goldsystem.tistory.com/347

 

728x90
반응형
728x90
반응형

이글은 완전 기초적인 CRUD 구현방법에 대해 설명해드린느 글입니다.

 


CRUD란?

📥 Create : 데이터 생성
👀 Read : 데이터 불러오기
✍️ Update : 데이터 수정 / 갱신
📤 Delete : 데이터 삭제하기

 

 

 

<1.시작>

#1.장고설치 
pip install django
#2. 장고 프로젝트만들기
django-admin startproject config .
#3. 데이터베이스DB 생성
python manage.py migrate
#4. 앱생성
python manage.py startapp myapp

 

 

<2.프로젝트 구성>

>

 

3. 소스코드

#myproject/urls.py

from django.contrib import admin
from django.urls import path , include

#사용자가 사이트에 접속했을떄 요청을 어떻게 누가 처리할건지 지정하는 
#라우팅을 해주는 파일 

# https://127.0.0.1/
# https://127.0.0.1/app/
# https://127.0.0.1/create/
# https://127.0.0.1/read/1/
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('myapp.urls'))
]
#myapp/urls.py

#장고의 urls.py 파일은 페이지 요청이 발생하면 가장 먼저 호출되는 파일로 
#URL과 뷰 함수 간의 매핑을 정의한다. 뷰 함수는 views.py 파일에 정의된 함수를 말한다.
# 본 프로젝트에서는 글생성, 읽기, 삭제, 수정 이 있기때문에 4개의 path를 추가해주었다.

from django.contrib import admin
from django.urls import path , include
from myapp import views

urlpatterns = [
    path('',views.index),
    path('create/',views.create),
    path('read/<id>/',views.read),
    path('delete/' , views.delete),
    path('update/<id>/',views.update)
    
]

 

#myapp/views.py

from django.shortcuts import render, HttpResponse
import random
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import redirect
nextId = 4
topics = [
{'id':1, 'title':'routing', 'body':'Rounting is ..'},
{'id':2, 'title':'view', 'body':'view is ..'},
{'id':3, 'title':'model', 'body':'model is ..'}
]

def HTMLTemplate(articleTag,id=None):
    
    global topics
    ol = ''
    contextUI =''
    if id != None:
        contextUI = f'''
            <li>
                <form action="/delete/" method="post">
                    <input type="hidden" name="id" value={id}>
                    <input type="submit" value="delete">
                </form>
            </li>

            <li>
                <a href="/update/{id}">update</a>
            </li>

    '''

    for topic in topics:
        ol +=  f'<li><a href = "/read/{topic["id"]}">{topic["title"]}</a></li>'
    
    return (f'''
    <html>
        <body>
        <h1><a href="/" > Django</a></h1>
        <ol>
            {ol}
        </ol>
        {articleTag}

        <ul>
            <li><a href="/create/">create</a></li>
            {contextUI}
            
        </ul>
        
        </body>
        </html>
                                      
    ''')

def index(request):
    article = '''
    <h2> Welcome</h2>
    Hello Django
    '''

    return HttpResponse(HTMLTemplate(article))

def read(request,id):
    global topics
    article =''

    for topic in topics:
        if topic['id'] == int(id):
            article = f'<h2>{topic["title"]}</h2>{topic["body"]}'

    return HttpResponse(HTMLTemplate(article,id))

@csrf_exempt
def create(request):
    global nextId

    print('request.method : ' , request.method)
    if request.method == 'GET':       
        article ='''
            <form action= "/create/" method="post">
                <p> <input type="text" placeholder="title" name="title"> </p>
                <p> <textarea name="body" placeholder="body"> </textarea> </p>
                <p> <input type="submit"></p>
            </form>
        '''
        return HttpResponse(HTMLTemplate(article))
    elif request.method =='POST':
        title = request.POST['title']
        body = request.POST['body']

        newtopic = {"id":nextId , "title":title, "body":body}

        url = '/read/' + str(nextId)
        nextId = nextId + 1
        topics.append(newtopic)
        return redirect(url)
    
@csrf_exempt
def delete(request):
    global topics

    if request.method == 'POST':
        id = request.POST['id']
        newTopics = []
        for topic in topics:
            if topic['id'] != int(id):
                newTopics.append(topic)
        topics = newTopics
        return redirect('/')
    
@csrf_exempt
def update(request,id):
    global topics
    if request.method == 'GET':

        for topic in topics:
            if topic['id'] == int(id):
                selectedTopic ={
                    "title":topic['title'],
                    "body":topic['body']
                }
        article = f'''
            <form action ="/update/{id}/" method="post">
                <p> <input type="text" name="title" placeholder="title"></p>
                <p> <textarea name="body" placeholder="body">{selectedTopic['body']}</textarea></p>
                <p> <input type="submit"></p>
            </form>
        '''
        return HttpResponse(HTMLTemplate(article,id))
    elif request.method =='POST':
        title = request.POST['title']
        body = request.POST['body']
        
        for topic in topics:
            if topic['id'] == int(id):
                topic['title'] = title
                topic['body'] = body
        return redirect(f'/read/{id}')

 

<4. 결과화면 >

 

 

< 5.느낀점 >

Django를 처음 공부하면서 배우는건데 파이썬과 웹작동방식을 조금 알고있으니 빨리 빨리 이해되는거같다.

html css db이용해서 웹페이지 게시판을 처음 구현할때 1주일이 넘는시간이 걸렸던거같은데.... 

 

쨋든 개발을 다하고나서 글쓰기에 <script>alert('test')</script> 스크립트문을 넣었더니 그대로 실행되더라... 보안적인 부분은 아직 장고라는 프레임워크를 배우는단계라 고민만 해보고 다음 단계로 넘어가야겠다. 

728x90
반응형

'Python > Django' 카테고리의 다른 글

파이썬 Django 웹 개발 환경준비하기  (0) 2023.09.06
728x90
반응형

1. 웹 개발 환경준비

1.장고설치 
pip install django
2. 장고 프로젝트만들기
django-admin startproject config .
3. 데이터베이스DB 생성
python manage.py migrate

2. 프로젝트 구조 

1. config 폴더 : 프로젝트 설정 파일과 웹 서비스 실행을 위한 파일이 들어 있습니다.

   __init__.py : 파이썬 2.x 버전과 호환을 위해 만들어진 비어있는 파일 

   settings.py : 프로젝트 설정에 관한 내용이 담긴 파일

      BASE_DIR : 프로젝트 루트폴더, 설정 파일이나 py파일 등에서 프로젝트의 루트 폴더를 찾아 그 하위를 탐색함, 이 때         문에 변수를 미리 준비해 두는 값

      SECRET_KEY: 보안을 위해 사용되는값, 세션값의 보호나 비밀번호 변경시 사용되는 보안URL을 만드는데 이용

      DEBUG: 디버그 모드를 설정합니다. True 일경우 다양한 오류 메시지ㅣ를  즉시 확인가능 *배포시에는 False 

      allowed_hosts : 현재 서비스의 호스트를 설정 *개발시에는 비어두고 배포시 '*'나 실제 도메인을 사용함

      INSTALLED_APPS: 장고 웹서비스는 다양한 앱의결합으로 만들어지는데, 현재 프로젝트에서 사용하는 앱의 목록을        기록하고 관리합니다.

      MIDDLEWARE: 장고의 모든 요청응답메시지 사이에 실행되는 특수한 프레임워크

      ROOT_URLCONF:기준이 되는 urls.py파일의 경로를 설정

      TEMPLATES: 장고에서 사용하는 템플릿 시스템에 대한 설정들

      WSGI_APPLICATION: 실행을 위한 WSGI 어플리케이션을 설정함

      DATABASE: DB관련 설정

      AUTH_PASSWORD_VALIDATORS : 비밀번호 검을위한 설정

      LANGUAGE_CODE : 다국어에 관한 설정

 

   urls.py : 특정 기능을 수행하기 위해 접속하는 주소를 url이라고 하고 이를 설정해 주는데, 그 설정을 이 파일에 기록함.

   wsgi.py : 웹 서비스를 실행하기 위한 wsgi관련 내용이 들어있습니다. / 실제로 웹 서버와 장고 애플리케이션 사이 통신 역할을 담당 

 

2. venv 폴더 : 프로젝트 구동에 필요한 가상환경이 들어있는 폴더

3. db.sqlite3 : SQLite3 DB파일

4. manage.py : 장고의 다양한 명령어를 실행하기 위한 파일

 

장고 기본명령어

1. 서버 시작하기

$ python manage.py runserver 8080 기본 웹 서버는 8000 포트를 기본으로 동작한다. 변경하고 싶다면 포트 번호를 적어준다.
$ python manage.py runserver 0.0.0.0:8000 IP를 직접 지정하거나 같은 네트워크 망 안에서 접속이 가능하도록 할 때 왼쪽과 같이 적어준다.
$ python manage.py runserver 0:8000 0은 0.0.0.0의 약어이다. 해당 형태로 동작을 시킬 때는 settings.py에 있는 ALLOWED_HOSTS를 설정해 준다.

서버를 실행 후 종료를 하기 위해서는 [Ctrl+C]를 누르면 된다.

 

 

 

2. 기본 명령어 정리

$ django-admin startproject 프로젝트이름

장고 프로젝트를 만드는 명령이다. 장고를 설치 후에 위와 같이 명령어를 치면 프로 젝트가 생성된다. 아래와 같이 뒤에 .을 붙여주면 새로운 파일에서 프로젝트가 생성되는 것이 아니라 현재 파일에서 프로젝트가 생성된다.

$ django-admin startproject 프로젝트이름 .

 

 

$ python manage.py startapp 앱이름

프로젝트에 기능 단위인 앱을 새로 만들 때 사용한다.

 

 

$ python manage.py makemigrations 어플리케이션의 변경 사항을 추적에 DB에 적용할 내용을 정리한다. 보통 모델의 변경 사항이 있을 때 주로 사용한다.
$ python manage.py migrate 실제 변경사항을 DB에 반영한다.
$ python manage.py showmigrations DB 변경사항 목록과 상태를 출력한다.
$ python manage.py createsuperuser 관리자 계정을 생성한다.
$ python manage.py changepassword 계정의 비밀번호를 변경할 수 있다.

 

$ python manage.py sqlmigrate 실행할 SQL 명령문을 출력한다. 어떤 명령문을 실행할지 확인할 떄 사용하고, 튜닝이 안된 쿼리나 슬로우 쿼리 여부를 확인할 수 있다.
$ python manage.py dumpdata 현재 DB의 내용을 백업할 때 사용한다.
$ python manage.py loaddata 백업 파일에서 DB로 내용을 복구 할 때 사용한다.
$ python manage.py flush DB 테이블은 그대로 두고 테이블의 내용만 전부 삭제한다.
$ python manage.py shell 장소 쉘(shell)을 실행한다. 작성한 모델 등을 불러와 실제로 테스트를 해볼 수 있다.
$ python manage.py dbshell DB에 직접 접근할 수 있는 쉘을 실행한다. 장고 어플리케이션에 문제가 있어 관리자 페이지에 접근할 수 없을 때 보통 shell을 이용해 DB를 수정하는데 SQL 구문을 이용해 직접 수정하고 싶다면 dbshell을 이용할 수 있다.

 

참고 : https://han-py.tistory.com/308 

참고 : 배프의 오지랖 파이썬 웹프로그래밍

 

728x90
반응형

'Python > Django' 카테고리의 다른 글

[Django] Django CRUD 간단한 게시판 구현하기  (0) 2023.09.17

+ Recent posts