From 25160d7344f9e1616654dfe09a24d8fc69fa8036 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 18 Jul 2018 11:32:01 +0200 Subject: Move encodeUint256 & decodeUint256 out of assetDataUtils since we don't want them exported --- packages/contracts/test/asset_proxy/proxies.ts | 5 +++-- packages/contracts/test/libraries/lib_bytes.ts | 9 +++++---- packages/contracts/test/utils/constants.ts | 2 ++ .../contracts/test/utils/type_encoding_utils.ts | 21 +++++++++++++++++++++ 4 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 packages/contracts/test/utils/type_encoding_utils.ts (limited to 'packages/contracts') diff --git a/packages/contracts/test/asset_proxy/proxies.ts b/packages/contracts/test/asset_proxy/proxies.ts index 42493bc3a..39674a030 100644 --- a/packages/contracts/test/asset_proxy/proxies.ts +++ b/packages/contracts/test/asset_proxy/proxies.ts @@ -23,6 +23,7 @@ import { constants } from '../utils/constants'; import { ERC20Wrapper } from '../utils/erc20_wrapper'; import { ERC721Wrapper } from '../utils/erc721_wrapper'; import { LogDecoder } from '../utils/log_decoder'; +import { typeEncodingUtils } from '../utils/type_encoding_utils'; import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper'; chaiSetup.configure(); @@ -288,7 +289,7 @@ describe('Asset Transfer Proxies', () => { it('should call onERC721Received when transferring to a smart contract with receiver data', async () => { // Construct ERC721 asset data - const receiverData = ethUtil.bufferToHex(assetDataUtils.encodeUint256(generatePseudoRandomSalt())); + const receiverData = ethUtil.bufferToHex(typeEncodingUtils.encodeUint256(generatePseudoRandomSalt())); const encodedAssetData = assetDataUtils.encodeERC721AssetData( erc721Token.address, erc721MakerTokenId, @@ -327,7 +328,7 @@ describe('Asset Transfer Proxies', () => { it('should throw if there is receiver data but contract does not have onERC721Received', async () => { // Construct ERC721 asset data - const receiverData = ethUtil.bufferToHex(assetDataUtils.encodeUint256(generatePseudoRandomSalt())); + const receiverData = ethUtil.bufferToHex(typeEncodingUtils.encodeUint256(generatePseudoRandomSalt())); const encodedAssetData = assetDataUtils.encodeERC721AssetData( erc721Token.address, erc721MakerTokenId, diff --git a/packages/contracts/test/libraries/lib_bytes.ts b/packages/contracts/test/libraries/lib_bytes.ts index 3489564c0..95e05046b 100644 --- a/packages/contracts/test/libraries/lib_bytes.ts +++ b/packages/contracts/test/libraries/lib_bytes.ts @@ -12,6 +12,7 @@ import { artifacts } from '../utils/artifacts'; import { expectContractCallFailed } from '../utils/assertions'; import { chaiSetup } from '../utils/chai_setup'; import { constants } from '../utils/constants'; +import { typeEncodingUtils } from '../utils/type_encoding_utils'; import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper'; chaiSetup.configure(); @@ -74,20 +75,20 @@ describe('LibBytes', () => { shortData = '0xffffaa'; const encodedShortData = ethUtil.toBuffer(shortData); const shortDataLength = new BigNumber(encodedShortData.byteLength); - const encodedShortDataLength = assetDataUtils.encodeUint256(shortDataLength); + const encodedShortDataLength = typeEncodingUtils.encodeUint256(shortDataLength); shortTestBytesAsBuffer = Buffer.concat([encodedShortDataLength, encodedShortData]); shortTestBytes = ethUtil.bufferToHex(shortTestBytesAsBuffer); // Create test bytes one word in length - wordOfData = ethUtil.bufferToHex(assetDataUtils.encodeUint256(generatePseudoRandomSalt())); + wordOfData = ethUtil.bufferToHex(typeEncodingUtils.encodeUint256(generatePseudoRandomSalt())); const encodedWordOfData = ethUtil.toBuffer(wordOfData); const wordOfDataLength = new BigNumber(encodedWordOfData.byteLength); - const encodedWordOfDataLength = assetDataUtils.encodeUint256(wordOfDataLength); + const encodedWordOfDataLength = typeEncodingUtils.encodeUint256(wordOfDataLength); wordOfTestBytesAsBuffer = Buffer.concat([encodedWordOfDataLength, encodedWordOfData]); wordOfTestBytes = ethUtil.bufferToHex(wordOfTestBytesAsBuffer); // Create long test bytes (combines short test bytes with word of test bytes) longData = ethUtil.bufferToHex(Buffer.concat([encodedShortData, encodedWordOfData])); const longDataLength = new BigNumber(encodedShortData.byteLength + encodedWordOfData.byteLength); - const encodedLongDataLength = assetDataUtils.encodeUint256(longDataLength); + const encodedLongDataLength = typeEncodingUtils.encodeUint256(longDataLength); longTestBytesAsBuffer = Buffer.concat([encodedLongDataLength, encodedShortData, encodedWordOfData]); longTestBytes = ethUtil.bufferToHex(longTestBytesAsBuffer); }); diff --git a/packages/contracts/test/utils/constants.ts b/packages/contracts/test/utils/constants.ts index e8995f9d6..7dac38f56 100644 --- a/packages/contracts/test/utils/constants.ts +++ b/packages/contracts/test/utils/constants.ts @@ -17,6 +17,7 @@ const TESTRPC_PRIVATE_KEYS_STRINGS = [ ]; export const constants = { + BASE_16: 16, INVALID_OPCODE: 'invalid opcode', TESTRPC_NETWORK_ID: 50, // Note(albrow): In practice V8 and most other engines limit the minimum @@ -47,4 +48,5 @@ export const constants = { makerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18), takerFee: Web3Wrapper.toBaseUnitAmount(new BigNumber(1), 18), }, + WORD_LENGTH: 32, }; diff --git a/packages/contracts/test/utils/type_encoding_utils.ts b/packages/contracts/test/utils/type_encoding_utils.ts new file mode 100644 index 000000000..75307b9bd --- /dev/null +++ b/packages/contracts/test/utils/type_encoding_utils.ts @@ -0,0 +1,21 @@ +import { BigNumber } from '@0xproject/utils'; +import BN = require('bn.js'); +import ethUtil = require('ethereumjs-util'); + +import { constants } from './constants'; + +export const typeEncodingUtils = { + encodeUint256(value: BigNumber): Buffer { + const base = 10; + const formattedValue = new BN(value.toString(base)); + const encodedValue = ethUtil.toBuffer(formattedValue); + // tslint:disable-next-line:custom-no-magic-numbers + const paddedValue = ethUtil.setLengthLeft(encodedValue, constants.WORD_LENGTH); + return paddedValue; + }, + decodeUint256(encodedValue: Buffer): BigNumber { + const formattedValue = ethUtil.bufferToHex(encodedValue); + const value = new BigNumber(formattedValue, constants.BASE_16); + return value; + }, +}; -- cgit v1.2.3