일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- SBT표준
- 컨트렉트 배포 자동화
- 오블완
- 스마트 컨트렉트 함수이름 중복
- multicall
- 스마트컨트렉트테스트
- git rebase
- rust 기초
- 티스토리챌린지
- ethers
- Vue.js
- ethers websocket
- 컨트렉트 동일한 함수이름 호출
- ethers v6
- chainlink 설명
- ethers typescript
- 스마트컨트렉트 함수이름 중복 호출
- 러스트 기초 학습
- 러스트 기초
- 프록시배포구조
- 머신러닝기초
- Vue
- nest.js설명
- 스마트컨트렉트 예약어 함수이름 중복
- vue기초
- ethers type
- 스마트컨트렉트프록시
- 체인의정석
- 러스트기초
- ambiguous function description
Archives
- Today
- Total
체인의정석
Types in storage containing (nested) mappings cannot be assigned to. 본문
블록체인/Solidity
Types in storage containing (nested) mappings cannot be assigned to.
체인의정석 2023. 12. 29. 11:56728x90
반응형
struct content{
address payable owner;
bytes32 hash;
mapping(address => uint) licenses;
}
다음과같이 구조체 안에 배열이 있는 형태의 solidity코드가 있다고 쳐보자.
예전 버전에서 이에 대한 초기화는
function submitContent(bytes32 _hash) public payable returns(uint _id) {
_id=contents[msg.sender].length;
contents[msg.sender].push(content({
owner: payable(msg.sender),
hash:_hash return(_id);
}));
}
다음과 같이 한번에 가능하였다. 그러나 solidity 0.7.0 버전부터는 구조체 안의 배열을 초기화 할때는 한번에 하지 못하고 따로 해야 한다고 한다. 기존에는 구조체안의 배열이 memory로 알아서 쓰여져서 에러에 취약했기 때문에 구조체 안의 배열은 스토리지에서만 사용가능하게 만들었다고 한다. 이에 따라서 스토리지로 배열을 명시해서 사용하면 된다고 한다고 한다.
submitContent(bytes32 _hash) public payable returns(uint _id) {
_id= contents[msg.sender].length;
content[] storage c = contents[msg.sender];
c.push();
c[_id].owner = payable(msg.sender);
c[_id].hash=_hash;
return _id;
}
* 해당 방식의 경우 가능하긴 하지만 storage를 쓰기 때문에 조회 함수에 적합하지 않으며 사실상 나중에 api등에서 사용할때 복잡하기 때문에 struct안에 mapping을 넣는 부분은 제거하였으며 대신 하나의 인덱스를 키 값으로 여러개의 mapping을 구현하거나 필요시 이중 메핑 또는 메핑의 vlaue값을 배열로 사용하는 형태로 구현하였다.
728x90
반응형
'블록체인 > Solidity' 카테고리의 다른 글
SyntaxError: Identifier expected. 'const' is a reserved word that cannot be used here. 에러 해결 (1) | 2024.01.08 |
---|---|
Solidity Create와 Create2 (0) | 2024.01.08 |
VS코드 Solidity 필수 플러그인 모음(작성중) (0) | 2023.10.17 |
Solidityðers 이벤트 로그 parse.log 직접 파싱하기 및 "data out-of-bounds" 오류 해결기 (0) | 2023.04.08 |
Solidity에서 자료형을 에러메세지에 넣는 방법 (0) | 2023.03.28 |
Comments