Как разделить средства в одной транзакции отправки

Сценарий:

  • Счет Алисы = 2 ETH
  • Учетная запись администратора = 0 ETH
  • Счет Боба = 0 ETH

Алиса хочет отправить 1 ETH Бобу с помощью моего приложения. Приложение будет взимать 0,01 ETH в качестве комиссии и будет добавлено к общей комиссии за транзакцию.

Общая плата = Плата за подачу заявки (0,01) + Плата за сеть (лимит газа * цена газа)

Предположим, плата за сеть рассчитывается как 0,001008 ETH.

Общая сумма к оплате = 1,011008 ETH (1 + 0,01 + 0,001008)

После успешной транзакции ниже должны быть реквизиты учетной записи.

  • Счет Алисы = 0,988992 ETH
  • Учетная запись администратора = 0,01 ETH
  • Счет Боба = 1 ETH

где майнерам будет выплачено 0,001008 ETH

Запрос:

Q1. Как я могу создать приложение, в котором средства одной транзакции отправки могут быть отправлены на два разных адреса (адрес Боба и адрес администратора)?

Q2. Можно ли создать такое приложение без использования смарт-контрактов?

Для этого вам может понадобиться математическая библиотека с фиксированной точкой. См. PRBMath и эту тему: Какие математические библиотеки с фиксированной или плавающей запятой доступны в Solidity?

Ответы (1)

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

Вот очень быстрый пример, который я собрал для вас:

pragma solidity ^0.4.24;

contract Forwarder {

    address admin;
    uint fee = 10;

    constructor() public {

        admin = msg.sender;
    }

    function splitFunds(address _b) public payable {

        admin.transfer(msg.value * fee / 100);
        _b.transfer(msg.value - (msg.value * fee / 100));
    }
}

введите описание изображения здесь

значит комиссия равная 10 значит 10 процентов? или 1 процент?