Aceptar un token ERC20 como pago

Suponiendo que he implementado mi token ERC20 y el suministro se ha dispersado, ¿existe algún método para crear un contrato separado que acepte ese token ERC20 como pago y tenga campos de usuario que envíen información particular al contrato?

Algo así como un contrato que toma el token junto con cierta información.

Respuestas (3)

Si desea recibir tokens ERC20 en un nuevo contrato junto con datos, puede crear el nuevo contrato utilizando el estándar de token ERC 223. Lea aquí (No se confunda con la nomenclatura, es ERC223 y no ERC23)

Cuando transfiere los tokens, también puede enviar datos en la función

transfer(address to, uint value, bytes data)

Y dado que ERC223 es compatible con versiones anteriores de ERC20, no se romperá el contrato.

Una función de ejemplo puede ser como

function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) {
    if (balanceOf(msg.sender) < _value) throw;
    balances[msg.sender] = safeSub(balanceOf(msg.sender), _value);
    balances[_to] = safeAdd(balanceOf(_to), _value);
    ContractReceiver reciever = ContractReceiver(_to);
    reciever.tokenFallback(msg.sender, _value, _data);
    Transfer(msg.sender, _to, _value, _data);
    StateChanged(true,"Transfer to contract successful");
    return true;
}

Aquí hay 3 enfoques que podría usar:

  1. En su primer contrato (contrato A), podría agregar un código que luego de una transferencia a un contrato aprobado (B), podría hacer una llamada delegada al contrato (B) para hacer algo, y podría pasar cualquier información que tenga del contrato UNA.

  2. Podría crear una dApp que escuche el evento Transfer en el contrato A y luego realice una solicitud de transacción al contrato B para hacer algo.

  3. Podría hacer algo similar al n.° 2, excepto escuchar el evento Aprobado en A y luego llamar a la transferencia en A usted mismo para asegurarse de transferir los tokens a cualquier dirección que desee y también hacer una llamada a B para realizar la función que desee. ahi tambien.

No sé.

Intenté responder una pregunta similar en un sitio similar: https://delegatecall.com/questions/smart-contract-accepting-tokens-instead-of-ether-as-payment-4ca5abce-0037-4bd6-a1ae-26ef1658bd0e# estaba-pensando-en-aceptar-dai-stablecoin-vinculada-a-1-pero--b8087a40-5a59-4f7a-a1a5-a7c7d1048b86

Lo que haría (hace seis meses no podía implementar mi propio ERC20 o ICO) es ejecutar una aplicación web heredada web3.jsy escuchar Transfereventos (parte del estándar ERC20) y activar alguna acción en el contrato inteligente deseado...

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación. - De la revisión
sugirió una alternativa. Proporciona respuesta a la pregunta. "Aceptar un token ERC20 como pago", o en realidad... Sí, debería leer el cuerpo de la pregunta.