SHA256
Поправить Solana-программу регистрации пользователей
Шаг 1 — Rust (users.rs) - Убран server_key: Pubkey из UserMutableFields и UserRecord. - Добавлены address_format_type: u8 и address_format_version: u8 в соответствующие структуры. - Добавлена константа BLOCK_VERSION_1: u8 = 1. - Обновлен write_server_profile_block: версия блока = 1, убраны 32 байта server_key, добавлены 2 байта формата адреса перед server_address. - Обновлен deserialize_record_from_pda для BLOCK_TYPE_SERVER_PROFILE: ожидается BLOCK_VERSION_1, чтение server_key убрано, добавлено чтение type/version формата адреса. - Обновлены конструкторы UserRecord под новые поля. - Обновлена документация формата: shine-solana/shine/doc/SHiNE-user-format-v.1.0.md. - Синхронизированы связанные изменения UI/доков и VERSION.properties (client 1.2.109, server 1.2.101).
This commit is contained in:
@@ -38,7 +38,8 @@ pub struct UserMutableFields {
|
||||
pub last_block_signature: Vec<u8>,
|
||||
pub arweave_tx_id: String,
|
||||
pub is_server: bool,
|
||||
pub server_key: Pubkey,
|
||||
pub address_format_type: u8,
|
||||
pub address_format_version: u8,
|
||||
pub server_address: String,
|
||||
pub sync_servers: Vec<String>,
|
||||
pub access_servers: Vec<String>,
|
||||
@@ -78,7 +79,8 @@ pub struct UserRecord {
|
||||
pub device_key: Pubkey,
|
||||
pub blockchain: BlockchainRecord,
|
||||
pub is_server: bool,
|
||||
pub server_key: Pubkey,
|
||||
pub address_format_type: u8,
|
||||
pub address_format_version: u8,
|
||||
pub server_address: String,
|
||||
pub sync_servers: Vec<String>,
|
||||
pub access_servers: Vec<String>,
|
||||
@@ -298,7 +300,8 @@ pub fn create_user_pda(ctx: Context<CreateUserPda>, args: CreateUserPdaArgs) ->
|
||||
arweave_tx_id: args.fields.arweave_tx_id.clone(),
|
||||
},
|
||||
is_server: args.fields.is_server,
|
||||
server_key: args.fields.server_key,
|
||||
address_format_type: args.fields.address_format_type,
|
||||
address_format_version: args.fields.address_format_version,
|
||||
server_address: args.fields.server_address.clone(),
|
||||
sync_servers: args.fields.sync_servers.clone(),
|
||||
access_servers: args.fields.access_servers.clone(),
|
||||
@@ -465,7 +468,8 @@ pub fn update_user_pda(ctx: Context<UpdateUserPda>, args: UpdateUserPdaArgs) ->
|
||||
arweave_tx_id: args.fields.arweave_tx_id.clone(),
|
||||
},
|
||||
is_server: args.fields.is_server,
|
||||
server_key: args.fields.server_key,
|
||||
address_format_type: args.fields.address_format_type,
|
||||
address_format_version: args.fields.address_format_version,
|
||||
server_address: args.fields.server_address.clone(),
|
||||
sync_servers: args.fields.sync_servers.clone(),
|
||||
access_servers: args.fields.access_servers.clone(),
|
||||
@@ -606,7 +610,8 @@ fn write_server_profile_block(out: &mut Vec<u8>, record: &UserRecord) -> Result<
|
||||
out.push(BLOCK_TYPE_SERVER_PROFILE);
|
||||
out.push(BLOCK_VERSION_0);
|
||||
out.push(1);
|
||||
out.extend_from_slice(record.server_key.as_ref());
|
||||
out.push(record.address_format_type);
|
||||
out.push(record.address_format_version);
|
||||
write_len_prefixed_string(out, &record.server_address)?;
|
||||
require!(
|
||||
record.sync_servers.len() <= MAX_SYNC_SERVERS,
|
||||
@@ -705,7 +710,8 @@ fn deserialize_record_from_pda(raw: &[u8]) -> Result<UserRecord> {
|
||||
let mut device_key: Option<Pubkey> = None;
|
||||
let mut blockchain: Option<BlockchainRecord> = None;
|
||||
let mut is_server = false;
|
||||
let mut server_key = Pubkey::default();
|
||||
let mut address_format_type = 0u8;
|
||||
let mut address_format_version = 0u8;
|
||||
let mut server_address = String::new();
|
||||
let mut sync_servers = Vec::new();
|
||||
let mut access_servers = Vec::new();
|
||||
@@ -737,7 +743,8 @@ fn deserialize_record_from_pda(raw: &[u8]) -> Result<UserRecord> {
|
||||
require!(!is_server, ErrCode::InvalidRecordData);
|
||||
is_server = read_u8(useful, &mut cursor)? == 1;
|
||||
require!(is_server, ErrCode::InvalidRecordData);
|
||||
server_key = Pubkey::new_from_array(read_fixed_32(useful, &mut cursor)?);
|
||||
address_format_type = read_u8(useful, &mut cursor)?;
|
||||
address_format_version = read_u8(useful, &mut cursor)?;
|
||||
server_address = read_len_prefixed_string(useful, &mut cursor)?;
|
||||
let sync_count = read_u8(useful, &mut cursor)? as usize;
|
||||
require!(sync_count <= MAX_SYNC_SERVERS, ErrCode::InvalidRecordData);
|
||||
@@ -772,7 +779,8 @@ fn deserialize_record_from_pda(raw: &[u8]) -> Result<UserRecord> {
|
||||
device_key: device_key.ok_or(error!(ErrCode::InvalidRecordData))?,
|
||||
blockchain: blockchain.ok_or(error!(ErrCode::InvalidRecordData))?,
|
||||
is_server,
|
||||
server_key,
|
||||
address_format_type,
|
||||
address_format_version,
|
||||
server_address,
|
||||
sync_servers,
|
||||
access_servers,
|
||||
|
||||
Reference in New Issue
Block a user