완료됨
[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
rbtree_work
대표 업적 없음
rbtree_work
대표 업적 없음
안녕하세요,
읽어봤는데 문제가 없어야 할 것 보입니다. data
가 슬롯 0번에 오는 값이 맞는 거겠죠?
string
이 key인 경우 key || slot (32-byte big-endian encoded)
형태로 keccak을 하기 때문에 맞는 순서로 보입니다.
Python을 통해서 시도해본 적이 없어서 확실하게 말씀드리기는 어렵지만,
혹시나 해당 값이 맞는지 확실하게 하고 싶으시다면 foundry 툴체인의 cast에서 cast index를 사용해보시는 건 어떨까 추천드립니다.
또한 소스코드를 첨부해주시면 좀 더 도움을 드릴 수 있을 것 같습니다.