Y tengo un problema con web3js en testrpc, no puedo crear y configurar una instancia de web3. Terminal dijo que web3 no está definido. (error de referencia) También cuando trato de ejecutar métodos en mi contrato, por ejemplo
var e = Mycontract.deployed();
También tengo indefinido y cuando intento
console.log(e.address);
he instalado web3js
¿Necesito instalar algo más? o reinstalar?
truffle(development)> Art.at(Art.address) TruffleContract {
constructor: { [Function: TruffleContract]
_static_methods:
{ setProvider: [Function: setProvider],
new: [Function: new],
at: [Function: at],
deployed: [Function: deployed],
defaults: [Function: defaults],
hasNetwork: [Function: hasNetwork],
isDeployed: [Function: isDeployed],
detectNetwork: [Function: detectNetwork],
setNetwork: [Function: setNetwork],
resetAddress: [Function: resetAddress],
link: [Function: link],
clone: [Function: clone],
addProp: [Function: addProp],
toJSON: [Function: toJSON] },
_properties:
{ contract_name: [Object],
abi: [Object],
network: [Function: network],
networks: [Function: networks],
address: [Object],
links: [Function: links],
events: [Function: events],
binary: [Function: binary],
unlinked_binary: [Object],
schema_version: [Function: schema_version],
updated_at: [Function: updated_at] },
_property_values: {},
_json:
{ contract_name: 'Art',
default_network: undefined,
abi: [Object],
unlinked_binary: '0x606060405234610000575b6101d9806100196000396000f300606060405263ffffffff60e060020a6000350416637183616c811461003a57806376dbd1081461008f578063faf924cf146100f4575b610000565b346100005761008d600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061011395505050505050565b005b34610000576100e2600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965061012395505050505050565b60408051918252519081900360200190f35b34610000576100e26101a7565b60408051918252519081900360200190f35b61011c81610123565b6000555b50565b60006002826000604051602001526040518082805190602001908083835b602083106101605780518252601f199092019160209182019101610141565b51815160209384036101000a600019018019909216911617905260405191909301945091925050808303816000866161da5a03f1156100005750506040515190505b919050565b600054815600a165627a7a723058205af3325408f62f5b64135ac0e2eac3d1632e79f925249e4ce52266a8f02becdc0029',
networks: [Object],
schema_version: '0.0.5',
updated_at: 1490993477853 },
setProvider: [Function: bound setProvider],
new: [Function: bound new],
at: [Function: bound at],
deployed: [Function: bound deployed],
defaults: [Function: bound defaults],
hasNetwork: [Function: bound hasNetwork],
isDeployed: [Function: bound isDeployed],
detectNetwork: [Function: bound detectNetwork],
setNetwork: [Function: bound setNetwork],
resetAddress: [Function: bound resetAddress],
link: [Function: bound link],
clone: [Function: bound clone],
addProp: [Function: bound addProp],
toJSON: [Function: bound toJSON],
web3:
Web3 {
_requestManager: [Object],
currentProvider: [Object],
eth: [Object],
db: [Object],
shh: [Object],
net: [Object],
personal: [Object],
bzz: [Object],
settings: [Object],
version: [Object],
providers: [Object],
_extend: [Object] },
class_defaults:
{ from: '0x32f2e046d626c285bf6e60002dd4761209a5d8d2',
gas: 4712388,
gasPrice: 100000000000 },
currentProvider: HttpProvider { host: 'http://localhost:8545', timeout: 0 },
network_id: '1490993444046' }, abi: [ { constant: false,
inputs: [Object],
name: 'notarize',
outputs: [],
payable: false,
type: 'function' },
{ constant: true,
inputs: [Object],
name: 'calculateProof',
outputs: [Object],
payable: false,
type: 'function' },
{ constant: true,
inputs: [],
name: 'proof',
outputs: [Object],
payable: false,
type: 'function' } ], contract: Contract {
_eth:
Eth {
_requestManager: [Object],
getBalance: [Object],
getStorageAt: [Object],
getCode: [Object],
getBlock: [Object],
getUncle: [Object],
getCompilers: [Object],
getBlockTransactionCount: [Object],
getBlockUncleCount: [Object],
getTransaction: [Object],
getTransactionFromBlock: [Object],
getTransactionReceipt: [Object],
getTransactionCount: [Object],
call: [Object],
estimateGas: [Object],
sendRawTransaction: [Object],
sendTransaction: [Object],
sign: [Object],
compile: [Object],
submitWork: [Object],
getWork: [Object],
coinbase: [Getter],
getCoinbase: [Object],
mining: [Getter],
getMining: [Object],
hashrate: [Getter],
getHashrate: [Object],
syncing: [Getter],
getSyncing: [Object],
gasPrice: [Getter],
getGasPrice: [Object],
accounts: [Getter],
getAccounts: [Object],
blockNumber: [Getter],
getBlockNumber: [Object],
protocolVersion: [Getter],
getProtocolVersion: [Object],
iban: [Object],
sendIBANTransaction: [Function: bound transfer] },
transactionHash: null,
address: '0x732e24b2de90ec2e009748a6bf2d379ed1eee072',
abi: [ [Object], [Object], [Object] ],
notarize:
{ [Function: bound ]
request: [Function: bound ],
call: [Function: bound ],
sendTransaction: [Function: bound ],
estimateGas: [Function: bound ],
getData: [Function: bound ],
string: [Circular] },
calculateProof:
{ [Function: bound ]
request: [Function: bound ],
call: [Function: bound ],
sendTransaction: [Function: bound ],
estimateGas: [Function: bound ],
getData: [Function: bound ],
string: [Circular] },
proof:
{ [Function: bound ]
request: [Function: bound ],
call: [Function: bound ],
sendTransaction: [Function: bound ],
estimateGas: [Function: bound ],
getData: [Function: bound ],
'': [Circular] },
allEvents: [Function: bound ] }, notarize: { [Function]
call: [Function],
sendTransaction: [Function],
request: [Function: bound ],
estimateGas: [Function] }, calculateProof: { [Function]
call: [Function],
sendTransaction: [Function],
request: [Function: bound ],
estimateGas: [Function] }, proof: { [Function]
call: [Function],
sendTransaction: [Function],
request: [Function: bound ],
estimateGas: [Function] }, sendTransaction: [Function], send: [Function], allEvents: [Function: bound ], address:
'0x732e24b2de90ec2e009748a6bf2d379ed1eee072', transactionHash: null
}
truffle(development)>
(To exit, press ^C again or type .exit)
truffle(development)> var e=Art.deployed
undefined
truffle(development)> console.log(e.address)
undefined
undefined'
Debe configurar web3 manualmente o usar un marco que lo haga.
Aquí está el código para hacerlo manualmente, con testrpc escuchando localhost:8545
(el valor predeterminado)
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
web3.isConnected() // should return true if it all worked.
Tenga en cuenta que web3 debe instalarse localmente (es decir, en su proyecto node_modules
) Eso me mordió cuando estaba aprendiendo cómo hacer esto.
Así funciona el contrato compilado con web3:
var source = 'contract demo {string public name = "Petros"; function changeName(string _newName){name = _newName; } }';
var compiled = web3.eth.compile.solidity(source);
var abi = compiled['<stdin>:demo'].info.abiDefinition;
Espero que te ayude.
Primero, puede verificar qué versión de truffle está usando escribiendo:
$ truffer --version
truffle se comporta de manera diferente en v2.x y v3.x, en v3.x no resuelve la deployed()
Promesa automáticamente, por lo que si desea registrar una instancia de contrato, puede hacer lo siguiente:
> var poe = Art.at(Art.address)
> assert.ok(poe.address) // "address" should be defined
> poe.notarize('Hello World') // try to call the contract function
En segundo lugar, asegúrese de que el nombre del contrato sea el mismo que el nombre del archivo del código fuente.
Espero que esto ayude.
vladimir
Mateo Schmidt
vladimir