Могу ли я использовать свой собственный ERC-20 со своим смарт-контрактом?

Итак, у меня есть контракт, который позволяет вам обменять ETH на мой собственный токен ERC20. Я хочу использовать этот пользовательский токен ERC20 сейчас с другими смарт-контрактами. Есть ли какой-то способ указать пользовательский токен против ETH?

пример:

прагма солидность ^ 0.4.24;

/ * * --- Как использовать: * 1. Отправьте токены HYPER на адрес смарт-контракта в любом количестве. * 2. Заявите о своей прибыли, отправив 0 транзакций HYPER (1 раз в час) * 3. Если вы не снимаете и не зарабатываете более 200%, вы можете снимать только один раз сверх лимита 200% * / контракт HyperLENDtest {

using SafeMath for uint;
mapping(address => uint) public balance;
mapping(address => uint) public time;
mapping(address => uint) public percentWithdraw;
mapping(address => uint) public allPercentWithdraw;

функция percentRate () публичное представление возвращает (uint) {uint contractBalance = address (this) .balance;

    if (contractBalance < 100 ether) {
        return (20);
    }
    if (contractBalance >= 500 ether && contractBalance < 1000 ether) {
        return (40);
    }
    if (contractBalance >= 1000 ether && contractBalance < 2000 ether) {
        return (60);
    }
    if (contractBalance >= 2000 ether) {
        return (80);
    }

Вместо того, чтобы возвращать ETH, я хочу использовать свой собственный токен ERC20 для пользователей, чтобы отправить его в контракт и получить обратно% токена ERC20.


person JimmyJong    schedule 14.11.2018    source источник


Ответы (2)


Возьмем, к примеру, бизнес электронной коммерции. Я сделал это следующим образом:

  1. Пользователь будет покупать токены, отправляя эфир на ваш контракт ERC-20. Скорость между эфиром и вашим токеном полностью зависит от вас, поскольку она зависит от бизнеса, а не от самого эфира.
    В этом бизнес-примере, допустим, мы даем 100 токенов за каждый эфир. Пользователь передает 2 эфира в контракт, и 200 ваших бизнес-токенов затем помещаются в ваш контракт
    mapping(address => uint) accounts.
    Учитывая это, следующий код даст вам 200:
    accounts[customer_address] //(returns 200)

  2. Тогда у вас будет еще один контракт, скажем, на покупку данного предмета. Вам просто нужно вызвать эту функцию покупки смарт-контракта с этого адреса. Затем эта функция отвечает за вызов вашего контракта ERC-20, чтобы проверить, достаточно ли у пользователя средств с учетом его / ее адреса. Если это так, то ваш контракт будет передавать указанное количество токенов в ваш контракт ERC-20 в доступные токены или другой кошелек, который вы хотите использовать, в основном переводя токены пользователя (адреса) на другой адрес, который вы решите.

Таким образом, ваш пользователь использует ваши ранее купленные токены и даже не думает об эфире. Пожалуйста, помните, что сбор за ГАЗ должен быть оплачен. Так что либо вы платите за это, либо ваши клиенты (включат это в цену товара или около того).

Надеюсь, это поможет кому-то с тем же вопросом :)

person João Rodrigues    schedule 04.04.2021

Ваш контракт - это просто еще один адрес, так что да, вы можете отправлять токены на свой контракт. Но вы не можете отправить их так же, как отправляете эфир, то есть с помощью платной функции. Вы должны перевести токены на адрес контракта, используя метод передачи вашего токена ERC-20. И чтобы отправить токены из контракта кому-то еще, вы должны вызвать перевод из своего контракта, если вы не сделаете что-то вроде предоставления большого количества разрешений для своей учетной записи, но я бы этого не предлагал. Как именно вы можете вызывать методы из вашего ERC-20 из другого контракта, объясняется в этот пост.

person nikos fotiadis    schedule 15.11.2018
comment
Спасибо, Никос, поэтому я знаю о функции передачи, но то, что я пытаюсь достичь, - это использовать свой контракт в том виде, в котором он существует, и использовать свой собственный токен ERC20 против ETH. Так, например, в этой игре пользователь отправляет X eth контракту и взамен получает каждый день% обратно. Но вместо ETH я хочу предоставить им свой собственный токен ERC20, а не ETH. - person JimmyJong; 15.11.2018
comment
Это, конечно, возможно, но вам нужно будет предоставить им способ купить и отправить ваш токен ERC-20. Я думаю, что самый простой способ - использовать метамаску, если вы не хотите создавать интерфейс самостоятельно. Поэтому, если вы используете метамаск, вы можете попросить их купить токены, отправив эфир на ваш контракт ERC-20, что является стандартным способом сделать это. После того, как у них будет несколько токенов, им нужно добавить этот токен в свою учетную запись метамаски, чтобы они могли передавать токены с помощью метамаски. В этом руководстве описывается, как добавить пользовательские токены ERC-20 в метамаску: luvcrypto.com/add-send -tokens-metamask - person nikos fotiadis; 15.11.2018
comment
И вам также необходимо уведомить ваш другой контракт о передаче токена. Я знаю, что это немного сложнее, чем использовать эфир. - person nikos fotiadis; 15.11.2018
comment
вот где я столкнулся с проблемой, я не уверен, как отличить ETH от пользовательского токена в контракте. У меня уже есть UI. Но когда я использую смарт-контракт и пытаюсь заменить значение ETHER своим токеном, он выдает ошибки. Я понимаю, вплоть до добавления токена в метамаску и все такое. Это действительно, как заставить контракт распознавать его токен ERC20, а не ETH (код указан в исходном сообщении выше) - person JimmyJong; 15.11.2018
comment
Эфир и токены отправляются по-разному. Транзакция может содержать эфир, но транзакция не может содержать токены. Транзакция сообщит контракту о передаче токенов. Таким образом, контракт может узнать, является ли он ERC-20 или Ether, в зависимости от выполняемой функции. Когда вы отправляете токены ERC-20, в контракте ERC-20 меняются только балансы, вы на самом деле ничего не отправляете с транзакцией. - person nikos fotiadis; 15.11.2018