일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 머신러닝기초
- ethers websocket
- nest.js설명
- 스마트 컨트렉트 함수이름 중복
- 러스트기초
- rust 기초
- 오블완
- SBT표준
- ethers typescript
- ethers v6
- multicall
- git rebase
- vue기초
- ethers
- Vue
- 스마트컨트렉트 함수이름 중복 호출
- ambiguous function description
- 컨트렉트 동일한 함수이름 호출
- 체인의정석
- 티스토리챌린지
- ethers type
- 컨트렉트 배포 자동화
- chainlink 설명
- 프록시배포구조
- 스마트컨트렉트프록시
- 스마트컨트렉트테스트
- 러스트 기초
- 스마트컨트렉트 예약어 함수이름 중복
- Vue.js
- 러스트 기초 학습
Archives
- Today
- Total
체인의정석
Contract `` has a constructor Define an initializer instead 본문
728x90
반응형
https://forum.openzeppelin.com/t/security-advisory-initialize-uups-implementation-contracts/15301/23
업그레이더블 컨트렉트에서는 initializer만 있어야 하고 constructor는 없어야 한다.=
하지만 initializer를 쓰더라도 이를 이용해 다시 접근할 수 있기 때문에
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
constructor() {
_disableInitializers();
}
만약 initializer를 다시 한번 쓰려는 의도가 없다면 constructor에서 _disableInitializers를 쓰는게 좋다.
이 때 constructor를 넣고 싶다면
/// @custom:oz-upgrades-unsafe-allow constructor
이런 문구를 위에 써주어야 오류가 나지 않는다.
728x90
반응형
'블록체인 > Solidity' 카테고리의 다른 글
Solidity에서 특정 Contract 타입 사용방법과 Storage를 지정하고 Interface Contract를 작성하는 방법 (0) | 2023.03.27 |
---|---|
스마트 컨트렉트 "Error: types/values length mismatch" (0) | 2023.02.28 |
스마트컨트렉트 주석 달기 및 solidity-docgen 사용하기 (0) | 2023.01.12 |
Openzepplin - Address 라이브러리 분석 (0) | 2022.10.27 |
payable 사용시 발생하는 에러 ParserError: Expected primary expression. (0) | 2022.08.11 |
Comments