Контракт Управление высотами - Требования

Описание проблемы

Право на каждый участок содержит право на то, что находится под участком (недра) и над ним (воздух). В связи с этим воникает проблема учета, определения и изменения этих границ. Нам нужен механизм определения границ участков без выполнения дорогостоящей геодезической съемки.

Так же нужен механизм честного определения границ для регулирования высотности застройки. Мы не хотим, чтобы была возможность построить десять небоскребов, которые расположены вплотную друг к другу. Жить в такой среде будет невозможно.

Для этих целей мы разрабатываем этот контракт.

Цели контракта

  • Сделать честную систему, позволяющую без геодезической съемки определить границы земельных участков, а так же регулировать высоту застройки, учитывая права всех владельцев участков, расположенных в одной области;
  • Определить для нескольких, расположенных рядом участков, общую верхнюю и нижнюю границу путем голосования владельцев участков;
  • Исключить коррупцию и возможность небольшой группу пользователей путем сговора значительно менять высоты;
  • Дать возможность пользователю продать часть верхней и нижней границы соседнему участку;
  • Дать возможность пользователю купить часть верхней и нижней границы соседнего участка;

Сценарий контракта

Сценарий 1: Изменение границ с соседями

Значение верхней и нижней границы хранится в виде реестра в самом контракте.

id участка Нижняя граница, м. Верхняя граница, м.
sezu0h 250 330
sezu0j 250 330
sezu0e 250 330
geohash h1 h2

Здесь h1 - нижняя граница, выраженная в абсолютной координате "высота над уровнем моря" в метрах, а h2 - верхняя граница, в метрах над уровнем моря.

  1. Пользователь создает заявку на изменение общей высоты для участков. В заявке пользователь указывает:
    • геохеш своего участка;
    • тип границы - верхняя / нижняя;
    • величину изменения в метрах;
    • geohash'ы участков, владельцы которых должны проголосовать. Например:
  2. sexu0h;
  3. Изменяемая граница: верхняя;
  4. Изменение верхней границы: +70;
  5. Изменяемая граница: нижняя;
  6. Изменение нижней границы: +70;
  7. [ sezu0j, sezu0e, ... ] Всего X участков; На текущий момент мы не определяем минимальное количество голосующих. Определим их переменной X_MIN_HEIGHT_VOTE и определим конкретную механику позднее в дополнительных вопросах. ВАЖНО: Очевидно, что необходимо решить, для какой минимальной области, количества участков и количества адресов владельцев допустимо проводить изменения. Скорее всего решение будет лежать в области определения минимального количества владельцев, необходимого для принятия решения.
  8. Происходит определение, являются ли заданные участки соседями. Если да, результат фиксируются в контракте. Принимается, что эти X участков - соседи. Пусть ниже представлены текущие границы соседних участков:
id участка Нижняя граница, м. Верхняя граница, м.
sezu0h 250 330
sezu0j 250 330
Остальные Х участка 250 330
sezu0e 250 330
  1. Каждый владелец участка может проголосовать. Если достигнут консенсус 66%, то происходит изменение высот. 1 адрес владельца = 1 голос. Если количество голосующих адресов X < X_MIN_HEIGHT_VOTE, то транзакция на создание заявки отклоняется.

Голосование:

id участка Голос
sezu0h За
sezu0j За
Остальные Х участка За
sezu0e Против
  1. Каждый владелец, выполняя транзакцию, увеличивает счетчик голосов за принятие решения. Если значение счетчика превысило n ( где n - это 66% от количества голосующих ), то заявка считается выполненной. Необходимый порог в n голосов был набран. Контракт внес изменения:
id участка Нижняя граница, м. Верхняя граница, м.
sezu0h 320 400
sezu0j 320 400
Остальные Х участка 250 400
sezu0e 320 400

Сценарий 2: Покупка-продажа высоты

Возьмем пример из Сценария 1:

id участка Нижняя граница, м. Верхняя граница, м.
sezu0h 320 450
sezu0j 320 450
Остальные Х участка 320 450
sezu0e 320 450
  1. Каждый владелец земли может создать заявку на покупку Верхней границы и нижней границы. В заявке пользователь фиксирует сколько он хочет приобрести по каждой границе, а так же переводит оплату в GALT на контракт. Например:
id участка Увеличение по нижней границе, м. Увеличение по верхней границе, м. Цена, GALT
sezu0h 0 500 10 000

Это означает, что пользователь в примере хочет увеличить высоту только своего участка на 500 метров относительно текущей. Например, чтобы построить небоскреб. И готов заплатить за это 10 000 GALT, которые он переводит на контракт.

  1. Каждый из 8 владельцев соседних участков может ответить на заявку, указав id своего участка и высоту, которую он хочет продать. 2 владельца откликнулись:
