Как я могу сделать так, чтобы транзакция отправлялась на случайный адрес в Solidity?

Я хочу написать криптовалюту с функцией отправки токенов от отправителя на случайный адрес получателя, который недавно совершил транзакцию в блокчейне. Как бы я начал делать что-то подобное?

В основном в следующем я бы хотел, чтобы balances[to] был случайным адресом, выбранным из адресов, которые недавно участвовали в транзакциях.

function Send(address to, uint tokens) public returns (bool success) {
         balances[msg.sender] = balances[msg.sender].sub(tokens);
         balances[to] = balances[to].add(tokens);
         Transfer(msg.sender, to, tokens);
         return true;
}

Спасибо за помощь!

Ответы (1)

Две проблемы:

  1. Я не думаю, что у Solidity есть доступ к списку последних транзакций, из которого можно выбрать адрес. Вам нужно будет использовать какой-то оракул.
  2. У Solidity нет источника истинной случайности. Есть много способов аппроксимировать случайность, если ставки невелики (так что вы не беспокоитесь о манипулировании майнерами), или вы можете использовать оракул для получения истинных случайных чисел.

Какая здесь модель доверия? Есть ли причина, по которой вы не можете просто отправить адрес извне? Должна ли логика выбора адреса действительно находиться в сети?

Спасибо за совет! Я только начинаю работать с солидностью. идея состоит в том, что пользователь может выполнить определенное действие по контракту, но должен согласиться с тем, что его баланс будет отправлен на случайный адрес в качестве оплаты за услугу. случайным получателем должен быть кто-то, кто активно использует сеть для перевода балансов. Как бы я отправил адрес извне в этом случае?
Вы можете отложить баланс и позже вызвать (из офчейна) метод, например, send(to, tokens)когда вы заполняете toслучайным адресом из недавних транзакций.