본문 바로가기

전체 글

(163)
[ 솔리디티 이더리움, 크립토좀비 ] 컨트렉스 상호작용, 인터페이스 다른 컨트렉트와 상호작용하기 인터페이스와 컨트렉트 == 차이점은? 인터페이스는 다른 컨트렉트와 상호작용하고자 하는 함수만을 정의하고 다른 함수나 상태변수를 선언하지 않는다. 또한 함수의 몸체 즉 코드블럭을 정의하지 않고 세미콜론으로 함수의 선언을 마친다. 예를들어 학생의 주소를 인자값으로 넣었을때 이름과 번호만을 리턴하는 함수를 담고있는 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 인덱..
[ 솔리디티 이더리움 , 크립토좀비 ] requirea문 require문은 참이 아닐경우 에러메세지를 띄운다. if문과 비슷하지만 If문은 조건에 걸렸을때 코드 블럭안에 있는 코드가 실행된다면 require문은 한줄로 조건이 끝나고 조건이 참이 아닐경우 코드가 종료된다. 솔리디티는 스트링 비교 기능이 없다. 그래서 keccak256로 암호화한 글자를 비교해야한다. 예를 들어 학생의 이름이 mapping으로 생성된 studentList안에 heini로 저장되어 있을때 이름이 heini인지 비교하려고 한다. mapping(uint => string) studentList; // studentList생성 mapping[1] = "heini"; // studentList에 key값은 1로, value값은 heini로 넣어줌 require(mapping[1] == "h..
[ 솔리디티 이더리움 , 크립토좀비 ] mapping mapping은 키,value(값:데이터 타입)저장소로. 데이터를 저장하거나 검색하는데 이용한다. 매핑 선언 구문 : mapping(key=>value)매핑선언이름 예) mapping( string => uint ) test; 일단 저장먼저. 매핑은 솔리디티에서 데이터를 저장하는 또 다른 방법이다. 파이선의 해싱에서 해시함수와 비슷한 개념으로, 키 값과 발유 값을 저장하는 함수로써 그 값들의 데이터 타입을 먼저 선언해 둔 것이다. 예를들어 학생 출석부를 만들고 싶을때 출석부를 만들 테이블을 먼저 만들어 놓는 느낌이다. 쿼리문이랑도 비슷한 것 같다. CREATE문이랑 SELECT WHERE문을 같이 사용할 수 있는 함수느낌? 아래 테이블을 생성한다고 할때 : studentNum(INT) studentNa..
[ 솔리디티 이더리움 , 크립토좀비 ] 변수,배열,함수 선언 ================================================================= 솔리디티 변수 javascript의 변수 선언은 변수가 변하는지, 변하지 않을건지의 설정 정도만 가능하다(let, const); 솔리디티 언어는 앞으로 들어갈 변수의 data type부터 선언한뒤 변수를 선언한다. 작성 방식 : 데이터 타입 [변수명] = [값]; 예) uint numbers = 1; >> int 타입의 numbers라는 변수 그 안에 담긴 값은 1 string name = "heini"; >>string 타입의 name이라는 변수 그 안에 담긴 값은 heini data type의 종류 : string, uint, int,...etc * 여기서 uint는 int랑 같은 뜻..
스마트컨트렉트 왜 이더리움? 라이트코인 빌드 중에 특정 변수나 내용을 저장하는 코딩을 하는 경우 스마트 컨트렉트 코드를 직접 작성하고 볼 수 있음 : 솔리디티 언어로 가능함. 코인, 토큰의 차이점 메인넷이 있느냐 없느냐. 있으면 코인! 이더리움 = 토큰 메인넷을 구축하지 않을 거임 -> 이더리움것을 빌려써야함 이더리움 메인넷에서 토큰을 발행해서 단위가 쪼개진 토큰을 제작. 여기서 거래를 하려면 이더리움이 있어야 하는데 현재 가진 이더리움이 없다. 그래서 연습이나 공부할때는 진짜 이더리움이 아닌 가짜 이더리움을 발행해주는 테스트넷에서 이더리움을 받아서 구축을 할 것 이다. 하지만 테스트넷이더라도 거래속도가 느려서 테스트가 어려울 수 있다 = 개발이 어려울 수 있다. 그래서 메인넷이나 테스트넷을 빌려쓰지 않고 가볍게 데몬..
[거래소 만들기] 에러 해결, 미해결 The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. JSON stringfy 를 사용해서 집어넣어도 에러가 떴다. 에러난 코드 : Buffer.from(JSON.stringfy(userid)); 해결 방법 : 그래서 JSON.stringfy를 한 userid 변수를 따로뺐다. 그럼에도 같은 오류가 나서 template literral 을 사용해서 넣어줬더니 정상적으로 작동했다. 수정 코드 : let newUserid = JSON.stringfy(userid); Buffer.from(`${newUserid}`); react.js?28cc:76 Uncaug..
nodemon, morgan express nunjucks request body-parser sequelize sequelize-cli mysql2 위에 다 install npx sequelize-cli models 애서 fs 삭제, config 비밀번호 데이터베이스 이름 변경 ================ server.js 파일, views 파일에 index.html생성 morgan - req.body req.query nodemon npm install -g nodemon npm install morgan app.use(morgan('dev')); 를 사용해서 morgan을 세팅해주고 이 후로는 node 실행할때 nodemon server 명령어로 실행함 nodemon server 실행했을때 스크립트를 실행할 수 없다는 에러가..