[
"autonomous agent",
{
"messages": {
"cases": [
{
"if": "{
// Obotic / MicroGrid by
[email protected]
// My best entry, combines techniques from all my previous AA, structure based on REDvsBLUE
// 1) Scientist send args to be processed by obots
$project = "
5IZAANLACSTY5ILLCJ6N5P4OX73ZWRJY" ; // Select Random Registered Address AA
$min_poolsize = 3 ;
$processors_per_job = 3 ;
$storage = 1000 ;
$min_job_cost = $processors_per_job * 21000 + $storage * 3 ;
if( !var[ $project ][ "count" ] ) bounce( "$project AA missing 'count'") ;
if( var[ $project ][ "count" ] < $min_poolsize ) bounce( "waiting for " || $project || " to have " || $min_poolsize || " registered obots" ) ;
if( trigger.data.computation_rounds ) bounce( " computation_rounds = " || var[ 'computation_rounds' ] ) ;
$min_poolsize >= 3
}",
"messages": {
"cases": [
{
"if": "{ // REQUEST NEW JOB
if( !trigger.data.message AND !trigger.data.job AND trigger.output[[asset=base]] < $min_job_cost ) bounce( 'need to send min_poolsize ' || $min_job_cost || ' to request a new job');
// TODO check for trigger.data.args
( !trigger.data.message AND !trigger.data.job ) // means not messages from project nor obot
}",
"init": "{
$process = '{ "args": "' || 'obotic' || '", "processors": 1, "job": ' || ( var[ "job" ] + 1 ) || ' }' ;
}",
"messages": [
{
"app": "data",
"payload": {
"message": "{ $process }",
"nosend": true
}
},
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $project }",
"amount": "{ trigger.output[[asset=base]] - $storage }"
}
]
}
},
{
"app": "state",
"state": "{ var[ "job" ] += 1 ; }"
}
]
},
{
"if": "{ // START JOB
trigger.address == $project AND trigger.data.message AND trigger.data.choosen
}",
"init": "{
$process = json_parse( trigger.data.message ) ;
$processors = $process.processors + 1 ;
$job = $process.job ;
$message = '{ "args": "' || json_stringify( $process.args ) || '", "processors": ' || $processors || ', "job": ' || $job || ' }' ;
$obot = trigger.data.choosen ;
$fee = var[ $obot ][ "fee" ] otherwise 21000 ;
}",
"messages": [
{
"if": "{ $processors < $processors_per_job AND trigger.output[[asset=base]] > ( $fee + $storage ) }",
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $project }",
"amount": "{ trigger.output[[asset=base]] - ( $fee + $storage ) }"
},
{
"address": "{ $obot }",
"amount": "{ $fee }"
}
]
}
},
{
"if": "{ $processors < $processors_per_job AND trigger.output[[asset=base]] > ( $fee + $storage ) }",
"app": "data",
"payload": {
"message": "{ $message }",
"nosend": true
}
},
{
"if": "{ $processors >= $processors_per_job AND trigger.output[[asset=base]] > ( $fee + $storage ) }",
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{ $obot }",
"amount": "{ $fee }"
}
]
}
},
{
"if": "{ $processors >= $processors_per_job AND trigger.output[[asset=base]] > ( $fee + $storage ) }",
"app": "data",
"payload": {
"message": "{ $message }",
"nosend": true
}
},
{
"app": "state",
"state": "{ // TASK JOB TRACKER
response[ "message" ] = $message ;
response[ "process" ] = $process ;
response[ "processors" ] = $processors ;
response[ "process_parse" ] = json_stringify( $process ) ;
/*
if( $job ){
var[ "g" || $job ] = timestamp + 43200; // start countdown
response[ "message" ] = $message;
response[ "job" ] = $job;
response[ "redplayer" ] = $sendred;
response[ "blueplayer" ] = $sendblue;
}
if( trigger.address == $project ){
var[ "redaddr" ] += 1; // new red address
var[ "r" || var[ "redaddr" ] ] = trigger.data.choosen; // save red address
}
if( trigger.address == $blue ){
var[ "blueaddr" ] += 1; // new blue address
var[ "b" || var[ "blueaddr" ] ] = trigger.data.choosen;
}
*/
}"
}
]
}
]
}
}
]
}
}
]