일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 컨트렉트 배포 자동화
- ethers typescript
- Vue.js
- 티스토리챌린지
- 러스트기초
- vue기초
- 체인의정석
- ethers type
- 스마트컨트렉트테스트
- 스마트 컨트렉트 함수이름 중복
- 러스트 기초 학습
- erc4337
- ethers
- erc4337 contract
- multicall
- 계정추상화
- git rebase
- 스마트컨트렉트 예약어 함수이름 중복
- ethers v6
- 스마트컨트렉트 함수이름 중복 호출
- chainlink 설명
- 머신러닝기초
- rust 기초
- 오블완
- 러스트 기초
- 컨트렉트 동일한 함수이름 호출
- Vue
- ambiguous function description
- SBT표준
- ethers websocket
- Today
- Total
목록분류 전체보기 (496)
체인의정석
만약 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 ..
EVM 체인을 포크해서 사용하는 경우에 에러 메세지가 안뜨는 경우가 종종 발생합니다. 이때 estimateGas를 쓰게 되면 에러 메세지를 확인할 수 있습니다. (물론 과거 상황의 에러의 경우 estimateGas를 그때 시점에서 하는 것이 아니기에 안되는 케이스도 존재합니다.) 따라서 현재 트랜잭션에서 에러가 발생했는데 tenderly나 이더스캔에서 작동을 하지 않는 경우에 에러 메세지 확인하는 법에 대해서 정리해보았습니다. 1. 원하는 네트워크 환경으로 콘솔 들어가기 먼저 에러 코드를 확인할 testNetwork 에 맞춰서 하드햇 콘솔을 띄웁니다. 그럼 콘솔창에 들어가집니다. npx hardhat console --network testNetwork 2. 콘솔에서 트랜잭션 가져오고 gasPrice 제..