This repository was archived by the owner on Mar 11, 2025. It is now read-only.
Commit dd035ed 1 parent 00b8a4b commit dd035ed Copy full SHA for dd035ed
File tree 4 files changed +33
-4
lines changed
4 files changed +33
-4
lines changed Original file line number Diff line number Diff line change @@ -169,7 +169,8 @@ export async function transferNameOwnership(
169
169
nameAccountKey ,
170
170
newOwner ,
171
171
curentNameOwner ,
172
- nameClass
172
+ nameClass ,
173
+ nameParent
173
174
) ;
174
175
175
176
return transferInstr ;
Original file line number Diff line number Diff line change @@ -138,7 +138,8 @@ export function transferInstruction(
138
138
nameAccountKey : PublicKey ,
139
139
newOwnerKey : PublicKey ,
140
140
currentNameOwnerKey : PublicKey ,
141
- nameClassKey ?: PublicKey
141
+ nameClassKey ?: PublicKey ,
142
+ nameParent ?:PublicKey
142
143
) : TransactionInstruction {
143
144
const buffers = [ Buffer . from ( Int8Array . from ( [ 2 ] ) ) , newOwnerKey . toBuffer ( ) ] ;
144
145
@@ -165,6 +166,14 @@ export function transferInstruction(
165
166
} ) ;
166
167
}
167
168
169
+ if ( nameParent ) {
170
+ keys . push ( {
171
+ pubkey : nameParent ,
172
+ isSigner : false ,
173
+ isWritable : false ,
174
+ } ) ;
175
+ }
176
+
168
177
return new TransactionInstruction ( {
169
178
keys,
170
179
programId : nameProgramId ,
Original file line number Diff line number Diff line change @@ -70,8 +70,13 @@ pub enum NameRegistryInstruction {
70
70
/// * If account class is not `Pubkey::default()`:
71
71
/// 0. `[writeable]` Name record to be transferred
72
72
/// 1. `[signer]` Account owner
73
- /// 1 . `[signer]` Account class
73
+ /// 2 . `[signer]` Account class
74
74
///
75
+ /// * If the signer is the parent name account owner
76
+ /// 0. `[writeable]` Name record to be transferred
77
+ /// 1. `[signer]` Account owner
78
+ /// 2. `[signer]` Account class
79
+ /// 3. `[]` Parent name record
75
80
Transfer { new_owner : Pubkey } ,
76
81
77
82
/// Delete a name record.
Original file line number Diff line number Diff line change @@ -169,12 +169,26 @@ impl Processor {
169
169
let name_account = next_account_info ( accounts_iter) ?;
170
170
let name_owner = next_account_info ( accounts_iter) ?;
171
171
let name_class_opt = next_account_info ( accounts_iter) . ok ( ) ;
172
+ let parent_name = next_account_info ( accounts_iter) . ok ( ) ;
172
173
173
174
let mut name_record_header =
174
175
NameRecordHeader :: unpack_from_slice ( & name_account. data . borrow ( ) ) ?;
175
176
176
177
// Verifications
177
- if !name_owner. is_signer || name_record_header. owner != * name_owner. key {
178
+ let is_parent_owner = if let Some ( parent_name) = parent_name {
179
+ if name_record_header. parent_name != * parent_name. key {
180
+ msg ! ( "Invalid parent name account" ) ;
181
+ return Err ( ProgramError :: InvalidArgument ) ;
182
+ }
183
+ let parent_name_record_header =
184
+ NameRecordHeader :: unpack_from_slice ( & parent_name. data . borrow ( ) ) ?;
185
+ parent_name_record_header. owner == * name_owner. key
186
+ } else {
187
+ false
188
+ } ;
189
+ if !name_owner. is_signer
190
+ || ( name_record_header. owner != * name_owner. key && !is_parent_owner)
191
+ {
178
192
msg ! ( "The given name owner is incorrect or not a signer." ) ;
179
193
return Err ( ProgramError :: InvalidArgument ) ;
180
194
}
You can’t perform that action at this time.
0 commit comments