[{"/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],""]