Skip to content

Commit

Permalink
Add constant padding to random hexes, hashes and addresses (#494)
Browse files Browse the repository at this point in the history
* add constant padding to random hexes, hashes and addresses

* fix

* refactor

* feat: change the prefix
  • Loading branch information
barrutko authored Dec 17, 2024
1 parent 9a8c708 commit 64f561d
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion packages/common-universal/src/types/CheckedAddress.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ describe(CheckedAddress.name, () => {

it('generates a random address with prefix', () => {
const address = CheckedAddress.random('alice')
expect(address.toLowerCase()).toMatchRegex(/^0xa11ce[0-9a-f]{35}$/)
expect(address.toLowerCase()).toMatchRegex(/^0xdeadbeefa11ce[0-9a-f]{27}$/)
})
})
})
5 changes: 3 additions & 2 deletions packages/common-universal/src/types/CheckedAddress.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ export function CheckedAddress(value: string): CheckedAddress {
* Generates a random address. Tries to represent desired ascii prefix as hex value. Helps to identify transactions in the logs.
*/
CheckedAddress.random = (asciiPrefix = ''): CheckedAddress => {
const constantAddressPrefix = 'deadbeef'
const hexPrefix = asciiToHex(asciiPrefix)
const postfixLength = 40 - hexPrefix.length
const postfixLength = 40 - hexPrefix.length - constantAddressPrefix.length
assert(postfixLength >= 0, `Prefix too long: ${asciiPrefix}`)
const address = hexPrefix + randomPartialHex(postfixLength)
const address = `${constantAddressPrefix}${hexPrefix}${randomPartialHex(postfixLength)}`

return CheckedAddress(`0x${address}`)
}
8 changes: 6 additions & 2 deletions packages/common-universal/src/types/Hex.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ export function Hex(hex: string, { allowEmpty = false } = {}): Hex {
}

Hex.random = (ascii = '', length = 64): Hex => {
assert(ascii.length <= length, `Ascii prefix too long: ${ascii}`)
return Hex(`0x${asciiToHex(ascii)}${randomPartialHex(length - ascii.length)}`)
const constantHexPrefix = 'deadbeef'
assert(ascii.length <= length - constantHexPrefix.length, `Ascii prefix too long: ${ascii}`)
assert(length >= constantHexPrefix.length, `Total length too short: ${length}`)
return Hex(
`0x${constantHexPrefix}${asciiToHex(ascii)}${randomPartialHex(length - ascii.length - constantHexPrefix.length)}`,
)
}

0 comments on commit 64f561d

Please sign in to comment.