Writing a smart contract in Kotlin
Sample contract functionality
Sample smart contract code
// nodejs process object
external val process: dynamic
fun atoi(v: String?): Int {
return try {
v?.toInt() ?: 0
} catch (e: NumberFormatException) {
0
}
}
fun errorln(message: Any?) {
process.stderr.write(message)
process.stderr.write("\n")
}
fun main() {
val args = process.argv.slice(2) as Array<String>
// THIS SAMPLE ONLY SUPPORTS THE "register" FUNCTION
if (args.size == 2 && args[0] == "register") {
// GET THE CURRENT USER'S NAME
// OR DEFAULT TO "unknown" IF THIS IS THE FIRST CALL
val previousName = process.env.DB_USER_CURRENT ?: "unknown"
// GET THE TOTAL USER COUNT
val totalUserCount = atoi(process.env.DB_TOTALUSERS as? String)
// WRITE PREVIOUS USER NAME TO STDOUT
println("OUT=prevname: $previousName")
// UPDATE CURRENT USER NAME BY WRITING IT TO DB
println("DBW=USER_CURRENT=${args[1]}")
// STORE USER NAME UNDER A STORAGE SLOT FOR PERSISTENCE (CURRENT GETS OVERWRITTEN ON EACH CALL)
println("DBW=USER_${totalUserCount}=${args[1]}")
// INCREMENT THE TOTAL USER COUNT
println("DBW=TOTALUSERS=${totalUserCount+1}")
process.exit(0)
}
if (args.size >= 2) {
errorln("Wrong CMD: ${args[0]}")
process.exit(1)
}
errorln("Wrong args!")
process.exit(1)
}
Save the smart contract
Compiling a smart contract in KotlinLast updated