diff --git a/__tests__/cairo1v2.test.ts b/__tests__/cairo1v2.test.ts index 5e532dbaa..5520fc876 100644 --- a/__tests__/cairo1v2.test.ts +++ b/__tests__/cairo1v2.test.ts @@ -1031,7 +1031,7 @@ describe('Cairo 1', () => { const callD2 = CallData.compile({ mess: message }); expect(callD2).toEqual(expectedResult); const callD3 = CallData.compile({ mess: byteArray.byteArrayFromString('Take care.') }); - expect(callD3).toEqual(['1', '0', '398475857363345939260718', '10']); + expect(callD3).toEqual(['0', '398475857363345939260718', '10']); const str1 = await stringContract.get_string(); expect(str1).toBe( "Cairo has become the most popular language for developers + charizards !@#$%^&*_+|:'<>?~`" diff --git a/__tests__/cairo1v2_typed.test.ts b/__tests__/cairo1v2_typed.test.ts index 732d77748..ae31a39f3 100644 --- a/__tests__/cairo1v2_typed.test.ts +++ b/__tests__/cairo1v2_typed.test.ts @@ -973,7 +973,7 @@ describe('Cairo 1', () => { const callD2 = CallData.compile({ mess: message }); expect(callD2).toEqual(expectedResult); const callD3 = CallData.compile({ mess: byteArray.byteArrayFromString('Take care.') }); - expect(callD3).toEqual(['1', '0', '398475857363345939260718', '10']); + expect(callD3).toEqual(['0', '398475857363345939260718', '10']); const str1 = await stringContract.get_string(); expect(str1).toBe( "Cairo has become the most popular language for developers + charizards !@#$%^&*_+|:'<>?~`" diff --git a/__tests__/utils/shortString.test.ts b/__tests__/utils/shortString.test.ts index ee2201d00..650d2efc7 100644 --- a/__tests__/utils/shortString.test.ts +++ b/__tests__/utils/shortString.test.ts @@ -65,12 +65,12 @@ describe('shortString', () => { pending_word_len: 0, }); expect(byteArray.byteArrayFromString('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234')).toEqual({ - data: ['0x00'], + data: [], pending_word: '0x4142434445464748494a4b4c4d4e4f505152535455565758595a31323334', pending_word_len: 30, }); expect(byteArray.byteArrayFromString('')).toEqual({ - data: ['0x00'], + data: [], pending_word: '0x00', pending_word_len: 0, }); @@ -90,14 +90,14 @@ describe('shortString', () => { }); expect( byteArray.stringFromByteArray({ - data: ['0x00'], + data: [], pending_word: '0x4142434445464748494a4b4c4d4e4f505152535455565758595a31323334', pending_word_len: 30, }) ).toBe('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234'); expect( byteArray.stringFromByteArray({ - data: ['0x00'], + data: [], pending_word: '0x00', pending_word_len: 0, }) diff --git a/src/utils/calldata/byteArray.ts b/src/utils/calldata/byteArray.ts index bf49e33b0..288848259 100644 --- a/src/utils/calldata/byteArray.ts +++ b/src/utils/calldata/byteArray.ts @@ -9,7 +9,7 @@ import { decodeShortString, encodeShortString, splitLongString } from '../shortS * @example * ```typescript * const myByteArray = { - * data: [ '0x00' ], + * data: [], * pending_word: '0x414243444546474849', * pending_word_len: 9 * } @@ -36,39 +36,28 @@ export function stringFromByteArray(myByteArray: ByteArray): string { * @returns Cairo representation of a LongString * @example * ```typescript - * const myByteArray: ByteArray = byteArrayFromStr("ABCDEFGHI"); + * const myByteArray: ByteArray = byteArrayFromString("ABCDEFGHI"); * ``` * Result is : * { - * data: [ '0x00' ], + * data: [], * pending_word: '0x414243444546474849', * pending_word_len: 9 * } */ -export function byteArrayFromString(myString: string): ByteArray { - if (myString.length === 0) { - return { - data: ['0x00'], - pending_word: '0x00', - pending_word_len: 0, - } as ByteArray; - } - const myShortStrings: string[] = splitLongString(myString); - const remains: string = myShortStrings[myShortStrings.length - 1]; - const myShortStringsEncoded: BigNumberish[] = myShortStrings.map((shortStr) => - encodeShortString(shortStr) - ); - if (remains.length === 31) { - return { - data: myShortStringsEncoded, - pending_word: '0x00', - pending_word_len: 0, - } as ByteArray; - } - const pendingEncodedWord: BigNumberish = myShortStringsEncoded.pop()!; +export function byteArrayFromString(targetString: string): ByteArray { + const shortStrings: string[] = splitLongString(targetString); + const remainder: string = shortStrings[shortStrings.length - 1]; + const shortStringsEncoded: BigNumberish[] = shortStrings.map(encodeShortString); + + const [pendingWord, pendingWordLength] = + remainder === undefined || remainder.length === 31 + ? ['0x00', 0] + : [shortStringsEncoded.pop()!, remainder.length]; + return { - data: myShortStringsEncoded.length === 0 ? ['0x00'] : myShortStringsEncoded, - pending_word: pendingEncodedWord, - pending_word_len: remains.length, - } as ByteArray; + data: shortStringsEncoded.length === 0 ? [] : shortStringsEncoded, + pending_word: pendingWord, + pending_word_len: pendingWordLength, + }; } diff --git a/src/utils/typedData.ts b/src/utils/typedData.ts index d1193b29c..16413f0c2 100644 --- a/src/utils/typedData.ts +++ b/src/utils/typedData.ts @@ -7,6 +7,7 @@ import { StarkNetType, TypedData, } from '../types'; +import { byteArrayFromString } from './calldata/byteArray'; import { computePedersenHash, computePedersenHashOnElements, @@ -16,7 +17,7 @@ import { } from './hash'; import { MerkleTree } from './merkle'; import { isHex, toHex } from './num'; -import { encodeShortString, splitLongString } from './shortString'; +import { encodeShortString } from './shortString'; /** @deprecated prefer importing from 'types' over 'typedData' */ export * from '../types/typedData'; @@ -61,24 +62,6 @@ const revisionConfiguration: Record = { }, }; -// TODO: replace with utils byteArrayFromString from PR#891 once it is available -export function byteArrayFromString(targetString: string) { - const shortStrings: string[] = splitLongString(targetString); - const remainder: string = shortStrings[shortStrings.length - 1]; - const shortStringsEncoded: BigNumberish[] = shortStrings.map(encodeShortString); - - const [pendingWord, pendingWordLength] = - remainder === undefined || remainder.length === 31 - ? ['0x00', 0] - : [shortStringsEncoded.pop()!, remainder.length]; - - return { - data: shortStringsEncoded.length === 0 ? ['0x00'] : shortStringsEncoded, - pending_word: pendingWord, - pending_word_len: pendingWordLength, - }; -} - function identifyRevision({ types, domain }: TypedData) { if (revisionConfiguration[Revision.Active].domain in types && domain.revision === Revision.Active) return Revision.Active;