Merge commit '2b4d38b9bf059014596e1ab00c99dc2ad4ab3761' into ethereumjs
This commit is contained in:
		
							
								
								
									
										43
									
								
								dist/ethereum.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								dist/ethereum.js
									
									
									
									
										vendored
									
									
								
							| @@ -117,6 +117,13 @@ var formatInputBool = function (value) { | ||||
|     return '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0'); | ||||
| }; | ||||
|  | ||||
| /// Formats input value to byte representation of real | ||||
| /// Values are multiplied by 2^m and encoded as integers | ||||
| /// @returns byte representation of real | ||||
| var formatInputReal = function (value) { | ||||
|     return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));  | ||||
| }; | ||||
|  | ||||
| var dynamicTypeBytes = function (type, value) { | ||||
|     // TODO: decide what to do with array of strings | ||||
|     if (arrayType(type) || prefixedType('string')(type)) | ||||
| @@ -133,8 +140,8 @@ var setupInputTypes = function () { | ||||
|         { type: prefixedType('int'), format: formatInputInt }, | ||||
|         { type: prefixedType('hash'), format: formatInputInt }, | ||||
|         { type: prefixedType('string'), format: formatInputString },  | ||||
|         { type: prefixedType('real'), format: formatInputInt }, | ||||
|         { type: prefixedType('ureal'), format: formatInputInt }, | ||||
|         { type: prefixedType('real'), format: formatInputReal }, | ||||
|         { type: prefixedType('ureal'), format: formatInputReal }, | ||||
|         { type: namedType('address'), format: formatInputInt }, | ||||
|         { type: namedType('bool'), format: formatInputBool } | ||||
|     ]; | ||||
| @@ -187,13 +194,19 @@ var toAbiInput = function (json, methodName, params) { | ||||
|     return bytes; | ||||
| }; | ||||
|  | ||||
| /// Check if input value is negative | ||||
| /// @param value is hex format | ||||
| /// @returns true if it is negative, otherwise false | ||||
| var signedIsNegative = function (value) { | ||||
|     return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; | ||||
| }; | ||||
|  | ||||
| /// Formats input right-aligned input bytes to int | ||||
| /// @returns right-aligned input bytes formatted to int | ||||
| var formatOutputInt = function (value) { | ||||
|     // check if it's negative number | ||||
|     // it it is, return two's complement | ||||
|     var firstBit = new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1); | ||||
|     if (firstBit === '1') { | ||||
|     if (signedIsNegative(value)) { | ||||
|         return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); | ||||
|     } | ||||
|     return new BigNumber(value, 16); | ||||
| @@ -205,6 +218,16 @@ var formatOutputUInt = function (value) { | ||||
|     return new BigNumber(value, 16); | ||||
| }; | ||||
|  | ||||
| /// @returns input bytes formatted to real | ||||
| var formatOutputReal = function (value) { | ||||
|     return formatOutputInt(value).dividedBy(new BigNumber(2).pow(128));  | ||||
| }; | ||||
|  | ||||
| /// @returns input bytes formatted to ureal | ||||
| var formatOutputUReal = function (value) { | ||||
|     return formatOutputUInt(value).dividedBy(new BigNumber(2).pow(128));  | ||||
| }; | ||||
|  | ||||
| /// @returns right-aligned input bytes formatted to hex | ||||
| var formatOutputHash = function (value) { | ||||
|     return "0x" + value; | ||||
| @@ -240,8 +263,8 @@ var setupOutputTypes = function () { | ||||
|         { type: prefixedType('int'), format: formatOutputInt }, | ||||
|         { type: prefixedType('hash'), format: formatOutputHash }, | ||||
|         { type: prefixedType('string'), format: formatOutputString }, | ||||
|         { type: prefixedType('real'), format: formatOutputInt }, | ||||
|         { type: prefixedType('ureal'), format: formatOutputInt }, | ||||
|         { type: prefixedType('real'), format: formatOutputReal }, | ||||
|         { type: prefixedType('ureal'), format: formatOutputUReal }, | ||||
|         { type: namedType('address'), format: formatOutputAddress }, | ||||
|         { type: namedType('bool'), format: formatOutputBool } | ||||
|     ]; | ||||
| @@ -387,10 +410,9 @@ module.exports = { | ||||
|  * if it fails, it uses HttpRpcProvider | ||||
|  */ | ||||
|  | ||||
| // TODO: is these line is supposed to be here?  | ||||
| var web3 = require('./web3'); // jshint ignore:line | ||||
| if ("build" !== 'build') {/* | ||||
|     var WebSocket = require('ws'); // jshint ignore:line | ||||
|     var web3 = require('./web3'); // jshint ignore:line | ||||
| */} | ||||
|  | ||||
| /** | ||||
| @@ -433,7 +455,7 @@ var AutoProvider = function (userOptions) { | ||||
|             self.poll = self.provider.poll.bind(self.provider); | ||||
|         } | ||||
|         self.sendQueue.forEach(function (payload) { | ||||
|             self.provider(payload); | ||||
|             self.provider.send(payload); | ||||
|         }); | ||||
|         self.onmessageQueue.forEach(function (handler) { | ||||
|             self.provider.onmessage = handler; | ||||
| @@ -474,7 +496,7 @@ Object.defineProperty(AutoProvider.prototype, 'onmessage', { | ||||
|  | ||||
| module.exports = AutoProvider; | ||||
|  | ||||
| },{}],3:[function(require,module,exports){ | ||||
| },{"./web3":8}],3:[function(require,module,exports){ | ||||
| /* | ||||
|     This file is part of ethereum.js. | ||||
|  | ||||
| @@ -807,7 +829,6 @@ module.exports = HttpRpcProvider; | ||||
|  * @date 2014 | ||||
|  */ | ||||
|  | ||||
| // TODO: is these line is supposed to be here?  | ||||
| var web3 = require('./web3'); // jshint ignore:line | ||||
|  | ||||
| /** | ||||
|   | ||||
							
								
								
									
										8
									
								
								dist/ethereum.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								dist/ethereum.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/ethereum.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/ethereum.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										35
									
								
								lib/abi.js
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								lib/abi.js
									
									
									
									
									
								
							| @@ -116,6 +116,13 @@ var formatInputBool = function (value) { | ||||
|     return '000000000000000000000000000000000000000000000000000000000000000' + (value ?  '1' : '0'); | ||||
| }; | ||||
|  | ||||
| /// Formats input value to byte representation of real | ||||
| /// Values are multiplied by 2^m and encoded as integers | ||||
| /// @returns byte representation of real | ||||
| var formatInputReal = function (value) { | ||||
|     return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));  | ||||
| }; | ||||
|  | ||||
| var dynamicTypeBytes = function (type, value) { | ||||
|     // TODO: decide what to do with array of strings | ||||
|     if (arrayType(type) || prefixedType('string')(type)) | ||||
| @@ -132,8 +139,8 @@ var setupInputTypes = function () { | ||||
|         { type: prefixedType('int'), format: formatInputInt }, | ||||
|         { type: prefixedType('hash'), format: formatInputInt }, | ||||
|         { type: prefixedType('string'), format: formatInputString },  | ||||
|         { type: prefixedType('real'), format: formatInputInt }, | ||||
|         { type: prefixedType('ureal'), format: formatInputInt }, | ||||
|         { type: prefixedType('real'), format: formatInputReal }, | ||||
|         { type: prefixedType('ureal'), format: formatInputReal }, | ||||
|         { type: namedType('address'), format: formatInputInt }, | ||||
|         { type: namedType('bool'), format: formatInputBool } | ||||
|     ]; | ||||
| @@ -186,13 +193,19 @@ var toAbiInput = function (json, methodName, params) { | ||||
|     return bytes; | ||||
| }; | ||||
|  | ||||
| /// Check if input value is negative | ||||
| /// @param value is hex format | ||||
| /// @returns true if it is negative, otherwise false | ||||
| var signedIsNegative = function (value) { | ||||
|     return (new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1)) === '1'; | ||||
| }; | ||||
|  | ||||
| /// Formats input right-aligned input bytes to int | ||||
| /// @returns right-aligned input bytes formatted to int | ||||
| var formatOutputInt = function (value) { | ||||
|     // check if it's negative number | ||||
|     // it it is, return two's complement | ||||
|     var firstBit = new BigNumber(value.substr(0, 1), 16).toString(2).substr(0, 1); | ||||
|     if (firstBit === '1') { | ||||
|     if (signedIsNegative(value)) { | ||||
|         return new BigNumber(value, 16).minus(new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)).minus(1); | ||||
|     } | ||||
|     return new BigNumber(value, 16); | ||||
| @@ -204,6 +217,16 @@ var formatOutputUInt = function (value) { | ||||
|     return new BigNumber(value, 16); | ||||
| }; | ||||
|  | ||||
| /// @returns input bytes formatted to real | ||||
| var formatOutputReal = function (value) { | ||||
|     return formatOutputInt(value).dividedBy(new BigNumber(2).pow(128));  | ||||
| }; | ||||
|  | ||||
| /// @returns input bytes formatted to ureal | ||||
| var formatOutputUReal = function (value) { | ||||
|     return formatOutputUInt(value).dividedBy(new BigNumber(2).pow(128));  | ||||
| }; | ||||
|  | ||||
| /// @returns right-aligned input bytes formatted to hex | ||||
| var formatOutputHash = function (value) { | ||||
|     return "0x" + value; | ||||
| @@ -239,8 +262,8 @@ var setupOutputTypes = function () { | ||||
|         { type: prefixedType('int'), format: formatOutputInt }, | ||||
|         { type: prefixedType('hash'), format: formatOutputHash }, | ||||
|         { type: prefixedType('string'), format: formatOutputString }, | ||||
|         { type: prefixedType('real'), format: formatOutputInt }, | ||||
|         { type: prefixedType('ureal'), format: formatOutputInt }, | ||||
|         { type: prefixedType('real'), format: formatOutputReal }, | ||||
|         { type: prefixedType('ureal'), format: formatOutputUReal }, | ||||
|         { type: namedType('address'), format: formatOutputAddress }, | ||||
|         { type: namedType('bool'), format: formatOutputBool } | ||||
|     ]; | ||||
|   | ||||
| @@ -27,10 +27,9 @@ | ||||
|  * if it fails, it uses HttpRpcProvider | ||||
|  */ | ||||
|  | ||||
| // TODO: is these line is supposed to be here?  | ||||
| var web3 = require('./web3'); // jshint ignore:line | ||||
| if (process.env.NODE_ENV !== 'build') { | ||||
|     var WebSocket = require('ws'); // jshint ignore:line | ||||
|     var web3 = require('./web3'); // jshint ignore:line | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -73,7 +72,7 @@ var AutoProvider = function (userOptions) { | ||||
|             self.poll = self.provider.poll.bind(self.provider); | ||||
|         } | ||||
|         self.sendQueue.forEach(function (payload) { | ||||
|             self.provider(payload); | ||||
|             self.provider.send(payload); | ||||
|         }); | ||||
|         self.onmessageQueue.forEach(function (handler) { | ||||
|             self.provider.onmessage = handler; | ||||
|   | ||||
| @@ -23,7 +23,6 @@ | ||||
|  * @date 2014 | ||||
|  */ | ||||
|  | ||||
| // TODO: is these line is supposed to be here?  | ||||
| var web3 = require('./web3'); // jshint ignore:line | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -380,6 +380,45 @@ describe('abi', function() { | ||||
|                 ); | ||||
|         }); | ||||
|  | ||||
|         it('should parse input real', function () { | ||||
|              | ||||
|             // given | ||||
|             var d = clone(description); | ||||
|  | ||||
|             d[0].inputs = [ | ||||
|                 { type: 'real' } | ||||
|             ]; | ||||
|  | ||||
|             // when | ||||
|             var parser = abi.inputParser(d); | ||||
|  | ||||
|             // then | ||||
|             assert.equal(parser.test([1]),      "0000000000000000000000000000000100000000000000000000000000000000");  | ||||
|             assert.equal(parser.test([2.125]),  "0000000000000000000000000000000220000000000000000000000000000000");  | ||||
|             assert.equal(parser.test([8.5]),    "0000000000000000000000000000000880000000000000000000000000000000");  | ||||
|             assert.equal(parser.test([-1]),     "ffffffffffffffffffffffffffffffff00000000000000000000000000000000");  | ||||
|                  | ||||
|         }); | ||||
|          | ||||
|         it('should parse input ureal', function () { | ||||
|              | ||||
|             // given | ||||
|             var d = clone(description); | ||||
|  | ||||
|             d[0].inputs = [ | ||||
|                 { type: 'ureal' } | ||||
|             ]; | ||||
|  | ||||
|             // when | ||||
|             var parser = abi.inputParser(d); | ||||
|  | ||||
|             // then | ||||
|             assert.equal(parser.test([1]),      "0000000000000000000000000000000100000000000000000000000000000000");  | ||||
|             assert.equal(parser.test([2.125]),  "0000000000000000000000000000000220000000000000000000000000000000");  | ||||
|             assert.equal(parser.test([8.5]),    "0000000000000000000000000000000880000000000000000000000000000000");  | ||||
|                  | ||||
|         }); | ||||
|  | ||||
|     }); | ||||
|  | ||||
|     describe('outputParser', function() { | ||||
| @@ -633,12 +672,52 @@ describe('abi', function() { | ||||
|             var parser = abi.outputParser(d); | ||||
|  | ||||
|             // then | ||||
|             assert.equal(parser.test("000000000000000000000000000000000000000000000000000000000000000001")[0], true); | ||||
|             assert.equal(parser.test("000000000000000000000000000000000000000000000000000000000000000000")[0], false); | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000001")[0], true); | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000000000000000000000000000000000000")[0], false); | ||||
|              | ||||
|  | ||||
|         }); | ||||
|  | ||||
|         it('should parse output real', function() { | ||||
|              | ||||
|             // given | ||||
|             var d = clone(description);  | ||||
|  | ||||
|             d[0].outputs = [ | ||||
|                 { type: 'real' } | ||||
|             ]; | ||||
|  | ||||
|             // when | ||||
|             var parser = abi.outputParser(d); | ||||
|  | ||||
|             // then | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000100000000000000000000000000000000")[0], 1); | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000220000000000000000000000000000000")[0], 2.125);  | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000880000000000000000000000000000000")[0], 8.5);  | ||||
|             assert.equal(parser.test("0xffffffffffffffffffffffffffffffff00000000000000000000000000000000")[0], -1);  | ||||
|              | ||||
|         }); | ||||
|  | ||||
|         it('should parse output ureal', function() { | ||||
|  | ||||
|             // given | ||||
|             var d = clone(description);  | ||||
|  | ||||
|             d[0].outputs = [ | ||||
|                 { type: 'ureal' } | ||||
|             ]; | ||||
|  | ||||
|             // when | ||||
|             var parser = abi.outputParser(d); | ||||
|  | ||||
|             // then | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000100000000000000000000000000000000")[0], 1); | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000220000000000000000000000000000000")[0], 2.125);  | ||||
|             assert.equal(parser.test("0x0000000000000000000000000000000880000000000000000000000000000000")[0], 8.5);  | ||||
|  | ||||
|         }); | ||||
|          | ||||
|  | ||||
|         it('should parse multiple output strings', function() { | ||||
|  | ||||
|             // given | ||||
|   | ||||
		Reference in New Issue
	
	Block a user