728x90

truffle migrate시에 

payable 부분에서 오류가 나서 참고를 하려고 했지만

 

팀원한테 물어보니 payable이 truffle버전 5이상부터 된다는 얘기를 해서 (하지만 관련문서를 찾아봐도 잘안나온다 솔리디티 버전에 관한 얘기는 있는데 "address payable not supported in solc 0.4.x or earlier." 나는 solc버전이 0.8이었어서...)

npm uninstall -g truffle 하고

npm i g truffle@5.5.0

로 다시 까니까 됐다.

 

 

 

 

 

 

(packagelock json이 이런거 통일시켜주는 애려나? 근데 그거 있으면 npm i 모듈 깔때 에러 떠서 삭제하고 하는데 흠...)

 

 

728x90
728x90

payable 이더를 받을때나 보낼때 쓰는 키워드

 

 

 

payable을 생성자에 넣을 때

 

 

생성자에 페이어블 넣으면 배포했을 때 생성자함수도 구현돼서 이더를 보낼수 있대

 

저 이더에 5넣고 배포 누르니까 빠져나감

 

 

 

특정계정 권한주기

 

 

modifier로 함수들에 조건 추가

 

 

 

 

강의: 인프런 솔리디티 깨부수기

728x90
728x90

주소.balance    주소의 현재 갖고 있는 이더의 잔액

( msg.value       송금액을 의미한다 달라! )

msg.sender      스마트컨트랙을 사용하는 주체, 보내는 자

주고 받는거 해봄

 

 

