July 24

DAO, экстерриториальные юрисдикции и союз эгоистов

Введение

История экстерриториальных юрисдикций

Идея об экстерриториальных юрисдикциях появилась еще в 19 веке в рамках идеи Панархии, предложенной Полем Эмилем де Пюидом.
Суть идеи состоит в том, что человек должен иметь возможность вступать в юрисдикции без необходимости физической релокации, таким образом беспрепятственно выбирая форму правления


С момента появления идеи прошло 160 лет и идея виртуальных государств смогла получить более широкое распространение благодаря интернету, а именно благодаря экосистеме Web 2.0.

На данный момент практически все существующие гос-ва не исполняют никаких серьезных функций и не обладают признаками государственности:

  1. иметь казну (казначейство) и право принудительного сбора налогов;
  2. иметь подконтрольную территорию с постоянным населением;
  3. иметь органы управления;
  4. иметь силовые структуры для реализации монополии насилия.

Далее в статье я попытаюсь рассмотреть способ построения эффективной виртуальной юрисдикции с либертарианской позиции на основе DAO и экосистемы Web 3.0, но для начала нужно разобраться в основных технологиях

DAO и Web 3.0

DAO — децентрализованная автономная организация, работающая поверх блокчейна.
DAO работает на основе технологии смарт-контрактов — программ, которые исполняются майнерами сети. Такой способ исполнения позволяет добиться прозрачности и децентрализованноcти. К примеру, алгоритм суда исполняемый в виде смарт-контракта будет виден и доступен всем участникам контракта, а добросовестное исполнение алгоритма гарантированно природой блокчейна.

На основе DAO основано управление многими проектами и даже компаниями. Такой подход позволяет добиться честного управления со стороны участников проекта и чаще всего реализован так, что участник с большим количеством токенов имеет больший вес голоса(т.к он больше заинтересован в успешности проекта)

Конечно, такой подход разумен в управлении компанией и вряд ли подойдет для построения государства.
К счастью, гибкость смарт-контрактов позволяет нам задавать свои правила и методы управления, разрешения конфликтов в DAO

Теоретическая часть

Обозначим цели нашей виртуальной юрисдикции, она должна:

  1. Строиться на либертарианских принципах

1.1. Иметь права выхода и вступления

1.2 Строиться на добровольном взаимодействии

2. Иметь способ разрешения конфликта(суды)

3. Иметь общую казну, откуда с помощью системы управления можно финансировать различные проекты

4. Иметь способ обеспечения соблюдения установленных правил

У многих читателей сразу возникнет вопрос: как данная юрисдикция будет обеспечивать соблюдение решений суда и бороться с невыполнением обязательств?

Ответ очень прост — юрисдикция должна оправдывать себя, а участие в ней должно быть привилегией. Классические государства строятся на насилии, фактически обязывая людей соблюдать их законы без возможности выхода, им не нужно конкурировать с другим юрисдикциями(конечно, существует эмиграция, но это не тот уровень конкуренции, который представлен в экстерриториальных юрисдикциях)

Таким образом, субъекты, вступившие в юрисдикцию, будут платить определенный взнос, точно так же можно брать определенный залог, который будет возвращаться только при определенных условиях(e.g нахождение в юрисдикции определенное время). При нарушении решений юрисдикции, субъект будет терять данный взнос, а также все бонусы, которые предоставлялись юрисдикцией, не говоря о репутационном риске, который будет учитываться в других юрисдикциях.

Цель существования и функции юрисдикций — не менее важный вопрос, что может предоставить юрисдикция не имеющая рычагов в физическом мире? Намного больше чем думаю многие. К примеру, в юрисдикции может быть создана система взаимопомощи(юридической, медицинской и материальной). Представьте юрисдикцию, работающую на экономике подарков, где каждый может получить помощь или предоставить таковую, а исполнение обязанностей и урегулирование споров будет решать виртуальный суд.
Не нравиться экономика подарков?
Юрисдикция с рыночными решениями работает даже лучше, представьте, что вы имеете виртуальный форум, где можно приобрести любую услугу с гарантией исполнения.
Виртуальный юрисдикции смогут предоставлять услуги страховки, материальной и информационной помощи, арбитража и рыночной платформы.

Подобные юрисдикции смогут объединяться в конфедерации, на основе новых смарт-контрактов для удобства пользователей обоих.
У разных юрисдикций могут быть абсолютно разные внутренние системы(Прямая демократия с голосованием по разрешению споров/представительная демократия с выбором судьи/автократия с единственной властью в виде владельца контракта) управления и взаимодействия, но благодаря новому смарт-контракту пользователи этих юрисдикций смогут взаимодействовать по нерушимым правилам установленных в контракте

Смарт-контракты являются идеальным способом построения виртуальных государств, а благодаря своей природе они полностью подходят под либертарианские ценности, ведь все действия добровольны, а каждый субъект имеет свободу ассоциации. Работоспособность юрисдикций держится только на их способности обеспечивать потребности субъектов(ведь они не имеют монополии на насилие, которое в данной экосистеме невозможно), а это означает повышенную конкуренцию

Практическая часть

