Error "no existe" usando web3.eth.personal.sign

En Error usando web3.eth.personal.sign , se resolvió el problema con la cantidad de argumentos. Pero ahora que puedo intentar la llamada real, recibo un error de "no existe".

console.log("Calling personal.sign");
this.web3.eth.personal.sign(this.bottleDataToSign, this.addressProdFrom, this.passwordProd)
  .then((sig)=>{
    console.log("sig="+sig);

Consola:

Calling personal.sign
ERROR
Error: Uncaught (in promise): Error: Returned error: The method personal_sign does not exist/is not available ErrorResponse onreadystatechange wrapFn onInvokeTask runTask invokeTask invokeTask globalZoneAwareCallback

En node_modules/web3-eth-personal/src/index.js, parece que "sign" en realidad llama "personal_sign":

new Method({
        name: 'sign',
        call: 'personal_sign',
        params: 3,
        inputFormatter: [formatters.inputSignFormatter, formatters.inputAddressFormatter, null]
    }),

Hurgando en otros directorios/archivos de node_modules/web3, no vi ninguna declaración para ello:

$ grep -r "personal_sign" web3*
web3-core-helpers/src/formatters.js: * Hex encodes the data passed to eth_sign and personal_sign
web3-eth-personal/src/index.js:            call: 'personal_signTransaction',
web3-eth-personal/src/index.js:            call: 'personal_sign',

Entonces, ¿esto implica que simplemente falta el código? ¿Lo estoy llamando correctamente? Todavía estoy usando el paquete npm web3: 1.0.0-beta.33, y lo usé desde un ¿ import Web3 from "web3";Algo más para probar? Gracias.

¿Tu proveedor web3 ha habilitado personalRPC?
No sé. Tengo una web3 = new Web3('http://localhost:8545'); // port# from geth's rpcportlínea para la variable web3 real, pero pensé que solo era necesaria para hablar con un nodo geth, lo cual no pensé que tuviera que hacer personal.sign. Si es necesario, ¿cómo lo haría? Gracias.
@ gkd720 ¿Qué línea de comando usas para iniciar geth?
Invoco a geth con: $ geth --identity "TestNode1" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir "~/ethereum/TestChain1" --port "30303" --nodiscover --ipcdisable --rpcapi "db,eth,net,web3" --networkid 2429 --keystore ~/Library/Ethereum/keystore consolePero, ¿por qué importa esto? Solo estoy llamando a un método de paquete web3, aún no intento emitir una transacción a través de geth; ese fue mi siguiente paso en el flujo. Gracias.
@Ayusha te importa explicar cómo??

Respuestas (1)

Después de una búsqueda más exhaustiva, ahora veo a qué se referían @Ayushya e @Ismael. Después de agregar "personal" a la lista de elementos para la opción --rcapi, puedo llamar con éxito al método eth.personal.sign. Parece que typings.d.ts todavía necesita ajustes manuales, pero supongo que es por eso que lo llaman "beta". Gracias a ambos.

actualizado: el --rcapi ahora está en desuso, usando --http.api en su lugar