@@ -11,6 +11,9 @@ pub enum DataKey {
1111 Payments ,
1212 Status ,
1313 SweptTo ,
14+ /// Locked destination set on the first successful sweep call.
15+ /// Any subsequent sweep attempt with a different address is rejected.
16+ SweepDestination ,
1417 BaseReserveRemaining ,
1518 AvailableReserve ,
1619 ReserveReclaimed ,
@@ -29,7 +32,6 @@ pub enum DataKey {
2932pub fn is_initialized ( env : & Env ) -> bool {
3033 env. storage ( ) . instance ( ) . has ( & DataKey :: Initialized )
3134}
32-
3335pub fn set_initialized ( env : & Env , value : bool ) {
3436 env. storage ( ) . instance ( ) . set ( & DataKey :: Initialized , & value) ;
3537}
@@ -38,7 +40,6 @@ pub fn set_initialized(env: &Env, value: bool) {
3840pub fn set_creator ( env : & Env , creator : & Address ) {
3941 env. storage ( ) . instance ( ) . set ( & DataKey :: Creator , creator) ;
4042}
41-
4243pub fn get_creator ( env : & Env ) -> Address {
4344 env. storage ( ) . instance ( ) . get ( & DataKey :: Creator ) . unwrap ( )
4445}
@@ -49,7 +50,6 @@ pub fn set_expiry_ledger(env: &Env, ledger: u32) {
4950 . instance ( )
5051 . set ( & DataKey :: ExpiryLedger , & ledger) ;
5152}
52-
5353pub fn get_expiry_ledger ( env : & Env ) -> u32 {
5454 env. storage ( )
5555 . instance ( )
@@ -63,7 +63,6 @@ pub fn set_recovery_address(env: &Env, address: &Address) {
6363 . instance ( )
6464 . set ( & DataKey :: RecoveryAddress , address) ;
6565}
66-
6766pub fn get_recovery_address ( env : & Env ) -> Address {
6867 env. storage ( )
6968 . instance ( )
@@ -75,33 +74,27 @@ pub fn get_recovery_address(env: &Env) -> Address {
7574pub fn has_payments ( env : & Env ) -> bool {
7675 env. storage ( ) . instance ( ) . has ( & DataKey :: Payments )
7776}
78-
7977pub fn get_all_payments ( env : & Env ) -> Map < Address , Payment > {
8078 env. storage ( )
8179 . instance ( )
8280 . get ( & DataKey :: Payments )
8381 . unwrap_or_else ( || Map :: new ( env) )
8482}
85-
8683pub fn set_all_payments ( env : & Env , payments : & Map < Address , Payment > ) {
8784 env. storage ( ) . instance ( ) . set ( & DataKey :: Payments , payments) ;
8885}
89-
9086pub fn add_payment ( env : & Env , payment : Payment ) {
9187 let mut payments = get_all_payments ( env) ;
9288 payments. set ( payment. asset . clone ( ) , payment) ;
9389 set_all_payments ( env, & payments) ;
9490}
95-
9691pub fn get_payment ( env : & Env , asset : & Address ) -> Option < Payment > {
9792 let payments = get_all_payments ( env) ;
9893 payments. get ( asset. clone ( ) )
9994}
100-
10195pub fn get_total_payments ( env : & Env ) -> u32 {
10296 get_all_payments ( env) . len ( )
10397}
104-
10598pub fn has_payment_received ( env : & Env ) -> bool {
10699 has_payments ( env)
107100}
@@ -110,7 +103,6 @@ pub fn has_payment_received(env: &Env) -> bool {
110103pub fn set_status ( env : & Env , status : AccountStatus ) {
111104 env. storage ( ) . instance ( ) . set ( & DataKey :: Status , & status) ;
112105}
113-
114106pub fn get_status ( env : & Env ) -> AccountStatus {
115107 env. storage ( )
116108 . instance ( )
@@ -122,11 +114,20 @@ pub fn get_status(env: &Env) -> AccountStatus {
122114pub fn set_swept_to ( env : & Env , address : & Address ) {
123115 env. storage ( ) . instance ( ) . set ( & DataKey :: SweptTo , address) ;
124116}
125-
126117pub fn get_swept_to ( env : & Env ) -> Option < Address > {
127118 env. storage ( ) . instance ( ) . get ( & DataKey :: SweptTo )
128119}
129120
121+ // Locked sweep destination (set once; immutable after first sweep)
122+ pub fn set_sweep_destination ( env : & Env , address : & Address ) {
123+ env. storage ( )
124+ . instance ( )
125+ . set ( & DataKey :: SweepDestination , address) ;
126+ }
127+ pub fn get_sweep_destination ( env : & Env ) -> Option < Address > {
128+ env. storage ( ) . instance ( ) . get ( & DataKey :: SweepDestination )
129+ }
130+
130131// Reserve lifecycle
131132pub fn init_reserve_tracking ( env : & Env , base_reserve : i128 ) {
132133 set_base_reserve_remaining ( env, base_reserve) ;
@@ -135,78 +136,66 @@ pub fn init_reserve_tracking(env: &Env, base_reserve: i128) {
135136 set_last_sweep_id ( env, 0 ) ;
136137 set_reserve_event_count ( env, 0 ) ;
137138}
138-
139139pub fn set_base_reserve_remaining ( env : & Env , amount : i128 ) {
140140 env. storage ( )
141141 . instance ( )
142142 . set ( & DataKey :: BaseReserveRemaining , & amount) ;
143143}
144-
145144pub fn get_base_reserve_remaining ( env : & Env ) -> i128 {
146145 env. storage ( )
147146 . instance ( )
148147 . get ( & DataKey :: BaseReserveRemaining )
149148 . unwrap_or ( 0 )
150149}
151-
152150pub fn set_available_reserve ( env : & Env , amount : i128 ) {
153151 env. storage ( )
154152 . instance ( )
155153 . set ( & DataKey :: AvailableReserve , & amount) ;
156154}
157-
158155pub fn get_available_reserve ( env : & Env ) -> i128 {
159156 env. storage ( )
160157 . instance ( )
161158 . get ( & DataKey :: AvailableReserve )
162159 . unwrap_or ( 0 )
163160}
164-
165161pub fn set_reserve_reclaimed ( env : & Env , reclaimed : bool ) {
166162 env. storage ( )
167163 . instance ( )
168164 . set ( & DataKey :: ReserveReclaimed , & reclaimed) ;
169165}
170-
171166pub fn is_reserve_reclaimed ( env : & Env ) -> bool {
172167 env. storage ( )
173168 . instance ( )
174169 . get ( & DataKey :: ReserveReclaimed )
175170 . unwrap_or ( false )
176171}
177-
178172pub fn set_last_sweep_id ( env : & Env , sweep_id : u64 ) {
179173 env. storage ( )
180174 . instance ( )
181175 . set ( & DataKey :: LastSweepId , & sweep_id) ;
182176}
183-
184177pub fn get_last_sweep_id ( env : & Env ) -> u64 {
185178 env. storage ( )
186179 . instance ( )
187180 . get ( & DataKey :: LastSweepId )
188181 . unwrap_or ( 0 )
189182}
190-
191183pub fn set_reserve_event_count ( env : & Env , count : u32 ) {
192184 env. storage ( )
193185 . instance ( )
194186 . set ( & DataKey :: ReserveEventCount , & count) ;
195187}
196-
197188pub fn get_reserve_event_count ( env : & Env ) -> u32 {
198189 env. storage ( )
199190 . instance ( )
200191 . get ( & DataKey :: ReserveEventCount )
201192 . unwrap_or ( 0 )
202193}
203-
204194pub fn set_last_reserve_event ( env : & Env , event : & ReserveReclaimed ) {
205195 env. storage ( )
206196 . instance ( )
207197 . set ( & DataKey :: LastReserveEvent , event) ;
208198}
209-
210199pub fn get_last_reserve_event ( env : & Env ) -> Option < ReserveReclaimed > {
211200 env. storage ( ) . instance ( ) . get ( & DataKey :: LastReserveEvent )
212201}
@@ -217,7 +206,6 @@ pub fn set_contract_version(env: &Env, version: u32) {
217206 . instance ( )
218207 . set ( & DataKey :: ContractVersion , & version) ;
219208}
220-
221209pub fn get_contract_version ( env : & Env ) -> u32 {
222210 env. storage ( )
223211 . instance ( )
@@ -245,9 +233,8 @@ pub fn set_authorized_signer(env: &Env, signer: &BytesN<32>) {
245233 . instance ( )
246234 . set ( & DataKey :: AuthorizedSigner , signer) ;
247235}
248-
249- pub fn get_authorized_signer ( env : & Env ) -> Option < BytesN < 32 > > {
250- env. storage ( ) . instance ( ) . get ( & DataKey :: AuthorizedSigner )
236+ pub fn get_authorized_controller ( env : & Env ) -> Option < Address > {
237+ env. storage ( ) . instance ( ) . get ( & DataKey :: AuthorizedController )
251238}
252239
253240// Relayer — the only address authorized to call record_payment()
0 commit comments