Coder Social home page Coder Social logo

gradoshpera-multisig's Introduction

ДАО Градосфера | Мультикошелек

mn

Этот пользовательский интерфейс обеспечивает функциональность «N-из-M мультиподписей»: N подтверждающих сторон из предопределенного набора M подтверждающих должны одобрить Заявку для его выполнения.

Каждая Заявка может содержать произвольное количество действий: исходящие сообщения и обновления параметров. Поскольку содержание сообщений произвольно, Заявка может выполнять произвольные высокоуровневые взаимодействия в сети TON: отправка TON, отправка/выпуск жетонов, выполнение административных действий и т.д.

⚠️ Мультикошелек не ограничивает содержание действий Заявки, поэтому Заявка может включать в себя абсолютно любые действия, включая те, которые создают новые заявки или подтиверждают существующие заявки или действия изменяющие конфигурацию мультикошелька (например, список Подтверждающих).

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

Подтверждающие участники должны одобрить заявку только после полного прочтения его содержания.

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

Такие параметры, как пороговое значение N, список подтверждающих и другие, могут быть обновлены только с согласия текущих подтверждающих N-из-M.

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

Каждая Заявка имеет срок действия, по истечении которого она не может быть исполнена.

Каждый подтверждающий может быть кошельком, аппаратным кошельком, мультикошельком, а также другим смарт-контрактом со своей собственной логикой.

Этот мультикошелек был разработан с учетом требований Safe{Wallet} .

Гарантии

  • Никто, кроме участников, Предлагающих и Подтверждающих, не может инициировать создание новой заявки, никто, кроме участников, Подтверждающих, не может одобрить новую заявку.
  • Изменение набора Подтверждающих делает недействительными все заявки с другим набором. Грубо говоря, заявка действительна только тогда, когда текущие Подтверждающие мультикошелька равны Подтверждающим заявки.
  • Компрометация Подтверждающих, в частности, компрометация меньшего числа Подтверждающих - N , не препятствует выполнению заявок или предложению новых (включая заявки, которые удалят адреса скомпрометированных Подтверждающих из списка)
  • Компрометация Предлагающих не препятствует выполнению заявок или предложению новых (включая заявки, которые удалят скомпрометированного Предлагающего из списка предлагающих)
  • Логика кошелька с мультиподписью не может быть изменена после развертывания

Архитектура

Вся система состоит из четырех частей:

  • Подписывающие — независимые деятели, которые подтверждают исполнение заявок.
  • Предлагающие — вспомогательные деятели, которые могут предлагать новые заявки для исполнения.
  • Мультикошелек — контракт, который выполняет утвержденные заявки, таким образом, это адрес, которому будут принадлежать активы и разрешения; контракт мультикошелька также хранит информацию о количестве заявок, текущих списков подтверждающих и предлагающих участников.
  • Заявки - дочерние контракты, каждый из которых содержит информацию об одной заявке: содержание заявки и подтверждения.

Порядок действий выглядит следующим образом:

  1. Предлагающий создает новую заявку (адрес из наборов Предлагающих или Подтверждающих), который состоит из произвольных значений с адреса мультикошелька и отправляет запрос в Мультикошелек для начала подтверждения этой заявки.
  2. Мультикошелек получает запрос, проверяет, что он отправлен уполномоченным субъектом, и развертывает дочерний субконтракт Заявки, содержащий предложение.
  3. Подписывающие, независимо друг от друга отправляют сообщения об одобрении заявки на контракт.
  4. Как только заявка получает достаточное количество одобрений, она отправляет запрос на выполнение в Мультикошелек.
  5. Мультиподпись подтверждает подлинность заявки (что она действительно отправлена заявкой, а не кем-то другим), а также что список подтверждающих все еще актуален, и выполняет заявку (отправляет транзакции из заявки)
  6. Если заявке необходимо более 255 операций (лимит за одную транзакцию), избыточные транзакции могут быть упакованы в следующий перевод из Мультикошелька на свой адрес как internal_execute
  7. Мультикошелек получает internal_execute, проверяет, что он отправлен от себя, и продолжает выполнение.

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

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

Примечание:

  • Пороговое значение должно быть > 0 и <= количество подписывающих.

  • По замыслу смарт-контракт Заявки не уведомляетт об обновлении конфигурации мультиподписи (подтверждающие, предлагающие, пороговое значение). Такая заявка будет продолжать принимать подтверждения, но при исполнении она будет отклонена, поскольку конфигурация мультиподписи изменилась.

  • Баланс TON просроченной заявки можно вернуть в Мультикошелек. Для этого заявка должна собрать достаточно Подтверждений - она будет отправлен на одобрение, статуса одобрения не будет, но TON будут возвращены в Мультикошелек.

  • approve_accepted - Вспомогательное уведомление не отправляется, если заявка инициализируется и выполняется немедленно (approve_on_init с порогом = 1).

gradoshpera-multisig's People

Contributors

rise1507 avatar inozemtsev-roman avatar the-gateway-ton avatar tolya-yanot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.