$ sudo npm install -g truffle
【注意】先安装node.js
node.js的安装可以参考:https://blog.csdn.net/u014361775/article/details/78865582
查看truffle的版本:$ truffle version
$ truffle version
Truffle v4.1.13 (core: 4.1.13)
Solidity v0.4.24 (solc-js)
通过truffle init命令创建项目
$ truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:
Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test
创建的项目结构如下:
$ tree
.
└── demo01
├── contracts
│ └── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js
在contracts目录下新建HelloWord.sol文件,内容如下:
pragma solidity ^0.4.4;
contract HelloWorld {
function test() pure public returns (string) {
return "HelloWorld";
}
}
打开truffle的控制台:$ truffle develop
$ truffle develop
Truffle Develop started at http://127.0.0.1:9545/
Accounts:
(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57
(1) 0xf17f52151ebef6c7334fad080c5704d77216b732
(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef
(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544
(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2
(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e
(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5
(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5
(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc
(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de
Private Keys:
(0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3
(1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f
(2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1
(3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c
(4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418
(5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63
(6) 82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8
(7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7
(8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4
(9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat
⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.
Ensure you do not use it on production blockchains, or else you risk losing funds.
truffle(develop)>
进行编译truffle(develop)> compile
truffle(develop)> compile
Compiling ./contracts/HelloWorld.sol...
Compiling ./contracts/Migrations.sol...
Writing artifacts to ./build/contracts
truffle(develop)>
可以在工程目录下看到生成了一个build文件夹,里面是合约的字节码文件。
在migrations文件夹下新建2_delploy_helloworld.js文件,内容如下:
var HelloWorld = artifacts.require("./HelloWorld.sol");
module.exports = function(deployer) {
deployer.deploy(HelloWorld);
};
部署命令:truffle(develop)> migrate
如果是第二次编译,则用:truffle(develop)> migrate --reset
truffle(develop)> migrate
Using network 'develop'.
Running migration: 1_initial_migration.js
Deploying Migrations...
... 0x2a589420b8302c5a42a4ac8065eced8946bab4d5117c326f9ef2769b1f501df4
Migrations: 0x8cdaf0cd259887258bc13a92c0a6da92698644c0
Saving successful migration to network...
... 0xd7bc86d31bee32fa3988f1c1eabce403a1b5d570340a3a9cdba53a472ee8c956
Saving artifacts...
Running migration: 2_deploy_helloworld.js
Deploying HelloWorld...
... 0xd30c20c3e026487cc36b9c048226896437210725999f505c38b58b08e2541f1a
HelloWorld: 0x345ca3e014aaf5dca488057592ee47305d9b3e10
Saving successful migration to network...
... 0xf36163615f41ef7ed8f4a8f192149a0bf633fe1a2398ce001bf44c43dc7bdda0
Saving artifacts...
truffle(develop)>
truffle(develop)> let contract;
undefined
truffle(develop)> contract = HelloWorld.deployed().then(instance => contract = instance)
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],
contractName: [Object],
abi: [Object],
network: [Function: network],
networks: [Function: networks],
address: [Object],
transactionHash: [Object],
links: [Function: links],
events: [Function: events],
binary: [Function: binary],
deployedBinary: [Function: deployedBinary],
unlinked_binary: [Object],
bytecode: [Object],
deployedBytecode: [Object],
sourceMap: [Object],
deployedSourceMap: [Object],
source: [Object],
sourcePath: [Object],
legacyAST: [Object],
ast: [Object],
compiler: [Object],
schema_version: [Function: schema_version],
schemaVersion: [Function: schemaVersion],
updated_at: [Function: updated_at],
updatedAt: [Function: updatedAt] },
_property_values: {},
_json:
{ contractName: 'HelloWorld',
abi: [Array],
bytecode:
'0x608060405234801561001057600080fd5b5061013f806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f8a8fd6d14610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60606040805190810160405280600a81526020017f48656c6c6f576f726c64000000000000000000000000000000000000000000008152509050905600a165627a7a72305820c51bac699266b30d7e028f13e88bed890b5b964ed7d32031939a5424c272e4e90029',
deployedBytecode:
'0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f8a8fd6d14610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60606040805190810160405280600a81526020017f48656c6c6f576f726c64000000000000000000000000000000000000000000008152509050905600a165627a7a72305820c51bac699266b30d7e028f13e88bed890b5b964ed7d32031939a5424c272e4e90029',
sourceMap:
'25:125:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:125:0;;;;;;;',
deployedSourceMap:
'25:125:0:-;;;;;;;;;;;;;;;;;;;;;;;;51:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;51:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;88:6;113:19;;;;;;;;;;;;;;;;;;;;51:97;:::o',
source:
'pragma solidity ^0.4.4;\n\ncontract HelloWorld {\n function test() pure public returns (string) {\n \n return "HelloWorld";\n \n }\n}',
sourcePath: '/home/fc/work/truffledemo/demo01/contracts/HelloWorld.sol',
ast: [Object],
legacyAST: [Object],
compiler: [Object],
networks: [Object],
schemaVersion: '2.0.1',
updatedAt: '2018-07-06T08:10:23.913Z' },
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: [RequestManager],
currentProvider: [Provider],
eth: [Eth],
db: [DB],
shh: [Shh],
net: [Net],
personal: [Personal],
bzz: [Swarm],
settings: [Settings],
version: [Object],
providers: [Object],
_extend: [Function] },
class_defaults:
{ from: '0x627306090abab3a6e1400e9345bc60c78a8bef57',
gas: 6721975,
gasPrice: 100000000000 },
currentProvider:
HttpProvider {
host: 'http://127.0.0.1:9545/',
timeout: 0,
user: undefined,
password: undefined,
headers: undefined,
send: [Function],
sendAsync: [Function],
_alreadyWrapped: true },
network_id: '4447' },
abi:
[ { constant: true,
inputs: [],
name: 'test',
outputs: [Array],
payable: false,
stateMutability: 'pure',
type: 'function' } ],
contract:
Contract {
_eth:
Eth {
_requestManager: [RequestManager],
getBalance: [Function],
getStorageAt: [Function],
getCode: [Function],
getBlock: [Function],
getUncle: [Function],
getCompilers: [Function],
getBlockTransactionCount: [Function],
getBlockUncleCount: [Function],
getTransaction: [Function],
getTransactionFromBlock: [Function],
getTransactionReceipt: [Function],
getTransactionCount: [Function],
call: [Function],
estimateGas: [Function],
sendRawTransaction: [Function],
signTransaction: [Function],
sendTransaction: [Function],
sign: [Function],
compile: [Object],
submitWork: [Function],
getWork: [Function],
coinbase: [Getter],
getCoinbase: [Function],
mining: [Getter],
getMining: [Function],
hashrate: [Getter],
getHashrate: [Function],
syncing: [Getter],
getSyncing: [Function],
gasPrice: [Getter],
getGasPrice: [Function],
accounts: [Getter],
getAccounts: [Function],
blockNumber: [Getter],
getBlockNumber: [Function],
protocolVersion: [Getter],
getProtocolVersion: [Function],
iban: [Function],
sendIBANTransaction: [Function: bound transfer] },
transactionHash: null,
address: '0x345ca3e014aaf5dca488057592ee47305d9b3e10',
abi: [ [Object] ],
test:
{ [Function: bound ]
request: [Function: bound ],
call: [Function: bound ],
sendTransaction: [Function: bound ],
estimateGas: [Function: bound ],
getData: [Function: bound ],
'': [Circular] },
allEvents: [Function: bound ] },
test:
{ [Function]
call: [Function],
sendTransaction: [Function],
request: [Function: bound ],
estimateGas: [Function] },
sendTransaction: [Function],
send: [Function],
allEvents: [Function: bound ],
address: '0x345ca3e014aaf5dca488057592ee47305d9b3e10',
transactionHash: null }
truffle(develop)>
合约部署成功之后,调用合约:
truffle(develop)> contract.test();
'HelloWorld'
truffle(develop)>