id участка Продаваемая нижняя граница, м. Продаваемая верхняя граница, м.
sezu0j 0 50
sezu0e 0 150
  1. Контракт рассчитывает стоимость продаваемой высоты, переводит владельцу sezu0j 50 / 500 10000 = 1000 GALT, владельцу sezu0e 150 / 500 10000 = 3000 GALT и вносит изменение в Реестр учета высот:
id участка Нижняя граница, м. Верхняя граница, м.
sezu0h 320 650
sezu0j 320 400
Остальные X участка 320 450
sezu0e 320 300
  1. Для того, чтобы участки, на которых возможно высотное строительство, находились на большом расстоянии покупка высот возможна только у непосредственных 8 соседей. Таким образом, чтобы купить большую высоту, ее должны приобрести сначала эти 8 соседей, а потом перепродать. Участок sezu0k может купить высоту у следующих соседей: sezu0j, sezu0m, sezu0t, sezu0h, sezu0s, sezu05, sezu07, sezu0e.
  2. Участок sezu0e может купить и перепродать высоту sezu0h. Он может это сделать у следующих участков: sezu0k, sezu0s, sezu0u, sezu07, sezu0g, sezu06, sezu0d, sezu0f.
  3. Владелец участка sezu0h может в любой момент отозвать заявку и вернуть свои GALT, которые еще не были переведены за высоты. В приведенном примере владелец sezu0h может вернуть 6000 GALT.

Сценарий 3: Изменние Общей высоты группы участков после проведения сделок с куплей - продажей высот

  1. sezu0e создает заявку на общее изменение высоту для X участков. Например:
  2. sezu0e;
  3. Изменяемая граница: верхняя;
  4. Изменение верхней границы: +100;
  5. Изменяемая граница: нижняя;
  6. Изменение нижней границы: +0;
  7. [ sezu0j, sezu0h, ... ] Всего X участков;
  8. Голосование:
id участка Голос
sezu0h За
sezu0j За
sezu0m Против
Остальные (Х-1) участка За
sezu0e За

Решение принято.

  1. Контракт меняет значения высот:
id участка Нижняя граница, м. Верхняя граница, м.
sezu0h 320 750
sezu0j 320 500
Остальные X участка 320 550
sezu0e 320 400

Спецификация контракта

Структуры данных

  • Реестр заявок на изменение высот: mapping <адрес инициатора, список голосующих участков, новая верхняя граница, новая нижняя граница>.

Детальный Сценарий пользователя и описание интерфейса

Ограничения для реализации на Solidity

  • В solidity нет отрицательных чисел, соответственно необходимо обсудить нулевую нижнюю границу и насколько это должно быть глубоко под землей

Ограничения для реализации на TypeScript

Еще не реализовано.

Неоднозначные вопросы и ответы на них

Кто должен голосовать за изменение границ? Как определять список участков, которые должны голосовать за изменение?

Есть 2 возможных варианта:

Вариант №1

Можно задавать радиус вокруг участка и исходя из него определять участки, которые должны голосовать.

Плюсы Минусы
Создает неопредленность. Участки могут иметь разные размеры. аже если мы будем использовать расстояние от границы участка, то это не является идеальным решением, так как соседний участок может быть огромного размера.
Сложность реализации. Нужно выполнять вычисления на геохешах в контракте.

Вариант №2

Определить количество соседних участков, которые должны голосовать.

Плюсы Минусы
Так как здесь основная задача - достигнуть общественного консенсуса по высоте застройки, то нужно определить, какое количество владельцев должны участвовать в достижении этого консенсуса. Остановимся на использовании просто переменной количества соседей, которые должны проголосовать. У каждого участка есть 8 соседей, которые граничат с ним и еще 16 соседей, которые граничат с первыми восьмью. Примем за достаточный консенсус - 66% голосов от 24 соседних участков. Проблема остается для Владельцев участков, расположенных на границе, области, для которой происходят изменения. Они не голосуют, но могут получить негативные последствия в виде небоскреба за окном, если 24 владельца решили увеличить общую верхнюю границу до 1000 метров над уровнем моря.

Какое минимальное и максимальное количество адресов пользователей или участков должно участвовать в голосовании за изменение высот?

Открытый вопрос.

Должен ли пользователь платить делегатам за получение дополнительных границ?

Нет.

Сколько нужно набрать голосов, чтобы сделать изменения? Как считать голоса?

Провести эксперимент с отрицательными значениями высот.

Рассмотреть возможность изменять границы участков только в рамках одного родительского геохеша.

Провести эксперимент на solidity с операциями по определению соседства участков.

results matching ""

    No results matching ""