Created
December 13, 2016 09:32
-
-
Save tomconte/4edb83cf505f1e7faf172b9252fff9bf to your computer and use it in GitHub Desktop.
Compiling and deploying an Ethereum Smart Contract, using solc and web3.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
}); | |
} |
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)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I've changed the code a little bit, seems we need to use 'Contract'' instead of 'contract' while instance generation.
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