[
  {
    "title": "Vesting contract for DXD token",
    "tags": ["DXD", "DXdao", "factory"],
    "networks": {
      "5": "0x0000000000000000000000000000000000000000",
      "1337": "0x0000000000000000000000000000000000000000"
    },
    "functions": [
      {
        "title": "Create vesting contract",
        "functionName": "create",
        "params": [
          {
            "type": "address",
            "component": "address",
            "name": "beneficiary",
            "defaultValue": "",
            "description": "Receiving address of tokens"
          },
          {
            "type": "uint256",
            "component": "date",
            "name": "start",
            "defaultValue": "",
            "description": "Starting time for contract"
          },
          {
            "type": "uint256",
            "component": "time",
            "name": "cliffDuration",
            "defaultValue": "",
            "description": "How long before cliff"
          },
          {
            "type": "uint256",
            "component": "time",
            "name": "duration",
            "defaultValue": "",
            "description": "How long before contract finishes fully"
          },
          {
            "type": "uint256",
            "component": "tokenAmount",
            "name": "value",
            "defaultValue": "",
            "description": "Number of tokens to vest"
          }
        ],
        "shortDescription": "Creates DXD vesting contracts for worker proposals",
        "longDescription": "Factory contract to create new vesting contracts for the ERC20 token DXD with owenership then passed to the DXdao",
        "spendsTokens": true,
        "templateLiteral": "Vest ${value} ${approvalTokenSymbol} for ${duration} with ${cliffDuration} cliff for ${beneficiary}"
      }
    ]
  },
  {
    "title": "Swapr fees",
    "tags": ["DXgov", "Guilds", "permissions"],
    "networks": {
      "5": "0x885b28d6b93087623483af5e5f7362bd6d8a0a6b",
      "1337": "0x885b28d6b93087623483af5e5f7362bd6d8a0a6b"
    },
    "functions": [
      {
        "title": "Set fee for a pool",
        "functionName": "setSwapFee",
        "params": [
          {
            "type": "address",
            "component": "swaprPicker",
            "name": "pair",
            "title": "Pool",
            "defaultValue": "",
            "description": "Pool pair to set fee on"
          },
          {
            "type": "uint32",
            "component": "integer",
            "name": "swapFee",
            "title": "Swap Fee %",
            "defaultValue": "",
            "description": "Fee to be set for pair (10 = 0.1%)"
          }
        ],
        "shortDescription": "Sets the swap fee for a given pool on swapr",
        "longDescription": "Sets the overall fee taken from a specific pool in swapr on this chain",
        "templateLiteral": "Set fee for ${pair} to ${swapFee}",
        "spendsTokens": false
      }
    ]
  },
  {
    "title": "DXdao Voting",
    "tags": ["DXgov", "Guilds", "DXdao"],
    "networks": {
      "1": "0x332B8C9734b4097dE50f302F7D9F273FFdB45B84",
      "5": "0xC284e9F6aBc7c65C277244895CAae401e643E4b6",
      "100": "0xDA309aDF1c84242Bb446F7CDBa96B570E901D4CF",
      "1337": "0x332B8C9734b4097dE50f302F7D9F273FFdB45B84"
    },
    "functions": [
      {
        "title": "Vote For proposal",
        "functionName": "vote",
        "params": [
          {
            "type": "bytes32",
            "component": "string",
            "name": "proposalId",
            "title": "Proposal ID",
            "description": "Proposal ID - found from the URL of proposal"
          },
          {
            "type": "uint256",
            "component": "integer",
            "name": "vote",
            "title": "Vote decision",
            "defaultValue": "1",
            "description": "Vote decision (NO(2) or YES(1))"
          },
          {
            "type": "uint256",
            "component": "tokenAmount",
            "name": "amount",
            "title": "Amount to vote with",
            "defaultValue": "",
            "description": "Amount of REP to vote with"
          },
          {
            "type": "address",
            "component": "address",
            "name": "voter",
            "title": "Voter",
            "defaultValue": "0x99Fa013188d5f1dB6836Ee8805Ef37BE70ff10BE",
            "description": "The guild's address"
          }
        ],
        "shortDescription": "Votes on a proposal with the guild's power",
        "longDescription": "Creates a mirror proposal to use this guild's power to vote on a DXdao proposal. Care needs to be taken to finish this proposal before the DXdao proposal finishes.",
        "templateLiteral": "Vote ${vote} with ${amount} REP on ${proposalId}",
        "spendsTokens": false
      },
      {
        "title": "Vote Against proposal",
        "functionName": "vote",
        "params": [
          {
            "type": "bytes32",
            "component": "string",
            "name": "proposalId",
            "title": "Proposal ID",
            "description": "Proposal ID - found from the URL of proposal"
          },
          {
            "type": "uint256",
            "component": "integer",
            "name": "vote",
            "title": "Vote decision",
            "defaultValue": "2",
            "description": "Vote decision (NO(2) or YES(1))"
          },
          {
            "type": "uint256",
            "component": "tokenAmount",
            "name": "amount",
            "title": "Amount of REP to vote with",
            "defaultValue": "",
            "description": "Amount to vote with"
          },
          {
            "type": "address",
            "component": "address",
            "name": "voter",
            "title": "Voter",
            "defaultValue": "0x99Fa013188d5f1dB6836Ee8805Ef37BE70ff10BE",
            "description": "The guild's address"
          }
        ],
        "shortDescription": "Votes on a proposal with the guild's power",
        "longDescription": "Creates a mirror proposal to use this guild's power to vote on a DXdao proposal. Care needs to be taken to finish this proposal before the DXdao proposal finishes.",
        "templateLiteral": "Vote ${vote} with ${amount} REP on ${proposalId}",
        "spendsTokens": false
      }
    ]
  },
  {
    "title": "ENS Reverse resolver",
    "tags": ["ens"],
    "networks": {
      "1": "0x084b1c3c81545d370f3634392de611caabff8148"
    },
    "functions": [
      {
        "title": "Set main ENS name for address",
        "functionName": "setName",
        "params": [
          {
            "type": "string",
            "component": "text",

            "name": "name",
            "title": "ENS name",

            "defaultValue": "",
            "description": "Name of ENS name to set (e.g. davi.eth)"
          }
        ],
        "shortDescription": "Sets the main ENS name for an account",
        "longDescription": "Sets the main ENS name of an account that is what users see when viewing this address",
        "templateLiteral": "Set main ENS to ${name}",
        "spendsTokens": false
      }
    ]
  },
  {
    "title": "ENS Registry",
    "tags": ["ens"],
    "networks": {
      "1": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
    },
    "functions": [
      {
        "title": "Create subdomain",
        "functionName": "setSubnodeRecord",
        "params": [
          {
            "type": "bytes32",
            "component": "text",
            "name": "node",
            "title": "Subdomain node",
            "defaultValue": "",
            "description": "Name of parent ENS to set (e.g. projectdavi.eth)"
          },
          {
            "type": "bytes32",
            "component": "text",
            "name": "label",
            "title": "Subdomain label",
            "defaultValue": "",
            "description": "Name of new subdomain label"
          },
          {
            "type": "address",
            "component": "address",
            "name": "owner",
            "title": "ENS owner (the guild)",
            "defaultValue": "",
            "description": "Address of ENS owner"
          },
          {
            "type": "address",
            "component": "address",
            "name": "resolver",
            "title": "ENS Resolver",
            "defaultValue": "0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41",
            "description": "Address of ENS resolver"
          },
          {
            "type": "uint64",
            "component": "integer",
            "name": "ttl",
            "title": "Time to live",
            "defaultValue": "0",
            "description": "Time to live"
          }
        ],
        "shortDescription": "Creates a subdomain",
        "longDescription": "Creates a subdomain from an ENS name the guild is controller of",
        "templateLiteral": "Create an ENS subdomain",
        "spendsTokens": false
      },
      {
        "title": "Transfer subdomain",
        "functionName": "setSubnodeOwner",
        "params": [
          {
            "type": "bytes32",
            "component": "text",
            "name": "node",
            "title": "Subdomain node",
            "defaultValue": "",
            "description": "Name of parent ENS to set (e.g. projectdavi.eth)"
          },
          {
            "type": "bytes32",
            "component": "text",
            "name": "label",
            "title": "Subdomain label",
            "defaultValue": "",
            "description": "Name of subdomain label"
          },
          {
            "type": "address",
            "component": "address",
            "name": "owner",
            "title": "ENS owner (the guild)",
            "defaultValue": "",
            "description": "Address of new ENS owner"
          }
        ],
        "shortDescription": "Transfers ENS subdomain",
        "longDescription": "Transfers ENS subdomain",
        "templateLiteral": "Transfer ENS subdomain to ${owner}",
        "spendsTokens": false
      },
      {
        "title": "Transfer ENS",
        "functionName": "setOwner",
        "params": [
          {
            "type": "bytes32",
            "component": "text",
            "name": "node",
            "title": "Subdomain node",
            "defaultValue": "",
            "description": "Name of parent ENS to set (e.g. projectdavi.eth)"
          },
          {
            "type": "address",
            "component": "address",
            "name": "owner",
            "title": "ENS owner (the guild)",
            "defaultValue": "",
            "description": "Address of new ENS owner"
          }
        ],
        "shortDescription": "Transfers a root ENS domain",
        "longDescription": "Transfers a root ENS domain",
        "templateLiteral": "Transfer ENS to ${owner}",
        "spendsTokens": false
      }
    ]
  },
  {
    "title": "Gnosis Chain Omni-Bridge",
    "tags": ["gnosis"],
    "networks": {
      "1": "0x88ad09518695c6c3712AC10a214bE5109a655671",
      "100": "0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d"
    },
    "functions": [
      {
        "title": "Relay tokens",
        "functionName": "relayTokens",
        "params": [
          {
            "type": "address",
            "component": "tokenPicker",
            "name": "token",
            "title": "Token",
            "description": "Token to bridge"
          },
          {
            "type": "address",
            "component": "address",
            "defaultValue": "",
            "name": "_receiver",
            "title": "Receiving address",
            "description": "Receiver of token (usually the DAO address)"
          },
          {
            "type": "uint256",
            "component": "tokenAmount",
            "name": "_value",
            "title": "Amount",
            "description": "Amount of tokens to bridge"
          }
        ],
        "shortDescription": "Bridges ERC20 funds between gnosis chain and mainnet",
        "longDescription": "Bridges ERC20 funds between gnosis chain and mainnet. Needs to be claimed separately.",
        "templateLiteral": "Bridge ${_value} ${token} on Gnosis omni-bridge to ${_receiver}",
        "spendsTokens": true
      }
    ]
  },
  {
    "title": "Llama pay vesting stream",
    "tags": ["llama", "payment", "stream"],
    "networks": {
      "100": "0xb93427b83573c8f27a08a909045c3e809610411a"
    },
    "functions": [
      {
        "title": "Deploy vesting contract",
        "functionName": "deploy_vesting_contract",
        "params": [
          {
            "type": "address",
            "component": "tokenPicker",
            "name": "token",
            "title": "Token",
            "description": "Token to stream"
          },
          {
            "type": "address",
            "component": "address",
            "name": "recipient",
            "title": "Recipient",
            "defaultValue": "",
            "description": "Receiving address of tokens"
          },
          {
            "type": "uint256",
            "component": "tokenAmount",
            "name": "amount",
            "title": "Amount",
            "description": "Number of tokens to stream"
          },
          {
            "type": "uint256",
            "component": "time",
            "name": "vesting_duration",
            "title": "Duration",
            "defaultValue": "",
            "description": "How long before stream finishes fully"
          },
          {
            "type": "uint256",
            "component": "date",
            "name": "vesting_start",
            "title": "Start time",
            "defaultValue": "",
            "description": "Starting time for stream"
          },
          {
            "type": "uint256",
            "component": "time",
            "name": "cliff_length",
            "title": "Cliff length",
            "defaultValue": "0",
            "description": "How long before cliff (receiver can start withdrawing)"
          }
        ],
        "shortDescription": "Creates streaming contract with optional cliff ",
        "longDescription": "Factory contract that creates streaming contract with optional cliff for ERC20 tokens. Only receiver can withdraw, owner can rugpull.",
        "spendsTokens": true,
        "templateLiteral": "Vest ${amount} ${token} for ${vesting_duration} with ${cliff_length} cliff for ${recipient}"
      }
    ]
  },
  {
    "title": "Burn REP on Swapr Guild (Testing only)",
    "tags": ["gnosis"],
    "networks": {
      "100": "0xCB1B4f99Ec4BeCf2931970ee7456BA492ccb72D6"
    },
    "functions": [
      {
        "title": "Burn REP",
        "functionName": "burn",
        "params": [
          {
            "type": "address",
            "component": "address",
            "defaultValue": "",
            "name": "account",
            "title": "Address",
            "description": "Address to burn REP for"
          },
          {
            "type": "uint256",
            "component": "tokenAmount",
            "name": "amount",
            "title": "Amount",
            "description": "REP amount to burn"
          }
        ],
        "shortDescription": "Burns REP of an address",
        "longDescription": "Burns REP of an address",
        "templateLiteral": "Burn ${amount} REP from ${account}"
      }
    ]
  }
]
