mirror of
				https://github.com/Instadapp/trustwallet-assets.git
				synced 2024-07-29 22:37:31 +00:00 
			
		
		
		
	Update merge-fee-bot config, refactor validators (#17118)
This commit is contained in:
		
							parent
							
								
									e7f9efcd2c
								
							
						
					
					
						commit
						bd78bf44db
					
				
							
								
								
									
										13
									
								
								.github/merge-fee-bot.config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/merge-fee-bot.config.yml
									
									
									
									
										vendored
									
									
								
							|  | @ -44,7 +44,11 @@ message: | |||
|     * One PR should be for a single project; PR's with more than 10 logos will be rejected.\n | ||||
|     * Payment evaluation happens automatically, but with a few minutes delay.  When payment is detected, an Accept Review is automatically placed on the PR, which is a condition for merge.\n | ||||
|     * Evaluating the PR is done manually, and it is merged only if all conditions are satisfied.\n | ||||
|     * TWT-BEP2 is supported (Binance Chain), TWT-BEP20 version on Smart Chain is not." | ||||
|     * TWT-BEP2 is supported (Binance Chain), TWT-BEP20 version on Smart Chain is not.\n\n | ||||
|     There will be a fee to process this request. None of it goes to the developers.\n | ||||
|     Before paying the fee, make sure new tokens fulfill the minimum circulation and other acceptance criteria.\n | ||||
|     If you are paying TWT for the submission, this will be burned automatically. There will be no refunds." | ||||
| 
 | ||||
|   not_received: "Fee has not been received yet (or not fully).\n\n" | ||||
|   received: "Fee is PAID, fantastic!  Thanks!\n\n | ||||
|     The PR will be evaluated soon by a maintainer, and if merged, the new logos should be visible in Trust Wallet.\n | ||||
|  | @ -59,6 +63,7 @@ message: | |||
|     See the [Pull Request Fee FAQ](https://developer.trustwallet.com/add_new_asset/pr-fee)." | ||||
|   closing_old_pr: "This PR is being closed due to inactivity. If you wish to continue, please have us reopen the PR before sending your payment, or just create a new one.\n | ||||
|     Do NOT send payments for closed PR, as the fee may by lost!" | ||||
|   burned: "$PAID_AMOUNT $PAID_SYMBOL have been successfully [burned]($BURN_EXPLORER_LINK)" | ||||
| 
 | ||||
| label: | ||||
|   requested: 'Payment Status: Requested' | ||||
|  | @ -70,9 +75,9 @@ user: | |||
|   moderators: Iamdeadlyz,Cryptocool1,cryptomanz | ||||
| 
 | ||||
| timeout: | ||||
|   max_age_close_hours: 48 | ||||
|   max_idle_remind_hours: 22 | ||||
|   bg_check_delay_sec: 300 | ||||
|   max_age_close: 48h | ||||
|   max_idle_remind: 22h | ||||
|   background_check: 1m | ||||
| 
 | ||||
| limitations: | ||||
|   pr_files: 20 | ||||
|  |  | |||
|  | @ -13,6 +13,8 @@ func NewService(fileProvider *file.Service) *Service { | |||
| } | ||||
| 
 | ||||
| func (s *Service) GetValidator(f *file.AssetFile) []Validator { | ||||
| 	jsonValidator := Validator{Name: "JSON validation", Run: s.ValidateJSON} | ||||
| 
 | ||||
| 	switch f.Type() { | ||||
| 	case file.TypeRootFolder: | ||||
| 		return []Validator{ | ||||
|  | @ -36,18 +38,21 @@ func (s *Service) GetValidator(f *file.AssetFile) []Validator { | |||
| 		} | ||||
| 	case file.TypeAssetInfoFile: | ||||
| 		return []Validator{ | ||||
| 			{Name: "Asset info (is valid json, fields)", Run: s.ValidateAssetInfoFile}, | ||||
| 			jsonValidator, | ||||
| 			{Name: "Asset info", Run: s.ValidateAssetInfoFile}, | ||||
| 		} | ||||
| 	case file.TypeChainInfoFile: | ||||
| 		return []Validator{ | ||||
| 			{Name: "Chain Info (is valid json, fields)", Run: s.ValidateChainInfoFile}, | ||||
| 			{Name: "Chain Info", Run: s.ValidateChainInfoFile}, | ||||
| 		} | ||||
| 	case file.TypeValidatorsListFile: | ||||
| 		return []Validator{ | ||||
| 			jsonValidator, | ||||
| 			{Name: "Validators list file", Run: s.ValidateValidatorsListFile}, | ||||
| 		} | ||||
| 	case file.TypeTokenListFile: | ||||
| 		return []Validator{ | ||||
| 			jsonValidator, | ||||
| 			{Name: "Token list (if assets from list present in chain)", Run: s.ValidateTokenListFile}, | ||||
| 		} | ||||
| 	case file.TypeChainInfoFolder: | ||||
|  |  | |||
|  | @ -17,6 +17,27 @@ import ( | |||
| 	"github.com/trustwallet/go-primitives/types" | ||||
| ) | ||||
| 
 | ||||
| func (s *Service) ValidateJSON(f *file.AssetFile) error { | ||||
| 	file, err := os.Open(f.Path()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer file.Close() | ||||
| 
 | ||||
| 	buf := bytes.NewBuffer(nil) | ||||
| 	_, err = buf.ReadFrom(file) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = validation.ValidateJson(buf.Bytes()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (s *Service) ValidateRootFolder(f *file.AssetFile) error { | ||||
| 	file, err := os.Open(f.Path()) | ||||
| 	if err != nil { | ||||
|  | @ -82,7 +103,7 @@ func (s *Service) ValidateImage(f *file.AssetFile) error { | |||
| 	} | ||||
| 
 | ||||
| 	// TODO: Replace it with validation.ValidatePngImageDimension when "assets" repo is fixed.
 | ||||
| 	// Read comments inValidatePngImageDimensionForCI.
 | ||||
| 	// Read comments in ValidatePngImageDimensionForCI.
 | ||||
| 	err = validation.ValidatePngImageDimensionForCI(f.Path()) | ||||
| 	if err != nil { | ||||
| 		compErr.Append(err) | ||||
|  | @ -202,11 +223,6 @@ func (s *Service) ValidateChainInfoFile(f *file.AssetFile) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = validation.ValidateJson(buf.Bytes()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = file.Seek(0, io.SeekStart) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("%w: failed to seek reader", validation.ErrInvalidJson) | ||||
|  | @ -243,11 +259,6 @@ func (s *Service) ValidateAssetInfoFile(f *file.AssetFile) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = validation.ValidateJson(buf.Bytes()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = file.Seek(0, io.SeekStart) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("%w: failed to seek reader", validation.ErrInvalidJson) | ||||
|  | @ -283,11 +294,6 @@ func (s *Service) ValidateValidatorsListFile(f *file.AssetFile) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = validation.ValidateJson(buf.Bytes()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	var model []list.Model | ||||
| 	err = json.Unmarshal(buf.Bytes(), &model) | ||||
| 	if err != nil { | ||||
|  | @ -336,6 +342,7 @@ func isStackingChain(c coin.Coin) bool { | |||
| 	return false | ||||
| } | ||||
| 
 | ||||
| // nolint:funlen
 | ||||
| func (s *Service) ValidateTokenListFile(f *file.AssetFile) error { | ||||
| 	file, err := os.Open(f.Path()) | ||||
| 	if err != nil { | ||||
|  | @ -348,34 +355,20 @@ func (s *Service) ValidateTokenListFile(f *file.AssetFile) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = validation.ValidateJson(buf.Bytes()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	var model TokenList | ||||
| 	err = json.Unmarshal(buf.Bytes(), &model) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = compareTokenlistWithAssets(model.Tokens, f.Chain().Handle) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func compareTokenlistWithAssets(tokens []TokenItem, chain string) error { | ||||
| 	compErr := validation.NewErrComposite() | ||||
| 
 | ||||
| 	for _, token := range tokens { | ||||
| 	for _, token := range model.Tokens { | ||||
| 		if token.Type == types.Coin { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
| 		assetPath := path.GetAssetInfoPath(chain, token.Address) | ||||
| 		assetPath := path.GetAssetInfoPath(f.Chain().Handle, token.Address) | ||||
| 
 | ||||
| 		infoFile, err := os.Open(assetPath) | ||||
| 		if err != nil { | ||||
|  | @ -396,15 +389,15 @@ func compareTokenlistWithAssets(tokens []TokenItem, chain string) error { | |||
| 		} | ||||
| 
 | ||||
| 		if string(token.Type) != *infoAsset.Type { | ||||
| 			compErr.Append(fmt.Errorf("field type differs from %s", assetPath)) | ||||
| 			compErr.Append(fmt.Errorf("field 'type' differs from %s", assetPath)) | ||||
| 		} | ||||
| 
 | ||||
| 		if token.Symbol != *infoAsset.Symbol { | ||||
| 			compErr.Append(fmt.Errorf("field symbol differs from %s", assetPath)) | ||||
| 			compErr.Append(fmt.Errorf("field 'symbol' differs from %s", assetPath)) | ||||
| 		} | ||||
| 
 | ||||
| 		if token.Decimals != uint(*infoAsset.Decimals) { | ||||
| 			compErr.Append(fmt.Errorf("field decimals differs from %s", assetPath)) | ||||
| 			compErr.Append(fmt.Errorf("field 'decimals' differs from %s", assetPath)) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel
						Daniel