blockly-solidity / .eslintcache
.eslintcache
Raw
[{"/Users/tm/blockly_solidity/src/index.js":"1","/Users/tm/blockly_solidity/src/App.js":"2","/Users/tm/blockly_solidity/src/serviceWorker.js":"3","/Users/tm/blockly_solidity/src/generator/generator.js":"4","/Users/tm/blockly_solidity/src/blocks/customblocks.js":"5","/Users/tm/blockly_solidity/src/Blockly/index.js":"6","/Users/tm/blockly_solidity/src/Blockly/BlocklyComponent.jsx":"7","/Users/tm/blockly_solidity/src/generator/solidity.js":"8"},{"size":452,"mtime":1659533452145,"results":"9","hashOfConfig":"10"},{"size":3190,"mtime":1659629437895,"results":"11","hashOfConfig":"10"},{"size":4951,"mtime":1659533452145,"results":"12","hashOfConfig":"10"},{"size":44165,"mtime":1659537536322,"results":"13","hashOfConfig":"10"},{"size":31577,"mtime":1659594701612,"results":"14","hashOfConfig":"10"},{"size":1656,"mtime":1659533452141,"results":"15","hashOfConfig":"10"},{"size":2487,"mtime":1659603375181,"results":"16","hashOfConfig":"10"},{"size":15628,"mtime":1659534893947,"results":"17","hashOfConfig":"10"},{"filePath":"18","messages":"19","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"20"},"xaxcuz",{"filePath":"21","messages":"22","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"23","messages":"24","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"20"},{"filePath":"25","messages":"26","errorCount":0,"warningCount":31,"fixableErrorCount":0,"fixableWarningCount":0,"source":"27","usedDeprecatedRules":"20"},{"filePath":"28","messages":"29","errorCount":0,"warningCount":35,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"30","messages":"31","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"20"},{"filePath":"32","messages":"33","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"20"},{"filePath":"34","messages":"35","errorCount":0,"warningCount":17,"fixableErrorCount":0,"fixableWarningCount":1,"source":null},"/Users/tm/blockly_solidity/src/index.js",[],["36","37"],"/Users/tm/blockly_solidity/src/App.js",["38","39","40"],"/Users/tm/blockly_solidity/src/serviceWorker.js",[],"/Users/tm/blockly_solidity/src/generator/generator.js",["41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71"],"/**\n * @license\n *\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Define generation methods for custom blocks.\n * @author samelh@google.com (Sam El-Husseini)\n */\n\n// More on generating code:\n// https://developers.google.com/blockly/guides/create-custom-blocks/generating-code\n\nimport Blockly from \"blockly\";\n\nexport const Solidity = new Blockly.Generator(\"Solidity\");\n\nSolidity.LABEL_GROUP_STATE = \"state\";\nSolidity.LABEL_GROUP_PARAMETER = \"parameter\";\nSolidity.LABEL_GROUP_VARIABLE = \"variable\";\nSolidity.LABEL_GROUP_METHOD = \"method\";\nSolidity.UNDEFINED_NAME = \"__UNDEFINED__\";\n\nconst objectUtils = Blockly.utils.object;\nconst stringUtils = Blockly.utils.string;\n\nSolidity.isInitialized = false;\n\n//incomplete list\nSolidity.addReservedWords(\n  \"after,alias,apply,auto,byte,case,copyof,default,\" +\n    \"define,final,implements,in,inline,let,macro,match,\" +\n    \"mutable,null,of,partial,promise,reference,relocatable,sealed,\",\n  \"sizeof,static,supports,switch,typedef,typeof,var\",\n  \"function,true,false,bool,int8,int,uint8,\",\n  \"uint,address,bytes1,contract,constructor,uint8,\",\n  \"override,virtual,indexed,anonymous,immutable,constant,payable,view,pure,\",\n  \"public,private,external,internal,abi,bytes,block,gasleft,msg,tx,assert,require,\",\n  \"revert,blockhash,keccak256,sha256,ripemd160,ecrecover,addmod,mulmod,this,\",\n  \"super,selfdestruct,type\"\n);\nSolidity.ORDER_ATOMIC = 0; // 0 \"\" ...\nSolidity.ORDER_NEW = 1.1; // new\nSolidity.ORDER_MEMBER = 1.2; // . []\nSolidity.ORDER_FUNCTION_CALL = 2; // ()\nSolidity.ORDER_INCREMENT = 3; // ++\nSolidity.ORDER_DECREMENT = 3; // --\nSolidity.ORDER_BITWISE_NOT = 4.1; // ~\nSolidity.ORDER_UNARY_PLUS = 4.2; // +\nSolidity.ORDER_UNARY_NEGATION = 4.3; // -\nSolidity.ORDER_LOGICAL_NOT = 4.4; // !\nSolidity.ORDER_TYPEOF = 4.5; // typeof\nSolidity.ORDER_VOID = 4.6; // void\nSolidity.ORDER_DELETE = 4.7; // delete\nSolidity.ORDER_DIVISION = 5.1; // /\nSolidity.ORDER_MULTIPLICATION = 5.2; // *\nSolidity.ORDER_MODULUS = 5.3; // %\nSolidity.ORDER_SUBTRACTION = 6.1; // -\nSolidity.ORDER_ADDITION = 6.2; // +\nSolidity.ORDER_BITWISE_SHIFT = 7; // << >> >>>\nSolidity.ORDER_RELATIONAL = 8; // < <= > >=\nSolidity.ORDER_IN = 8; // in\nSolidity.ORDER_INSTANCEOF = 8; // instanceof\nSolidity.ORDER_EQUALITY = 9; // == != === !==\nSolidity.ORDER_BITWISE_AND = 10; // &\nSolidity.ORDER_BITWISE_XOR = 11; // ^\nSolidity.ORDER_BITWISE_OR = 12; // |\nSolidity.ORDER_LOGICAL_AND = 13; // &&\nSolidity.ORDER_LOGICAL_OR = 14; // ||\nSolidity.ORDER_CONDITIONAL = 15; // ?:\nSolidity.ORDER_ASSIGNMENT = 16; // = += -= *= /= %= <<= >>= ...\nSolidity.ORDER_COMMA = 17; // ,\nSolidity.ORDER_NONE = 99; // (...)\n\n/**\n * List of outer-inner pairings that do NOT require parentheses.\n * @type {!Array<!Array<number>>}\n */\nSolidity.ORDER_OVERRIDES = [\n  // (foo()).bar -> foo().bar\n  // (foo())[0] -> foo()[0]\n  [Solidity.ORDER_FUNCTION_CALL, Solidity.ORDER_MEMBER],\n  // (foo())() -> foo()()\n  [Solidity.ORDER_FUNCTION_CALL, Solidity.ORDER_FUNCTION_CALL],\n  // (foo.bar).baz -> foo.bar.baz\n  // (foo.bar)[0] -> foo.bar[0]\n  // (foo[0]).bar -> foo[0].bar\n  // (foo[0])[1] -> foo[0][1]\n  [Solidity.ORDER_MEMBER, Solidity.ORDER_MEMBER],\n  // (foo.bar)() -> foo.bar()\n  // (foo[0])() -> foo[0]()\n  [Solidity.ORDER_MEMBER, Solidity.ORDER_FUNCTION_CALL],\n\n  // !(!foo) -> !!foo\n  [Solidity.ORDER_LOGICAL_NOT, Solidity.ORDER_LOGICAL_NOT],\n  // a * (b * c) -> a * b * c\n  [Solidity.ORDER_MULTIPLICATION, Solidity.ORDER_MULTIPLICATION],\n  // a + (b + c) -> a + b + c\n  [Solidity.ORDER_ADDITION, Solidity.ORDER_ADDITION],\n  // a && (b && c) -> a && b && c\n  [Solidity.ORDER_LOGICAL_AND, Solidity.ORDER_LOGICAL_AND],\n  // a || (b || c) -> a || b || c\n  [Solidity.ORDER_LOGICAL_OR, Solidity.ORDER_LOGICAL_OR],\n];\n\n/**\n * Whether the init method has been called.\n * @type {?boolean}\n */\nSolidity.isInitialized = false;\n\n/**\n * Initialise the database of variable names.\n * @param {!Workspace} workspace Workspace to generate code from.\n */\nSolidity.init = function (workspace) {\n  // Call Blockly.Generator's init.\n  Object.getPrototypeOf(this).init.call(this);\n\n  if (!this.nameDB_) {\n    this.nameDB_ = new Blockly.Names(this.RESERVED_WORDS_);\n  } else {\n    this.nameDB_.reset();\n  }\n  this.nameDB_.setVariableMap(workspace.getVariableMap());\n  this.nameDB_.populateVariables(workspace);\n  this.nameDB_.populateProcedures(workspace);\n\n  this.isInitialized = true;\n};\n\n/**\n * Prepend the generated code with the variable definitions.\n * @param {string} code Generated code.\n * @return {string} Completed code.\n */\nSolidity.finish = function (code) {\n  // Convert the definitions dictionary into a list.\n  const definitions = objectUtils.values(this.definitions_);\n  // Call Blockly.Generator's finish.\n  code = Object.getPrototypeOf(this).finish.call(this, code);\n  this.isInitialized = false;\n\n  this.nameDB_.reset();\n\n  return definitions.join(\"\\n\\n\") + \"\\n\\n\\n\" + code;\n};\n\n/**\n * Naked values are top-level blocks with outputs that aren't plugged into\n * anything.  A trailing semicolon is needed to make this legal.\n * @param {string} line Line of generated code.\n * @return {string} Legal line of code.\n */\nSolidity.scrubNakedValue = function (line) {\n  return line + \";\\n\";\n};\n\n/**\n * Encode a string as a properly escaped Solidity string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} Solidity string.\n * @protected\n */\nSolidity.quote_ = function (string) {\n  // Can't use goog.string.quote since Google's style guide recommends\n  // JS string literals use single quotes.\n  string = string\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(/\\n/g, \"\\\\\\n\")\n    .replace(/'/g, \"\\\\'\");\n  return \"'\" + string + \"'\";\n};\n\n/**\n * Encode a string as a properly escaped multiline Solidity string, complete\n * with quotes.\n * @param {string} string Text to encode.\n * @return {string} Solidity string.\n * @protected\n */\nSolidity.multiline_quote_ = function (string) {\n  // Can't use goog.string.quote since Google's style guide recommends\n  // JS string literals use single quotes.\n  const lines = string.split(/\\n/g).map(this.quote_);\n  return lines.join(\" + '\\\\n' +\\n\");\n};\n\n/**\n * Common tasks for generating Solidity from blocks.\n * Handles comments for the specified block and any connected value blocks.\n * Calls any statements following this block.\n * @param {!Block} block The current block.\n * @param {string} code The Solidity code created for this block.\n * @param {boolean=} opt_thisOnly True to generate code for only this statement.\n * @return {string} Solidity code with comments and subsequent blocks added.\n * @protected\n */\nSolidity.scrub_ = function (block, code, opt_thisOnly) {\n  let commentCode = \"\";\n  // Only collect comments for blocks that aren't inline.\n  if (!block.outputConnection || !block.outputConnection.targetConnection) {\n    // Collect comment for this block.\n    let comment = block.getCommentText();\n    if (comment) {\n      comment = stringUtils.wrap(comment, this.COMMENT_WRAP - 3);\n      commentCode += this.prefixLines(comment + \"\\n\", \"/// \");\n    }\n    /// Collect comments for all value arguments.\n    /// Don't collect comments for nested statements.\n    for (let i = 0; i < block.inputList.length; i++) {\n      if (block.inputList[i].type === Blockly.inputTypes.VALUE) {\n        const childBlock = block.inputList[i].connection.targetBlock();\n        if (childBlock) {\n          comment = this.allNestedComments(childBlock);\n          if (comment) {\n            commentCode += this.prefixLines(comment, \"/// \");\n          }\n        }\n      }\n    }\n  }\n  const nextBlock = block.nextConnection && block.nextConnection.targetBlock();\n  const nextCode = opt_thisOnly ? \"\" : this.blockToCode(nextBlock);\n\n  return commentCode + code + nextCode;\n};\n\n/**\n * Gets a property and adjusts the value while taking into account indexing.\n * @param {!Block} block The block.\n * @param {string} atId The property ID of the element to get.\n * @param {number=} opt_delta Value to add.\n * @param {boolean=} opt_negate Whether to negate the value.\n * @param {number=} opt_order The highest order acting on this value.\n * @return {string|number}\n */\nSolidity.getAdjusted = function (\n  block,\n  atId,\n  opt_delta,\n  opt_negate,\n  opt_order\n) {\n  let delta = opt_delta || 0;\n  let order = opt_order || this.ORDER_NONE;\n  if (block.workspace.options.oneBasedIndex) {\n    delta--;\n  }\n  const defaultAtIndex = block.workspace.options.oneBasedIndex ? \"1\" : \"0\";\n\n  let innerOrder;\n  let outerOrder = order;\n  if (delta > 0) {\n    outerOrder = this.ORDER_ADDITION;\n    innerOrder = this.ORDER_ADDITION;\n  } else if (delta < 0) {\n    outerOrder = this.ORDER_SUBTRACTION;\n    innerOrder = this.ORDER_SUBTRACTION;\n  } else if (opt_negate) {\n    outerOrder = this.ORDER_UNARY_NEGATION;\n    innerOrder = this.ORDER_UNARY_NEGATION;\n  }\n\n  let at = this.valueToCode(block, atId, outerOrder) || defaultAtIndex;\n\n  if (stringUtils.isNumber(at)) {\n    // If the index is a naked number, adjust it right now.\n    at = Number(at) + delta;\n    if (opt_negate) {\n      at = -at;\n    }\n  } else {\n    // If the index is dynamic, adjust it in code.\n    if (delta > 0) {\n      at = at + \" + \" + delta;\n    } else if (delta < 0) {\n      at = at + \" - \" + -delta;\n    }\n    if (opt_negate) {\n      if (delta) {\n        at = \"-(\" + at + \")\";\n      } else {\n        at = \"-\" + at;\n      }\n    }\n    innerOrder = Math.floor(innerOrder);\n    order = Math.floor(order);\n    if (innerOrder && order >= innerOrder) {\n      at = \"(\" + at + \")\";\n    }\n  }\n  return at;\n};\n\nSolidity.updateWorkspaceNameFields = function (workspace) {\n  var blocks = workspace.getAllBlocks();\n  for (var i = 0; i < blocks.length; ++i) {\n    var nameField = blocks[i].getVariableNameSelectField\n      ? blocks[i].getVariableNameSelectField()\n      : null;\n    var group = blocks[i].getVariableLabelGroup\n      ? blocks[i].getVariableLabelGroup()\n      : null;\n\n    if (!!nameField && !!group) {\n      var vars = Solidity.getVariablesInScope(blocks[i], group);\n      var options = vars.map(function (v) {\n        return [Solidity.getVariableName(v), v.id_];\n      });\n\n      var selectedOption = nameField.getValue();\n\n      console.log(\"selected option => \", selectedOption);\n      if (options.length != 0) {\n        var wasUndefined =\n          nameField.menuGenerator_[0][1] == Solidity.UNDEFINED_NAME;\n\n        nameField.menuGenerator_ = options;\n        if (wasUndefined) {\n          nameField.setValue(options[0][1]);\n        } else {\n          nameField.setValue(selectedOption);\n          // The text input does not redraw/update itself after we call \"setValue\",\n          // so we set the text manually.\n          // nameField.setText(\n          //   options.filter(function (o) { return o[1] == selectedOption })[0][0]\n          // );\n        }\n      }\n    }\n  }\n};\n\nSolidity.updateWorkspaceTypes = function (\n  workspace,\n  nameFieldName,\n  valueFieldName\n) {\n  var blocks = workspace.getAllBlocks();\n  var vars = workspace.getAllVariables();\n\n  for (var i = 0; i < blocks.length; ++i) {\n    var stateNameField = blocks[i].getField(nameFieldName);\n\n    if (!stateNameField) {\n      continue;\n    }\n\n    var variableId = blocks[i].getFieldValue(nameFieldName);\n    var variable = workspace.getVariableById(variableId);\n\n    if (!variable) {\n      return;\n    }\n\n    if (\n      blocks[i].inputList[0] &&\n      blocks[i].inputList[0].name == valueFieldName\n    ) {\n      switch (variable.type) {\n        case \"TYPE_BOOL\":\n          blocks[i].inputList[0].setCheck(\"Boolean\");\n          break;\n        case \"TYPE_INT\":\n          blocks[i].inputList[0].setCheck(\"Number\");\n          break;\n        case \"TYPE_UINT\":\n          blocks[i].inputList[0].setCheck(\"Number\");\n          break;\n        default:\n      }\n    }\n    // TODO: update the output type\n  }\n};\n\nSolidity.updateWorkspaceStateTypes = function (workspace) {\n  Solidity.updateWorkspaceTypes(workspace, \"STATE_NAME\", \"STATE_VALUE\");\n};\n\nSolidity.updateWorkspaceParameterTypes = function (workspace) {\n  Solidity.updateWorkspaceTypes(workspace, \"PARAM_NAME\", \"PARAM_VALUE\");\n};\n\nSolidity.createVariable = function (workspace, group, type, name, scope, id) {\n  var variable = workspace.createVariable(name, type, id);\n\n  variable.group = group;\n  variable.scope = scope;\n\n  Solidity.setVariableName(variable, name);\n\n  return variable;\n};\n\nSolidity.getVariableById = function (workspace, id) {\n  return workspace.getVariableById(id);\n};\n\nSolidity.getVariableByName = function (workspace, name) {\n  return Solidity.getAllVariables(workspace).filter(function (v) {\n    return Solidity.getVariableName(v) == name;\n  })[0];\n};\n\nSolidity.getVariableByNameAndScope = function (name, scope, group = null) {\n  return Solidity.getVariablesInScope(scope, group).filter(function (v) {\n    return Solidity.getVariableName(v) == name;\n  })[0];\n};\n\nSolidity.deleteVariableById = function (workspace, id) {\n  Solidity.deleteVariableByName(\n    workspace,\n    Solidity.getVariableById(workspace, id).name\n  );\n};\n\nSolidity.deleteVariableByName = function (workspace, name) {\n  return workspace.deleteVariable(name);\n};\n\nSolidity.variableIsInScope = function (variable, scope) {\n  while (!!scope && scope.id != variable.scope.id) {\n    var type = scope.type;\n    do {\n      scope = scope.getParent();\n    } while (scope && type == scope.type);\n  }\n\n  return !!scope;\n};\n\nSolidity.setVariableName = function (variable, name) {\n  variable.name = '_scope(\"' + variable.scope.id + '\")_' + name;\n};\n\nSolidity.getVariableName = function (variable) {\n  return variable.name.replace('_scope(\"' + variable.scope.id + '\")_', \"\");\n};\n\nSolidity.getAllVariables = function (workspace) {\n  return workspace.getAllVariables();\n};\n\nSolidity.getVariablesInScope = function (block, group = null) {\n  return Solidity.getAllVariables(block.workspace)\n    .filter(function (v) {\n      return Solidity.variableIsInScope(v, block);\n    })\n    .filter(function (v) {\n      return !group || v.group == group;\n    });\n};\n\nSolidity[\"contract\"] = function (block) {\n  var states = Solidity.statementToCode(block, \"STATES\");\n  if (states.length > 0) {\n    states += \"\\n\";\n  }\n  var ctor = Solidity.statementToCode(block, \"CTOR\");\n  var methods = Solidity.statementToCode(block, \"METHODS\");\n\n  // trim newline before ultimate closing curly brace\n  if (methods.length > 0) {\n    methods = methods.slice(0, -2);\n  } else if (ctor.length > 0) {\n    ctor = ctor.slice(0, -2);\n  }\n\n  var code =\n    \"//SPDX-License-Identifier: MIT\\n\\n\" +\n    \"pragma solidity ^0.8.17;\\n\\n\" +\n    \"contract \" +\n    block.getFieldValue(\"NAME\") +\n    \" {\\n\\n\" +\n    states +\n    ctor +\n    methods +\n    \"}\\n\";\n\n  return code;\n};\n\nSolidity[\"contract_state\"] = function (block) {\n  var name = block.getFieldValue(\"NAME\");\n  var value = Solidity.valueToCode(block, \"VALUE\", Solidity.ORDER_ASSIGNMENT);\n  var type = block.getFieldValue(\"TYPE\");\n  var types = {\n    TYPE_BOOL: \"bool\",\n    TYPE_INT: \"int\",\n    TYPE_UINT: \"uint\",\n    TYPE_STRING: \"string\",\n    TYPE_ADDRESS: \"address\",\n  };\n  var defaultValue = {\n    TYPE_BOOL: \"false\",\n    TYPE_INT: \"0\",\n    TYPE_UINT: \"0\",\n    TYPE_STRING: '\"\"',\n    TYPE_ADDRESS: \"0x0000000000000000000000000000000000000000\",\n  };\n\n  if (value === \"\") {\n    value = defaultValue[type];\n  }\n\n  return types[type] + \" \" + name + \" = \" + value + \";\\n\";\n};\n\nSolidity[\"contract_state_get\"] = function (block) {\n  var variableId = block.getFieldValue(\"STATE_NAME\");\n  var variable = block.workspace.getVariableById(variableId);\n\n  if (!variable) {\n    return \"\";\n  }\n\n  return [Solidity.getVariableName(variable), Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"contract_state_set\"] = function (block) {\n  // Variable setter.\n  var argument0 =\n    Solidity.valueToCode(block, \"STATE_VALUE\", Solidity.ORDER_ASSIGNMENT) ||\n    \"0\";\n  var variableId = block.getFieldValue(\"STATE_NAME\");\n  var variable = block.workspace.getVariableById(variableId);\n\n  if (!variable) {\n    return \"\";\n  }\n\n  return Solidity.getVariableName(variable) + \" = \" + argument0 + \";\\n\";\n};\n\nSolidity[\"controls_if\"] = function (block) {\n  // If/elseif/else condition.\n  var n = 0;\n  var code = \"\",\n    branchCode,\n    conditionCode;\n  do {\n    conditionCode =\n      Solidity.valueToCode(block, \"IF\" + n, Solidity.ORDER_NONE) || \"false\";\n    branchCode = Solidity.statementToCode(block, \"DO\" + n);\n    code +=\n      (n > 0 ? \" else \" : \"\") +\n      \"if (\" +\n      conditionCode +\n      \") {\\n\" +\n      branchCode +\n      \"}\";\n\n    ++n;\n  } while (block.getInput(\"IF\" + n));\n\n  if (block.getInput(\"ELSE\")) {\n    branchCode = Solidity.statementToCode(block, \"ELSE\");\n    code += \" else {\\n\" + branchCode + \"}\";\n  }\n  return code + \"\\n\";\n};\n\nSolidity[\"controls_ifelse\"] = Solidity[\"controls_if\"];\n\nSolidity[\"logic_compare\"] = function (block) {\n  // Comparison operator.\n  var OPERATORS = {\n    EQ: \"==\",\n    NEQ: \"!=\",\n    LT: \"<\",\n    LTE: \"<=\",\n    GT: \">\",\n    GTE: \">=\",\n  };\n  var operator = OPERATORS[block.getFieldValue(\"OP\")];\n  var order =\n    operator == \"==\" || operator == \"!=\"\n      ? Solidity.ORDER_EQUALITY\n      : Solidity.ORDER_RELATIONAL;\n  var argument0 = Solidity.valueToCode(block, \"A\", order) || \"0\";\n  var argument1 = Solidity.valueToCode(block, \"B\", order) || \"0\";\n  var code = argument0 + \" \" + operator + \" \" + argument1;\n  return [code, order];\n};\n\nSolidity[\"logic_operation\"] = function (block) {\n  // Operations 'and', 'or'.\n  var operator = block.getFieldValue(\"OP\") == \"AND\" ? \"&&\" : \"||\";\n  var order =\n    operator == \"&&\" ? Solidity.ORDER_LOGICAL_AND : Solidity.ORDER_LOGICAL_OR;\n  var argument0 = Solidity.valueToCode(block, \"A\", order);\n  var argument1 = Solidity.valueToCode(block, \"B\", order);\n  if (!argument0 && !argument1) {\n    // If there are no arguments, then the return value is false.\n    argument0 = \"false\";\n    argument1 = \"false\";\n  } else {\n    // Single missing arguments have no effect on the return value.\n    var defaultArgument = operator == \"&&\" ? \"true\" : \"false\";\n    if (!argument0) {\n      argument0 = defaultArgument;\n    }\n    if (!argument1) {\n      argument1 = defaultArgument;\n    }\n  }\n  var code = argument0 + \" \" + operator + \" \" + argument1;\n  return [code, order];\n};\n\nSolidity[\"logic_negate\"] = function (block) {\n  // Negation.\n  var order = Solidity.ORDER_LOGICAL_NOT;\n  var argument0 = Solidity.valueToCode(block, \"BOOL\", order) || \"true\";\n  var code = \"!\" + argument0;\n  return [code, order];\n};\n\nSolidity[\"logic_boolean\"] = function (block) {\n  // Boolean values true and false.\n  var code = block.getFieldValue(\"BOOL\") == \"TRUE\" ? \"true\" : \"false\";\n  return [code, Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"logic_null\"] = function (block) {\n  // Null data type.\n  return [\"null\", Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"logic_ternary\"] = function (block) {\n  // Ternary operator.\n  var value_if =\n    Solidity.valueToCode(block, \"IF\", Solidity.ORDER_CONDITIONAL) || \"false\";\n  var value_then =\n    Solidity.valueToCode(block, \"THEN\", Solidity.ORDER_CONDITIONAL) || \"null\";\n  var value_else =\n    Solidity.valueToCode(block, \"ELSE\", Solidity.ORDER_CONDITIONAL) || \"null\";\n  var code = value_if + \" ? \" + value_then + \" : \" + value_else;\n  return [code, Solidity.ORDER_CONDITIONAL];\n};\n\nSolidity[\"math_number\"] = function (block) {\n  // Numeric value.\n  var code = parseFloat(block.getFieldValue(\"NUM\"));\n  return [code, Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"math_arithmetic\"] = function (block) {\n  // Basic arithmetic operators, and power.\n  var OPERATORS = {\n    ADD: [\" + \", Solidity.ORDER_ADDITION],\n    MINUS: [\" - \", Solidity.ORDER_SUBTRACTION],\n    MULTIPLY: [\" * \", Solidity.ORDER_MULTIPLICATION],\n    DIVIDE: [\" / \", Solidity.ORDER_DIVISION],\n    POWER: [\" ** \", Solidity.ORDER_EXPONENTATION],\n  };\n  var tuple = OPERATORS[block.getFieldValue(\"OP\")];\n  var operator = tuple[0];\n  var order = tuple[1];\n  var argument0 = Solidity.valueToCode(block, \"A\", order) || \"0\";\n  var argument1 = Solidity.valueToCode(block, \"B\", order) || \"0\";\n  var code = argument0 + operator + argument1;\n  return [code, order];\n};\n\nSolidity[\"math_single\"] = function (block) {\n  // Math operators with single operand.\n  var operator = block.getFieldValue(\"OP\");\n  var code;\n  var arg;\n  if (operator == \"NEG\") {\n    // Negation is a special case given its different operator precedence.\n    arg =\n      Solidity.valueToCode(block, \"NUM\", Solidity.ORDER_UNARY_NEGATION) || \"0\";\n    if (arg[0] == \"-\") {\n      // --3 is not legal in JS.\n      arg = \" \" + arg;\n    }\n    code = \"-\" + arg;\n    return [code, Solidity.ORDER_UNARY_NEGATION];\n  }\n  if (operator == \"SIN\" || operator == \"COS\" || operator == \"TAN\") {\n    arg = Solidity.valueToCode(block, \"NUM\", Solidity.ORDER_DIVISION) || \"0\";\n  } else {\n    arg = Solidity.valueToCode(block, \"NUM\", Solidity.ORDER_NONE) || \"0\";\n  }\n  // First, handle cases which generate values that don't need parentheses\n  // wrapping the code.\n  switch (operator) {\n    case \"ABS\":\n      code = \"Math.abs(\" + arg + \")\";\n      break;\n    case \"ROOT\":\n      code = \"Math.sqrt(\" + arg + \")\";\n      break;\n    case \"LN\":\n      code = \"Math.log(\" + arg + \")\";\n      break;\n    case \"EXP\":\n      code = \"Math.exp(\" + arg + \")\";\n      break;\n    case \"POW10\":\n      code = \"Math.pow(10,\" + arg + \")\";\n      break;\n    case \"ROUND\":\n      code = \"Math.round(\" + arg + \")\";\n      break;\n    case \"ROUNDUP\":\n      code = \"Math.ceil(\" + arg + \")\";\n      break;\n    case \"ROUNDDOWN\":\n      code = \"Math.floor(\" + arg + \")\";\n      break;\n    case \"SIN\":\n      code = \"Math.sin(\" + arg + \" / 180 * Math.PI)\";\n      break;\n    case \"COS\":\n      code = \"Math.cos(\" + arg + \" / 180 * Math.PI)\";\n      break;\n    case \"TAN\":\n      code = \"Math.tan(\" + arg + \" / 180 * Math.PI)\";\n      break;\n  }\n  if (code) {\n    return [code, Solidity.ORDER_FUNCTION_CALL];\n  }\n  // Second, handle cases which generate values that may need parentheses\n  // wrapping the code.\n  switch (operator) {\n    case \"LOG10\":\n      code = \"Math.log(\" + arg + \") / Math.log(10)\";\n      break;\n    case \"ASIN\":\n      code = \"Math.asin(\" + arg + \") / Math.PI * 180\";\n      break;\n    case \"ACOS\":\n      code = \"Math.acos(\" + arg + \") / Math.PI * 180\";\n      break;\n    case \"ATAN\":\n      code = \"Math.atan(\" + arg + \") / Math.PI * 180\";\n      break;\n    default:\n      throw \"Unknown math operator: \" + operator;\n  }\n  return [code, Solidity.ORDER_DIVISION];\n};\n\nSolidity[\"math_constant\"] = function (block) {\n  // Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.\n  var CONSTANTS = {\n    PI: [\"Math.PI\", Solidity.ORDER_MEMBER],\n    E: [\"Math.E\", Solidity.ORDER_MEMBER],\n    GOLDEN_RATIO: [\"(1 + Math.sqrt(5)) / 2\", Solidity.ORDER_DIVISION],\n    SQRT2: [\"Math.SQRT2\", Solidity.ORDER_MEMBER],\n    SQRT1_2: [\"Math.SQRT1_2\", Solidity.ORDER_MEMBER],\n    INFINITY: [\"Infinity\", Solidity.ORDER_ATOMIC],\n  };\n  return CONSTANTS[block.getFieldValue(\"CONSTANT\")];\n};\n\nSolidity[\"math_number_property\"] = function (block) {\n  // Check if a number is even, odd, prime, whole, positive, or negative\n  // or if it is divisible by certain number. Returns true or false.\n  var number_to_check =\n    Solidity.valueToCode(block, \"NUMBER_TO_CHECK\", Solidity.ORDER_MODULUS) ||\n    \"0\";\n  var dropdown_property = block.getFieldValue(\"PROPERTY\");\n  var code;\n  if (dropdown_property == \"PRIME\") {\n    // Prime is a special case as it is not a one-liner test.\n    var functionName = Solidity.provideFunction_(\"mathIsPrime\", [\n      \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(n) {\",\n      \"  // https://en.wikipedia.org/wiki/Primality_test#Naive_methods\",\n      \"  if (n == 2 || n == 3) {\",\n      \"    return true;\",\n      \"  }\",\n      \"  // False if n is NaN, negative, is 1, or not whole.\",\n      \"  // And false if n is divisible by 2 or 3.\",\n      \"  if (isNaN(n) || n <= 1 || n % 1 != 0 || n % 2 == 0 ||\" +\n        \" n % 3 == 0) {\",\n      \"    return false;\",\n      \"  }\",\n      \"  // Check all the numbers of form 6k +/- 1, up to sqrt(n).\",\n      \"  for (var x = 6; x <= Math.sqrt(n) + 1; x += 6) {\",\n      \"    if (n % (x - 1) == 0 || n % (x + 1) == 0) {\",\n      \"      return false;\",\n      \"    }\",\n      \"  }\",\n      \"  return true;\",\n      \"}\",\n    ]);\n    code = functionName + \"(\" + number_to_check + \")\";\n    return [code, Solidity.ORDER_FUNCTION_CALL];\n  }\n  switch (dropdown_property) {\n    case \"EVEN\":\n      code = number_to_check + \" % 2 == 0\";\n      break;\n    case \"ODD\":\n      code = number_to_check + \" % 2 == 1\";\n      break;\n    case \"WHOLE\":\n      code = number_to_check + \" % 1 == 0\";\n      break;\n    case \"POSITIVE\":\n      code = number_to_check + \" > 0\";\n      break;\n    case \"NEGATIVE\":\n      code = number_to_check + \" < 0\";\n      break;\n    case \"DIVISIBLE_BY\":\n      var divisor =\n        Solidity.valueToCode(block, \"DIVISOR\", Solidity.ORDER_MODULUS) || \"0\";\n      code = number_to_check + \" % \" + divisor + \" == 0\";\n      break;\n  }\n  return [code, Solidity.ORDER_EQUALITY];\n};\n\nSolidity[\"math_change\"] = function (block) {\n  // Add to a variable in place.\n  var argument0 =\n    Solidity.valueToCode(block, \"DELTA\", Solidity.ORDER_ADDITION) || \"0\";\n  var varName = Solidity.variableDB_.getName(\n    block.getFieldValue(\"VAR\"),\n    Blockly.Variables.NAME_TYPE\n  );\n  return (\n    varName +\n    \" = (typeof \" +\n    varName +\n    \" == 'number' ? \" +\n    varName +\n    \" : 0) + \" +\n    argument0 +\n    \";\\n\"\n  );\n};\n\n// Rounding functions have a single operand.\nSolidity[\"math_round\"] = Solidity[\"math_single\"];\n// Trigonometry functions have a single operand.\nSolidity[\"math_trig\"] = Solidity[\"math_single\"];\n\nSolidity[\"math_on_list\"] = function (block) {\n  // Math functions for lists.\n  var func = block.getFieldValue(\"OP\");\n  var list, code;\n  switch (func) {\n    case \"SUM\":\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_MEMBER) || \"[]\";\n      code = list + \".reduce(function(x, y) {return x + y;})\";\n      break;\n    case \"MIN\":\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_COMMA) || \"[]\";\n      code = \"Math.min.apply(null, \" + list + \")\";\n      break;\n    case \"MAX\":\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_COMMA) || \"[]\";\n      code = \"Math.max.apply(null, \" + list + \")\";\n      break;\n    case \"AVERAGE\":\n      // mathMean([null,null,1,3]) == 2.0.\n      var functionName = Solidity.provideFunction_(\"mathMean\", [\n        \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(myList) {\",\n        \"  return myList.reduce(function(x, y) {return x + y;}) / \" +\n          \"myList.length;\",\n        \"}\",\n      ]);\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_NONE) || \"[]\";\n      code = functionName + \"(\" + list + \")\";\n      break;\n    case \"MEDIAN\":\n      // mathMedian([null,null,1,3]) == 2.0.\n      var functionName = Solidity.provideFunction_(\"mathMedian\", [\n        \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(myList) {\",\n        \"  var localList = myList.filter(function (x) \" +\n          \"{return typeof x == 'number';});\",\n        \"  if (!localList.length) return null;\",\n        \"  localList.sort(function(a, b) {return b - a;});\",\n        \"  if (localList.length % 2 == 0) {\",\n        \"    return (localList[localList.length / 2 - 1] + \" +\n          \"localList[localList.length / 2]) / 2;\",\n        \"  } else {\",\n        \"    return localList[(localList.length - 1) / 2];\",\n        \"  }\",\n        \"}\",\n      ]);\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_NONE) || \"[]\";\n      code = functionName + \"(\" + list + \")\";\n      break;\n    case \"MODE\":\n      // As a list of numbers can contain more than one mode,\n      // the returned result is provided as an array.\n      // Mode of [3, 'x', 'x', 1, 1, 2, '3'] -> ['x', 1].\n      var functionName = Solidity.provideFunction_(\"mathModes\", [\n        \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(values) {\",\n        \"  var modes = [];\",\n        \"  var counts = [];\",\n        \"  var maxCount = 0;\",\n        \"  for (var i = 0; i < values.length; i++) {\",\n        \"    var value = values[i];\",\n        \"    var found = false;\",\n        \"    var thisCount;\",\n        \"    for (var j = 0; j < counts.length; j++) {\",\n        \"      if (counts[j][0] === value) {\",\n        \"        thisCount = ++counts[j][1];\",\n        \"        found = true;\",\n        \"        break;\",\n        \"      }\",\n        \"    }\",\n        \"    if (!found) {\",\n        \"      counts.push([value, 1]);\",\n        \"      thisCount = 1;\",\n        \"    }\",\n        \"    maxCount = Math.max(thisCount, maxCount);\",\n        \"  }\",\n        \"  for (var j = 0; j < counts.length; j++) {\",\n        \"    if (counts[j][1] == maxCount) {\",\n        \"        modes.push(counts[j][0]);\",\n        \"    }\",\n        \"  }\",\n        \"  return modes;\",\n        \"}\",\n      ]);\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_NONE) || \"[]\";\n      code = functionName + \"(\" + list + \")\";\n      break;\n    case \"STD_DEV\":\n      var functionName = Solidity.provideFunction_(\"mathStandardDeviation\", [\n        \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(numbers) {\",\n        \"  var n = numbers.length;\",\n        \"  if (!n) return null;\",\n        \"  var mean = numbers.reduce(function(x, y) {return x + y;}) / n;\",\n        \"  var variance = 0;\",\n        \"  for (var j = 0; j < n; j++) {\",\n        \"    variance += Math.pow(numbers[j] - mean, 2);\",\n        \"  }\",\n        \"  variance = variance / n;\",\n        \"  return Math.sqrt(variance);\",\n        \"}\",\n      ]);\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_NONE) || \"[]\";\n      code = functionName + \"(\" + list + \")\";\n      break;\n    case \"RANDOM\":\n      var functionName = Solidity.provideFunction_(\"mathRandomList\", [\n        \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(list) {\",\n        \"  var x = Math.floor(Math.random() * list.length);\",\n        \"  return list[x];\",\n        \"}\",\n      ]);\n      list = Solidity.valueToCode(block, \"LIST\", Solidity.ORDER_NONE) || \"[]\";\n      code = functionName + \"(\" + list + \")\";\n      break;\n    default:\n      throw \"Unknown operator: \" + func;\n  }\n  return [code, Solidity.ORDER_FUNCTION_CALL];\n};\n\nSolidity[\"math_modulo\"] = function (block) {\n  // Remainder computation.\n  var argument0 =\n    Solidity.valueToCode(block, \"DIVIDEND\", Solidity.ORDER_MODULUS) || \"0\";\n  var argument1 =\n    Solidity.valueToCode(block, \"DIVISOR\", Solidity.ORDER_MODULUS) || \"0\";\n  var code = argument0 + \" % \" + argument1;\n  return [code, Solidity.ORDER_MODULUS];\n};\n\nSolidity[\"math_constrain\"] = function (block) {\n  // Constrain a number between two limits.\n  var argument0 =\n    Solidity.valueToCode(block, \"VALUE\", Solidity.ORDER_COMMA) || \"0\";\n  var argument1 =\n    Solidity.valueToCode(block, \"LOW\", Solidity.ORDER_COMMA) || \"0\";\n  var argument2 =\n    Solidity.valueToCode(block, \"HIGH\", Solidity.ORDER_COMMA) || \"Infinity\";\n  var code =\n    \"Math.min(Math.max(\" +\n    argument0 +\n    \", \" +\n    argument1 +\n    \"), \" +\n    argument2 +\n    \")\";\n  return [code, Solidity.ORDER_FUNCTION_CALL];\n};\n\nSolidity[\"math_random_int\"] = function (block) {\n  // Random integer between [X] and [Y].\n  var argument0 =\n    Solidity.valueToCode(block, \"FROM\", Solidity.ORDER_COMMA) || \"0\";\n  var argument1 =\n    Solidity.valueToCode(block, \"TO\", Solidity.ORDER_COMMA) || \"0\";\n  var functionName = Solidity.provideFunction_(\"mathRandomInt\", [\n    \"function \" + Solidity.FUNCTION_NAME_PLACEHOLDER_ + \"(a, b) {\",\n    \"  if (a > b) {\",\n    \"    // Swap a and b to ensure a is smaller.\",\n    \"    var c = a;\",\n    \"    a = b;\",\n    \"    b = c;\",\n    \"  }\",\n    \"  return Math.floor(Math.random() * (b - a + 1) + a);\",\n    \"}\",\n  ]);\n  var code = functionName + \"(\" + argument0 + \", \" + argument1 + \")\";\n  return [code, Solidity.ORDER_FUNCTION_CALL];\n};\n\nSolidity[\"math_random_float\"] = function (block) {\n  // Random fraction between 0 and 1.\n  return [\"Math.random()\", Solidity.ORDER_FUNCTION_CALL];\n};\n\nSolidity[\"contract_method\"] = function (block) {\n  var params = Solidity.statementToCode(block, \"PARAMS\").trim();\n  var branch = Solidity.statementToCode(block, \"STACK\");\n  var code =\n    \"function \" +\n    block.getFieldValue(\"NAME\") +\n    \"(\" +\n    params +\n    \") {\\n\" +\n    branch +\n    \"\\n}\\n\\n\";\n\n  return code;\n};\n\nSolidity[\"contract_ctor\"] = function (block) {\n  var parent = block.getSurroundParent();\n\n  if (!parent) {\n    return \"\";\n  }\n\n  var params = Solidity.statementToCode(block, \"PARAMS\").trim();\n  var branch = Solidity.statementToCode(block, \"STACK\");\n  var code = \"constructor \" + \"(\" + params + \") {\\n\" + branch + \"}\\n\\n\";\n\n  return code;\n};\n\nSolidity[\"contract_method_parameter\"] = function (block) {\n  var name = block.getFieldValue(\"NAME\");\n  var nextBlock = block.getNextBlock();\n  var sep = nextBlock && nextBlock.type == block.type ? \", \" : \"\";\n  var types = {\n    TYPE_BOOL: \"bool\",\n    TYPE_INT: \"int\",\n    TYPE_UINT: \"uint\",\n    TYPE_STRING: \"string\",\n    TYPE_ADDRESS: \"address\",\n  };\n\n  return types[block.getFieldValue(\"TYPE\")] + \" \" + name + sep;\n};\n\nSolidity[\"contract_method_parameter_get\"] = function (block) {\n  var variableId = block.getFieldValue(\"PARAM_NAME\");\n  var variable = block.workspace.getVariableById(variableId);\n\n  if (!variable) {\n    return \"\";\n  }\n\n  return [Solidity.getVariableName(variable), Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"contract_intrinsic_sha3\"] = function (block) {\n  var argument0 =\n    Solidity.valueToCode(block, \"VALUE\", Solidity.ORDER_ASSIGNMENT) || \"0\";\n\n  return [\"sha3(\" + argument0 + \")\", Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"contract_method_call\"] = function (block) {\n  var variableId = block.getFieldValue(\"METHOD_NAME\");\n  var variable = block.workspace.getVariableById(variableId);\n\n  if (!variable) {\n    return \"\";\n  }\n\n  return Solidity.getVariableName(variable) + \"();\\n\";\n};\n\nSolidity[\"variables_get\"] = function (block) {\n  // Variable getter.\n  var code = Solidity.variableDB_.getName(\n    block.getFieldValue(\"VAR\"),\n    Blockly.Variables.NAME_TYPE\n  );\n  return [code, Solidity.ORDER_ATOMIC];\n};\n\nSolidity[\"variables_set\"] = function (block) {\n  // Variable setter.\n  var argument0 =\n    Solidity.valueToCode(block, \"VALUE\", Solidity.ORDER_ASSIGNMENT) || \"0\";\n  var varName = Solidity.variableDB_.getName(\n    block.getFieldValue(\"VAR\"),\n    Blockly.Variables.NAME_TYPE\n  );\n  return varName + \" = \" + argument0 + \";\\n\";\n};\n\n// Blockly.JavaScript[\"test_react_field\"] = function (block) {\n//     return \"console.log('custom block');\\n\"\n// }\n\n// Blockly.JavaScript[\"test_react_date_field\"] = function (block) {\n//     return \"console.log(\" + block.getField(\"DATE\").getText() + \");\\n\"\n// }\n\n// // Solidity[\"contract\"] = function (block) {\n// //     var states = Solidity.statementToCode(block, \"STATES\");\n// //     if (states.length > 0) {\n// //       states += \"\\n\";\n// //     }\n// //     var ctor = Solidity.statementToCode(block, \"CTOR\");\n// //     var methods = Solidity.statementToCode(block, \"METHODS\");\n\n// //     // trim newline before ultimate closing curly brace\n// //     if (methods.length > 0) {\n// //       methods = methods.slice(0, -2);\n// //     } else if (ctor.length > 0) {\n// //       ctor = ctor.slice(0, -2);\n// //     }\n\n// //     var code =\n// //       \"//SPDX-License-Identifier: MIT\\n\\n\" +\n// //       \"pragma solidity ^0.8.17;\\n\\n\" +\n// //       \"contract \" +\n// //       block.getFieldValue(\"NAME\") +\n// //       \" {\\n\\n\" +\n// //       states +\n// //       ctor +\n// //       methods +\n// //       \"}\\n\";\n\n// //     return code;\n// // };\n\n// /** Global variables **/\n// // Transaction variables - Subcategory\n// Blockly.JavaScript[\"transaction_constiables\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"transaction\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"transaction\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// // Block variables - Subcategory\n// Blockly.JavaScript[\"block_constiables\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"block\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"block\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// /* State variables */\n// // Keywords - Subcategory\n// Blockly.JavaScript[\"keywords\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"keywords\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"keywords\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"visibility\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"visibility\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"visibility\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// // Value Types - Subcategory\n\n// Blockly.JavaScript[\"uint\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"uint\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"uint\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"int\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"int\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"int\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"bytes\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"bytes\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"bytes\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"string\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"string\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"string\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"boolean\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"bool\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"bool\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"bool_value\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"bool_value\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"bool_value\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"address\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"address\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"address\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"uintStateVariable\"] = function (block) {\n//     const dropdown_uint = block.getFieldValue(\"uint\")\n//     const dropdown_visibility = block.getFieldValue(\"visibility\")\n//     const text_constiable_name = block.getFieldValue(\"variable_name\")\n//     const text_name = block.getFieldValue(\"NAME\")\n//     const code = `${dropdown_uint} ${dropdown_visibility} ${text_constiable_name} = ${text_name} \\n`\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// // Reference Types - Subcategory\n// Blockly.JavaScript[\"mapping\"] = function (block) {\n//     const key =\n//         Blockly.JavaScript.valueToCode(block, \"KEY\", Blockly.JavaScript.ORDER_ATOMIC) || null\n\n//     const value =\n//         Blockly.JavaScript.valueToCode(block, \"VALUE\", Blockly.JavaScript.ORDER_ATOMIC) || null\n//     const code = `mapping(${key} => ${value})`\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"fixed_sized_arrays\"] = function (block) {\n//     const key =\n//         Blockly.JavaScript.valueToCode(block, \"KEY\", Blockly.JavaScript.ORDER_ATOMIC) || null\n\n//     const size =\n//         Blockly.JavaScript.valueToCode(block, \"SIZE\", Blockly.JavaScript.ORDER_ATOMIC) || null\n//     const code = `${key}[${size}]`\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"dynamic_arrays\"] = function (block) {\n//     const key =\n//         Blockly.JavaScript.valueToCode(block, \"KEY\", Blockly.JavaScript.ORDER_ATOMIC) || null\n//     const code = `${key}[]`\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// /* Functions  Category*/\n// // Normal Functions - Subcategory\n// Blockly.JavaScript[\"function_name\"] = function (block) {\n//     const function_name =\n//         block.getFieldValue(\"function_name\") || \"\"\n//     const code = `function ${function_name}()`\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"function_visibility\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"function_visibility\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"function_visibility\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"payable\"] = function (block) {\n//     const function_name =\n//         block.getFieldValue(\"payable\") || \"\"\n//     const code = function_name\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"function_state_mutability\"] = function (block) {\n//     const dropdown_transaction = block.getFieldValue(\"state_mutability\")\n//     const value_transaction =\n//         Blockly.JavaScript.valueToCode(block, \"state_mutability\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         dropdown_transaction\n//     const code = value_transaction\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// // Special Functions - Subcategory\n\n// // Local Variables Category\n\n// // Handling Errors\n// Blockly.JavaScript[\"assert\"] = function (block) {\n//     const value_name =\n//         Blockly.JavaScript.valueToCode(block, \"assert\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         \"assert\"\n//     const code = value_name\n//     return [code, Blockly.JavaScript.ORDER_NONE]\n// }\n\n// Blockly.JavaScript[\"require\"] = function (block) {\n//     const value_require =\n//         Blockly.JavaScript.valueToCode(block, \"require\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         \"require\"\n//     const code = value_require\n//     return [code, Blockly.JavaScript.ORDER_ATOMIC]\n// }\n\n// Blockly.JavaScript[\"revert\"] = function (block) {\n//     const value_revert =\n//         Blockly.JavaScript.valueToCode(block, \"revert\", Blockly.JavaScript.ORDER_ATOMIC) ||\n//         \"revert\"\n//     const code = value_revert\n//     return [code, Blockly.JavaScript.ORDER_ATOMIC]\n// }\n","/Users/tm/blockly_solidity/src/blocks/customblocks.js",["72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106"],"/Users/tm/blockly_solidity/src/Blockly/index.js",[],"/Users/tm/blockly_solidity/src/Blockly/BlocklyComponent.jsx",[],"/Users/tm/blockly_solidity/src/generator/solidity.js",["107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123"],{"ruleId":"124","replacedBy":"125"},{"ruleId":"126","replacedBy":"127"},{"ruleId":"128","severity":1,"message":"129","line":29,"column":35,"nodeType":"130","messageId":"131","endLine":29,"endColumn":40},{"ruleId":"128","severity":1,"message":"132","line":29,"column":42,"nodeType":"130","messageId":"131","endLine":29,"endColumn":47},{"ruleId":"128","severity":1,"message":"133","line":29,"column":49,"nodeType":"130","messageId":"131","endLine":29,"endColumn":55},{"ruleId":"134","severity":1,"message":"135","line":329,"column":26,"nodeType":"136","messageId":"137","endLine":329,"endColumn":28},{"ruleId":"134","severity":1,"message":"138","line":331,"column":42,"nodeType":"136","messageId":"137","endLine":331,"endColumn":44},{"ruleId":"128","severity":1,"message":"139","line":355,"column":7,"nodeType":"130","messageId":"131","endLine":355,"endColumn":11},{"ruleId":"134","severity":1,"message":"138","line":373,"column":35,"nodeType":"136","messageId":"137","endLine":373,"endColumn":37},{"ruleId":"134","severity":1,"message":"138","line":417,"column":40,"nodeType":"136","messageId":"137","endLine":417,"endColumn":42},{"ruleId":"134","severity":1,"message":"138","line":423,"column":40,"nodeType":"136","messageId":"137","endLine":423,"endColumn":42},{"ruleId":"134","severity":1,"message":"135","line":439,"column":30,"nodeType":"136","messageId":"137","endLine":439,"endColumn":32},{"ruleId":"134","severity":1,"message":"138","line":443,"column":28,"nodeType":"136","messageId":"137","endLine":443,"endColumn":30},{"ruleId":"134","severity":1,"message":"138","line":467,"column":32,"nodeType":"136","messageId":"137","endLine":467,"endColumn":34},{"ruleId":"134","severity":1,"message":"138","line":594,"column":14,"nodeType":"136","messageId":"137","endLine":594,"endColumn":16},{"ruleId":"134","severity":1,"message":"138","line":594,"column":34,"nodeType":"136","messageId":"137","endLine":594,"endColumn":36},{"ruleId":"134","severity":1,"message":"138","line":605,"column":44,"nodeType":"136","messageId":"137","endLine":605,"endColumn":46},{"ruleId":"134","severity":1,"message":"138","line":607,"column":14,"nodeType":"136","messageId":"137","endLine":607,"endColumn":16},{"ruleId":"134","severity":1,"message":"138","line":616,"column":36,"nodeType":"136","messageId":"137","endLine":616,"endColumn":38},{"ruleId":"134","severity":1,"message":"138","line":638,"column":42,"nodeType":"136","messageId":"137","endLine":638,"endColumn":44},{"ruleId":"134","severity":1,"message":"138","line":688,"column":16,"nodeType":"136","messageId":"137","endLine":688,"endColumn":18},{"ruleId":"134","severity":1,"message":"138","line":692,"column":16,"nodeType":"136","messageId":"137","endLine":692,"endColumn":18},{"ruleId":"134","severity":1,"message":"138","line":699,"column":16,"nodeType":"136","messageId":"137","endLine":699,"endColumn":18},{"ruleId":"134","severity":1,"message":"138","line":699,"column":37,"nodeType":"136","messageId":"137","endLine":699,"endColumn":39},{"ruleId":"134","severity":1,"message":"138","line":699,"column":58,"nodeType":"136","messageId":"137","endLine":699,"endColumn":60},{"ruleId":"140","severity":1,"message":"141","line":706,"column":3,"nodeType":"142","messageId":"143","endLine":740,"endColumn":4},{"ruleId":"144","severity":1,"message":"145","line":760,"column":7,"nodeType":"146","messageId":"147","endLine":760,"endColumn":50},{"ruleId":"134","severity":1,"message":"138","line":786,"column":25,"nodeType":"136","messageId":"137","endLine":786,"endColumn":27},{"ruleId":"140","severity":1,"message":"141","line":812,"column":3,"nodeType":"142","messageId":"143","endLine":833,"endColumn":4},{"ruleId":"148","severity":1,"message":"149","line":892,"column":11,"nodeType":"130","messageId":"150","endLine":892,"endColumn":23},{"ruleId":"148","severity":1,"message":"149","line":913,"column":11,"nodeType":"130","messageId":"150","endLine":913,"endColumn":23},{"ruleId":"148","severity":1,"message":"149","line":947,"column":11,"nodeType":"130","messageId":"150","endLine":947,"endColumn":23},{"ruleId":"148","severity":1,"message":"149","line":964,"column":11,"nodeType":"130","messageId":"150","endLine":964,"endColumn":23},{"ruleId":"144","severity":1,"message":"145","line":974,"column":7,"nodeType":"146","messageId":"147","endLine":974,"endColumn":41},{"ruleId":"151","severity":1,"message":"152","line":1058,"column":29,"nodeType":"136","messageId":"153","endLine":1058,"endColumn":30},{"ruleId":"134","severity":1,"message":"138","line":1066,"column":41,"nodeType":"136","messageId":"137","endLine":1066,"endColumn":43},{"ruleId":"134","severity":1,"message":"138","line":218,"column":36,"nodeType":"136","messageId":"137","endLine":218,"endColumn":38},{"ruleId":"148","severity":1,"message":"154","line":221,"column":16,"nodeType":"130","messageId":"150","endLine":221,"endColumn":23},{"ruleId":"148","severity":1,"message":"155","line":255,"column":10,"nodeType":"130","messageId":"150","endLine":255,"endColumn":12},{"ruleId":"148","severity":1,"message":"155","line":258,"column":10,"nodeType":"130","messageId":"150","endLine":258,"endColumn":12},{"ruleId":"148","severity":1,"message":"155","line":261,"column":10,"nodeType":"130","messageId":"150","endLine":261,"endColumn":12},{"ruleId":"148","severity":1,"message":"156","line":278,"column":12,"nodeType":"130","messageId":"150","endLine":278,"endColumn":22},{"ruleId":"148","severity":1,"message":"156","line":286,"column":12,"nodeType":"130","messageId":"150","endLine":286,"endColumn":22},{"ruleId":"134","severity":1,"message":"135","line":316,"column":27,"nodeType":"136","messageId":"137","endLine":316,"endColumn":29},{"ruleId":"134","severity":1,"message":"138","line":318,"column":12,"nodeType":"136","messageId":"137","endLine":318,"endColumn":14},{"ruleId":"128","severity":1,"message":"139","line":338,"column":8,"nodeType":"130","messageId":"131","endLine":338,"endColumn":12},{"ruleId":"134","severity":1,"message":"138","line":354,"column":64,"nodeType":"136","messageId":"137","endLine":354,"endColumn":66},{"ruleId":"134","severity":1,"message":"138","line":411,"column":72,"nodeType":"136","messageId":"137","endLine":411,"endColumn":74},{"ruleId":"134","severity":1,"message":"138","line":417,"column":72,"nodeType":"136","messageId":"137","endLine":417,"endColumn":74},{"ruleId":"134","severity":1,"message":"135","line":433,"column":31,"nodeType":"136","messageId":"137","endLine":433,"endColumn":33},{"ruleId":"134","severity":1,"message":"138","line":437,"column":29,"nodeType":"136","messageId":"137","endLine":437,"endColumn":31},{"ruleId":"134","severity":1,"message":"138","line":458,"column":54,"nodeType":"136","messageId":"137","endLine":458,"endColumn":56},{"ruleId":"144","severity":1,"message":"145","line":466,"column":6,"nodeType":"146","messageId":"147","endLine":466,"endColumn":50},{"ruleId":"144","severity":1,"message":"145","line":470,"column":6,"nodeType":"146","messageId":"147","endLine":470,"endColumn":45},{"ruleId":"144","severity":1,"message":"145","line":474,"column":6,"nodeType":"146","messageId":"147","endLine":474,"endColumn":46},{"ruleId":"144","severity":1,"message":"145","line":478,"column":6,"nodeType":"146","messageId":"147","endLine":478,"endColumn":46},{"ruleId":"134","severity":1,"message":"138","line":488,"column":50,"nodeType":"136","messageId":"137","endLine":488,"endColumn":52},{"ruleId":"157","severity":1,"message":"158","line":497,"column":8,"nodeType":"130","messageId":"159","endLine":497,"endColumn":15},{"ruleId":"134","severity":1,"message":"135","line":546,"column":24,"nodeType":"136","messageId":"137","endLine":546,"endColumn":26},{"ruleId":"134","severity":1,"message":"138","line":550,"column":21,"nodeType":"136","messageId":"137","endLine":550,"endColumn":23},{"ruleId":"134","severity":1,"message":"138","line":555,"column":21,"nodeType":"136","messageId":"137","endLine":555,"endColumn":23},{"ruleId":"134","severity":1,"message":"138","line":563,"column":24,"nodeType":"136","messageId":"137","endLine":563,"endColumn":26},{"ruleId":"134","severity":1,"message":"138","line":563,"column":49,"nodeType":"136","messageId":"137","endLine":563,"endColumn":51},{"ruleId":"134","severity":1,"message":"135","line":653,"column":37,"nodeType":"136","messageId":"137","endLine":653,"endColumn":39},{"ruleId":"134","severity":1,"message":"135","line":750,"column":21,"nodeType":"136","messageId":"137","endLine":750,"endColumn":23},{"ruleId":"134","severity":1,"message":"135","line":751,"column":21,"nodeType":"136","messageId":"137","endLine":751,"endColumn":23},{"ruleId":"134","severity":1,"message":"135","line":828,"column":37,"nodeType":"136","messageId":"137","endLine":828,"endColumn":39},{"ruleId":"134","severity":1,"message":"135","line":856,"column":25,"nodeType":"136","messageId":"137","endLine":856,"endColumn":27},{"ruleId":"134","severity":1,"message":"138","line":860,"column":25,"nodeType":"136","messageId":"137","endLine":860,"endColumn":27},{"ruleId":"134","severity":1,"message":"138","line":860,"column":50,"nodeType":"136","messageId":"137","endLine":860,"endColumn":52},{"ruleId":"134","severity":1,"message":"138","line":874,"column":50,"nodeType":"136","messageId":"137","endLine":874,"endColumn":52},{"ruleId":"160","severity":1,"message":"161","line":6,"column":1,"nodeType":"162","messageId":"163","endLine":6,"endColumn":14,"fix":"164"},{"ruleId":"134","severity":1,"message":"138","line":224,"column":35,"nodeType":"136","messageId":"137","endLine":224,"endColumn":37},{"ruleId":"148","severity":1,"message":"154","line":227,"column":15,"nodeType":"130","messageId":"150","endLine":227,"endColumn":22},{"ruleId":"148","severity":1,"message":"155","line":270,"column":9,"nodeType":"130","messageId":"150","endLine":270,"endColumn":11},{"ruleId":"148","severity":1,"message":"155","line":277,"column":9,"nodeType":"130","messageId":"150","endLine":277,"endColumn":11},{"ruleId":"148","severity":1,"message":"155","line":284,"column":9,"nodeType":"130","messageId":"150","endLine":284,"endColumn":11},{"ruleId":"148","severity":1,"message":"156","line":300,"column":11,"nodeType":"130","messageId":"150","endLine":300,"endColumn":21},{"ruleId":"148","severity":1,"message":"156","line":308,"column":11,"nodeType":"130","messageId":"150","endLine":308,"endColumn":21},{"ruleId":"134","severity":1,"message":"135","line":338,"column":26,"nodeType":"136","messageId":"137","endLine":338,"endColumn":28},{"ruleId":"134","severity":1,"message":"138","line":340,"column":42,"nodeType":"136","messageId":"137","endLine":340,"endColumn":44},{"ruleId":"128","severity":1,"message":"139","line":364,"column":7,"nodeType":"130","messageId":"131","endLine":364,"endColumn":11},{"ruleId":"134","severity":1,"message":"138","line":382,"column":35,"nodeType":"136","messageId":"137","endLine":382,"endColumn":37},{"ruleId":"134","severity":1,"message":"138","line":433,"column":48,"nodeType":"136","messageId":"137","endLine":433,"endColumn":50},{"ruleId":"134","severity":1,"message":"138","line":445,"column":48,"nodeType":"136","messageId":"137","endLine":445,"endColumn":50},{"ruleId":"134","severity":1,"message":"135","line":461,"column":30,"nodeType":"136","messageId":"137","endLine":461,"endColumn":32},{"ruleId":"134","severity":1,"message":"138","line":465,"column":28,"nodeType":"136","messageId":"137","endLine":465,"endColumn":30},{"ruleId":"134","severity":1,"message":"138","line":489,"column":32,"nodeType":"136","messageId":"137","endLine":489,"endColumn":34},"no-native-reassign",["165"],"no-negated-in-lhs",["166"],"no-unused-vars","'Value' is defined but never used.","Identifier","unusedVar","'Field' is defined but never used.","'Shadow' is defined but never used.","eqeqeq","Expected '!==' and instead saw '!='.","BinaryExpression","unexpected","Expected '===' and instead saw '=='.","'vars' is assigned a value but never used.","default-case","Expected a default case.","SwitchStatement","missingDefaultCase","no-throw-literal","Expected an error object to be thrown.","ThrowStatement","object","no-redeclare","'functionName' is already defined.","redeclared","no-useless-concat","Unexpected string concatenation of literals.","unexpectedConcat","'comment' is already defined.","'at' is already defined.","'innerOrder' is already defined.","no-use-before-define","'newName' was used before it was defined.","usedBeforeDefined","strict","'use strict' is unnecessary inside of modules.","ExpressionStatement","module",{"range":"167","text":"168"},"no-global-assign","no-unsafe-negation",[181,194],""]