일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ambiguous function description
- 스마트 컨트렉트 함수이름 중복
- 체인의정석
- ethers typescript
- multicall
- nest.js설명
- SBT표준
- 프록시배포구조
- 스마트컨트렉트 함수이름 중복 호출
- 머신러닝기초
- vue기초
- 스마트컨트렉트테스트
- 스마트컨트렉트 예약어 함수이름 중복
- 티스토리챌린지
- 컨트렉트 배포 자동화
- 컨트렉트 동일한 함수이름 호출
- ethers
- rust 기초
- 러스트 기초 학습
- ethers type
- 오블완
- 러스트기초
- 러스트 기초
- ethers v6
- Vue.js
- chainlink 설명
- git rebase
- ethers websocket
- 스마트컨트렉트프록시
- Vue
- Today
- Total
체인의정석
payable 사용시 발생하는 에러 ParserError: Expected primary expression. 본문
payable 사용시 발생하는 에러 ParserError: Expected primary expression.
체인의정석 2022. 8. 11. 13:400.5.0 버전의 코드로 작업중이 였는데 payable을 다루는 과정에서 컴파일 에러가 발생하였다.
에러의 원인은 바로 solidity 버전이 0.5.0 버전 이상이 되면서 주소값을 payable로 지정해 주어야 하는데 payable을 사용하면 다음과 같은 에러가 발생하는 것.
많은 외국인들도 동일한 문제로 헤매고 있는것 같다. 비슷한 케이스에 대한 결과가 다수 확인되었다. 읽어본 결과 여기에 대한 해결책은 다음과 같다.
1. payable 대신에 call에다가 value를 입려서 쓴다. (low level call은 address payable이 아니여도 가능)
2. solidity를 0.6.0 버전 이상으로 올려준 후 컴파일러에서도 맞추어 주면 된다고 한다. (Solidity 버전을 올려야 함)
그 외의 관련된 자료들을 하단에 정리해 두었다.
Built-in methods
You can use .transfer(..) and .send(..) on address payable, but not on address.
You can use a low-level .call(..) on both address and address payable, even if you attach value.
Casting from address payable to address
address payable can be implicitly or explicitly cast to address:
address payable addr1 = msg.sender;
address addr2 = addr1; // This is correct
address addr3 = address(addr1); // This is correct
Casting from address to address payable
address can only be explicitly cast to address payable:
address addr1 = msg.sender;
address payable addr2 = addr1; // Incorrect
address payable addr3 = address(uint160(addr1)); // Correct since Solidity >= 0.5.0
address payable addr4 = payable(addr1); // Correct since Solidity >= 0.6.0
Casting address[] or address payable[]
Although a single address payable can be cast to address, arrays of one address type cannot be cast to arrays of another address type:
function testCast(address payable[] memory _addresses) returns (address[] memory)
{
return _addresses; // Type error!
}
'블록체인 > Solidity' 카테고리의 다른 글
스마트컨트렉트 주석 달기 및 solidity-docgen 사용하기 (0) | 2023.01.12 |
---|---|
Openzepplin - Address 라이브러리 분석 (0) | 2022.10.27 |
Solidity) 스마트컨트렉트에서 이더리움을 보내는 방법 (0) | 2022.08.10 |
스마트컨트렉트 테스트에 Infinite Approve 적용하기 (0) | 2022.07.25 |
스마트컨트렉트에서 소수점 처리하는법과 엑셀에서 검산하는 방법 및 유의점 (0) | 2022.07.25 |