86 lines
3.0 KiB
Kotlin
86 lines
3.0 KiB
Kotlin
package net.sergeych
|
|
|
|
import com.icodici.universa.HashId
|
|
import com.icodici.universa.contract.TransactionPack
|
|
import kotlinx.coroutines.runBlocking
|
|
import net.sergeych.uni.Uni
|
|
import java.io.File
|
|
|
|
fun main(_args: Array<String>) {
|
|
val args = _args.toMutableList()
|
|
|
|
println("\nINDIGO sample console tool\n")
|
|
// val args = mutableListOf("-c", "???")
|
|
runBlocking {
|
|
println("Connecting to Universa network...")
|
|
|
|
// connect to the network and print out nodes info
|
|
Uni.versa {
|
|
println("Connected. Here is the list of nodes:")
|
|
topologyInfo.forEach {
|
|
println("${it.ipUrl} or ${it.domainUrl}: ${it.keyAddress}")
|
|
}
|
|
}
|
|
while (args.isNotEmpty()) {
|
|
if (args[0] == "-h") {
|
|
println("\nUsage:")
|
|
println(" -c <contractID | contractFile> - check contract approval")
|
|
println(" -h - this help")
|
|
break
|
|
}
|
|
processCheckContract(args)
|
|
}
|
|
// universa client runs background coroutines here, so we shall cancel them
|
|
System.exit(0)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* if args start with "-c", checks the contractId or loads the contract using args[1]
|
|
* and checks network approval, and remove both arguments from args array.
|
|
*/
|
|
suspend fun processCheckContract(args: MutableList<String>) {
|
|
if (args[0] == "-c") {
|
|
val contractId = if (args[1].endsWith(".unicon")) {
|
|
// got a file, load it using TransactionPack format (common for contracts):
|
|
val c = TransactionPack.unpack(
|
|
File(args[1]).readBytes()
|
|
)
|
|
// and extract its main contract:
|
|
.contract
|
|
|
|
println("\nLoaded contract: ${c.id.toBase64String()}")
|
|
println("Definition ---------------------------------------------- ")
|
|
println("Created : ${c.definition.createdAt}")
|
|
println("Expires : ${c.definition.expiresAt}")
|
|
println("Ext.type : ${c.definition.extendedType}")
|
|
println("Definition: ${c.definition.data}")
|
|
println("State --------------------------------------------------- ")
|
|
println("Revision : ${c.state.revision}")
|
|
println("Branch : ${c.state.branchId}/${c.state.branchRevision}")
|
|
println("State data : ${c.state.data}")
|
|
|
|
if( c.transactional != null ) {
|
|
println("Transactional -------------------------------------------")
|
|
println("data: ${c.transactional!!.data}")
|
|
}
|
|
|
|
// return its id for further checks:
|
|
c.id
|
|
} else
|
|
HashId.withDigest(args[1])
|
|
|
|
// -c <contract-id | contract-file>
|
|
// remove arguments
|
|
args.removeAt(0)
|
|
args.removeAt(0)
|
|
|
|
// check contract approval from the universa network:
|
|
print("\nChecking contract Id: $contractId: ")
|
|
|
|
val isApproved = Uni.versa { isApprovedByNetwork(contractId) }
|
|
|
|
println(if (isApproved) "Approved" else "Rejected")
|
|
}
|
|
}
|