완료됨
[Web3] private mapping 데이터 읽으려는데 모르겠습니다.

mapping(string => string) private data; 로 정의된 매핑에서
data['dream']의 값을 읽어오려고 하는데요,

base_slot = 0
key = 'dream'
key_bytes = eth_utils.to_bytes(text=key)
base_slot_bytes = base_slot.to_bytes(32, byteorder='big')
slot = eth_utils.keccak(key_bytes + base_slot_bytes)
data = w3.eth.get_storage_at(target_addr, int.from_bytes(slot, byteorder='big'))

이런식으로 leak 코드를 짜봤는데 왜 읽어지지 않을까요...?
알려주실 분 구해봅니다 ㅠㅜ

#blockchain #solidity #storage #web3 #mapping
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
rbtree_work
대표 업적 없음
avatar
rbtree_work
대표 업적 없음

안녕하세요,

읽어봤는데 문제가 없어야 할 것 보입니다. data 가 슬롯 0번에 오는 값이 맞는 거겠죠?
string이 key인 경우 key || slot (32-byte big-endian encoded) 형태로 keccak을 하기 때문에 맞는 순서로 보입니다.

Python을 통해서 시도해본 적이 없어서 확실하게 말씀드리기는 어렵지만,
혹시나 해당 값이 맞는지 확실하게 하고 싶으시다면 foundry 툴체인의 cast에서 cast index를 사용해보시는 건 어떨까 추천드립니다.

또한 소스코드를 첨부해주시면 좀 더 도움을 드릴 수 있을 것 같습니다.

2024.06.03. 18:52