-
-
Save tomconte/4edb83cf505f1e7faf172b9252fff9bf to your computer and use it in GitHub Desktop.
const fs = require('fs'); | |
const solc = require('solc'); | |
const Web3 = require('web3'); | |
// Connect to local Ethereum node | |
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); | |
// Compile the source code | |
const input = fs.readFileSync('Token.sol'); | |
const output = solc.compile(input.toString(), 1); | |
const bytecode = output.contracts['Token'].bytecode; | |
const abi = JSON.parse(output.contracts['Token'].interface); | |
// Contract object | |
const contract = web3.eth.contract(abi); | |
// Deploy contract instance | |
const contractInstance = contract.new({ | |
data: '0x' + bytecode, | |
from: web3.eth.coinbase, | |
gas: 90000*2 | |
}, (err, res) => { | |
if (err) { | |
console.log(err); | |
return; | |
} | |
// Log the tx, you can explore status with eth.getTransaction() | |
console.log(res.transactionHash); | |
// If we have an address property, the contract was deployed | |
if (res.address) { | |
console.log('Contract address: ' + res.address); | |
// Let's test the deployed contract | |
testContract(res.address); | |
} | |
}); | |
// Quick test the contract | |
function testContract(address) { | |
// Reference to the deployed contract | |
const token = contract.at(address); | |
// Destination account for test | |
const dest_account = '0x002D61B362ead60A632c0e6B43fCff4A7a259285'; | |
// Assert initial account balance, should be 100000 | |
const balance1 = token.balances.call(web3.eth.coinbase); | |
console.log(balance1 == 1000000); | |
// Call the transfer function | |
token.transfer(dest_account, 100, {from: web3.eth.coinbase}, (err, res) => { | |
// Log transaction, in case you want to explore | |
console.log('tx: ' + res); | |
// Assert destination account balance, should be 100 | |
const balance2 = token.balances.call(dest_account); | |
console.log(balance2 == 100); | |
}); | |
} |
I've changed the code a little bit, seems we need to use 'Contract'' instead of 'contract' while instance generation.
// app.js
// Deploy contract instance
const abi = JSON.parse(output.contracts[':Token'].interface);
const contract = new web3.eth.Contract(abi, '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', {
data: '0x' + bytecode,
from: web3.eth.coinbase,
gas: 90000*2
}, (err, res) => {
if (err) {
console.log(err);
return;
}
now there is no error back.
I've referenced from https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html for the address 0x..BAe
Anyone can help me, when I use solc and build in webpack, I get error: Uncaught TypeError: Cannot read property 'prototype' of undefined
at patch (graceful-fs.js:166) and load web fail? Thank you
Hello guys,
I am facing a error : TypeError: Cannot read property 'bytecode' of undefined
occuring on line : const bytecode = output.contracts['Token'].bytecode;
@ADitya024
Change it to:
output.contracts['Token']["bytecode"];
Hi guys,
I am currently trying to adopt this source code for my school project. But may I know what is the folder structure for this project? Because I can't seemed to grasp how the code retrieve the Token.sol
(Line 9)
Hi all, I am currently having a TypeError;
...
$ node app.js
TypeError: web3.eth.contract is not a function
at Object. (/Users/foo/Developer/btc/contracts/app.js:15:27)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:974:3
--
node -v : v4.6.0
npm -v : 2.15.9
on OSX : 10.12.6 (Sierra)