¿Puede el token ERC20 implementar funciones de transferencias privadas?

Sé que Golem Network Token no está implementando las funciones de aprobación () permiso () y transferencia de (). Por lo tanto, GNT cumple parcialmente con el estándar ERC20.

Me gustaría ir más allá e implementar la función transfer() como private() .

De esta manera, sería imposible para los poseedores del token intercambiarlo libremente (solo sería posible usando un mecanismo personalizado, ver más abajo), pero aún sería posible ver el token en las billeteras.

El código de muestra se vería así:

contract CustomToken is ERC20 {

    public symbol = “TEST”
    public totalSupply = X;
    public balanceOf...

    //function approve() -- not implemented
    //function transferFrom() -- not implemented

    // first step: check that the caller is KYC
    function placeOrderBuy(int _amountToken, int _maxPrice ) external payable 
            returns(bool success); 

    // first step: check that the caller is KYC
    function placeOrderSell(int _amountToken, int _minPrice ) external 
            payable returns(bool success); 

    //run automatically every month, and transfer the tokens function 
    executeOrders() private returns(float newPrice);

    // triggers Transfer event 
    transfer(address _to, uint _value) private returns(bool success);
}
  1. ¿Se aceptaría esto como un ERC20 parcialmente compatible, como lo es GNT? ¿Lo aceptarían las carteras?

  2. Creo que el contrato anterior está funcionando, pero tal vez hay algunos problemas en los que no pensé. ¿Qué opinas?

  3. si ERC20 está fuera de la tabla, también podría eliminar la función de transferencia () e implementar la transferencia de token dentro de las funciones de ejecutar órdenes (), ¿verdad?

¡Gracias!

Respuestas (1)

Las herramientas que manejan/interactúan con un contrato inteligente lo hacen usando la firma codificada de las interfaces de funciones. La firma se crea a partir de la interfaz canónica de la función, por lo que

transfer(address,uint)

se vuelve canónico como

transfer(address,uint256)

y codificado como

0xa9059cbb

Agregar privateno cambia la interfaz, por lo que la codificación es la misma, por lo que las herramientas ignorarán el cambio. Debería funcionar bien.