@@ -25,7 +25,23 @@ pub use crate::utils::*;
25
25
type DonationId = u64 ;
26
26
type TimestampMs = u64 ;
27
27
28
- /// Registry Contract
28
+ /// DEPRECATED (V1) Registry Contract
29
+ #[ near_bindgen]
30
+ #[ derive( BorshDeserialize , BorshSerialize ) ]
31
+ pub struct ContractV1 {
32
+ /// Contract "source" metadata, as specified in NEP 0330 (https://github.com/near/NEPs/blob/master/neps/nep-0330.md), with addition of `commit_hash`
33
+ contract_source_metadata : LazyOption < VersionedContractSourceMetadata > ,
34
+ owner : AccountId ,
35
+ protocol_fee_basis_points : u32 ,
36
+ referral_fee_basis_points : u32 ,
37
+ protocol_fee_recipient_account : AccountId ,
38
+ donations_by_id : UnorderedMap < DonationId , VersionedDonation > ,
39
+ donation_ids_by_recipient_id : LookupMap < AccountId , UnorderedSet < DonationId > > ,
40
+ donation_ids_by_donor_id : LookupMap < AccountId , UnorderedSet < DonationId > > ,
41
+ donation_ids_by_ft_id : LookupMap < AccountId , UnorderedSet < DonationId > > ,
42
+ }
43
+
44
+ /// CURRENT Registry Contract
29
45
#[ near_bindgen]
30
46
#[ derive( BorshDeserialize , BorshSerialize ) ]
31
47
pub struct Contract {
@@ -39,8 +55,13 @@ pub struct Contract {
39
55
donation_ids_by_recipient_id : LookupMap < AccountId , UnorderedSet < DonationId > > ,
40
56
donation_ids_by_donor_id : LookupMap < AccountId , UnorderedSet < DonationId > > ,
41
57
donation_ids_by_ft_id : LookupMap < AccountId , UnorderedSet < DonationId > > ,
58
+ total_donations_amount : Balance , // Add total_donations_amount to track total donations amount without iterating through all donations
59
+ net_donations_amount : Balance , // Add net_donations_amount to track net donations amount (after fees) without iterating through all donations
60
+ total_protocol_fees : Balance , // Add total_protocol_fees to track total protocol fees without iterating through all donations
61
+ total_referrer_fees : Balance , // Add total_referrer_fees to track total referral fees without iterating through all donations
42
62
}
43
63
64
+
44
65
#[ derive( BorshSerialize , BorshDeserialize ) ]
45
66
pub enum VersionedContract {
46
67
Current ( Contract ) ,
@@ -63,6 +84,11 @@ pub struct Config {
63
84
pub protocol_fee_basis_points : u32 ,
64
85
pub referral_fee_basis_points : u32 ,
65
86
pub protocol_fee_recipient_account : AccountId ,
87
+ pub total_donations_amount : U128 ,
88
+ pub net_donations_amount : U128 ,
89
+ pub total_donations_count : U64 ,
90
+ pub total_protocol_fees : U128 ,
91
+ pub total_referrer_fees : U128 ,
66
92
}
67
93
68
94
#[ derive( BorshSerialize , BorshStorageKey ) ]
@@ -97,6 +123,10 @@ impl Contract {
97
123
donation_ids_by_recipient_id : LookupMap :: new ( StorageKey :: DonationIdsByRecipientId ) ,
98
124
donation_ids_by_donor_id : LookupMap :: new ( StorageKey :: DonationIdsByDonorId ) ,
99
125
donation_ids_by_ft_id : LookupMap :: new ( StorageKey :: DonationIdsByFtId ) ,
126
+ total_donations_amount : 0 ,
127
+ net_donations_amount : 0 ,
128
+ total_protocol_fees : 0 ,
129
+ total_referrer_fees : 0 ,
100
130
contract_source_metadata : LazyOption :: new (
101
131
StorageKey :: SourceMetadata ,
102
132
Some ( & VersionedContractSourceMetadata :: Current ( source_metadata) ) ,
@@ -110,8 +140,55 @@ impl Contract {
110
140
protocol_fee_basis_points : self . protocol_fee_basis_points ,
111
141
referral_fee_basis_points : self . referral_fee_basis_points ,
112
142
protocol_fee_recipient_account : self . protocol_fee_recipient_account . clone ( ) ,
143
+ total_donations_amount : self . total_donations_amount . into ( ) ,
144
+ net_donations_amount : self . net_donations_amount . into ( ) ,
145
+ total_donations_count : self . donations_by_id . len ( ) . into ( ) ,
146
+ total_protocol_fees : self . total_protocol_fees . into ( ) ,
147
+ total_referrer_fees : self . total_referrer_fees . into ( ) ,
113
148
}
114
149
}
150
+
151
+ // LEAVING FOR REFERENCE - this is function used to migrate data in upgrade from v1.0.0 to v2.0.0
152
+ // #[private]
153
+ // pub fn migrate_chunk_temp(&mut self, donation_ids: Vec<DonationId>) {
154
+ // for donation_id in donation_ids {
155
+ // log!("Migrating donation {}", donation_id);
156
+ // let donation = Donation::from(self
157
+ // .donations_by_id
158
+ // .get(&donation_id)
159
+ // .expect(format!("Donation {} not found", donation_id).as_str()));
160
+ // self.total_donations_amount += donation.total_amount.0;
161
+ // let mut net_amount = donation.total_amount.0 - donation.protocol_fee.0;
162
+ // self.total_protocol_fees += donation.protocol_fee.0;
163
+ // if let Some(referral_fee) = donation.referrer_fee {
164
+ // net_amount -= referral_fee.0;
165
+ // self.total_referrer_fees += referral_fee.0;
166
+ // }
167
+ // self.net_donations_amount += net_amount;
168
+ // }
169
+ // }
170
+
171
+ // LEAVING FOR REFERENCE - this is the initFunction used in upgrade from v1.0.0 to v2.0.0
172
+ // #[private]
173
+ // #[init(ignore_state)]
174
+ // pub fn migrate() -> Self {
175
+ // let old_state: ContractV1 = env::state_read().expect("state read failed");
176
+ // Self {
177
+ // owner: old_state.owner,
178
+ // protocol_fee_basis_points: old_state.protocol_fee_basis_points,
179
+ // referral_fee_basis_points: old_state.referral_fee_basis_points,
180
+ // protocol_fee_recipient_account: old_state.protocol_fee_recipient_account,
181
+ // donations_by_id: old_state.donations_by_id,
182
+ // donation_ids_by_recipient_id: old_state.donation_ids_by_recipient_id,
183
+ // donation_ids_by_donor_id: old_state.donation_ids_by_donor_id,
184
+ // donation_ids_by_ft_id: old_state.donation_ids_by_ft_id,
185
+ // total_donations_amount: 0,
186
+ // net_donations_amount: 0,
187
+ // total_protocol_fees: 0,
188
+ // total_referrer_fees: 0,
189
+ // contract_source_metadata: old_state.contract_source_metadata,
190
+ // }
191
+ // }
115
192
}
116
193
117
194
impl Default for Contract {
@@ -125,6 +202,10 @@ impl Default for Contract {
125
202
donation_ids_by_recipient_id : LookupMap :: new ( StorageKey :: DonationIdsByRecipientId ) ,
126
203
donation_ids_by_donor_id : LookupMap :: new ( StorageKey :: DonationIdsByDonorId ) ,
127
204
donation_ids_by_ft_id : LookupMap :: new ( StorageKey :: DonationIdsByFtId ) ,
205
+ total_donations_amount : 0 ,
206
+ net_donations_amount : 0 ,
207
+ total_protocol_fees : 0 ,
208
+ total_referrer_fees : 0 ,
128
209
contract_source_metadata : LazyOption :: new (
129
210
StorageKey :: SourceMetadata ,
130
211
Some ( & VersionedContractSourceMetadata :: Current (
0 commit comments