add: kitabu validators contract (untested)
This commit is contained in:
		
							parent
							
								
									790035b43a
								
							
						
					
					
						commit
						407add9aa5
					
				
							
								
								
									
										161
									
								
								bloxberg.json
									
									
									
									
									
								
							
							
						
						
									
										161
									
								
								bloxberg.json
									
									
									
									
									
								
							| @ -1,161 +0,0 @@ | ||||
| { | ||||
|   "name": "Bloxberg", | ||||
|   "engine": { | ||||
|     "authorityRound": { | ||||
|       "params": { | ||||
|         "maximumUncleCountTransition": 0, | ||||
|         "maximumUncleCount": 0, | ||||
|         "stepDuration": "5", | ||||
|         "validators": { | ||||
|           "multi": { | ||||
|             "0": { | ||||
|               "list": [ | ||||
|                 "0x25327e6ec0B7A0b552Fb907bD6b3726A2F3D99FE", | ||||
|                 "0x92db87a17af5083b3327f35b3d77d8d4abfb0cdc", | ||||
|                 "0x09e5abedae50639406df6c86d748fbaff66a6df1", | ||||
|                 "0x411636d64bb7ba6e1cc3b950bec9a837f59cd46f" | ||||
|               ] | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "params": { | ||||
|     "gasLimitBoundDivisor": "0x400", | ||||
|     "maximumExtraDataSize": "0x20", | ||||
|     "minGasLimit": "0x7A1200", | ||||
|     "networkID": "0x2325", | ||||
| 
 | ||||
|     "eip140Transition": "0x0", | ||||
|     "eip211Transition": "0x0", | ||||
|     "eip214Transition": "0x0", | ||||
|     "eip658Transition": "0x0", | ||||
| 
 | ||||
|     "eip145Transition": "0x0", | ||||
|     "eip1014Transition": "0x0", | ||||
|     "eip1052Transition": "0x0", | ||||
| 
 | ||||
|     "eip1283Transition": "0x0", | ||||
|     "eip1344Transition": "0x0", | ||||
|     "eip1706Transition": "0x0", | ||||
|     "eip1884Transition": "0x0", | ||||
|     "eip2028Transition": "0x0" | ||||
|   }, | ||||
|   "genesis": { | ||||
|     "seal": { | ||||
|       "authorityRound": { | ||||
|         "step": "0x0", | ||||
|         "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" | ||||
|       } | ||||
|     }, | ||||
|     "difficulty": "0x20000", | ||||
|     "gasLimit": "0x7A1200" | ||||
|   }, | ||||
|   "accounts": { | ||||
|     "0x0000000000000000000000000000000000000001": { | ||||
|       "balance": "1", | ||||
|       "builtin": { | ||||
|         "name": "ecrecover", | ||||
|         "pricing": { "linear": { "base": 3000, "word": 0 } } | ||||
|       } | ||||
|     }, | ||||
|     "0x0000000000000000000000000000000000000002": { | ||||
|       "balance": "1", | ||||
|       "builtin": { | ||||
|         "name": "sha256", | ||||
|         "pricing": { "linear": { "base": 60, "word": 12 } } | ||||
|       } | ||||
|     }, | ||||
|     "0x0000000000000000000000000000000000000003": { | ||||
|       "balance": "1", | ||||
|       "builtin": { | ||||
|         "name": "ripemd160", | ||||
|         "pricing": { "linear": { "base": 600, "word": 120 } } | ||||
|       } | ||||
|     }, | ||||
|     "0x0000000000000000000000000000000000000004": { | ||||
|       "balance": "1", | ||||
|       "builtin": { | ||||
|         "name": "identity", | ||||
|         "pricing": { "linear": { "base": 15, "word": 3 } } | ||||
|       } | ||||
|     }, | ||||
|     "0x0000000000000000000000000000000000000005": { | ||||
|       "builtin": { | ||||
|         "name": "modexp", | ||||
|         "activate_at": 0, | ||||
|         "pricing": { "modexp": { "divisor": 20 } } | ||||
|       } | ||||
|     }, | ||||
|     "0x0000000000000000000000000000000000000006": { | ||||
|       "builtin": { | ||||
|         "name": "alt_bn128_add", | ||||
|         "activate_at": 0, | ||||
|         "pricing": { | ||||
|           "alt_bn128_const_operations": { | ||||
|             "price": 500 | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "0000000000000000000000000000000000000007": { | ||||
|       "builtin": { | ||||
|         "name": "alt_bn128_mul", | ||||
|         "pricing": { | ||||
|           "0": { | ||||
|             "info": "Istanbul HF", | ||||
|             "price": { | ||||
|               "alt_bn128_const_operations": { | ||||
|                 "price": 6000 | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "0000000000000000000000000000000000000008": { | ||||
|       "builtin": { | ||||
|         "name": "alt_bn128_pairing", | ||||
|         "pricing": { | ||||
|           "0": { | ||||
|             "info": "Istanbul HF", | ||||
|             "price": { | ||||
|               "alt_bn128_pairing": { | ||||
|                 "base": 45000, | ||||
|                 "pair": 34000 | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "0x0000000000000000000000000000000000000009": { | ||||
|       "builtin": { | ||||
|         "name": "blake2_f", | ||||
|         "pricing": { | ||||
|           "0": { | ||||
|             "info": "Istanbul HF", | ||||
|             "price": { | ||||
|               "blake2_f": { | ||||
|                 "gas_per_round": 1 | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "0x25327e6ec0B7A0b552Fb907bD6b3726A2F3D99FE": { | ||||
|       "balance": "100000000000000000000000000000000" | ||||
|     }, | ||||
|     "0x92db87a17af5083b3327f35b3d77d8d4abfb0cdc": { | ||||
|       "balance": "100000000000000000000000000000000" | ||||
|     }, | ||||
|     "0x09e5abedae50639406df6c86d748fbaff66a6df1": { | ||||
|       "balance": "100000000000000000000000000000000" | ||||
|     }, | ||||
|     "0x411636d64bb7ba6e1cc3b950bec9a837f59cd46f": { | ||||
|       "balance": "100000000000000000000000000000000" | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										93
									
								
								contracts/validators/KitabuValidators.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								contracts/validators/KitabuValidators.sol
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | ||||
| // Author: Mohamed Sohail <mohamedsohailazim@gmail.com> | ||||
| // SPDX-License-Identifier:	GPL-3.0-or-later | ||||
| 
 | ||||
| pragma solidity >=0.6.12; | ||||
| 
 | ||||
| contract KitabuValidators { | ||||
|     address constant SYSTEM_ADDRESS = | ||||
|         0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE; | ||||
|     address public admissionController = | ||||
|         0x77Bea3320Fa46aFF3C7c128B83F5E436596Ba73D; | ||||
| 
 | ||||
|     address[] public validators; | ||||
| 
 | ||||
|     bool public finalized; | ||||
| 
 | ||||
|     mapping(address => uint256) validatorSetIndex; | ||||
| 
 | ||||
|     event NewAdmissionController( | ||||
|         address indexed old, | ||||
|         address indexed newController | ||||
|     ); | ||||
|     event InitiateChange(bytes32 indexed parentHash, address[] newSet); | ||||
|     event ChangeFinalized(address[] currentSet); | ||||
| 
 | ||||
|     modifier onlySystemChange() { | ||||
|         require(msg.sender == SYSTEM_ADDRESS); | ||||
|         _; | ||||
|     } | ||||
| 
 | ||||
|     modifier pendingFinalization() { | ||||
|         require(finalized); | ||||
|         _; | ||||
|     } | ||||
| 
 | ||||
|     modifier onlyAdmissionController() { | ||||
|         require(msg.sender == admissionController); | ||||
|         _; | ||||
|     } | ||||
| 
 | ||||
|     constructor() { | ||||
|         validators.push(admissionController); | ||||
|         validatorSetIndex[admissionController] = 0; | ||||
|     } | ||||
| 
 | ||||
|     function setNewAdmissionController(address newController) | ||||
|         public | ||||
|         onlyAdmissionController | ||||
|     { | ||||
|         emit NewAdmissionController(admissionController, newController); | ||||
|         admissionController = newController; | ||||
|     } | ||||
| 
 | ||||
|     function getValidators() public view returns (address[] memory) { | ||||
|         return validators; | ||||
|     } | ||||
| 
 | ||||
|     function initiateChange() private { | ||||
|         finalized = false; | ||||
|         emit InitiateChange(blockhash(block.number - 1), getValidators()); | ||||
|     } | ||||
| 
 | ||||
|     function finalizeChange() public onlySystemChange { | ||||
|         finalized = true; | ||||
|         emit ChangeFinalized(validators); | ||||
|     } | ||||
| 
 | ||||
|     function addValidator(address newValidator) | ||||
|         public | ||||
|         onlyAdmissionController | ||||
|         pendingFinalization | ||||
|     { | ||||
|         validators.push(newValidator); | ||||
|         validatorSetIndex[newValidator] = validators.length - 1; | ||||
|         initiateChange(); | ||||
|     } | ||||
| 
 | ||||
|     function removeValidator(address exValidator) | ||||
|         public | ||||
|         onlyAdmissionController | ||||
|         pendingFinalization | ||||
|     { | ||||
|         orderedRemoval(validatorSetIndex[exValidator]); | ||||
|         delete validatorSetIndex[exValidator]; | ||||
|         initiateChange(); | ||||
|     } | ||||
| 
 | ||||
|     function orderedRemoval(uint256 index) private { | ||||
|         for (uint256 i = index; i < validators.length - 1; i++) { | ||||
|             validators[i] = validators[i + 1]; | ||||
|         } | ||||
|         validators.pop(); | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user