Из интереса, я решил написать реализацию простой виртуальной юрисдикции, которая работает на основе представительной демократии и позволяет производить сделки между пользователями, а также голосовать за новые проекты.

Для входа в юрисдикцию требуется внести безвозвратную комиссию в размере 1 ETH и возвратный залог в размере 5 ETH:

    function join() external payable {
        require(msg.value == pledgeAmount + commission, "Must send commission and pledge to join");
        require(!joinedAddresses[msg.sender], "Address already joined");

        joinedAddresses[msg.sender] = true;
        balances[msg.sender] += msg.value;

        emit Joined(msg.sender);
    }

Далее, используется простая система заказов и проверки того, что вызов производиться участником юрисдикции:

    function isJoined(address _addr) external view returns (bool) {
        return joinedAddresses[_addr];
    }

    function placeOrder(string memory _title, uint256 _price, string memory _description) external onlyJoined {
        orderCount++;
        orders[orderCount] = Order(orderCount, msg.sender, address(0), _title, _price, _description, false, false, false);
        emit OrderPlaced(orderCount, msg.sender, _title, _price);
    }

    function takeOrder(uint256 _orderId) external payable onlyJoined {
        Order storage order = orders[_orderId];
        require(order.id == _orderId, "Order does not exist");
        require(!order.isTaken, "Order already taken");
        require(msg.value == order.price, "Incorrect ETH amount sent");

        order.buyer = msg.sender;
        order.isTaken = true;
        balances[order.seller] += msg.value;

        emit OrderTaken(_orderId, msg.sender);
    }

    function completeOrder(uint256 _orderId) external onlyJoined {
        Order storage order = orders[_orderId];
        require(order.id == _orderId, "Order does not exist");
        require(order.buyer == msg.sender, "Only the buyer can complete the order");
        require(order.isTaken, "Order not taken");
        require(!order.isCompleted, "Order already completed");

        order.isCompleted = true;
        reputation[order.seller]++;
        reputation[order.buyer]++;
    }

Функция isJoined - проверяет наличие пользователя в базе юрисдикции
Функция placeOrder - отсылает запрос на создание нового заказа
Функция takeOrder - отсылает запрос на принятие существующего заказа
Функция completeOrder - завершает выполнение заказа

Можно заметить, что в коде используется переменная reputation.
В демо юрисдикции, залог в размере 5 ETH можно вернуть, выполнив некоторое количество успешных заказов(заработав репутацию за каждый из них)

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

    function nominateCandidate() external onlyJoined {
        require(votingOpen, "Voting is not open");
        require(!isCandidate(msg.sender), "Already a candidate");

        candidates.push(msg.sender);
    }

    function vote(address _candidate) external onlyJoined {
        require(votingOpen, "Voting is not open");
        require(isCandidate(_candidate), "Not a valid candidate");
        require(!hasVoted[msg.sender], "Already voted");
        votes[_candidate]++;
        
        hasVoted[msg.sender] = true;
    }

    function electJudge() internal {
        address newJudge = address(0);
        uint256 maxVotes = 0;

        for (uint256 i = 0; i < candidates.length; i++) {
            if (votes[candidates[i]] > maxVotes) {
                maxVotes = votes[candidates[i]];
                newJudge = candidates[i];
            }
        }

        judge = newJudge;
        emit JudgeElected(judge);

        // Reset for the next voting cycle
        for (uint256 i = 0; i < candidates.length; i++) {
            delete votes[candidates[i]];
        }
        candidates = new address[](0);

        for (uint256 i = 0; i < voted.length; i++) {
            delete hasVoted[voted[i]];
        }
    }

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

    function openVoting() external onlyOwner {
        require(!votingOpen, "Voting is already open");
        votingOpen = true;
    }

    function closeVoting() external onlyOwner {
        require(votingOpen, "Voting is not open");
        votingOpen = false;
        electJudge();
    }

Конечно, не забудем и про вывод средств с аккаунта субъекта и возвращение залога:

    function claimPledge() external onlyJoined {
        require(reputation[msg.sender] >= requiredReputation, "Not enough reputation to claim pledge");

        uint256 amount = balances[msg.sender];
        require(amount > 0, "No pledge to claim");

        balances[msg.sender] = 0;
        payable(msg.sender).transfer(amount);

        emit PledgeClaimed(msg.sender, amount);
    }

В коде идет проверка на соответствие репутации пользователя и возврат средств, также есть возможность вывести личные средства, которые пользователь пополнял сверх комиссии:

    function withdraw() external onlyOwner {
        uint256 amount = balances[msg.sender];
        balances[msg.sender] = 0;
        payable(msg.sender).transfer(amount);
    }

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

Вывод и пояснение

В конце концов, у нас получилось придумать действующую экстерриториальную юрисдикцию.
Очень важно различать виртуальное государство и экстерриториальные юрисдикции, ведь в данном случае мы получили нечто очень полезное на союз эгоистов.

Cоюз Эгоистов — добровольное и несистематическое объединение, являющееся альтернативой государству, данный союз поддерживается исключительно желанием его участников
Такое виртуальное объединение конечно не является полной альтернативой существующим государствам, но вполне могут дополнять их.
В любом случае такой подход более жизнеспособный, чем текущие виртуальные государства