Возможна ли эта логика в эфириуме? - PullRequest
1 голос
/ 29 мая 2019

Предположим, что здесь smartcontract A и B. B уже развернут и имеет функцию BuyService.Пользователь должен вызвать эту функцию, чтобы получить сервис с токенами.A имеет достаточно tokens(Erc20).

  1. Пользователь отправляет TX на A
  2. А Покупатель BuyService B
  3. B получает tokens(erc20) в A и предоставляет обслуживание Пользователю

Возможна ли эта логика?Если нет, как я могу сделать A?Я не хочу менять код в B. B является очень общим.Пожалуйста поправьте меня.

contract A {
    ERC20 token = ERC20(0x...);
    B b = B(0x...);

    function helpMeBuyService() external {

        token.approve(b, 1000); 
        b.BuyService(msg.sender); 
    }
}

1 Ответ

1 голос
/ 07 июня 2019

Ваш код правильный

pragma solidity ^0.5.0;

interface B {
    function BuyService(address receiver) external;
}

interface ERC20 {
    function approve(address receiver, uint256 amout) external;
}

contract A {
    ERC20 public token = ERC20(0x123);
    B public b = B(0x123);

    function helpMeBuyService() external {
        token.approve(address(b), 1000); 
        b.BuyService(msg.sender); 
    }
}
...