이더보내는 스마트컨트랙트 코드  (출처: https://github.com/D-One0914/BreakingSolidityBasic/blob/main/lec33.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0 < 0.9.0;

//주소.balance
//주소의 현재 갖고 있는 이더의 잔액을 의미함.  //  msg.value는 송금액을 의미한다 달라!

// msg.sender
// msg.sender는 스마트컨트랙을 사용하는 주체라고 볼 수 있다 
// 앞으로 설명할 call 과 delegate call에서 주요 내용이니 관심잇게 봐라

contract MobileBanking{
    event SendInfo(address _msgSender, uint256 _currentValue);
    event MyCurrentValue(address _msgSender,uint256 _value);
    event CurrentValueOfSomeone(address _msgSender, address _to, uint256 _value);


   //이더를 보낼라면 
   //을 넣을 줄 알았지만!!! 보내는 주소, 받을 사람 주소만 있음 되는구나.. 이더를 받아야되기때문에 payable써준다 //함수전체도 이더보는거라 payable써줌
    function sendEther(address payable _to) public payable {
        require (msg.sender.balance >= msg.value , "your balance is not enough");
        //트랜스퍼 함수를 통해 이더 송금
        _to.transfer(msg.value);
        //보낸 나의 주소, 내 잔고
         emit SendInfo(msg.sender, (msg.sender).balance);
    }
    //그냥 현재 잔고확인 함수인듯?
    function checkValueNow() public{
        emit MyCurrentValue(msg.sender, (msg.sender).balance);
    }
    //어떤 계정의 잔고 확인하고 싶을때, 확인하고 싶은 주소 넣기
    function checkUserValue(address _to) public{
       emit CurrentValueOfSomeone(msg.sender, _to, _to.balance);
    }

}

 

 

이더송금하기 

sendEther함수 사용

 

1. 코드를 컴파일한다

또는 우클릭해서 원하는 코드 컴파일.

 

2. ACCOUNT 에서 현재 내 계정주소 확인하고  Deploy 배포한다.

 

1로 표시한거 &gt;&nbsp; 계정주소 넣을 부분 2로 표시한거 &gt; 이더금액 넣는 부분 3로 표시한거 &gt;&nbsp; Deploy 배포 4로 표시한거 &gt; 함수사용하는 부분 5로 표시한거 &gt;&nbsp; 내역&nbsp; &nbsp; &nbsp; &nbsp;(숫자 이거 순서 아님주의!!!)

3. 함수 실행

 

Deploy했으면

Deployed Contracts 가 생성될거다.

함수에 값넣어서 이더송금할 수 있다.

 

sendEther는 송금받을 주소를 넣는 곳이다.

 

Account에서 보낼 주소를 골라서 복사해서 sendEther에 넣는다.

그리고 Account에서 다시 내 계정주소로 와있는지 확인한 다음에

보낼 이더 값을 Value에 넣는다. Ether로 되어있는지 확인한다.

그리고 sendEther를 눌러 송금함수를 실행한다. 

 

잘보내졌으면 저렇게 내역이 뜬다.

ACCOUNT 눌러서 남은 잔고와 받은 잔고를 맨위에 사진처럼 확인할 수 있다. 

 

 

 

 

현재계정 잔고확인하기

checkValueNow함수 사용

 

 

 

 

 

 

특정계정의 잔고 확인하기 

checkUserValue함수

에 _to 확인할 계정주소 넣고

원래 보낼 주소로 되어있는지 ACCOUNT확인하고

 

함수 실행하면

_msgSender 주체

_to 확인한 계정

_value 잔고

 

 

 

 

 

728x90
728x90

솔리디티 (이더리움 등 블록체인 플랫폼에서 스마트 계약 작성과 구현에 사용되는 계약 지향 프로그래밍 언어)

쓸 때 여기서 바로 할 수 있긴한데

https://remix.ethereum.org/

 

Remix - Ethereum IDE

 

remix.ethereum.org

 

vscode 비주얼 스튜디오에서 작업하고 싶으니까 작업 환경을 설정해보자

 

먼저 당연히 깔려있어야할

 

비주얼스튜디오 설치

Visual Studio Code

Node.js 설치

Node.js

NPM설치

npm   (Node Packaged Manager를 전역에 설치. npm install -g npm)

 

트러플 설치!!

npm install -g truffle

 

 

트러플은 이더리움 프레임워크로 소스코드를 쉽게 compile,deploy 작업을 할 수있게 해줌

 

설치했으면 버전확인하고

 

이제

비주얼 스튜디오에 Solidity 솔리디티 확장자를 설치할거임!

vscode 열고 Ctrl + Shift + X 누르거나 여기 누르면 솔리디티 검색해서 깔면 됨!

 

(파이썬도 깔아줘야한대서 깔긴했는데 왜까는지 모르겠음..내가 본 문서에서는 얘기 없어서)

 

 

암튼 이제 됐고

truffle init

 

하면 

이렇게 생겨남

이제 내가 작업할 솔리디티 파일을 

constracts에 넣으면 됨 

클립토 좀비에서 레슨1의 완성된 코드 하나 가져와서 만듦

코드 복붙해보면 

 

지금은 안뜨는데 아까는 

이렇게 버전이 안맞다고 떴었음

여기 들어가서 Set compiler version을 0.4.19로 맞춰줘.

 

근데 난 이게 안됐음

알고보니까 솔리디티 확장자가 최신버전이더라고 

거기서 버전을 맞춰줘야됐었음

톱니바퀴 눌러서 환경설정 들어가면

 

여기서 버전 설정해주면 빨간줄 사라짐!!

 

환경설정 끝~~

 

 

 

이제 버전 문제 해결됐으면

 

truffle develop

디벨롭하고

run & deploy 누르고 

Activate하기 

 

 

 

 

그럼 이거 켜짐 

연결안되어있으면 connect

그리고 compile 누르면

 

여기서부터는 잘모르겠음..

deploy 누르고 

call해보고 했는데 뭘하려고 하는지 이해못함

 

 

 

728x90
728x90

스마트컨트랙트

 

 

객체지향언어의 class와 비슷하다

 

멤버 필드하나

생성자 하나

단일 클래스 만들어서 샐행하고 사용해보자

 

 

코드자동 컴파일

 

 

 

 

pragma solidity ^0.4.0;
contract SimpleCoin {
    //멤버 필드
    //public int num
    //map 변수 타입
    mapping (address => uint256) public coinBalance ;
    //mapping(string => addresss) public tenDatabase;
   // 생성자

    constructor() public {
        coinBalance
        [msg.sender] = 10000; //멤버필드 초기화
    }

    //메서드
    //해당주소에 얼마만큼 보내겟다
    function transfer(address _to, uint256 _amount) public {
        coinBalance[msg.sender] -= _amount;
        coinBalance[_to] += _amount;
    }
}

 

 


좀비 클립토에 있던 내용

솔리디티는 지수 연산도 지원하지 (즉, "x의 y승", x^y이지):

uint x = 5 ** 2; // 즉, 5^2 = 25

 

 

 

728x90

+ Recent posts