Skip to content

Commit 59ef54e

Browse files
committed
feat: commitment scheme questions
1 parent 0b4de91 commit 59ef54e

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

solidity/junior-2/solidity/README.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ contract Counter {
157157
/// SpecificImport.sol
158158
159159
// SPDX-License-Identifier: MIT
160-
161160
pragma solidity 0.8.17;
162161
163162
import {
@@ -171,7 +170,6 @@ contract Counter {
171170
/// Storage.sol
172171
173172
// SPDX-License-Identifier: MIT
174-
175173
pragma solidity 0.8.17;
176174
177175
address constant OWNER = 0x607B5e673D3ea42A0F85aDD6f529196500FC9E04;
@@ -293,6 +291,31 @@ contract Counter {
293291
- [Hashing with Keccak256](https://solidity-by-example.org/hashing/)
294292
- [SHA-3 Standard](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf)
295293

294+
## Commitment scheme
295+
296+
1. Что такое commitment scheme (можно встретить название commit-reveal scheme)? Какие этапы в себя включает?
297+
2. Для каких случаев необходимо применять commitment scheme? Привести не меньше трех use cases.
298+
3. Какую роль играет хеширование и алгоритм `keccak256` в commitment scheme?
299+
4. Задача: реализовать простой смарт-контракт, демонстрирующий работу commitment scheme.
300+
> **Игра "данетка"**.
301+
> Первый игрок загадывает строку, фиксирует загаданное на блокчейне (для этого необходимо вызвать функцию `commit()`). Затем второй игрок угадывает строку по наводящим вопросам, при этом первый игрок может отвечать да или нет. В конце игры, первый игрок раскрывает строку, которая была загадана (для этого необходимо вызвать функцию `reveal()`), чтобы доказать, что загаданное было отгадано (или не отгадано).
302+
303+
```solidity
304+
contract YesOrNo {
305+
function commit(bytes32 hash) external {
306+
// TODO: реализовать сохранение загаданного слова или фразы
307+
}
308+
309+
function reveal(string memory value) external returns (string memory) {
310+
// TODO: реализовать раскрытие сохраненной строки
311+
}
312+
}
313+
```
314+
315+
- [Commitment scheme](https://en.wikipedia.org/wiki/Commitment_scheme)
316+
- [Exploring Commit-Reveal Schemes on Ethereum](https://medium.com/@0xkaden/exploring-commit-reveal-schemes-on-ethereum-c4ff5a777db8)
317+
- [Blind auction](https://docs.soliditylang.org/en/v0.8.23/solidity-by-example.html#id2)
318+
296319
## Digital signatures
297320
298321
1. Что такое цифровая подпись? Для чего используется подпись?

0 commit comments

Comments
 (0)