From: Ardis Lu Date: Sun, 19 Mar 2023 07:06:25 +0000 (-0700) Subject: Refactor to eliminate recursion X-Git-Url: https://git.ardis.lu/?a=commitdiff_plain;h=a1a007408efb121f2a4af93bfb8416ef1cf3d53c;p=4-byte-gen Refactor to eliminate recursion --- diff --git a/index.html b/index.html index 0be9681..7fb2316 100644 --- a/index.html +++ b/index.html @@ -77,37 +77,31 @@ return { name, parametersTypes }; } - function calculateOptimizedName(name, parametersTypes, minimum) { - let counter = 0; - function generate(name, parametersTypes) { - const functionName = `${name}_${counter.toString(36)}(${parametersTypes})`; - counter++; - - const hash = validate(functionName); - if (!hash) { - return generate(name, parametersTypes); + function validate(functionName, minimum) { + const byteArray = keccak256(encoder.encode(functionName)).slice(0, 4); + for (let i = 0; i < minimum; i++) { + if (byteArray[i] === 0) { + if (i + 1 === minimum) { + const hash = `0x${[...byteArray].map(b => b.toString(16).padStart(2, '0')).join('')}`; + return hash; + } } else { - return { functionName, hash }; + return false; } } + } - function validate(functionName) { - const byteArray = keccak256(encoder.encode(functionName)).slice(0, 4); - for (let i = 0; i < minimum; i++) { - if (byteArray[i] === 0) { - if (i + 1 === minimum) { - const hash = `0x${[...byteArray].map(b => b.toString(16).padStart(2, '0')).join('')}`; - return hash; - } - } - else { - return false; - } - } + function calculateOptimizedName(name, parametersTypes, minimum) { + let counter = 0; + let functionName = `${name}_${counter}(${parametersTypes})`; + let hash = validate(functionName, minimum); + while (!hash) { + counter++; + functionName = `${name}_${counter.toString(36)}(${parametersTypes})`; + hash = validate(functionName, minimum); } - - return generate(name, parametersTypes); + return { functionName, hash }; } document.querySelector('form').addEventListener('submit', e => {