일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 러스트 기초
- Vue
- 컨트렉트 배포 자동화
- 머신러닝기초
- rust 기초
- 러스트기초
- 컨트렉트 동일한 함수이름 호출
- ethers websocket
- 러스트 기초 학습
- 스마트 컨트렉트 함수이름 중복
- ethers
- 스마트컨트렉트 예약어 함수이름 중복
- ethers v6
- 스마트컨트렉트테스트
- 티스토리챌린지
- 오블완
- SBT표준
- erc4337
- multicall
- 계정추상화
- ethers typescript
- vue기초
- 스마트컨트렉트 함수이름 중복 호출
- ambiguous function description
- 체인의정석
- git rebase
- chainlink 설명
- Vue.js
- erc4337 contract
- ethers type
- Today
- Total
목록분류 전체보기 (496)
체인의정석
테스트 코드에서는 잘못된 값을 넣었을 때 실패를 반환하는지를 체크해서 알려주어야 한다. ethers.constants.AddressZero //0x0000 형태의 주소 일단 위와 같은 제로 address의 경우 스마트컨트렉트 오딧을 받게 되면 항상 막아야 한다고 나오게 된다. 제로 address를 막는 이유는 빈값이 들어왔을 때 이를 막기 위함이 아닐까 싶다. 아무튼 주소값이 입력값으로 들어오는 경우면 위의 Addresszero를 사용하여 해당 값을 넣었을 때 false 값을 반환하는지에 대한 여부를 항상 체크해 주어야 한다. 이 외에도 bytes32형태로 값을 넣는 경우가 종종 있다. 이벤트 구독형 기능을 사용하거나 하나의 컨트렉트에 여러 세부 모듈을 다룰 때 이를 많이 사용하는데 const zero3..
트레블룰을 만족하는 크로스체인 NFT 브릿지 요약 트레블룰은 자금 세탁 방지를 위하여서 기존 금융권에 적용되고 있는 제도로서 현재 기존 금융자산들은 해외 송금을 진행할 때 국제은행간통신협회(SWIFT)가 요구하는 형식에 맞추어 송금자와 수신자의 정보를 기록중이다. 2019년 6월 국제자산세탁방지기구(FATF)가 코인 규제 권고안을 추가하면서 현재는 국내 거래소들도 암호화폐에 트래블룰이 적용되길 준비하는 단계이다. 특히 최근 디파이나 NFT에 대한 관심과 유입 자금의 증가로 트레블룰의 도입을 해야하는 가상자산 사업자(VASP)의 범위에 NFT를 다루는 사업자들도 포함될 수 있다는 의견(하단참고)도 나오고 있다. 트레블룰에 대한 사항은 기술중립적으로 신뢰성을 마련하는 방법에 대한 제약 또한 없어 이에 대한 ..
인터넷을 찾아보니 예시가 모두 컨트렉트 팩토리를 써서 배포부터 트랜잭션을 보내는 예제만 있었다. 근데 실제로 프로덕트를 만드려면 당연히 배포된 컨트렉트에 상호작용을 해야하는데 contractFactory.attach("CA주소") 이런식으로 써도. 배포된 상황에서만 붙지 그냥은 되지 않았다. https://ethereum.stackexchange.com/questions/95023/hardhat-how-to-interact-with-a-deployed-contract Hardhat - How to interact with a deployed contract? I can deploy a contract using ethers and Hardhat with the following: const myContr..
스마트컨트렉트를 배포할 때 이더스캔에 대한 apikey가 있으면 이더스캔에서 verify를 할 수 있다. 어차피 프로덕트레벨로 운영을 해야하면 진행을 해야 하며, 실제 테스트네트워크에서 값을 확인할 때도 tenderly 같은 툴을 사용하여 분석을 할 수 있기 때문에 로컬 테스트레벨이 아닌 공식 테스트넷 레벨의 테스트 단계부터는 이더스캔에서 verify하는 작업이 필요하다. 3년전에 개발을 할때는 falt한 컨트렉트를 만드느라고 매우 고생을 했었는데 요즘에는 툴이 발달하여 이더스캔 api키를 이용하여 이더스캔 verify를 배포시에 할 수 있다. 특히 스마트컨트렉트 개발자로서 병목이 항상 스마트컨트렉트이기 때문에 개발할 때 한사이클을 먼저 만들어주는 역할이 중요하기 때문에 이 작업은 로컬 테스트가 끝나자마..
만약 로컬테스트에서는 통과를 했는데 메인넷 테스트에서 실패를 한다면? 함수를 실행하고 조회하기까지 어느정도의 시간을 넣어주어야 에러가 안 나는 경우도 있다. await bridge.setCustody(erc721Custody.address,tokenType721); await delay(15000); console.log("getCustody address",await bridge.typeToCustody(tokenType721)); function delay(ms: number) { return new Promise( resolve => setTimeout(resolve, ms) ); } 위와 같이 setCustody 함수를 실행하자마자 바로 그 결과값을 확인한다면 결과 값이 반영이 되기 전이라 조회가..
테스트 코드를 한창 쓰고 있는데 Error: VM Exception while processing transaction: reverted with reason string 'ERC721: owner query for nonexistent token' 위와 같은 에러가 났다. 문제는 해당 에러는 여기저기에 다 분포되어 있기 때문에 컨트렉트와 테스트 스트립트 곳곳에 로그를 찍으면서 모두 확인해보았다. import "hardhat/console.sol"; . . . . function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; console.log("owner OF >>>>", tok..
safeTransferFrom 같은 경우 ERC721 onRECEIVE를 상속 받았는지 여부를 체크해 준다. 스마트컨트렉트가 받는 주소라면 이렇게 transferFrom을 사용하여야지 안에 토큰들이 갇히는 걸 방지할 수 있다. 기본적으로 오픈제플린에서 상속을 받으면 safeTransferFrom 이 적용된다. 하지만 직접적으로 토큰을 다루는 컨트렉트 들은 function onERC721Received( address, address, uint256, bytes memory ) public returns (bytes4) { return this.onERC721Received.selector; } "IERC721Receiver" 인터페이스를 상속 받은 후 위와 같이 오버라이딩 해주어야 한다. 위는 0.5.0..
스마트 컨트렉트에서 데이터를 암호화하여 올리기 위하여 uint256 tokenId = abi.decode(bytes(tokenData),(uint256)); 다음과 같이 solidity에서 abi.encode 해온 값을 받아와서 decode 하는 코드가 들어갈 때가 있다. 이럴 때는 etherjs에 있는 abiCoder를 사용하여 입력값을 주어 테스트 할 수 있다. https://docs.ethers.io/v5/api/utils/abi/coder/#AbiCoder-encode AbiCoder Documentation for ethers, a complete, tiny and simple Ethereum library. docs.ethers.io 위와 같이 abicoder를 사용하면 해결이 가능한데 con..