@@ -77,7 +77,7 @@ pub fn set_peer(ctx: Context<SetPeer>, args: SetPeerArgs) -> Result<()> {
77
77
Ok ( ( ) )
78
78
}
79
79
80
- // * Register transceivers
80
+ // * Transceiver registration
81
81
82
82
#[ derive( Accounts ) ]
83
83
pub struct RegisterTransceiver < ' info > {
@@ -92,13 +92,16 @@ pub struct RegisterTransceiver<'info> {
92
92
#[ account( mut ) ]
93
93
pub payer : Signer < ' info > ,
94
94
95
- #[ account( executable) ]
95
+ #[ account(
96
+ executable,
97
+ constraint = transceiver. key( ) != Pubkey :: default ( ) @ NTTError :: InvalidTransceiverProgram
98
+ ) ]
96
99
/// CHECK: transceiver is meant to be a transceiver program. Arguably a `Program` constraint could be
97
100
/// used here that wraps the Transceiver account type.
98
101
pub transceiver : UncheckedAccount < ' info > ,
99
102
100
103
#[ account(
101
- init ,
104
+ init_if_needed ,
102
105
space = 8 + RegisteredTransceiver :: INIT_SPACE ,
103
106
payer = payer,
104
107
seeds = [ RegisteredTransceiver :: SEED_PREFIX , transceiver. key( ) . as_ref( ) ] ,
@@ -110,17 +113,23 @@ pub struct RegisterTransceiver<'info> {
110
113
}
111
114
112
115
pub fn register_transceiver ( ctx : Context < RegisterTransceiver > ) -> Result < ( ) > {
113
- let id = ctx. accounts . config . next_transceiver_id ;
114
- ctx. accounts . config . next_transceiver_id += 1 ;
116
+ // initialize registered transceiver with new id on init
117
+ if ctx. accounts . registered_transceiver . transceiver_address == Pubkey :: default ( ) {
118
+ let id = ctx. accounts . config . next_transceiver_id ;
119
+ ctx. accounts . config . next_transceiver_id += 1 ;
120
+ ctx. accounts
121
+ . registered_transceiver
122
+ . set_inner ( RegisteredTransceiver {
123
+ bump : ctx. bumps . registered_transceiver ,
124
+ id,
125
+ transceiver_address : ctx. accounts . transceiver . key ( ) ,
126
+ } ) ;
127
+ }
128
+
115
129
ctx. accounts
116
- . registered_transceiver
117
- . set_inner ( RegisteredTransceiver {
118
- bump : ctx. bumps . registered_transceiver ,
119
- id,
120
- transceiver_address : ctx. accounts . transceiver . key ( ) ,
121
- } ) ;
122
-
123
- ctx. accounts . config . enabled_transceivers . set ( id, true ) ?;
130
+ . config
131
+ . enabled_transceivers
132
+ . set ( ctx. accounts . registered_transceiver . id , true ) ?;
124
133
Ok ( ( ) )
125
134
}
126
135
@@ -242,6 +251,7 @@ pub fn set_paused(ctx: Context<SetPaused>, paused: bool) -> Result<()> {
242
251
}
243
252
244
253
// * Set Threshold
254
+
245
255
#[ derive( Accounts ) ]
246
256
#[ instruction( threshold: u8 ) ]
247
257
pub struct SetThreshold < ' info > {
0 commit comments