#14 [스마트계약프로그램 솔리디티] (05.22)

sookyoung.k·2023년 5월 22일
0

솔리디티 (Solidity)

컴파일, 배포(deploy)

pr + tab

컴파일러 버전 확인

에러! 컴파일러 다른 버전이라고...

parser

이제 컴파일러에 구문에러가 없다!

ctrl+s 컴파일
배포 - deploy

public : 모두에게 보여주기?

터미널 디버그 창

var1의 변수 a와 var2의 변수 a는 서로 다른 것이다! (지역변수/전역변수 개념)

리믹스 local 사용하기

Localhost에서 리믹스 사용하기

리믹스에 폴더와 파일을 생성하면 저절로 생겨있다!

crrl+c 누르면 나감

자료형

변수


// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

contract exam1 {
    /*
        변수 : 값을 지속적으로 변경 할 수 있음.
        상수 : 한번 넣은 값은 변경 불가.
        자료형 가시성 지정자 변수명 = 값
        uint public a = 3;
        a=4;
        uint public constant b=3;
        b=4 
        자료형 타입
        값 타입 Vs 참조 타입
        값 타입 : uint, int, bool , address (고정 길이), bytes1...bytes32 (고정 길이)
        참조 타입 : bytes(동적 길이),string (동적 길이), array(배열), mapping (매핑), struct (구조체) 
        
        int : 기호있는 integer 
        int8 : -2^7 ~ 2^7-1
        int16: -2^15~2^15-1
        int32: -2^31~2^31-1
        int64: -2^63~2^63-1
        int128 : -2^127~2^127-1
        int256 (=int): -2^255~2^255-1
        uint:  기호없는 integer 
        uint8 : 0~2^8-1
        uint16: -0~2^16-1
        uint32: -0~2^32-1
        uint64: -0~2^64-1
        uint128 : -0~2^128-1
        uint256 (=uint): 0~2^256-1
        bool : true or false
        산술연산자 : + - * / **
        논리 연산자 : &&, ||
        비교연산자: <,>,!=,==, >= , <=
      
    */
    // 2진수 1개의 값으로 00,01  (0에서 1까지 2개 값 표현)
    // 8진수 3개의 값으로  000, 001, 010, 011, 100, 101, 110, 111 (0~7까지 8개 값 표현)
    // 16진수 4개의 값으로 0~15까지 16개의 값 표현
    
    // uint public a0 = -1;
    uint public a = 1;
    int public b = -1;
    bool public c = true;
    bytes1 public d = hex"11";  // 1바이트만사용=8bit
    // 16진수 11은 0001 0001 = 8bit
    // 0000 => 1 (16진수, 0~15까지 16개의 경우의 수를 표현할 수 있다) (4개의 비트로 16개의 경우를 표현하는 것, 0~9까지는 그대로, 10부터는 abcd...15:f) (f9 ---> 1111 1001)  
    
 
    bytes2 public d2 = hex"abcd";  // 2바이트만사용
    // a: 10 (1010), b:     

    string public e = "abcd";

    //산술 연산자 : +,-,*,/
    uint public f = 1+2;
    uint public g = 3-2;
    uint public h = 4*2;
    uint public i = 4/2;
    uint public j = 4**2;  //4거듭제곱

    //논리 연산자 : &&, ||
    bool public k = true && true; // true
    bool public m = true && false; // false
    bool public n = false && false; //false
    
    bool public l = true || true; // true
    bool public o = true || false; // true
    bool public p = false || false; // false

    // 비교연산자
    bool public q = 3>5; //false
    bool public r = 3<=4; // true
    bool public s = 3==3; // true
    bool public t = 3!=3; // false


    uint public constant z=3; // 상수 


    // 쉬프트연산자
    bytes1 public test1=hex"11";   //00010001 
    bytes1 public test2=test1>>1;  //00001000 출력은 8이됨

}

함수

리턴

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

contract function1 {
    string public a = "hello";
    // string constant a = "hello";

    function test() public {
        a ="new hello";
    }
}

contract function2 {
    uint public a = 3;
    function test(uint _a) public {
        a += _a;
    }
}

contract function3 {
    uint public a=3;
    uint public b=3;

    function test() public returns (uint,uint) {
        a =20;
        b+=5;
        return(a,b);
    }
}

contract function4 {
    uint public a=3;
    uint public b=3;

    function test(uint _b) public returns (uint, uint) {
        a=20;
        b+=_b;
        return (a,b);
    }
}

contract function5 {
    uint public a=3;
    uint public b=myFun();

    function myFun() public returns (uint) {
        a=100;
        return a;
    }
}

contract modi_pure {
    uint public a=1;
    function myFun(uint _a) public pure returns (uint, uint) {
        uint b = 40;
        return (b, _a);
    }
}

contract modi_view {
    uint a = 4;
    function myFun() public view returns (uint) {
        uint b = a+3;
        return b;
    } 
}

가시성


변수마다 위치값이 있다


안 보이는 값은 디버그 창에서 솔리디티 스테이트에서 확인

// SPDX-License-Identifier: MIT
pragma solidity ^0.8;

contract exam2 {
    uint public var1=1;
    uint var2=2;
    uint internal var3=3;

    function fun_pu() internal view returns (uint, uint, uint) {
        // 데이터값을 다 받아와서 출력해준다.
        // private하면 사용자에게 보여주지 않음 
        // internal - 안보이는데 상속받을 때만 보임 
        // external - this. 로 내부 데이터에 접근 가능
        return (var1, var2, var3);
    }
}

매핑과 배열

매핑

// SPDX-License-Identifier: GPL-3.0
// https://www.tutorialspoint.com/solidity/solidity_mappings.htm

pragma solidity >=0.7.0 <0.9.0;
contract exam5 {
    mapping(address => uint) public a; 
    function addMapping(address _key, uint _value) public {
         a[_key] = _value;   
    }
    function getMapping(address _key) public view returns(uint)  {
         return a[_key];   
    }
    function deleteMapping(address _key) public {
        delete(a[_key]);
        a[_key]=0;   
    }
    function ChangeMapping(address _key, uint _value) public {
         a[_key] = _value; 
    }
}

배열

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
contract exam6 {
  
uint256[] public b; 
    function addArray(uint _value) public {
        b.push(_value); // 0 : 5, 1 : 10
    }
    function getArray(uint _index) public view returns(uint)  {
        return b[_index];
    }

    function ChangeArray(uint _index, uint _value)public{
        b[_index] = _value;
    }

// // if문으로 돌려야 함 하지만 우린 아직 안 배움 
//     function settingArray()public{
//         // 맨 처음, 마지막 인덱스 값 고정 
//         b[0] = 144;
//         b[b.length-1] = 100; 
//     }

    function deleteArray() public {
        b.pop();
    }
    function DeleteArray2(uint _index)public{
        delete b[_index];
    }
    function getLength() public view returns(uint) {
        return b.length;
    }

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

contract sequanial_search {
    
    string[] public fruitArray = ["apple","banana","coconut","durian","etrog"];
    
    function linearSearch(string memory _word) public view returns(uint256,string memory){ 

        for(uint index = 0; index<fruitArray.length; ++index) {
            if(keccak256(bytes(fruitArray[index])) == keccak256(bytes(_word))){
                return (index, fruitArray[index]);
            }
        }
        return (0, "Nothing");
    }
    
}

구조체

profile
영차영차 😎

0개의 댓글