일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 러스트 기초 학습
- ambiguous function description
- 컨트렉트 동일한 함수이름 호출
- SBT표준
- erc4337 contract
- vue기초
- 체인의정석
- erc4337
- ethers v6
- Vue.js
- git rebase
- 스마트 컨트렉트 함수이름 중복
- cloud hsm 사용하기
- redux 기초
- 오블완
- rust 기초
- 러스트기초
- 계정추상화
- Vue
- 러스트 기초
- redux toolkit 설명
- 스마트컨트렉트 예약어 함수이름 중복
- ethers type
- 스마트컨트렉트 함수이름 중복 호출
- 머신러닝기초
- cloud hsm
- ethers websocket
- cloud hsm 서명
- ethers typescript
- 티스토리챌린지
- Today
- Total
목록전체 글 (527)
체인의정석
Solidity 에서는 input값을 스토리지가 아닌 memory에 넣는다. string, bytes, struct에서는 이러한 표시를 해주지 않으면 컴파일 에러가 나게 된다. 다만 0.5.0 버전의 external에서는 솔리디티 컴파일러가 external 함수의 파라미터로 memory를 받지 않는다. Note that external functions require parameters with a data location of calldata. 그 이유는 external 함수가 아니라면 내부적으로만 호출되므로 calldata를 사용할 일이 없기 때문이다. 따라서 external의 인자값에는 memory가 아닌 calldata를 사용한다. 참고 : https://ethereum.stackexchange...
컨트렉트를 작성하고 컴파일을 하면서 TypeError: Linearization of inheritance graph impossible 다음과 같은 에러가 나타났다. 이러한 에러에 대하여 찾아보니. 상속의 순서를 최소화 시키지 않고 중복되지 않게 해야 오류가 안난다고 한다. 이에 따라서 확장성을 고려하여 설계한 각 컨트렉트에서는 하나의 인터페이스로 묶고 인터페이스를 상속해주어야지 실제로 해당 하위 컨트렉트에 external을 불러와서 사용할 수 있게 되기 때문에 원래 작성했던 컨트렉트에서 공통된 부분으로 뽑아서 하위에 전달해야 하는 공통부분을 인터페이스로 만드는 작업을 진행하였다. 각 토큰 유형별로 있는 컨트렉트의 공통 함수를 뽑아서 하나의 인터페이스로 잡은 후 최상단에서는 해당 인터페이스만 작업하도록..
Require과 Assert를 사용하는 방법 1. 함수가 실패해야 할 경우 실패를 하게 만든다. 2. 배후에 실행되는 것을 확실하게 하기 위하여 이전에는 실행이 되지 않게 require를 사용해야 한다. 3. 자신이나, 테스터에게 함수가 실패할 수 있을 경우를 상기시키기 위하여 사용한다. require 형태의 실패를 유발하기 위하여 DRY를 지키는 것이 중요하다. 그리고 해피케이스의 최소 조건에서 멀어진 단위테스트를 하면 fail이 일어나게 한다. 또한 각 함수의 유니크한 require 메세지를 통하여 왜 실패하였는지를 밝히는 것이 중요하다. 테스트 Modifier에 대하여 require 체크와 유사하게 모든 modifier들은 테스트를 해야 한다. 예를 들어 submitProposal 단위 테스트는 o..
이제 배포를 했으니 테스트코드를 작성하고 돌려봐야 한다. 테스트 코드는 딱히 가나슈랑 다른 점은 없어보여서 그대로 가져와서 사용해보기로하였다. const { expect } = require("chai"); const { ethers } = require("hardhat"); describe("Greeter", function () { it("Should return the new greeting once it's changed", async function () { const Greeter = await ethers.getContractFactory("Greeter"); const greeter = await Greeter.deploy("Hello, world!"); await greeter.deplo..
구버전의 NFT의 구현 코드를 보다가 ERC165를 발견하게 되었다. 요약하자면 해당 내용은 함수의 selector를 빼와서 컨트렉트에서 표준을 잘 지켰는지를 확인해 주는 코드 이다. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v2.5.0/contracts/token/ERC721/ERC721.sol GitHub - OpenZeppelin/openzeppelin-contracts: OpenZeppelin Contracts is a library for secure smart contract development. OpenZeppelin Contracts is a library for secure smart contract dev..

이어서 하드햇과 오픈제플린 라이브러리를 연결하는 부분부터 진행을 하도록 한다. https://docs.openzeppelin.com/upgrades-plugins/1.x/hardhat-upgrades Using with Hardhat - OpenZeppelin Docs You can also use the plugin’s functions from your Hardhat tests, in case you want to add tests for upgrading your contracts (which you should!). The API is the same as in scripts. Proxies const { expect } = require("chai"); describe("Box", functio..

1. 하드햇 문서 페이지 https://hardhat.org/guides/project-setup.html Ethereum development environment for professionals by Nomic Labs Compile, deploy, test and debug your Ethereum software. Get Solidity stack traces, console.log, mainnet forking and more. hardhat.org npx hardhat 실행시 기본 세팅이 완료됨 2. hardhat.config.js 여기서 버전 설정 및 초기 실행시 기본적으로 실행할 값들 지정 가능. 만약 낮은 버전을 사용할 시 사용하는 모듈 또한 낮은 버전에 맞추어서 찾아서 활용해야 함. 0..

코드리뷰를 모두 마치고 올렸는데 git conflict가 발생하였다. 이전에 계속해서 했던 작업이지만 오랜만에 하니 기억이 안나 다시 정리하도록 하겠다. 먼저 명령어의 실행 위치는 원본 소스가 아닌 코드리뷰를 받는 소스이다. 해당 소스에서 원본 소스를 머지해야 원본에서 업데이트 된 코드가 리뷰를 받아 적용이 되게 된다. git merge develop 해당 명령어를 내리면 다음과 같이 충돌이 발생하는데 이걸 모두 클릭해서 충돌을 해결해 주어야 한다. 충돌을 모두 해결하고 나면 해당 변경 사항들이 commit에 올라가게 된다. 여기서 한번 더 수정사항이 맞는지 체크를 한 후 수정사항이 맞다면 push를 해서 수정된 코드를 반영해주면 해결이된다. 이떄 또한 주의할 점은 push를 하고 나서 한번 소스를 실행..