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 26, 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 передаваемые значения: адрес получателя, количество ETH, поле data (Должен отправлять owner контракта иначе будет отклонена транзакция) логи: event Submission(uint indexed transactionId(индекс новой транзакции) );

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

confirmTransaction передаваемые значения номер транзакции необходимой подтверждение

Clone this wiki locally