Модель аккаунта Solana

В Solana все данные хранятся в так называемых "аккаунтах". Способ организации данных в Solana напоминает хранилище ключевых значений, где каждая запись в базе данных называется "аккаунтом".

Учетные записиУчетные записи

Ключевые точки #

  • Аккаунты могут хранить до 10 МБ данных, которые могут состоять либо из исполняемого программного кода, либо из состояния программы.

  • Учетные записи требуют внесения арендной платы в SOL, пропорциональной объему хранимых данных, которая полностью возвращается при закрытии учетной записи.

  • Каждая учетная запись имеет программу "владелец". Только программа, владеющая учетной записью, может изменять его данные или списывать остаток лампорта. Однако каждый может увеличить баланс.

  • Программы (смарт-контракты) - это учетные записи без статусов, в которых хранится исполняемый код.

  • Учетные записи данных создаются программами для хранения и управления состоянием программы.

  • Родные программы - это встроенные программы, входящие в состав среды выполнения Solana.

  • Sysvar учетные записи - это специальные учетные записи, сохраняющие состояние кластера сети.

Учетная запись #

Каждая учетная запись идентифицируется по его уникальному адресу, представленному в виде 32 байт в формате Ed25519 PublicKey. Адрес можно рассматривать как уникальный идентификатор учетной записи.

Адреса учетной записиАдреса учетной записи

Эту связь между учетной записью и его адресом можно представить как пару ключ-значение, где адрес служит ключом для нахождения соответствующих данных Учетной записи на цепи.

Информация об учетной записи #

Максимальный размер учетных записей составляет 10 МБ (10 мегабайт), а данные, хранящиеся в каждой учетной записи на Solana, имеют следующую структуру, известную как Информация об аккаунте.

Информация об учетной записи

AccountInfo для каждого аккаунта включает следующие поля:

  • data: байтовый массив, который хранит состояние учетной записи. Если учетная запись является программой (умный контракт), она хранит исполняемый код программы. Это поле часто называется "данные учетной записи".
  • executable: Логический флаг, указывающий является ли учетная запись программой.
  • lamports: числовое представление баланса счета в lamports, наименьшая единица SOL (1 SOL = 1 млрд. лампах).
  • owner: Указывает открытый ключ (идентификатор программы) программы, владеющей учетной записью.

Ключевой частью модели учетных записей Solana является то, что у каждой учетной записи на Solana есть определенный "владелец", а именно программа. Только программа, назначенная владельцем аккаунта, может изменять данные, хранящиеся на нем, или списывать остаток с лампорта. Важно отметить, что, хотя только владелец может уменьшить баланс, увеличить его может каждый.

Info

Для хранения данных по цепочке необходимо перевести определенное количество SOL на счет . Передаваемая сумма пропорциональна объему данных, хранящихся на счете. Эту концепцию принято называть "арендой». Однако «аренду" можно воспринимать скорее как "депозит", поскольку SOL, выделенный на счет, можно полностью вернуть, когда счет будет закрыт.

Нативные программы #

Solana содержит небольшое количество собственных программ, которые являются частью реализации валидатора и обеспечивают различные основные функциональные возможности сети. Полный список нативных программ можно найти здесь.

При разработке пользовательских программ на Solana, вы обычно будете взаимодействовать с двумя родными программами , Системной программой и загрузчиком BPF.

Системная программа #

По умолчанию все новые учетные записи принадлежат Системной программе. Системная программа выполняет несколько ключевых задач, таких как:

  • Создание новых учетных записей: Только системная программа может создавать новые учетные записи.
  • Распределение пространства: Устанавливает объем байтов для поля данных каждой учетной записи.
  • Назначение права собственности программы: После того как системная программа создаст учетную запись, она может переназначить назначенного владельца программы на другую программную запись. Таким образом пользовательские программы получают право собственности на новые учетные записи, созданные системной программой.

На Solana, "кошелек" - это просто учетная запись, принадлежащий Системной Программе. Баланс кошелька lamport - это количество SOL, принадлежащее учетной записи.

Системная учетная записьСистемная учетная запись

Info

В качестве плательщиков комиссии за транзакции могут использоваться только учетная запись, принадлежащие Системной программе.

Программа BPFLoader #

BPF Loader - это программа, назначенная "владельцем" всех остальных программ в сети, за исключением нативных программ. Она отвечает за развертывание, обновление и выполнение пользовательских программ.

Учетные записи Sysvar #

Sysvar учетные записи - это специальные учетные записи, расположенные на заданных адресах, которые обеспечивают доступ к данным о состоянии кластера. Эти учетные записи динамически обновляются данными о сетевом кластере. Полный список учетных записей Sysvar можно найти здесь.

Пользовательские программы #

На Solana "смарт-контракты" называются programs. Программа — это учетная запись, содержащая исполняемый код и обозначенная флагом "исполняемый файл", установленным в true.

Для более подробного объяснения процесса развертывания программы обратитесь к странице "Развертывание программ" этой документации.

Учетная запись программы #

При появлении новых программ deployed на Solana создаются три отдельных учетных записи :

  • Учетная запись программы: основноя учетная запись, представляющий программу в цепочке. В этой учетной записи хранится адрес учетной записи исполняемых данных (в которой хранится скомпилированный код программы) и полномочия на обновление программы (адрес, уполномоченный вносить изменения в программу).
  • Исполняемая учетная запись программы: Учетная запись, содержащая исполняемый байт программы.
  • Буферная учетная запись: Временная учетная запись, в которой хранится байт-код, пока программа активно развертывается или обновляется. По завершении процесса данные переносятся в учетную запись исполняемых данных программы, а буферная учетная запись закрывается.

Например, здесь приведены ссылки на Solana Explorer для учетной записи программы Token Extensions и соответствующей ей учетной записи исполняемых данных программы.

Учетные записи программ и исполняемых данных

Для простоты вы можете думать о "учётной записи программ" как о самой программе.

Учетные записи программы Учетные записи программы

Info

Адрес "Учетной записи программы» принято называть «Идентификатором программы", который используется для вызова программы.

Учетная запись данных #

Программы Solana являются "stateless", то есть учетные записи программ содержат только исполняемый байт-код программы. Чтобы хранить и изменять дополнительные данные, необходимо создавать новые учетные записи. Такие учетные записи обычно называют "учетными записями данных".

Учетные записи данных могут хранить любые произвольные данные, определенные в коде программы-владельца.

Системная учетная записьСистемная учетная запись

Обратите внимание, что только системная программа может создавать новые учетные записи. После того как системная программа создаст учетную запись, она может передать право собственности на нее другой программе.

Другими словами, создание учетной записи данных для пользовательской программы требует двух шагов:

  1. Вызвать системную программу для создания учетной записи, которая затем передает право собственности пользовательской программе.
  2. Вызов пользовательской программы, которая теперь владеет учетной записью, для инициализации данных учетной записи, как определено в программном коде.

Этот процесс создания учетной записи данных часто абстрагируется как один шаг, но полезно понимать суть этого процесса.