solidity 8

22.09.05 npx hardhat test

solidity 로 ERC20 컨트랙트를 다 짰으면 hardhat 을 사용하여 deploy 하기 전에 먼저 트랜잭션에 대한 테스트 상황을 가정하고 정상적으로 작동하는지 확인해야 한다. 뭐 My Ether Wallet 이나 메타마스크로 수동 테스트 진행해도 상관 없으나 내 소중한 테스트이더를 낭비하고 싶지 않을 뿐더라 명령어 하나로 다양한 상황을 빠르게 테스트하기 위해서는 필수 관문이다. 아래 명령어를 입력하면 되는데 물론 이게 끝은 아니고..! npx hardhat test 일단 테스트 코드 작성법은 hardhat testing contract 를 참고하였다. 1. expect hardhat test 코드에서는 처음 보는 모듈인 'chai' 의 expect 를 쓴다. 아래 코드는 deploy 한 후 토큰..

solidity 2022.09.05

22.08.29 락업이란?

락업 기능이 추가된 ERC20 컨트랙트를 개발 예정이다. 내가 어렴풋이 알고 있었던 락업 개념과 락업 과정의 자세한 프로세스를 정리해보았다. 락업(Lockup)이란? 토큰을 발행한 뒤 시장에 유통되지 않도록 토큰의 owner account에 대해 토큰에 대한 transfer를 막는 것이다. 컨트랙트를 어떻게 짜느냐에 따라 sendTransaction 을 날리지 못하게 막거나 트랜잭션을 날려도 취소되게끔 할 수 있다. 락업 기능의 특징! 어떻게 설계하냐에 따라 다를 것 같긴 한데 일단 핵심 특징은 세 가지이다. 1. 어떤 토큰을 락업 걸 것인지 IERC20 2. 누구에게 락업을 걸 것인지 account (주소는 보통 함수 호출 파라미터로 들어가기 때문에 생략 가능) 3. 얼마만큼의 시간동안 락업을 걸 것인..

solidity 2022.08.29

21.07.28 diamond problem

내 컨트랙트를 만들 때 ElmoToken에 openzeppelin 의 기존 소스 코드를 다음과 같이 상속해주었다. 다음과 같이 작성한 이유는 함수를 작성한 순서대로 그에 따라 필요한 소스코드를 추가하였기 때문이다. contract ElmoToken is ERC20, AccessControl,Ownable, IERC20 { 하지만 아래와 같은 밑줄의 오류가 발생하였다. "Linearization of inheritance graph impossible" https://ethereum.stackexchange.com/questions/63564/question-regarding-linearization-of-inheritance question regarding linearization of inherita..

solidity 2021.07.28

21.07.27 ERC-20 Token Contract

토큰의 종류 1. 스테이블 코인 달러나 유로 같은 명목 화폐의 가치에 대응하는 디지털 자산 가격 변동성이 안정적으로 유지되는 상황에서 자금 전송 가능 스테이블 코인은 담보 유형에 따라 다음과 같은 세가지 유형으로 나뉜다. ✔ 명목화폐 담보 스테이블 코인 달러나 원화 같은 화폐와 1:1의 비율로 발행하는 토큰 사용자는 발행자가 금액을 보유하고 있는지 확신할 수 없기 때문에 발행자에 대한 신뢰가 보장되어야 한다. ex) USD 테더(USDT), 트루 USD(TUSD), 팍소스 스탠다드 (PAX), USD코인(USDC), 바이낸스 USD(BUSD) ✔ 암호화폐 기반 스테이블 코인 암호화폐와 1:1의 비율로 발행하는 토큰 자신의 암호화폐를 컨트랙트에 예치함으로써 스테이블 코인 보유 가능 ex) 비트쉐어 USD,..

solidity 2021.07.28

21.07.22 Mint & Burn Token

✔Mint : ERC-20 이더리움 토큰 발행하기 (ganache, metamask, MyEtherWallet 이용) 1. ubuntu에서 토큰 발행하기 작업을 할 폴더를 하나 만든다. mkdir mint cd mint 2. truffle, npm 새 프로젝트를 생성한다. -y 옵션을 추가하면 프로젝트 환경을 모두 default로 설정하여 생성된다. truffle init ls -al npm init -y ls -al 3. 토큰 컨트랙트를 개발할 수 있는 npm 모듈인 openzeppelin을 설치한다. npm install @openzeppelin/contracts 4. mint 폴더에서 code . 명령어를 입력하여 VS code를 실행한다. 프로젝트를 생성하면 볼 수 있는 기본 폴더 구조이다. 5...

solidity 2021.07.24

21.07.15 import, inheritance, storage, memory

CryptoZombies chap.2-05~08 ✔import "./zombiefactory.sol"; 동일한 폴더에 있는 zombiefactory.sol이라는 파일을 컴파일러가 불러오게 한다. solidity의 파일 확장자는 sol이다. ✔Inheritance 상속 : contract 자식 컨트랙트 is 부모 컨트랙트 contract ZombieFeeding is ZombieFactory { >>ZombieFeeding이 자식 컨트랙트이고 ZombieFactory가 부모 컨트랙트! ZombieFeeding은 ZombieFactory의 함수, 이벤트, 제어자에 접근할 수 있다. A라는 변수가 있고 B라는 배열이 있을 때, ✔Storage : string [ ] storage A = B[2]; A는 B에 ..

solidity 2021.07.16

21.07.15 mapping, msg.sender, require

CryptoZombies chap.2-01~04 ✔mapping ( key => value ) data명; (뭘로 찾을 건지 => 뭘 찾을 건지) //얘 지갑 주소가 이건데 얘의 계좌에 얼마 있는지 찾아줄래 mapping(address => uint) public accountBalance; //userId가 이건데 얘의 이름이가 어떻게 되니 mapping(uint => string) userIdToName; //좀비 ID가 이건데 얘 주소가 어떻게 되니 mapping (uint => address) public zombieToOwner; //좀비 주소가 이건데 현재 좀비 몇 마리니 mapping (address => uint) ownerZombieCount; ✔msg.sender : 함수를 호출한 주소..

solidity 2021.07.16