일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 러스트 기초 학습
- 스마트컨트렉트 함수이름 중복 호출
- SBT표준
- erc4337
- ethers
- 컨트렉트 동일한 함수이름 호출
- ethers v6
- chainlink 설명
- 러스트 기초
- 스마트컨트렉트테스트
- rust 기초
- multicall
- 스마트 컨트렉트 함수이름 중복
- 머신러닝기초
- ethers typescript
- 스마트컨트렉트 예약어 함수이름 중복
- 컨트렉트 배포 자동화
- 러스트기초
- ethers type
- git rebase
- Vue.js
- 오블완
- erc4337 contract
- ambiguous function description
- 체인의정석
- ethers websocket
- 계정추상화
- 티스토리챌린지
- Vue
- vue기초
- Today
- Total
목록분류 전체보기 (496)
체인의정석
1. 사용하려는 버전에 맞게 오픈제플린의 npm 모듈 다운로드 하고 Solidity 코드 작성해주기 먼저, ERC20의 경우 기본 자료형인 name, symbol, decimal을 배포 시에 지정해 주어야 한다. 토큰 자체를 만드는 거라면 최신버전으로 만들면 되지만 요즘엔 ERC20 정도는 테스트 용으로 하나씩 만들어 주는 경우가 많기 때문에 상황에 맞는 버전을 선택하는 것이 중요하다. Solidity의 버전에 따라서 다르지만 (예를 들어 0.5.0 버전에서는 ERC20Detailed) 잘 찾아서 가져오면 된다. 이때 burn과 mint의 경우는 상속받은 후 public 함수로 선언하여 internal로 정의된 함수를 가져와서 선언해 주어야 한다. 마찬가지로 extension에 있는걸 상속받아서 사용해도..
0.5.0 버전의 코드로 작업중이 였는데 payable을 다루는 과정에서 컴파일 에러가 발생하였다. 에러의 원인은 바로 solidity 버전이 0.5.0 버전 이상이 되면서 주소값을 payable로 지정해 주어야 하는데 payable을 사용하면 다음과 같은 에러가 발생하는 것. 많은 외국인들도 동일한 문제로 헤매고 있는것 같다. 비슷한 케이스에 대한 결과가 다수 확인되었다. 읽어본 결과 여기에 대한 해결책은 다음과 같다. 1. payable 대신에 call에다가 value를 입려서 쓴다. (low level call은 address payable이 아니여도 가능) 2. solidity를 0.6.0 버전 이상으로 올려준 후 컴파일러에서도 맞추어 주면 된다고 한다. (Solidity 버전을 올려야 함) 그 ..
스마트컨트렉트에서 이더리움을 보내는 방법은 총 3가지가 있다고한다. https://solidity-by-example.org/sending-ether/ Solidity by Example solidity-by-example.org transfer (2300 gas, throws error) send (2300 gas, returns bool) call (forward all gas or set gas, returns bool) 이렇게 3가지 인데, 원래 예전에는 call을 쓰면 재진입 공격이 가능하기 때문에 잘 쓰지 않는고 배웠었다. transfer나 send를 쓰라고 했는데 예전에 어느 시점의 메인넷 업데이트 이후 가스비가 변경되어 send나 transfer에 문제가 생기는 경우가 있었던 이야기를 전에..
참고 : 폴리곤 pos portal 소스코드 중 RootChainManager.sol 폴리곤의 pos portal에서는 delegate Call을 썼다. 주석을 보면 프록시 배포를 사용했기 때문에 사용했다고 하는 Call이 사용되고 있다. 하지만 프록시 배포를 사용하는 상황이 아니라면 이더리움을 직접 전송할 때는 transfer를 사용하는 것이 가장 좋다. 먼저 위는 일반 erc20 토큰을 예치할 때의 과정 아래는 이더리움과 같은 암호화폐를 예치할 때의 과정인데 결국 _deplositFor를 부르는 것은 동일하다. 여기서 넣는 ETHER ADDRSS의 경우 컨트렉트 상단에 명시되어 있는데 address public constant ETHER_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEE..
https://www.codegrepper.com/code-examples/shell/how+to+downgrade+the+version+in+npm+install hardhat 버전 변경하기 how to downgrade the version in npm install Code Example npm install -g npm@version-no www.codegrepper.com 글로벌로 된 모듈의 버전을 바꿀 때는 위와 같이 버전을 명시해서 한번 더 설치해주면된다. 만약 적용이 바로 안된다면 창을 한번 닫았다가 잠시 뒤에 해보면 적용이 되어 있다. hardhat 을 예로들어보면 npm install -g hardhat@2.8.3 이렇게 명시하면 버전이 내려가는것을 확인할 수 있었다.
테스트 코드 작성 이후 실제 메인네트워크에서 잘 작동하나 확인을 하기 위해서 따로 스크립트를 만들어야 했다. 일단 내가 사용하는 환경은 체인별로 설정 값이 다르니 hardhat에서 단위 테스트와 시나리오 테스트를 맞추었다 하더라도 실제로 트랜잭션을 보내보고 검토하는 과정이 필요하다. 근데 EIP712를 테스트하는 과정에서 원래는 메타마스크에서 서명 정보를 받은 후 DB에 저장하는 부분이 있는데 DB를 넣고 테스트 할 수 없으니, struct를 만드는 부분은 helper로 타입을 지정하여 따로 구현을 하였다. 이런식으로 지정해 두면 makeOrder(구조체 내용)을 넣고 스크립트를 돌릴 수 있다. structHelper.ts export enum Type { A1, A2, } export type Stru..
bignumber의 경우 테스트 코드를 할 때 적용해주어야 한다. 특히 소수점 처리를 다루는 컨트렉트의 경우 정확한 예측치를 바탕으로 테스트를 하기 위해서는 decimal 을 적용시켜서 테스트 코드레벨에서 먼저 시나리오 테스트를 하는게 필요하다. 하지만 ethers로 하는 경우 잘 정리되어 있는 글이 별로 없어 따로 정리를 하였다. 먼저 decimal을 적용할 경우 ethers의 parsUnits을 사용한다. decimal이 적용되기 전의 숫자를 number라고 정의해 놓고 이를 문자열로 바꾼 후 뒤에 붙이고 싶은 0 만큼, 여기선 일반적인 케이스인 decimal이 18인 경우이니 18만큼을 넣어준다. ethers.utils.parseUnits(number.toString(), 18) 이러면 Bignum..
먼저 approve를 무한대로 해주는 infiniteApprove의 경우 https://ethereum.stackexchange.com/questions/86928/does-the-approve-function-on-an-erc20-token-need-to-be-run-once-or-before-every Does the approve function on an ERC20 token need to be run once or before every relevant transaction? I understand that an ERC20's approve() function has to be run before the token can be sent to another contract. But is this ..