Unit ID
zrxXWq2yVPvIUR3e7MTPDo8UsCwCVYc20pNHtDGcyeI=
Received
09.09.2020 12:45:12
Confirmation delay (full node)
4 minutes 3 seconds
Confirmation delay (light node)
6 minutes 3 seconds
Messages
Definition
Definition: [ "autonomous agent", { "getters": "{ $polloAddr = => '5TT7JV3M5PNE2WSAA3YGOX7ZZXKIMG35'; $stableAsset = => 'blao'; $donorBytes = $donor => var['acctb_'||$donor]; $donorStable = $donor => var['accts_'||$donor]; }", "init": "{ $act= => trigger.data.action otherwise 'b'; $timespan = 60*60*24*30; $year = 24*60*60*365; if(trigger.output[[asset!=base]].asset != 'none'){ $asset = trigger.output[[asset!=base]].asset; if($asset and $asset != $stableAsset()) bounce('only bytes or stable asset'); } else $asset = 'base'; if($asset AND trigger.output[[asset=base]] < 10000) bounce('not allowed'); }", "messages": { "cases": [ { "if": "{ $act() == 'create' and $polloAddr() == trigger.address }", "messages": [ { "app": "state", "state": "{ var[trigger.unit||'_producer'] = trigger.data.producer; var[trigger.unit||'_amount_r'] = trigger.data.amount; if(trigger.data.stable) var[trigger.unit||'_asset'] = $stableAsset(); else var[trigger.unit||'_asset'] = 'base'; response['action'] = $act(); response['id'] = trigger.unit; response['asset'] = var[trigger.unit||'_asset']; response['producer'] = trigger.data.producer; response['amount'] = trigger.data.amount; }" } ] }, { "if": "{ $act() == 'cancel' and $polloAddr() == trigger.address }", "init": "{ if(!var[trigger.data.id||'_producer']) bounce('application not found'); if(var[trigger.data.id||'_donor']) bounce('already filled'); }", "messages": [ { "app": "state", "state": "{ var[trigger.data.id||'_producer'] = false; var[trigger.data.id||'_amount_r'] = false; var[trigger.data.id||'_asset'] = false; response['action'] = $act(); response['id'] = trigger.data.id; }" } ] }, { "if": "{ $act() == 'withdraw' and $polloAddr() == trigger.address }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{trigger.address}", "amount": "{balance[base] - storage_size - var['user_bytes'] - 10000}" } ] } }, { "app": "state", "state": "{ response['action'] = $act(); }" } ] }, { "if": "{ $act() == 'return' and trigger.address == $polloAddr() }", "init": "{ if(!var[trigger.data.id||'_producer']) bounce('application not found'); if(!var[trigger.data.id||'_donor']) bounce('not filled'); if(var[trigger.data.id||'_time']+$timespan < timestamp) bounce('donor must wait 30 days before return'); if(var[trigger.data.id||'_time']+$year > timestamp OR var[trigger.data.id||'_donor'] == $polloAddr()) $to_aa = true; }", "messages": [ { "if": "{!$to_aa}", "app": "payment", "payload": { "asset": "{var[trigger.data.id||'_asset']}", "outputs": [ { "address": "{trigger.data.addr}", "amount": "{var[trigger.data.id||'_amount']}" } ] } }, { "app": "state", "state": "{ if(!$to_aa){ if(var[trigger.data.id||'_asset'] == 'base'){ var['user_bytes'] -= var[trigger.data.id||'_amount']; } } else{ if(var[trigger.data.id||'_asset'] == 'base'){ var['acctb_'||var[trigger.data.id||'_donor']] -= var[trigger.data.id||'_amount']; var['acctb_'||$polloAddr()] += var[trigger.data.id||'_amount']; } else{ var['accts_'||var[trigger.data.id||'_donor']] -= var[trigger.data.id||'_amount']; var['accts_'||$polloAddr()] += var[trigger.data.id||'_amount']; } } var[trigger.data.id||'_amount'] = false; var[trigger.data.id||'_producer'] = false; var[trigger.data.id||'_donor'] = false; var[trigger.data.id||'_time'] = false; var[trigger.data.id||'_asset'] = false; response['action'] = $act(); response['id'] = trigger.data.id; if(trigger.data.addr) response['addr'] = trigger.data.addr; }" } ] }, { "if": "{ $act() == 'donate' and $polloAddr() == trigger.address }", "init": "{ if(!var[trigger.data.id||'_amount_r']){ bounce('application already filled'); } $donor = trigger.data.donor; if(!$donor) bounce('donor missing'); if(var[trigger.data.id||'_asset'] == 'base' and !var['acctb_'||$donor]) bounce('donor dont have funds to donate'); if(var[trigger.data.id||'_asset'] != 'base' and !var['accts_'||$donor]) bounce('donor dont have funds to donate'); if(var[trigger.data.id||'_asset'] == 'base'){ if(var[trigger.data.id||'_amount_r'] > var['acctb_'||$donor]) bounce('not enough funds, please refill'); } else{ if(var[trigger.data.id||'_amount_r'] > var['accts_'||$donor]) bounce('not enough funds, please refill'); } }", "messages": [ { "app": "state", "state": "{ if(var[trigger.data.id||'_asset'] == 'base'){ var['acctb_'||$donor] -= var[trigger.data.id||'_amount_r']; } else{ var['accts_'||$donor] -= var[trigger.data.id||'_amount_r']; } var[trigger.data.id||'_amount'] = var[trigger.data.id||'_amount_r']; var[trigger.data.id||'_amount_r'] = false; var[trigger.data.id||'_donor'] = $donor; var[trigger.data.id||'_time'] = timestamp; response['action'] = $act(); response['id'] = trigger.data.id; response['donor'] = trigger.data.donor; }" } ] }, { "if": "{ $act() == 'confirm' and $polloAddr() == trigger.address }", "init": "{ if(!var[trigger.data.id||'_producer']) bounce('application not found'); if(var[trigger.data.id||'_amount_r']) bounce('not filled yet'); }", "messages": [ { "app": "payment", "payload": { "asset": "{var[trigger.data.id||'_asset']}", "outputs": [ { "address": "{var[trigger.data.id||'_producer']}", "amount": "{var[trigger.data.id||'_amount']}" } ] } }, { "app": "state", "state": "{ if(var[trigger.data.id||'_asset'] == 'base') var['user_bytes'] -= var[trigger.data.id||'_amount']; var[trigger.data.id||'_asset'] = false; var[trigger.data.id||'_amount'] = false; var[trigger.data.id||'_amount_r'] = false; var[trigger.data.id||'_producer'] = false; var[trigger.data.id||'_time'] = false; var[trigger.data.id||'_donor'] = false; response['action'] = $act(); response['id'] = trigger.data.id; }" } ] }, { "init": "{ $donor = trigger.data.donor OTHERWISE trigger.address; }", "messages": [ { "if": "{$asset != 'base'}", "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{trigger.address}", "amount": "{8000}" } ] } }, { "app": "state", "state": "{ if($asset == 'base'){ var['acctb_'||$donor] += trigger.output[[asset=base]]; var['user_bytes'] += trigger.output[[asset=base]]; } else{ var['accts_'||$donor] += trigger.output[[asset!=base]]; } response['action'] = 'deposit'; response['asset'] = $asset; response['donor'] = $donor; response['address'] = trigger.address; }" } ] } ] } } ]
Technical information
Fees:
9,945 bytes
(452 headers, 9493 payload)
Level:1607196
Witnessed level:1607189
Main chain index:1599876
Latest included mc index:1599875
Status:stable/confirmed/final