Syntax in BUMO smart contract
Overview
Bumo smart contracts are written in the 'JaveScript'. In order to facilitate developers to develop a more standardized and safer contract, JSLint is used to check the syntax in smart contracts. Please refer to JSLint GitHub. When editing a contract, you first need to ensure that the contract passes the test inJSLint before it can be detected as a legal contract by the Bumo system.
The standard syntax of JSLint is described in detail on the official website. The purpose of this document is to refine the original JSLint syntax rules as a complete document, and to supplement Bumo's modified rules. The documentation will illustrate its usage with examples. For parts not mentioned in this article, please refer to the JsLint help manual.
Or you can visit the manual at this site: 127.0.0.1:36002/jslint/help.html by node servers or wallet addresses.
Detection Tool
JSLint detection tool address: JSLint syntax dection tool.
Or you can visit 127.0.0.1:36002/jslint/index.html by node servers or wallet addresses.
For error description, details will be given when you debug contract syntax in the web tool. When you input the following code:
"use strict";
function init(bar)
{
}
Error is shown below:
Empty block. 2.0
{
Cause: Blank statement block at row 2 and column 0.
Correct code is shown below:
"use strict";
function init(bar)
{
return;
}
If the result is correct, no warning information will prompt.
Text Compression
After the contract document is written, you can use the JSMin tool to compress it. Ensure that the original document is saved because compression is an irreversible operation.
Demo
"use strict";
function init(bar)
{
/*init whatever you want*/
return;
}
function main(input)
{
log(input);
//for statement
let i;
for (i = 0; i < 5; i += 1)
{
log(i);
}
//while statement
let b = 10;
while (b !== 0)
{
b -= 1;
log(b);
}
//if statement
let compare = 1;
if(compare === 1)
{
log("it is one");
}
else if(compare === 2)
{
log("it is two");
}
else
{
log("it is other");
}
//if statement
if(compare !== 2)
{
log("no, different");
}
//switch statement
let sw_value = 1;
switch(sw_value)
{
case 1:
log("switch 1");
break;
default:
log("default");
}
//Number
let my_num = Number(111);
log(my_num);
//String
let my_str = String(111);
log(my_str);
//Boolean
let my_bool = Boolean(111);
log(my_bool);
//Array
let str_array = ["red","black"];
log(str_array);
//Array
let num_array = [1,2,3,4];
log(num_array);
throw "this is a exception";
}
Rules List
Detect the statement strictly with all source code added the
'use strict'
field at the beginningUse
let
to declare variables within a statement blockUse
===
instead of==
to judge the comparison; use!==
instead of!=
to compareA statement must end with
;
A statement block must be enclosed with
{}
and empty statement blocks are prohibitedThe initial variable of the
for
loop variable needs to be declared before the conditional statement block, and a new value is assigned to it when usedUse
+=
and-=
to substitute++
and--
Prohibit to use keywords like
eval
andvoid
Prohibit to use
new
to createNumber
,String
andBoolean
objects, which objects can be obtained by calling their constructorsProhibit to create an array with array keywords
Prohibit to use keywords like
try
andcatch
, but you can usethrow
to throw exceptions
"Array", "ArrayBuffer", "Float32Array", "Float64Array",
"Int8Array", "Int16Array", "Int32Array", "Uint8Array",
"Uint8ClampedArray", "Uint16Array", "Uint32Array"
let color = new Array(100); //Compiling error
//You can use the alternative new Array(100) statement;
let color = ["red","black"];
let arr = [1,2,3,4];
- Keywords prohibited to use
"DataView", "decodeURI", "decodeURIComponent", "encodeURI",
"encodeURIComponent", "Generator","GeneratorFunction", "Intl",
"Promise", "Proxy", "Reflect", "System", "URIError", "WeakMap",
"WeakSet", "Math", "Date"