| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
- Vue
 - redux 기초
 - redux toolkit 설명
 - 스마트 컨트렉트 함수이름 중복
 - git rebase
 - Vue.js
 - 계정추상화
 - 스마트컨트렉트 예약어 함수이름 중복
 - ethers websocket
 - ambiguous function description
 - 오블완
 - cloud hsm
 - 컨트렉트 동일한 함수이름 호출
 - vue기초
 - cloud hsm 서명
 - 러스트 기초
 - erc4337 contract
 - ethers type
 - 러스트 기초 학습
 - 스마트컨트렉트 함수이름 중복 호출
 - 머신러닝기초
 - 체인의정석
 - cloud hsm 사용하기
 - 티스토리챌린지
 - rust 기초
 - ethers typescript
 - SBT표준
 - 러스트기초
 - erc4337
 - ethers v6
 
- Today
 
- Total
 
목록분류 전체보기 (529)
체인의정석
이번에는 블록체인 데이터가 누락없이 저장되고 dev의 환경을 로컬에 다시 구현했을때 제대로 구현이 되고 누락된 사항이 없는지 체크하는 프로그램을 설계하고 구현하였다. 일단 각 데이터를 테이블별로 가져와서 json파일로 경로 생성 후 만들고 두 배열을 비교하는 모듈을 작성해서 두 배열을 비교했다. 이 경우 fs모듈을 통해 자유자재로 파일을 만들고 경로를 만드는 코딩이 필요했다. 이때 사용한 문법들을 아래에 정리해 보았다. fs 모듈 가져오기 var fs = require('fs'); makeFolder기능 const makeFolder = (dir) => { if(!fs.existsSync(dir)){ console.log("make folder in : ", dir) fs.mkdirSync(dir); }..
만약 class를 이용하여 객체 지향 코딩을 할 경우 클래스를 모듈 형태로 보낼 수 있다. 이때 클래스 자체를 모듈로 보내도 되지만 클래스 객체를 생성시키면서 모듈로 보낼 수 있다. Class A {} module.exports = new A(); 이런식으로 new를 써서 클래스 를 객체로 만들어서 보내주게 되면 해당 모듈을 가져와서 사용하는 코드에서는 const classA = require("../classes/클래스가있는파일"); classA.내장함수(); 이런식으로 사용할 수 있다. 이번에는 테스트 모듈을 만들 때 위와 같은 방법으로 각 클래스 형태로 만든 후 실행 파일에서는 클래스를 위와 같이 가져와서 사용하는데 썼지만 그 외에도 백엔드 구조를 여러 Class로 만들고 다룰 때도 유용하다.
Object key값에 변수를 넣고 싶다면 다음과 같이 가능하다. const Obj = { [변수] : value } 따라서 받은 입력 값을 기준으로 변수를 만들고 싶다면 다음과 같이 활용 가능하다. const keyA = `keyType{변수1}`; const keyB = `keyType{변수2}`; const Obj = { [keyA] : value1, [keyB] : value2 } 또한 해당 객체를 배열로 넣을 때도 똑같이 사용가능하다. 배열.push({[`${keyA}`]: value1, [`${keyB}`]: value2}); 이런식으로 하면 다양한 환경에서 해당 함수가 사용가능하도록 만들 수 있다.
만약 특정 데이터가 배열의 형태가 아닌 Object가 여러개로 들어가 있을 때 각 요소를 순회하는 Iterator를 만드려면 어떻게 해야 할까? https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/entries Object.entries() - JavaScript | MDN Object.entries() 메서드는 for...in와 같은 순서로 주어진 객체 자체의 enumerable 속성 [key, value] 쌍의 배열을 반환합니다. (for-in 루프가 다른점은 프로토 타입 체인의 속성도 열거한다는 점입니다). developer.mozilla.org const object1 = { a: 'somestri..
erc20토큰을 전송 하면 nft가 민팅 되는 구조를 만들고 있었는데 문제가 발생하였다. 평소에는 async function pushETHwithdraw(erc20Token, myAddress, provider, abi) { clientsETH = [] console.log("pushETHwithdraw") const resObj = {} const topic = [erc20Token.filters.WithdrawETH().topics].toString(); const filter = { address: ERC20, fromBlock: 28546565, topics: [topic] }; const getlogs = await provider.getLogs(filter); let iface = new et..
업그레이더블 컨트렉트를 사용할 시 기존의 컨트렉트에서 추가할 점에 대해서 정리해보겠다. 1. 오픈제플린의 Initializer 또는 Owner 사용시 Ownable Upgradable을 사용한다. 이때 컨트렉트가 들어간 폴더 명은 contracts로 해줘야 오픈제플린 모듈에서 인식이 된다. 안그러면 인식을 못하니 컨트렉트가 들어있는 폴더명을 함부로 바꾸지 말자 import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; contract Example is OwnableUpgradeable { 2. constructor에는 _disableInitializer를 명시해준다. initialize가 다시 되는것을 방지해 주는 것이다. /..
solidity에서 만약 자료형을 넣어서 에러메세지를 주고 싶다면 에러를 정의한 후 revert를 해주면 된다. // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.10; error InvalidNumber(uint32 required, uint32 passed); contract CustomErrors{ uint32 private constant magicNumber = 42; function checkMagicNumber(uint32 _number) public pure { if (_number != magicNumber) revert InvalidNumber({ required: magicNumber, passed: _number }); // ..
이번에 컨트렉트를 작성하면서 변수명에서 그냥 address가 아닌 CToken cTokenAddress 이런방식의 파라미터가 함수에 쓰이는 경우를 보았다. 이런경우 인터페이스를 작성할 때 Storage 부분을 컨트렉트 형태로 먼저 작성한 후에 contract CTokenStorage { /** * @dev Guard variable for re-entrancy checks */ bool internal _notEntered; /** * @notice EIP-20 token name for this token */ string public name; /** * @notice EIP-20 token symbol for this token */ string public symbol; /** * @notice ..