¿Cómo pasar valor al llamar a la función de contrato?

Actualmente en Truffle estoy pasando el valor manualmente, pero ¿cómo hago que este valor sea algo que necesito? Por ejemplo cuando quiero hacer una transacción en MetaMask, aparece una transacción solicitando valor x y la apruebo. ¿Cómo solicitaría valor al usuario? Quiero implementar y probar este contrato en Rinkeby.

TokenSaleContract.at(this.props.address)
        .then(instance => {
            contractInstance = instance;
            contractInstance.buyToken(2, {value: 507087936329796580})
            return c.numberOfTokensFromAddress('0x...')
        })
        .then(numberOfTokens => {
            console.log(`You (0x...) now have ${numberOfTokens}`);
        })
Cuando dices "en Truffle", quieres decir que estás usando la consola Truffle, ¿verdad?
Quiero decir que estoy usando trufa-contrato

Respuestas (1)

Puede usar una biblioteca como readline-syncpara obtener la entrada del usuario ( fuente ):

var readlineSync = require('readline-sync');

// Wait for user's response. 
var userName = readlineSync.question('May I have your name? ');
console.log('Hi ' + userName + '!');

Nota: No olvide instalar primero el paquete, por ejemplo yarn add readline-sync.

Estoy tratando de no requerir que el usuario ingrese los datos, sino que se le envíe la cantidad del valor al usuario
¿A qué 'valor' te refieres? Puedes enviar ether usando web3.eth.sendTransaction.
Estoy hablando de esta línea. contractInstance.buyToken(2, {value: 507087936329796580}Quiero que el valor pase al comprador.