-
Notifications
You must be signed in to change notification settings - Fork 3
Workflow работы с multisig contract
``## workflow по работе backend со мультисиг смартконтрактом.
Всё взаимодействие, как и в случае с токенами, осуществляется через специальное свойство транзакции:
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 передаваемые значения номер транзакции необходимой подтверждение