pr + tab
컴파일러 버전 확인
에러! 컴파일러 다른 버전이라고...
parser
이제 컴파일러에 구문에러가 없다!
ctrl+s 컴파일
배포 - deploy
public : 모두에게 보여주기?
터미널 디버그 창
var1의 변수 a와 var2의 변수 a는 서로 다른 것이다! (지역변수/전역변수 개념)
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");
}
}