]> git.ardis.lu - solc-metadata/commitdiff
Refactor to split business logic from view logic
authorArdis Lu <ardisglu@gmail.com>
Thu, 10 Aug 2023 04:17:03 +0000 (21:17 -0700)
committerArdis Lu <ardisglu@gmail.com>
Thu, 10 Aug 2023 04:17:03 +0000 (21:17 -0700)
index.html

index 05f1914af910d4af96eed8d43463c03ae2209ff6..a1cd0f8df1a0e3ac54aa760942df4312f76df905 100644 (file)
       output.insertAdjacentElement('beforeend', detailsEl);
     }
 
-    document.querySelector('form').addEventListener('submit', async e => {
-      e.preventDefault();
-
-      const data = new FormData(e.target);
-      const address = data.get('address');
-      const rpc = new URL(data.get('rpc'));
-      const ipfs = new URL(data.get('ipfs'));
-      const result = e.target.elements['result'];
-      button.disabled = true;
-      spinner.style.setProperty('visibility', 'visible');
-
-      // Reset the output, if there were previous runs
-      result.innerHTML = '';
-      result.style.setProperty('visibility', 'visible');
-
+    // Business logic with logging
+    async function handleData(address, rpc, ipfs, result) {
       // Retrieve smart contract runtime bytecode
       let bytecode;
       try {
         bytecode = await fetchBytecode(address, rpc);
         if (bytecode === undefined) { // RPC call succeeded, but address has no bytecode
           logOutput(result, '❌ Smart contract address has no runtime bytecode.', address);
-          button.disabled = false;
-          spinner.style.setProperty('visibility', 'hidden');
           return;
         }
       }
       catch { // RPC call failed
         logOutput(result, '❌ Failed to connect to JSON-RPC node.', rpc);
-        button.disabled = false;
-        spinner.style.setProperty('visibility', 'hidden');
         return;
       }
       logOutput(result, '✅ Successfully fetched runtime bytecode.', bytecode);
       const cbor = extractCBOR(bytecode);
       if (cbor.includes(NaN)) {
         result.insertAdjacentText('beforeend', '❌ Failed to extract CBOR metadata from bytecode.');
-        button.disabled = false;
-        spinner.style.setProperty('visibility', 'hidden');
         return;
       }
       logOutput(result, '✅ Successfully extracted CBOR metadata.', cbor.map(v => v.toString(16).padStart(2, '0')).join(''));
           logOutput(result, '❌ Failed to fetch JSON metadata from IPFS.', `IPFS node: ${ipfs}`);
         }
       }
+    }
+
+    document.querySelector('form').addEventListener('submit', async e => {
+      e.preventDefault();
+
+      const data = new FormData(e.target);
+      const address = data.get('address');
+      const rpc = new URL(data.get('rpc'));
+      const ipfs = new URL(data.get('ipfs'));
+      const result = e.target.elements['result'];
+
+      button.disabled = true;
+      spinner.style.setProperty('visibility', 'visible');
+
+      // Reset the output, if there were previous runs
+      result.innerHTML = '';
+      result.style.setProperty('visibility', 'visible');
+
+      await handleData(address, rpc, ipfs, result);
 
       button.disabled = false;
       spinner.style.setProperty('visibility', 'hidden');
This page took 0.042651 seconds and 4 git commands to generate.