전체 글 29

tx.wait()으로 트랜젝션 마이닝 기다려주기

예를들어 아래와 같이 토큰을 스왑하는 상황을 가정해보자 const result = await tokenContract.approve( routerAddress, utils.parseEther("100"), { maxPriorityFeePerGas: gasPrice, maxFeePerGas: gasPrice, } ); // 스왑 const deadline = Math.floor(Date.now() / 1000) + 60 * 20; const swapValue = await routerContract.swapExactTokensForETH( utils.parseEther("1"), 0, ["0x123...","0x123...","0x123..."], to, deadline, { maxPriorityFeePe..

BlockChain 2023.08.22

현업에서의 형상관리

원래라면 git add . -> git commit -m "" -> git push origin main 시퀀스로만 했으면 끝났을 터였다 많은 인원들과 작업하는 현업에서는 개인 프로젝트 & 소규모 프로젝트에서와의 형상관리와는 꽤 다른점이 많았다 1. dev & prod branch 이 부분은 익히 들었긴 했었다, dev브랜치에서 먼저 병합하고 테스트 한 다음에 prod브랜치에 올려 배포한다 2. rebase 로컬에서 작업 중에 변경사항이 생겼다면 현재 진행상황에 대한 커밋을 남기고 pull을 받아 merge후 push를 했었다 물론 소규모 프로젝트에서는 상관이 없겠지만 인원이 많아지면 커밋 그래프(기록)이 지저분해지는 문제가 생긴다 하지만 rebase를 하게 되면 위처럼 꼬인 커멋 기록들이 선형적으로 깔..

Git 2023.08.18

여러개의 modifier 적용 시 순서

솔리디티의 modifier는 한 함수에 여러개 적용이 가능한데 그 순서를 알아보자 아래의 예시를 살펴보겠습니다 contract Test { address owner; modifier onlyOwner { require(msg.sender == owner); _; } modifier costs(uint price) { if (msg.value >= price) { _; } } constructor() public { owner = msg.sender; } function changeOwner(address newOwner) public onlyOwner costs(10) { owner = newOwner; } } 여기서 먼저 앞에 나온 onlyOwner부터 적용이 됩니다 고로 [ onlyOwner의 _; ..

Solidity 2023.06.15

ec2에서 환경변수 설정 중 오류

dotenv.config({ path: process.env.NODE_ENV === 'development' ? '.env.dev' : '.env.prod', }); 위와 같이 main.ts에서 dotenv를 임포트 해오는 코드에서 문제가 있었다 분명 로컬에서는 실행이 문제 없이 잘 됐는데, ec2환경에서만 파일을 잘못읽어오는 것이다 아래와 같이 변경하자 문제가 해결됐따 dotenv.config({ path: process.env.NODE_ENV === 'development' ? './.env.dev' : './.env.prod', });// 👆 👆 위와 같이 window와 달리 linux에서는 상대경로 설정을 구체적으로 해주어야한다

aws 2023.06.07

언디파인 해커 하우스 수상 후기

제가 수강하는 한국에이아이 블록체인 융합원 인턴연계과정에 강사로 와주신 디파이농부 조동현 선생님의 해커톤! 조동현 선생님의 강의를 너무 유익하게 들었어서 참가 안 할 수가 없었습죠.. 덕분에 이런 좋은 기회를 알게되어서 네트워킹도 하고 수상도 하고 백만원도 타고 일본해커톤 초청까지!! (밤샘 코딩도 하고..) 저한텐 web3 아버지 같습니ㄷr... 저희는 주제2번인 web3 소셜로 참여해서 렌즈프로토콜 기반 서베이 플랫폼인 Blank를 만들었습니다! 이번 해커톤으로 LSD와 렌즈프로토콜과 같은 웹3 트렌드에 대해 관심을 갖게 된 계기가 되었습니다 (렌즈 50달러로 봤을때 살 껄..) 저번에 이어 이번에도 넘쳐나는 인복 덕이었습니다 우리팀 너무 고맙습니다

해커톤 2023.05.28

글리치 해커톤 수상 후기 (니어트랙 1등!)

다같이 재미로 참가해보자고 했다가 니어트랙 1등 수상! 상금 500만원! 전부 수고해준 우리 팀원들 덕이었습니다 다음으로 니어코리아 팀의 전폭적인 지원을 해줬던 니어팀도 고마웠습니다 굿즈도 다른 트랙보다 많이 주시고 6시에 퇴근하기로 해놓고 11시까지 상주하며 질문 받아주겠다 했을 때 감덩 처음 글리치 신청할 때도 니어가 블록체인 학회들 지원한다는 기사 보고 니어가 개발자에 대한 지원이 쎄구나 느껴서 니어 트랙을 골랐긴 하지만요 니어트랙에서 개발하면서 EVM기반이 아닌 체인에 대해 처음으로 공부해봤는데 꽤나 흥미로웠습니다. 가스비가 소모되는게 아니라 '잠금'이 되는 점, 서명창을 보는 횟수를 줄여주는 function call key, 자체 DNS 서비스까지.. 컨트랙트를 담당하진 않았지만 개발적인 요소에..

해커톤 2023.05.27

서버가 받은 유저의 jwt토큰 검증 원리

jwt토큰은 header, payload, verify signature 3부분으로 나뉜다 header와 payload는 인코딩 되어있고, verify signature는 header, payload와 secret key를 같이 해싱(단방향 암호화)한 값이다 그러므로 jwt토큰을 받은 서버는 먼저 header와 payload를 복호화한다. 그렇게 복호화 된 header와 payload를 secret key와 함께 해싱하여 verify signature와 같은지 비교하고, 같다면 유효한 토큰으로 간주하여 payload의 내용에 따라 유저를 처리한다 ( for 위조 방지, verify signature === hash(header + payload + secret key) )

etc 2023.05.09

노마드코더 타입스크립트 TIL

? : 객체 요소 타입 지정할 때 선택옵션 부여 ( [type] | undefined ) readonly 키워드로 읽기전용 프로퍼티를 만들 수 있음 튜플 : 배열이며 최소한의 길이를 가져야하고 특정 위치에 특정 타입이 있어야함 자바스크립트에 있는 undefined, null 도 있음 any : 자바스크립트로 돌아가는 것 unknown : 값을 받을 때 그 값이 무슨 타입인지 모를 때 씀 ex) if ( typeof [변수] === “[자료형]” ){ (이 안에서 [자료형] 타입으로써 변수 사용가능) } void : 아무것도 리턴하지않는 함수의 자료형 (솔리디티 view랑 비슷?) never : 절대 return되지 않는, 실행되지 않는 자료형 (타입스크립트가 never로 변수를 추론하면 없는 것과 마찬가..

Typescript 2023.04.27

cors 'Access-Control-Allow-Credentials' 헤더 설정 시 주의할 점

서버측에서 cors를 설정하는 법에 대해 웹서핑을 해보면 cors미들웨어에 인자로 주는 객체를 선언하는 부분에서 블로그마다 다들 표현이 조금씩 달랐다 app.use(cors({ origin: 'http://localhost:1234', credentials: 'true', })); app.use(cors({ origin: 'http://localhost:1234', credential: true, })); app.use(cors({ origin: 'http://localhost:1234', credential: 'true', })); 위와 같이 작성할 시 Access-Control-Allow-Credentials 헤더가 빈 문자열이라는 오류가 계속 난다 app.use(cors({ origin: 'http..

Node.js 2023.03.25