finalize
This commit is contained in:
		
							parent
							
								
									9271dd0cc7
								
							
						
					
					
						commit
						d34aec29ed
					
				| @ -192,6 +192,7 @@ | |||||||
| 		"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x7fffffffffffff", "pricing": { "modexp": { "divisor": 20 } } } }, | 		"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x7fffffffffffff", "pricing": { "modexp": { "divisor": 20 } } } }, | ||||||
| 		"0000000000000000000000000000000000000006": { "builtin": { "name": "bn128_add", "activate_at": "0x7fffffffffffff", "pricing": { "linear": { "base": 999999, "word": 0 } } } }, | 		"0000000000000000000000000000000000000006": { "builtin": { "name": "bn128_add", "activate_at": "0x7fffffffffffff", "pricing": { "linear": { "base": 999999, "word": 0 } } } }, | ||||||
| 		"0000000000000000000000000000000000000007": { "builtin": { "name": "bn128_mul", "activate_at": "0x7fffffffffffff", "pricing": { "linear": { "base": 999999, "word": 0 } } } }, | 		"0000000000000000000000000000000000000007": { "builtin": { "name": "bn128_mul", "activate_at": "0x7fffffffffffff", "pricing": { "linear": { "base": 999999, "word": 0 } } } }, | ||||||
|  | 		"0000000000000000000000000000000000000008": { "builtin": { "name": "bn128_pairing", "activate_at": "0x7fffffffffffff", "pricing": { "linear": { "base": 999999, "word": 0 } } } }, | ||||||
| 		"3282791d6fd713f1e94f4bfd565eaa78b3a0599d": { | 		"3282791d6fd713f1e94f4bfd565eaa78b3a0599d": { | ||||||
| 			"balance": "1337000000000000000000" | 			"balance": "1337000000000000000000" | ||||||
| 		}, | 		}, | ||||||
|  | |||||||
| @ -158,6 +158,7 @@ fn ethereum_builtin(name: &str) -> Box<Impl> { | |||||||
| 		"modexp" => Box::new(ModexpImpl) as Box<Impl>, | 		"modexp" => Box::new(ModexpImpl) as Box<Impl>, | ||||||
| 		"bn128_add" => Box::new(Bn128AddImpl) as Box<Impl>, | 		"bn128_add" => Box::new(Bn128AddImpl) as Box<Impl>, | ||||||
| 		"bn128_mul" => Box::new(Bn128MulImpl) as Box<Impl>, | 		"bn128_mul" => Box::new(Bn128MulImpl) as Box<Impl>, | ||||||
|  | 		"bn128_pairing" => Box::new(Bn128ParingImpl) as Box<Impl>, | ||||||
| 		_ => panic!("invalid builtin name: {}", name), | 		_ => panic!("invalid builtin name: {}", name), | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @ -409,19 +410,18 @@ mod bn128_gen { | |||||||
| 	lazy_static! { | 	lazy_static! { | ||||||
| 		pub static ref P2: G2 = G2::from(AffineG2::new( | 		pub static ref P2: G2 = G2::from(AffineG2::new( | ||||||
| 			Fq2::new( | 			Fq2::new( | ||||||
| 				Fq::from_str("1").expect("1 is a valid field element"), | 				Fq::from_str("10857046999023057135944570762232829481370756359578518086990519993285655852781").expect("1 is a valid field element"), | ||||||
| 				Fq::from_str("2").expect("2 is a valid field element"),				
 | 				Fq::from_str("11559732032986387107991004021392285783925812861821192530917403151452391805634").expect("2 is a valid field element"),				
 | ||||||
| 			), | 			), | ||||||
| 			Fq2::new( | 			Fq2::new( | ||||||
| 				Fq::from_str("1").expect("1 is a valid field element"), | 				Fq::from_str("8495653923123431417604973247489272438418190587263600148770280649306958101930").expect("1 is a valid field element"), | ||||||
| 				Fq::from_str("2").expect("2 is a valid field element"),				
 | 				Fq::from_str("4082367875863433681332203403145435568316851327593401208105741076214120093531").expect("2 is a valid field element"),				
 | ||||||
| 			),			
 | 			),			
 | ||||||
| 		).expect("Generator P2(i+2b, i+2b) is a valid curve point")); | 		).expect("Generator P2(10857046999023057135944570762232829481370756359578518086990519993285655852781 + 11559732032986387107991004021392285783925812861821192530917403151452391805634i, 8495653923123431417604973247489272438418190587263600148770280649306958101930 + 4082367875863433681332203403145435568316851327593401208105741076214120093531i) is a valid curve point")); | ||||||
| 	}	
 | 	}	
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 	lazy_static! { | 	lazy_static! { | ||||||
| 		pub static ref P1xP2: Gt = pairing(P1.clone(), P2.clone()); | 		pub static ref P1_P2_PAIRING: Gt = pairing(P1.clone(), P2.clone()); | ||||||
| 	}		
 | 	}		
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -481,19 +481,23 @@ impl Impl for Bn128ParingImpl { | |||||||
| 				}; | 				}; | ||||||
| 				for _ in 1..elements { 
 | 				for _ in 1..elements { 
 | ||||||
| 					let (a, b) = drain.next() | 					let (a, b) = drain.next() | ||||||
| 						.expect("idx-th element should exist, because we do next() no more than elements-1 times; qed"); | 						.expect("this element should exist, because we do next() no more than elements-1 times; qed"); | ||||||
| 					mul = mul * pairing(a, b); | 					mul = mul * pairing(a, b); | ||||||
| 				} | 				} | ||||||
| 				mul | 				mul | ||||||
| 			}; | 			}; | ||||||
| 
 | 
 | ||||||
| 			if mul == *bn128_gen::P1xP2 { | 			if mul == *bn128_gen::P1_P2_PAIRING { | ||||||
| 				U256::one() | 				U256::one() | ||||||
| 			} else { | 			} else { | ||||||
| 				U256::zero() | 				U256::zero() | ||||||
| 			} | 			} | ||||||
| 		}; | 		}; | ||||||
| 
 | 
 | ||||||
|  | 		let mut buf = [0u8; 32]; | ||||||
|  | 		ret_val.to_big_endian(&mut buf); | ||||||
|  | 		output.write(0, &buf); | ||||||
|  | 
 | ||||||
| 		Ok(()) | 		Ok(()) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user