본문 바로가기

Solidity

(11)
ERC20 Openzeppelin ERC20은 Ethereum Request for Comments 20의 약자로써 네트워크 상에서 토큰들끼리 서로 상호 작용하기 위하여 모든 토큰이 따라야하는 표준 규칙 집합이다. ERC20 토큰을 배포할때 여러가지 툴을 사용할 수 있다. truffle Klaytn IDE Remix etc... ERC20을 배포할 때 대부분의 코드가 openzeppelin을 참조한다. 오늘은 openzeppelin에 쓰여져 있는 각 코드의 구조와 함수를 살펴보고자 한다. openzeppelin에서 제공하는 공식 ERC20 코드는 Core, Extensions, Utilities로 크게 3가지로 나뉜다. Core IERC20 : ERC20의 기본적인 인터페이스 ERC20 : ERC20에서 가장 기본적인 기능이 구현된 클래..
[solidity] assert, revert, require란? 세가지는 모두 솔리디티의 에러 핸들러이다. 간단하게 말하자면 일정 조건에 부합하지 않으면 에러를 발생시키는 것 이다. revert 조건없이 에러를 발생시키고 gas를 환불 시켜준다. // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 =0.7.0 =0.7.0
[solidity] Event란? (indexed) solidity에서는 event를 통하여 값을 출력한다. 출력한 값은 블록안에 저장되고 저장된 값을 사용할 수 있다. // SPDX-license-Identifier:MIT pragma solidity >=0.8.0 =0.8.0 < 0.9.0; contract eventTest { event info(string name, uint256 age); function set..
[solidity] abi.encodePacked abi.encodePacked()함수는 함수안에 들어간 string타입을 byte타입으로 변경해주는 함수이다. string타입 데이터를 비교할 수 없는 솔리디티 특성상 string타입 데이터들을 비교해야할때 keccak256을 이용하여 암호화 후 비교한다. 그때 사용하는 keccak256함수는 byte타입 데이터만 암호화할 수 있기때문에 abi.encodePacked를 이용하여 byte타입으로 변경후 keccak256을 사용하여 암호화한다. keccak256(abi.encodePacked("teststring"));
[solidity] This란? this : 호출이 이루어진 계약의 인스턴스. (동일한 계약의 여러 인스턴스를 가질 수 있음) address(this) : 호출이 이루어지는 계약 인스턴스의 주소 msg.sender : 계약을 호출한 계정의 주소
[크립토 좀비] 솔리디티 openzeppelin 이더리움에 컨트랙트를 배포하고 나면 컨트랙트는 변하지 않는다. = 컨트랙트를 수정하거나 업데이트할 수 없다. 컨트랙트로 배포한 최초의 코드는 항상 블록체인에 영구적으로 존재한다. 이것이 바로 솔리디티에 있어서 보안이 굉장히 큰 이슈인 이유이다. 만약 컨트랙트 코드에 결점이 있다면, 그것을 이후에 고칠 수 있는 방법이 전혀 없다. 그러나 이것 또한 스마트 컨트랙트의 한 특징이다. 어떤 스마트 컨트랙트의 코드를 읽고 검증을 했다면 함수를 호출할 때마다 코드에 쓰여진 그대로 함수가 실행될 것이라고 확신할 수 있기 때문이다. 누구도 배포 이후에 함수를 수정하거나 예상치 못한 결과를 발생시키지 못한다. OpenZeppelin의 Ownable 컨트랙트 OpenZeppelin은 솔리디티 라이브러리에서 가져온 Owna..
[ 솔리디티 이더리움, 크립토좀비 ] 컨트렉스 상호작용, 인터페이스 다른 컨트렉트와 상호작용하기 인터페이스와 컨트렉트 == 차이점은? 인터페이스는 다른 컨트렉트와 상호작용하고자 하는 함수만을 정의하고 다른 함수나 상태변수를 선언하지 않는다. 또한 함수의 몸체 즉 코드블럭을 정의하지 않고 세미콜론으로 함수의 선언을 마친다. 예를들어 학생의 주소를 인자값으로 넣었을때 이름과 번호만을 리턴하는 함수를 담고있는 studentInterface를 생성한다는 가정하에 코드를 만들어보자. contract studentInterface { function getStudent(address _studentAddress) external view returns{ string studentName, uint studentNum, }; } 그럼 이제 다른 컨트렉트에서 studentContrac..
솔리디티 크립토좀비 푸는 중 컨트렉트 간 상속 컨트렉트 간의 함수에 접근할 수 있도록 컨트렉트를 상속받는 것 contract newContract is Contract {} 뭔가 module.export랑 같은 맥락이라고 생각하면 될 듯하다! 솔리디티 파일이 나뉘었을 경우 다른 파일을 불러오는 방법은 react와 동일하게 import를 사용한다. storage 상태변수 : 전역변수 : const 이것은 블록체인에 등록되서 사라지지 않는다. memory 지역변수 : let 함수안에서만 발동되어 함수 호출이 종료되면 사라진다. 먹이를 먹는 좀비 DNA를 얻을 필요가 있으므로, 그 다음으로 myZombie라는 Zombie형 변수를 선언한다 (이는 storage 포인터가 될 것이다). 이 변수에 zombies 배열의 _zombieId 인덱..