Cómo implementar un contrato inteligente

Estoy estudiando Smart Contract con solidez. No puedo entender algo, así que quiero obtener el consejo de un experto.

Inicié sesión en el intercambio de Upbit para intercambiar el token del golem. El intercambio de Upbit me dio una dirección de depósito de fichas. Esa dirección era una dirección de contrato ( 0x27c6769A0549fa03DafEd89d555C7E71B21Dd35E )

Después de depositar la ficha del golem, sucedió algo que no pude entender. No hay éter para pagar el gas en la dirección de depósito, pero la ficha del golem se transfirió a otra dirección.

P1] Para transferir tokens sin Ether, ¿cómo implementar un contrato inteligente?

P2] Si sabe dónde encontrar el código de muestra para hacer referencia, me gustaría saber la URL

Respuestas (1)

Q1

No hay forma de transferir nada sin gas (éter). Además, como los contratos no pueden hacer nada 'por sí solos', pero alguien tiene que inicializar cada acción, lo más probable es que esto sea lo que sucedió:

1) Transfiere tokens al contrato

2) El contrato los transfiere hacia algún lugar

3) Pagas por ambas transferencias

Q2

Para el código, no tengo una versión implementada para mostrarle, pero podría ser algo como esto:

pragma solidity ^0.4.22;

contract GolemToken {
    function transfer(address to, uint tokens) public returns (bool success);
}

// 0x27c6769a0549fa03dafed89d555c7e71b21dd35e
contract ExchangeContract {

    function transfer(address to, uint tokens) public returns (bool success) {
        address golemTokenContract = 0x00;
        address forwardAddress = 0x01;
        GolemToken gt = GolemToken(golemTokenContract);
        // Instead of transferring to 'to', transfer elsewhere
        gt.transfer(forwardAddress, tokens);
    }
}
¿Sabes la respuesta al problema vinculado? ethereum.stackexchange.com/questions/49830/token-transfer-fails
Encontré mi error. La implementación del contrato de token fue incorrecta. Funciona bien. Muchas gracias.