[
"autonomous agent",
{
"bounce_fees": {
"base": 10000
},
"init": "{\r
$HOUSE_CUT = 0.15;\r
}",
"messages": {
"cases": [
{
"if": "{\r
NOT var["owner"] //The owner has not been set\r
}",
"messages": [
{
"app": "state",
"state": "{\r
var["owner"] = "
IUU43O7TS2TBYKAPGKUARDZHOTAE275A"; //Set the Owner to my address\r
}"
}
]
},
{
"if": "{\r
trigger.address == var["owner"]\r
}",
"messages": {
"cases": [
{
"if": "{\r
trigger.data["method"] == "mint"\r
}",
"messages": {
"cases": [
{
"if": "{\r
is_valid_amount(trigger.data["amount"]) //The amount of minted NFTs is valid\r
AND exists(trigger.data["ipfsHash"]) //The IPFS hash has been submitted\r
AND is_valid_address(trigger.data["seller"])//Check seller is valid\r
AND is_integer(trigger.data["endTime"]) //The endTime is an integer\r
AND trigger.data["endTime"] > timestamp //The endTime is set in the future\r
}",
"messages": {
"cases": [
{
"if": "{\r
trigger.data["amount"] == 1\r
}",
"messages": [
{
"app": "asset",
"payload": {
"cap": 1,
"is_private": false,
"is_transferrable": true,
"auto_destroy": false,
"fixed_denominations": false,
"issued_by_definer_only": true,
"cosigned_by_definer": false,
"spender_attested": false
}
},
{
"app": "state",
"state": "{\r
var[response_unit || "_name"] = trigger.data["name"]?trigger.data["name"]:"Unnamed";//User-friendly artwork name\r
var[response_unit || "_bid"] = 0; //Max current bid\r
var[response_unit || "_at"] = timestamp; //Max bid time\r
var[response_unit || "_mintedAt"] = timestamp; //Mint date\r
var[response_unit || "_ipfsHash"] = trigger.data["ipfsHash"]; //Hash of the content\r
var[response_unit || "_author"] = trigger.data["seller"]; //The original seller\r
var[response_unit || "_soldAt"] = trigger.data["endTime"]; //End of the auction\r
var[response_unit || "_soldBy"] = trigger.data["seller"]; //Who is currently selling the NFT\r
}"
}
]
},
{
"if": "{\r
is_valid_amount(trigger.data["price"]) //The price is correct\r
}",
"messages": [
{
"app": "asset",
"payload": {
"cap": "{trigger.data["cap"]}",
"is_private": false,
"is_transferrable": true,
"auto_destroy": false,
"fixed_denominations": false,
"issued_by_definer_only": true,
"cosigned_by_definer": false,
"spender_attested": false
}
},
{
"app": "state",
"state": "{\r
var[response_unit || "_name"] = trigger.data["name"]?trigger.data["name"]:"Unnamed";//User-friendly artwork name\r
var[response_unit || "_price"] = trigger.data["price"]; //Price per NFT\r
var[response_unit || "_mintedAt"] = timestamp; //Mint date\r
var[response_unit || "_ipfsHash"] = trigger.data["ipfsHash"]; //Hash of the content\r
var[response_unit || "_author"] = trigger.data["seller"]; //The original seller\r
var[response_unit || "_soldAt"] = trigger.data["endTime"]; //End of the sale, remaining tokens will be unusable\r
var[response_unit || "_soldBy"] = trigger.data["seller"]; //Who is currently selling the NFT\r
}"
}
]
}
]
}
}
]
}
},
{
"if": "{\r
trigger.data["method"] == "payout"\r
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}"
}
]
}
}
]
},
{
"if": "{\r
trigger.data["method"] == "revoke"\r
}",
"messages": {
"cases": [
{
"if": "{\r
exists(trigger.data["NFT"]) //The NFT parameter is passed\r
AND exists(trigger.data["reason"]) //The reason parameter is passed\r
}",
"messages": [
{
"app": "data_feed",
"payload": {
"{"REVOCATION_REASON_" || trigger.data["NFT"]}": "{trigger.data["reason"]}"
}
}
]
}
]
}
},
{
"if": "{\r
trigger.data["method"] == "transferOwnership"\r
}",
"messages": {
"cases": [
{
"if": "{\r
is_valid_address(trigger.data["newOwner"]) //The new Owner address is valid\r
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}"
}
]
}
},
{
"app": "state",
"state": "{\r
var["owner"] = trigger.data["newOwner"];//Ownership is transferred\r
}"
}
]
}
]
}
}
]
}
},
{
"if": "{\r
timestamp < var[trigger.data['NFT'] || "_soldAt"] //The timestamp is set before the end date\r
}",
"messages": {
"cases": [
{
"if": "{\r
balance[trigger.data["NFT"]] > 0 //The AA currently holds more than 0 of the given NFT\r
AND trigger.output[[asset=base]] >= var[trigger.data['NFT'] || "_price"] //The AA received more than the sell price\r
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{var[trigger.data['NFT'] || "_soldBy"]}",
"amount": "{floor(trigger.output[[asset=base]] * (1-$HOUSE_CUT), 0)}"
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "{trigger.data['NFT']}",
"outputs": [
{
"address": "{trigger.address}",
"amount": 1
}
]
}
}
]
},
{
"if": "{\r
trigger.output[[asset=base]] > floor(var[trigger.data['NFT'] || "_bid"], 0) //The bid higher than the max bid\r
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{var[trigger.data['NFT'] || "_by"]}",
"amount": "{var[trigger.data['NFT'] || "_bid"]}"
}
]
}
},
{
"app": "state",
"state": "{\r
var[trigger.data['NFT'] || "_bid"] = trigger.output[[asset=base]];\r
var[trigger.data['NFT'] || "_by"] = trigger.address;\r
}"
}
]
}
]
}
},
{
"if": "{\r
trigger.data["method"] == "SELL" //Method is SELL\r
AND trigger.output[[asset!=base]].amount==1 //Only 1 NFT is sold at a time\r
AND NOT in_data_feed[[oracles=this_address, feed_name="REVOCATION_REASON_" || trigger.output[[asset!=base]], feed_value=trigger.output[[asset!=base]]]]//The NFT is NOT revoked\r
AND var[trigger.output[[asset!=base]] || "_mintedAt"] == 0 //The NFT is in our registry\r
AND var[trigger.output[[asset!=base]] || "_soldAt"] < timestamp //The token is currently NOT being sold (this includes no copy is being sold at this time)\r
AND is_valid_amount(trigger.data["startingPrice"]) //The user supplied the starting bidding price\r
AND trigger.data["endTime"] > timestamp //The end date timestamp supplied by the user is set in the future\r
}",
"messages": [
{
"app": "state",
"state": "{\r
var[trigger.output[[asset!=base]] || "_bid"] = trigger.data["startingPrice"];\r
var[trigger.output[[asset!=base]] || "_by"] = trigger.address;\r
var[trigger.output[[asset!=base]] || "_soldBy"] = trigger.address;\r
var[trigger.output[[asset!=base]] || "_at"] = timestamp;\r
var[trigger.output[[asset!=base]] || "_soldAt"] = trigger.data["endTime"];\r
}"
}
]
},
{
"if": "{\r
timestamp > var[trigger.data['NFT'] || "_soldAt"] //Auction is over\r
AND (trigger.address == var[trigger.data['NFT'] || "_by"] OR trigger.address == var[trigger.data['NFT'] || "_soldBy"]) //Invoked by buyer or seller\r
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{var[trigger.data['NFT'] || "_soldBy"]}",
"amount": "{floor(trigger.output[[asset=base]] * (1-$HOUSE_CUT), 0)}"
}
]
}
},
{
"app": "payment",
"payload": {
"asset": "{trigger.data['NFT']}",
"outputs": [
{
"address": "{var[trigger.data['NFT'] || "_by"]}",
"amount": 1
}
]
}
},
{
"app": "data_feed",
"payload": {
"{trigger.data['NFT']}": "{{\r
name: var[trigger.data['NFT'] || "_name"],\r
author: var[trigger.data['NFT'] || "_author"],\r
ipfsHash: var[trigger.data['NFT'] || "_ipfsHash"]\r
}}"
}
}
]
}
]
}
}
]