{
  "rules": {
    ".read": "auth.token.admin === true",
    ".write": "auth.token.admin === true",
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid",
        "address": {
          ".validate": "newData.isString() && newData.val().length === 42"
        }
      }
    },
    "versions": {
      ".read": true,
      ".write": false
    },
    "lastBlockNotified": {
      ".read": false,
      ".write": false
    },
    "registrations": {
      "$address": {
        ".read": "auth.uid != null && $address === root.child('users').child(auth.uid).child('address').val()",
        "fcmToken": {
          ".write": "auth.uid != null && $address === root.child('users').child(auth.uid).child('address').val()"
        },
        "language": {
          ".write": "auth.uid != null && $address === root.child('users').child(auth.uid).child('address').val()"
        },
        "appVersion": {
          ".write": "auth.uid != null && $address === root.child('users').child(auth.uid).child('address').val()"
        },
        "country": {
          ".write": false
        },
        "dailyLimitCusd": {
          ".write": false,
          ".validate": "newData.isNumber() && newData.val() >= 500"
        }
      }
    },
    "pendingRequests": {
      ".read": "auth.uid != null && (query.orderByChild == 'requesterAddress' || query.orderByChild == 'requesteeAddress') && query.equalTo == root.child('users').child(auth.uid).child('address').val()",
      ".write": false,
      ".indexOn": ["requesterAddress", "requesteeAddress"]
    },
    "exchangeRates": {
      ".read": true,
      ".write": false,
      "$from": {
        "$to": {
          ".indexOn": ["timestamp"]
        }
      }
    },
    "addressesExtraInfo": {
      ".read": true,
      ".write": false
    },
    "notifications": {
      ".read": true,
      ".write": false
    },
    "notificationsV2": {
      ".read": true,
      ".write": false
    },
    "consumerIncentives": {
      ".read": true,
      ".write": false
    },
    "providerLogos": {
      ".read": true,
      ".write": false
    },
    "inviteRewardAddresses": {
      ".read": true,
      ".write": false
    },
    "localCicoProviders": {
      ".read": true,
      ".write": false
    },
    "tokensInfo": {
      ".read": true,
      ".write": false
    },
    "persona": {
      ".write": "auth.uid === 'ihl-service-worker'",
      ".read": "auth.uid === 'ihl-service-worker'",
      "$address": {
        ".read": true
      }
    },
    "inHouseLiquidity": {
      ".write": "auth.uid === 'ihl-service-worker'",
      ".read": "auth.uid === 'ihl-service-worker'",
      "$address": {
        ".read": true
      }
    },
    "lostAccounts": {
      ".read": true,
      ".write": false
    },
    "rewardsSenders": {
      ".read": true,
      ".write": false
    },
    "dailyLimitRequest": {
      "$address": {
        ".write": false,
        ".read": "auth.uid != null && $address === root.child('users').child(auth.uid).child('address').val()"
      }
    },
    "fiatConnect": {
      ".write": "auth.uid === 'ihl-service-worker'",
      ".read": "auth.uid === 'ihl-service-worker'",
      "$address": {
        ".read": true
      }
    },
    "coinbasePayAddresses": {
      ".read": true,
      ".write": false
    }
  }
}
