@@ -54,6 +54,18 @@ use events::{EventEmitter, EventLogger, EventValidator, EventHelpers, EventTesti
5454
5555pub mod resolution;
5656
57+ pub mod validation;
58+ use validation:: {
59+ ValidationError , ValidationResult , InputValidator ,
60+ MarketValidator as ValidationMarketValidator ,
61+ OracleValidator as ValidationOracleValidator ,
62+ FeeValidator as ValidationFeeValidator ,
63+ VoteValidator as ValidationVoteValidator ,
64+ DisputeValidator as ValidationDisputeValidator ,
65+ ConfigValidator as ValidationConfigValidator ,
66+ ComprehensiveValidator , ValidationErrorHandler , ValidationDocumentation ,
67+ } ;
68+
5769#[ contract]
5870pub struct PredictifyHybrid ;
5971
@@ -1106,5 +1118,148 @@ impl PredictifyHybrid {
11061118 pub fn validate_event_timestamp ( timestamp : u64 ) -> bool {
11071119 EventHelpers :: is_valid_timestamp ( timestamp)
11081120 }
1121+
1122+ // ===== VALIDATION METHODS =====
1123+
1124+ /// Validate input parameters for market creation
1125+ pub fn validate_market_creation_inputs (
1126+ env : Env ,
1127+ admin : Address ,
1128+ question : String ,
1129+ outcomes : Vec < String > ,
1130+ duration_days : u32 ,
1131+ oracle_config : OracleConfig ,
1132+ ) -> ValidationResult {
1133+ ComprehensiveValidator :: validate_complete_market_creation (
1134+ & env, & admin, & question, & outcomes, & duration_days, & oracle_config
1135+ )
1136+ }
1137+
1138+ /// Validate market state
1139+ pub fn validate_market_state ( env : Env , market_id : Symbol ) -> ValidationResult {
1140+ if let Some ( market) = env. storage ( ) . persistent ( ) . get :: < Symbol , Market > ( & market_id) {
1141+ ComprehensiveValidator :: validate_market_state ( & env, & market, & market_id)
1142+ } else {
1143+ ValidationResult :: invalid ( )
1144+ }
1145+ }
1146+
1147+ /// Validate vote parameters
1148+ pub fn validate_vote_inputs (
1149+ env : Env ,
1150+ user : Address ,
1151+ market_id : Symbol ,
1152+ outcome : String ,
1153+ stake_amount : i128 ,
1154+ ) -> ValidationResult {
1155+ let mut result = ValidationResult :: valid ( ) ;
1156+
1157+ // Validate user address
1158+ if let Err ( _error) = InputValidator :: validate_address ( & env, & user) {
1159+ result. add_error ( ) ;
1160+ }
1161+
1162+ // Validate outcome string
1163+ if let Err ( _error) = InputValidator :: validate_string ( & env, & outcome, 1 , 100 ) {
1164+ result. add_error ( ) ;
1165+ }
1166+
1167+ // Validate stake amount
1168+ if let Err ( _error) = ValidationVoteValidator :: validate_stake_amount ( & stake_amount) {
1169+ result. add_error ( ) ;
1170+ }
1171+
1172+ // Validate market exists and is valid for voting
1173+ if let Some ( market) = env. storage ( ) . persistent ( ) . get :: < Symbol , Market > ( & market_id) {
1174+ if let Err ( _error) = ValidationMarketValidator :: validate_market_for_voting ( & env, & market, & market_id) {
1175+ result. add_error ( ) ;
1176+ }
1177+
1178+ // Validate outcome against market outcomes
1179+ if let Err ( _error) = ValidationVoteValidator :: validate_outcome ( & env, & outcome, & market. outcomes ) {
1180+ result. add_error ( ) ;
1181+ }
1182+ } else {
1183+ result. add_error ( ) ;
1184+ }
1185+
1186+ result
1187+ }
1188+
1189+ /// Validate oracle configuration
1190+ pub fn validate_oracle_config ( env : Env , oracle_config : OracleConfig ) -> ValidationResult {
1191+ let mut result = ValidationResult :: valid ( ) ;
1192+
1193+ if let Err ( error) = ValidationOracleValidator :: validate_oracle_config ( & env, & oracle_config) {
1194+ result. add_error ( ) ;
1195+ }
1196+
1197+ result
1198+ }
1199+
1200+ /// Validate fee configuration
1201+ pub fn validate_fee_config (
1202+ env : Env ,
1203+ platform_fee_percentage : i128 ,
1204+ creation_fee : i128 ,
1205+ min_fee_amount : i128 ,
1206+ max_fee_amount : i128 ,
1207+ collection_threshold : i128 ,
1208+ ) -> ValidationResult {
1209+ ValidationFeeValidator :: validate_fee_config (
1210+ & env, & platform_fee_percentage, & creation_fee, & min_fee_amount, & max_fee_amount, & collection_threshold
1211+ )
1212+ }
1213+
1214+ /// Validate dispute creation
1215+ pub fn validate_dispute_creation (
1216+ env : Env ,
1217+ user : Address ,
1218+ market_id : Symbol ,
1219+ dispute_stake : i128 ,
1220+ ) -> ValidationResult {
1221+ let mut result = ValidationResult :: valid ( ) ;
1222+
1223+ // Validate user address
1224+ if let Err ( _error) = InputValidator :: validate_address ( & env, & user) {
1225+ result. add_error ( ) ;
1226+ }
1227+
1228+ // Validate dispute stake
1229+ if let Err ( _error) = ValidationDisputeValidator :: validate_dispute_stake ( & dispute_stake) {
1230+ result. add_error ( ) ;
1231+ }
1232+
1233+ // Validate market exists and is resolved
1234+ if let Some ( market) = env. storage ( ) . persistent ( ) . get :: < Symbol , Market > ( & market_id) {
1235+ if let Err ( _error) = ValidationMarketValidator :: validate_market_for_fee_collection ( & env, & market, & market_id) {
1236+ result. add_error ( ) ;
1237+ }
1238+ } else {
1239+ result. add_error ( ) ;
1240+ }
1241+
1242+ result
1243+ }
1244+
1245+ /// Get validation rules documentation
1246+ pub fn get_validation_rules ( env : Env ) -> Map < String , String > {
1247+ ValidationDocumentation :: get_validation_rules ( & env)
1248+ }
1249+
1250+ /// Get validation error codes
1251+ pub fn get_validation_error_codes ( env : Env ) -> Map < String , String > {
1252+ ValidationDocumentation :: get_validation_error_codes ( & env)
1253+ }
1254+
1255+ /// Get validation system overview
1256+ pub fn get_validation_overview ( env : Env ) -> String {
1257+ ValidationDocumentation :: get_validation_overview ( & env)
1258+ }
1259+
1260+ /// Test validation utilities
1261+ pub fn test_validation_utilities ( env : Env ) -> ValidationResult {
1262+ validation:: ValidationTestingUtils :: create_test_validation_result ( & env)
1263+ }
11091264}
11101265mod test;
0 commit comments