]> git.ardis.lu - 4-byte-gen/commitdiff
Refactor to eliminate recursion
authorArdis Lu <ardisglu@gmail.com>
Sun, 19 Mar 2023 07:06:25 +0000 (00:06 -0700)
committerArdis Lu <ardisglu@gmail.com>
Sun, 19 Mar 2023 07:06:25 +0000 (00:06 -0700)
index.html

index 0be96810162136c32d996567e21099f8d74c2264..7fb231642c25355eb9c2df76c435d4c95527b0f9 100644 (file)
       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 => {
This page took 0.041557 seconds and 4 git commands to generate.