본문 바로가기

프로그래밍/solidity40

크립토좀비) 챕터4 개념 / payable, transfer [ 함수 제어자 정리 ] 함수 제어자 사용예시 function test() external view onlyOwner anotherModifier { /* ... */ } 1) 함수가 언제 어디서 호출될 수 있는지 제어하는 접근 제어자. private : 컨트랙트 내부의 다른 함수들에서만 호출 될 수 있음. internal(뜻 = 내부) : private와 비슷하지만 자식 컨트랙트에서도 호출 될 수 있다는 점에서 다름. external(뜻 = 외부) : 오직 컨트랙트 외부에서만 호출 될 수 있음. public : 내외부 어디서든 호출 될 수 있다. 2) 블록체인과 상호작용하게 해주는 상태 제어자 view : 어떤 데이터도 저장/변경되지 않음. pure : 어떤 데이터도 블록체인에 저장하지않고, 블록체인으.. 2022. 7. 6.
[220711] 솔리디티코드로 스마트 컨트랙트 작성하기 1. 솔리디티 코드로 스마트 컨트랙트 작성 2. 컴파일해서 ABI, BIN 파일 만들기 3. Geth로 트랜젝션 발동시키기 4. CA를 사용해 필요한 정보 가져오기 5. 스마트 컨트랙트 흐름 한 눈에 보기 1. 솔리디티 코드로 스마트 컨트랙트 작성 1.1 솔리디티 코드가 실행되는 원리 코드 -> 컴파일러 -> 바이트코드 -> tx 일으킴 우선 솔리디티 언어는 스마트 컨트랙트를 일으키기 위해서 만들어진 고급언어다. 그래서 이더리움 네트워크에서 코드를 해석하는 EVM이 이해하려면 저수준의 바이트코드로 번역(컴파일)되어야한다. 일단 컴파일되면 고유한 contract 생성 tx를 사용하여 이더리움 네트워크에 배포된다. 그리고 마이닝을 해야 그제서야 코드가 이동된다. 1.2 솔리디티 코드 기본형 // SPDX-L.. 2022. 7. 4.
크립토좀비) 챕터2 개념과 sol 0.8.15버전으로 개선한 코드 mapping & address 이더의 잔액을 가진 계정들로 이루어딘 이더리움 블록체인. 각 계정은 계좌번호와 같은 주소를 가지고 있음 ( 계정을 가르키는 고유 식별자 ) 주소는 특정 유저나 스마트 컨트랙트가 소유한다. 구조화된 데이트를 저장하는 방법으로 key-value(키-값)으로 짝지어진 저장소라 할 수 있다. // 금융 앱용으로, 유저의 계좌 잔액을 보유하는 uint를 저장한다: // key가 address, value가 uint mapping (address => uint) public accountBalance; // 혹은 userID로 유저 이름을 저장/검색하는 데 매핑을 쓸 수도 있다 // key라 uint, value가 string mapping (uint => string) userId.. 2022. 5. 31.
크립토좀비로 솔리디티 기초 알기 - 챕터1 / sol 0.8.15버전으로 개선한 코드 컨트랙트(contract) 생성 이더리움 어플리케이션의 기본적인 구성요소로 솔리디티는 이걸 위해 만들어짐모든 변수와 함수는 반드시 어느 한 컨트랙트에 속해있음. 컨트랙트 내에서 상태변수를 선언할 수 있고, 이는 컨트랙트 저장소에 영구적으로 저장된다. contract HelloWorld { pragma solidity ^0.8.15; } 상태 변수 타입스크립트처럼 변수의 상태를 작성해줘야한다. 상태변수는 컨트랙트 저장소에 영구적으로 저장됨 = 이더리움 블록체인에 기록됨 uint thisIsNumber = 100; uint dnaModulus = 10 ** thisIsNumber; string thisIsStr = 'hello'; 새 구조체(struct) 생성 복잡한 자료형 객체를 생성한다고 생각하면 된다... 2022. 5. 31.
메타마스크에서 테스트 토큰 가져오기 토큰 가져오기 클릭 정보 작성하기 토큰 계약 주소 : 민팅했을때 생성된 주소(CA) 토큰 기호 : 앞으로 사용할 기호 토큰 십진수 : 1을 사용하면 0.1 단위로 책정된다. 여기서 나는 각각 민팅시 발생한 주소, HAS, 1을 넣었다. 토큰 생성 완료 입력하고나면 다음과 같이 토큰이 생성되어있다. 민팅을 할때마다 0.1씩 증가되어 있을것이다. 2022. 5. 26.
솔리디티, 리믹스 에러 code 4001, code 32603, code 32000 1. code 4001, 메타마스크 거래를 취소할때 발생하는 에러 MetaMask - RPC 오류: MetaMask Tx 서명: 사용자가 트랜잭션 서명을 거부했습니다. {코드: 4001, 메시지: 'MetaMask Tx 서명: 사용자가 트랜잭션 서명을 거부했습니다.'} MetaMask - RPC Error: MetaMask Tx Signature: User denied transaction signature. {code: 4001, message: 'MetaMask Tx Signature: User denied transaction signature.'}​ 2. code -32603 MetaMask - RPC 오류: 내부 JSON-RPC 오류입니다. {코드: -32603, 메시지: '내부 JSON-RPC.. 2022. 5. 26.
[220531] 사이트에 접속하자마자 메타마스크 연동하기 / 갤러리 보이지 않음 이슈해결 해당 url에 접속하면 메타마스크와 연동하게 해주는 로직 구성 redux로 데이터를 넘겨주려고하다가 넘겨주려는 데이터가 메타마스크 지갑주소 하나인걸 생각하면 볼륨이 너무 과해서 고민. 교수님이 redux말고 contextAPI로 연결해보라고해서 사용해보았다. import Web3 from 'web3' import React, { FC, useEffect, useState, createContext, useContext } from "react"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import App from './_app' export const AccountContext = createContext() const Acco.. 2022. 5. 26.
[220527] nft 발행/판매 취소 기능 만들기 nft 발행기능, 판매기능은 어찌저찌 만들었다. 가격 수정 기능이 있으면 좋겠지만, 검색하다보니 힌번 발행한 nft는 가격 수정이 불가능하다고한다. 그렇다면 필요한 기능은 다음 두가지. 1) 판매 취소를 한 후, 적당한 때에 다시 그 가격으로 판매 등록을 한다. -> 판매취소기능 2) nft를 삭제한 후, 새 nft를 발행해서 원하는 가격으로 등록한다. -> 삭제기능 삭제방법 1. selfdestruct zeppelin에서 제공하는 기능 코드가 블록체인에서 지워지는 유일한 방법은 주소의 컨트랙트에가 selfdestruct연산을 사용했을때이며, 블록체인에서 계약을 삭제할 수 있는 기능이 selfdestruct라고 한다. 잠만, 그 계약 자체가 nft 컨트랙트 1개의 계약인거지...? 상호간을 연결하고있는 .. 2022. 5. 19.
[220526] GANACHE 설치 후 메타마스크에서 계정 불러오기 * npm 설치, 메타스크 설치가 끝나있는 상태에서 진행 1. ganache 라이브러리 설치 $ npm install -g ganache-cli $ ganache-cli 설치하면 다음과 같은 결과가 나온다 2. 메타마스크에서 네트워크 추가 라이브러리를 설치하면 나오는 결과 중에서 로컬호스트 주소를 찾아준다. Listening on 127.0.0.1:8545 메타마크스에서 그 주소와 일치하는 네트워크를 추가한다. 3. 메타마스크에서 계정 가져오기 네트워크를 연결한 후, 계정 가져오기를 클릭한다. 라이브러리를 설치했을때 나오는 Private Key 중에서 아무거나 비공개키로 등록하면 100Eth가 들어있는 계정이 생긴다. 연결 끝. 2022. 5. 19.
[220526] 스마트 컨트랙트 배포 에러 이슈 / 해결, RPC, 가스한도 초과 1. 이슈 발생 어제 잘만 실행되던 프로그램에 이슈가 터졌다. 배포를 하려고하면 다음 메세지가 뜬다. 다음 메시지와 함께 가스 추정 오류가 발생했습니다(아래 참조). 트랜잭션 실행이 실패할 가능성이 있습니다. 강제로 보내시겠습니까? 가스에서 계약 생성 코드 저장 뭔소리여.. 어제 저장하고 방금 막 켰구만. 어제까지만해도 잘만 거래해주던 메타마스크가 에러를 띄웠다. Send Transaction을 클릭하면 다음과 같은 에러를 리믹스에 띄워준다. creation of MintAnimalToken pending... creation of MintAnimalToken errored: [ethjs-query] while formatting outputs from RPC '{"value":{"code":-32000.. 2022. 5. 18.