Tengo un contrato ejecutándose en la red de prueba, y cada vez que necesito llamar a una función, después de abrir Geth tengo que escribir (o pegar):
primary = eth.accounts[0];
personal.unlockAccount(primary, 'mypassword');
var source = "contract FooContract {...}";
var compiled = web3.eth.compile.solidity(source);
var contract = web3.eth.contract(compiled.FooContract.info.abiDefinition);
var fooContract = contract.at("0xf00");
¿Hay alguna manera de hacer que Geth lo recuerde después de cerrarlo?
Siguiendo con sus comentarios anteriores de que está buscando un script que tome parámetros opcionales, aquí hay un script de ejemplo con parámetros de línea de comando que puede personalizar:
#!/bin/bash
# ------------------------------------------------------------------------------
# Check account balance
#
# Works on Linux and OS/X. May work on Windows with Cygwin.
#
# Usage:
# 1. Download this script to checkBalance
# 2. `chmod 700 checkBalance`
# 3. Run `geth console` in a window.
# 4. Then run this script `./checkBalance` in a separate window.
#
# Parameters:
# account Account to check the balance. Defaults to GOLEM multisig
# block Blocknumber. Defaults to "latest"
#
# Sample Usage:
# ./checkBalance
# '0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9' at 'latest' has 770001.899999999999999999 ETH
# ./checkBalance 0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9 2691189
# '0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9' at '2691189' has 820002.9 ETH
#
# History:
# * Jan 07 2017 - Version 1.0
#
# Enjoy. (c) BokkyPooBah 2016. The MIT licence.
# ------------------------------------------------------------------------------
# Leave ATTACHPARAMETER as undefined normally
# RPC
# ATTACHPARAMETER="rpc:http://localhost:8545"
# OS/X IPC
# ATTACHPARAMETER="ipc:$HOME/Library/Ethereum/geth.ipc"
# Golem multisig
ACCOUNT=${1:-"0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9"}
BLOCK=${2:-"latest"}
# echo "ACCOUNT: $ACCOUNT"
# echo "ATTACHPARAMETER: $ATTACHPARAMETER"
# Uncomment the following line and comment the next line using // while debugging this script
# geth attach $ATTACHPARAMETER << EOF
geth attach $ATTACHPARAMETER << EOF | grep "Data: " | sed "s/Data: //"
var balance=web3.fromWei(eth.getBalance("$ACCOUNT", "$BLOCK"), "ether");
console.log("Data: '$ACCOUNT' at '$BLOCK' has " + balance + " ETH");
EOF
Referencia: ¿Cómo escribir un script bash que tome argumentos de entrada opcionales?
geth attach <<EOF
y el segundo EOF
. Si, por ejemplo, quiero guardar mi saldo en una variable, enviar una transacción y luego guardar mi saldo en otra variable, ¿hay alguna forma de hacerlo?sed "s/^.*=//"
? Busqué algún documento para sed y expresiones regulares, pero no puedo llegar a una conclusión definitiva. ¿Se mantiene sólo la parte posterior =
? (Quiero decir, sé que eso es lo que hace, pero no entiendo cómo)sed "s/{from}/{to}/"
sustituye la cadena from con la cadena to. En la cadena from, ^
coincide con el comienzo de la línea, .
coincide con cualquier carácter, *
opera en el elemento anterior y coincide con cero o más del último elemento y =
coincide con =
. Entonces, el comando sustituye cualquier cosa, desde el comienzo de la línea hasta el =
carácter con una cadena en blanco. Si su línea es TEST=123
, el sed
comando la cambiará a 123
.?
después =
para poder hacer contract={...a=b...}
y aún obtener todo, no solo la parte después de la última =
. No sé si hay mejores lugares para almacenar contratos que en el archivo de configuración (mi proyecto gira en torno a un solo contrato, tal vez tenga menos sentido con diferentes proyectos)Lo estás haciendo al revés.
Lo que desea hacer es tener geth ejecutándose como un demonio y luego su JavaScript se conecta a Geth a través del protocolo web3.js / JSON-RPC. (Es el mismo objeto web3 expuesto que está disponible en el indicador geth). Puede ejecutar scripts de JavaScript usando node
el comando.
A continuación se muestra un ejemplo. Puede encontrar ejemplos en esta publicación de blog tutorial: Programación de transacciones de contratos inteligentes de Ethereum en JavaScript .
Cree un package.json
para su proyecto para instalar web3:
npm install --save web3
Primero inicie geth en modo testnet/mining con el archivo de génesis de Ropsten testnet :
geth --rpc --rpcapi "db,eth,net,web3,personal" --verbosity 3 --rpccorsdomain "*" --cache 384 --datadir /home/ubuntu/.ethereum/ropsten --networkid 3 --mine
Luego ejecute un archivo JavaScript que se conecte a su geth y realice las llamadas necesarias (no es el mismo ejemplo que en su pregunta, pero debería tener una idea):
/* Call the contract using web3-
*
* To run:
*
* nvm use 7.2.1
* ./node_modules/babel-cli/bin/babel-node.js --presets es2015 ./tests/callcontract.js
*
*/
import fs from "fs";
import Web3 from 'web3';
let web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
// Fetch ABI - see blog post how to generate contracts.json
let source = fs.readFileSync("contracts/contracts.json");
let contracts = JSON.parse(source)["contracts"];
let abi = JSON.parse(contracts.SampleContract.abi);
// Get a proxy on our Ropsten contract
let SampleContract = web3.eth.contract(abi);
let contract = SampleContract.at('0xe0b79b3d705cd09435475904bf54520929eae4e8');
// Perform a transaction using ETH from the geth coinbase account
web3.personal.unlockAccount(web3.eth.coinbase, "");
// Set the account from where we perform out contract transactions
web3.eth.defaultAccount = web3.eth.coinbase;
let tx = contract.setValue(3000, {gas: 200000});
console.log("Our tx is https://testnet.etherscan.io/tx/" + tx);
require
en lugar de import
, y parece let
que no es compatible.node callcontract.js
. ¿Cuáles son los beneficios de hacer eso? Estoy usando var Web3 = require('web3');
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
var en lugar de let y funciona de maravilla. No lo tomes a mal, pero no quiero usar cosas que no entiendo. (Si puedo hacerlo con babel-cli, lo haré a menos que me diga por qué debería usarlo)while(eth.pendingTransaction[0]!=undefined) {admin.sleepBlock(1);}
. No puedo ir admin
a trabajar, pero parece que mis transacciones no se cancelan.
privacidadisahumanright.eth
Cabra teletransportadora
Cabra teletransportadora
multipleCommand
secuencia de comandos con un argumento, y soltar algunos$1
y$2
en los comandos, eso debería funcionar. Voy a actualizar mi pregunta anterior sobre argumentos con sus soluciones, es mucho mejor.