diff --git a/ru/2/addresses.md b/ru/2/addresses.md index ae8d9b0..68dda01 100644 --- a/ru/2/addresses.md +++ b/ru/2/addresses.md @@ -1,6 +1,54 @@ +# Глава 1: Адреса + +В прошлой главе мы создали покемонов. Но без тренеров для обучения покемонов наша игра была бы скучной. Добавим в игру трейнеры. По умолчанию у каждого тренера будет покемон. + +Для этого нам понадобится новый тип данных: `address`. + +## Адреса + +Блокчейн Ethereum состоит из **счетов**, которые можно представить себе как банковские счета. Баланс учетной записи составляет **Ether** (валюта, используемая в блокчейне Ethereum), и вы можете отправлять и получать платежи Ether на другие учетные записи, точно так же, как ваш банковский счет может переводить деньги на другие банковские счета. + +У каждой учетной записи есть «адрес», который можно представить как номер банковского счета. Это уникальный идентификатор, указывающий на эту учетную запись, и выглядит он так: + +``` +0x073Ab1C0CAd3677cDe9BDb0cDEEDC2085c029579 +``` + +(Этот адрес принадлежит команде Vyper.fun. Если вам нравится Vyper.fun, вы можете отправить нам немного Ether! 😉 ) + +Мы рассмотрим мельчайшие детали адресов на следующем уроке, но пока вам нужно только понимать, что адрес принадлежит определенному пользователю (или смарт-контракту). + +Таким образом, мы можем использовать его как уникальный идентификатор владельца тренера. Когда пользователь создает новый трейнер, взаимодействуя с нашим приложением, мы устанавливаем владельцем трейнера адрес Ethereum, который вызвал функцию. + +## Вложенное сопоставление + +Вложенное сопоставление выглядит следующим образом: + +```vyper +# maps a teacher to a list of students +teacherToStudents: HashMap[String[32], HashMap[uint256, String[32]]] + +@external +def addStudent(teacherName: String[32], studentName: String[32], rollnumber: uint256): + teacherToStudents[teacherName][rollnumber] = studentName +``` + +Отображение `teacherToStudents` сопоставляет имя учителя (`String[32]`) с другим подчиненным отображением, которое представляет список студентов. В этом списке учащихся номер списка учащихся (`uint256`) сопоставляется с их именами (`String [32]`). + +В `teacherToStudents` можно добавить 2 ключа: первый ключ для `String [32]` (`teacherName`) и второй ключ для `uint256` (`rollnumber`). Присваивается значение `String [32]` (`studentName`). + +## Испытайте это + +Во-первых, чтобы создать трейнер, нам нужно создать структуру трейнера. Затем, чтобы сохранить владельца тренера и его покемонов, мы будем использовать 3 сопоставления. + +1. Создайте структуру `Trainer` с единственным свойством: `name`(`String[32]`). +2. Создайте отображение `trainerPokemonCount` с ключом типа `address` и значением типа `uint256`. +3. Создайте отображение `trainerList` с ключом типа `address` и значением типа `Trainer`. +4. Создайте вложенное сопоставление `trainerToPokemon` с ключом типа `address`, которое сопоставляется с другим под-отображением. Подотображение имеет ключ типа `uint256` и значение типа Pokemon. + #### ** Template ** diff --git a/ru/2/introduction.md b/ru/2/introduction.md index 1cf915c..fc2395b 100644 --- a/ru/2/introduction.md +++ b/ru/2/introduction.md @@ -1,2 +1,10 @@ + +# Поймай всех + +В этой главе мы изучим более сложные концепции Vyper для создания тренеров покемонов. + +Любой желающий может стать тренером покемонов и получит одного покемона. Тренеры могут сражаться ⚔️ с дикими покемонами и ловить их. + +Посмотрим, сможешь ли ты их всех поймать 😉