Skip to content
This repository has been archived by the owner on Nov 16, 2018. It is now read-only.

Workflow работы с multisig contract

Pavel edited this page Jun 27, 2018 · 26 revisions

``## workflow по работе backend со мультисиг смартконтрактом. workflow по отправки с мультисиг кошелька

Создание мультисиг смартконтракта

workflow по созданию мультисиг кошелька

 Multy Core API для взаимодействия с ETH Multisig contract(s)

Всё взаимодействие, как и в случае с токенами, осуществляется через специальное свойство транзакции: multisig

Создание multisig кошелька

Сформировать транзакцию на адрес multisig factory contract, установить свойство multisig => new_wallet:[0xaddr1, ... 0xaddrN]:K, где N - количество адресов, K - количество подписей для совершения транзакции.

Запрос на оплату

Сформировать транзакцию на адрес получателя (того адреса, куда надо перевести деньги), установить свойство multisig => 0xADDRESS:new_request, где 0xADDRESS - это адрес multisig wallet contract. Сумма запроса берется из суммы перевода транзакции.

Подтверждение

Сформировать транзакцию на адрес получателя (того адреса, куда надо перевести деньги), установить свойство multisig => 0xADDRESS:REQ_ID:approve, где 0xADDRESS - это адрес multisig wallet contract, REQ_ID -  ID запроса.

Отмена подтверждения

Сформировать транзакцию на адрес получателя (того адреса, куда надо перевести деньги), установить свойство multisig => 0xADDRESS:REQ_ID:reject, где 0xADDRESS - это адрес multisig wallet contract, REQ_ID -  ID запроса.

Смартконтракты

исходный код Контракта-фабрики

создание мультисиг кошелька

При создании контракта фабрикой в логах контракта фабрики появятся лог Event:ContractInstantiation( где на первом месте будет адрес создателя нового смартконтракта(может не являться участником кошелька), на втором адрес созданного контракта multisig кошелька) Мы должны распарсить входную транзакцию на контракт. В поле Data первые 4 байта f8f73808- id функции(create(address[],uint256)) после этого идет массив адресов которые будут являться owner-ам контракта( владельцами кошелька) и количество подтверждений необходимых для отправки транзакции в этом кошельке. Пример транзакции создания multisig кошелька там указанны два адреса владельцев кошелька [0xfad9edb6094fc4909c6f1b236ca4dd77c1165f53, 0x4168432255d9991791dea5c24379e70261632c7c] и одно подтверждение необходимое для отправки с этого кошелька. контракт залитый в тестовую сеть



исходный код контракта multisig

Перевод денег на SC

логи:

event Deposit(address indexed sender(адрес отправитель), uint value(Количество переведенных ETH));

Такая транзакция выглядит как обычный перевод между аккаунтами. она оставляет логи описанные выше/\

Отправка денег со смарт-контракта

пример транзакции

функция submitTransaction(address destination, uint256 value, bytes data)(c6427474) передаваемые значения:

  • адрес получателя,
  • количество ETH,
  • поле data

(Должен отправлять owner контракта иначе будет отклонена транзакция)

логи:

event Submission(uint indexed transactionId(индекс новой транзакции, он используется в последствии для подтверждения транзакции другими владельцами кошелька) );

появляется когда пользователь владелец кошелька(они только и могут дергать метод submitTransaction) event Confirmation(address indexed sender(адрес владельца подтвердившего транзакцию ), uint indexed transactionId (Номер подтверджаемой транзакции ));

Подтверждения транзакции

пример транзакции

confirmTransaction(uint256 transactionId)(0xc01a8c84) передаваемые значения:

  • номер подтверждаемой транзакции

Откат подтверждения.

пример транзакции

revokeConfirmation(uint256)(0x20ea8d86) передаваемое значение

  • Номер транзакции в которой хотят убратьсвое подтверждение
Clone this wiki locally