经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 区块链 » 查看文章
区块链学习(四)truffle部署编译智能合约以太坊私有链
来源:cnblogs  作者:Milo196  时间:2019/7/1 0:14:18  对本文有异议

前面我们介绍了以太坊私有链的搭建以及多节点私有链网络,这次我们介绍如何使用truffle框架来部署编译智能合约到我们之前搭建的私有链网络中。

搭建环境及需使用的工具:ubuntu18.04  Truffle v5.0.18  geth 1.8.27  Node 

solc v10.16.0  0.5.8+commit.23d335f2.Linux.g++

在我们部署一个简单的合约之前,我们先介绍一些相关的知识。

一、geth 启动节点参数介绍

geth 当中有许多指令,因为之后私有链节点启动需要设置一些参数,我们重点介绍这些:

参数 参数详解
datadir 指明当前区块链私钥和网络数据存放的位置
rpc  开启http-rpc服务,可以进行智能合约的部署和调试
rpcaddr 指定http-rpc服务监听地址,默认为"localhost"
rpcport 指定http-rpc服务监听端口,默认为8545
rpccorsdomain 表示任何链接都可以连接到此节点
rpcapi 设置允许连接的rpc的客户端,一般为db,eth,net,web3
nodiscover 关闭自动连接节点,但是可以手动添加节点,在搭建私有链的时候,为避免其他节点连入私有链,可以使用该命令
maxpeers 设置允许最大连节点数,默认25
networkid 指定以太坊网络id,共有链为1,测试链为3,默认启动1
port 指定以太坊网络监听端口,默认为30303
mine 开启挖矿,默认为cpu挖矿
minerthreads 挖矿占用cpu线程数,默认为4,现命名为miner.threads
etherbase 指定矿工账号
console 启动命令行模式,可以在geth中执行命令

我们可以在终端输入geth -v来查看geth的全部指令

  1. 1 milo@milo-K46CB:~$ geth -v
  2. 2 Incorrect Usage. flag provided but not defined: -v
  3. 3
  4. 4 NAME:
  5. 5 geth - the go-ethereum command line interface
  6. 6
  7. 7 Copyright 2013-2018 The go-ethereum Authors
  8. 8
  9. 9 USAGE:
  10. 10 geth [options] command [command options] [arguments...]
  11. 11
  12. 12 VERSION:
  13. 13 1.8.27-stable-4bcc0a37
  14. 14
  15. 15 COMMANDS:
  16. 16 account Manage accounts
  17. 17 attach Start an interactive JavaScript environment (connect to node)
  18. 18 bug opens a window to report a bug on the geth repo
  19. 19 console Start an interactive JavaScript environment
  20. 20 copydb Create a local chain from a target chaindata folder
  21. 21 dump Dump a specific block from storage
  22. 22 dumpconfig Show configuration values
  23. 23 export Export blockchain into file
  24. 24 export-preimages Export the preimage database into an RLP stream
  25. 25 import Import a blockchain file
  26. 26 import-preimages Import the preimage database from an RLP stream
  27. 27 init Bootstrap and initialize a new genesis block
  28. 28 js Execute the specified JavaScript files
  29. 29 license Display license information
  30. 30 makecache Generate ethash verification cache (for testing)
  31. 31 makedag Generate ethash mining DAG (for testing)
  32. 32 monitor Monitor and visualize node metrics
  33. 33 removedb Remove blockchain and state databases
  34. 34 version Print version numbers
  35. 35 wallet Manage Ethereum presale wallets
  36. 36 help, h Shows a list of commands or help for one command
  37. 37
  38. 38 ETHEREUM OPTIONS:
  39. 39 --config value TOML configuration file
  40. 40 --datadir "/home/milo/.ethereum" Data directory for the databases and keystore
  41. 41 --keystore Directory for the keystore (default = inside the datadir)
  42. 42 --nousb Disables monitoring for and managing USB hardware wallets
  43. 43 --networkid value Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby) (default: 1)
  44. 44 --testnet Ropsten network: pre-configured proof-of-work test network
  45. 45 --rinkeby Rinkeby network: pre-configured proof-of-authority test network
  46. 46 --goerli Görli network: pre-configured proof-of-authority test network
  47. 47 --syncmode "fast" Blockchain sync mode ("fast", "full", or "light")
  48. 48 --gcmode value Blockchain garbage collection mode ("full", "archive") (default: "full")
  49. 49 --ethstats value Reporting URL of a ethstats service (nodename:secret@host:port)
  50. 50 --identity value Custom node name
  51. 51 --lightserv value Maximum percentage of time allowed for serving LES requests (0-90) (default: 0)
  52. 52 --lightpeers value Maximum number of LES client peers (default: 100)
  53. 53 --lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
  54. 54 --whitelist value Comma separated block number-to-hash mappings to enforce (<number>=<hash>)
  55. 55
  56. 56 DEVELOPER CHAIN OPTIONS:
  57. 57 --dev Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled
  58. 58 --dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)
  59. 59
  60. 60 ETHASH OPTIONS:
  61. 61 --ethash.cachedir Directory to store the ethash verification caches (default = inside the datadir)
  62. 62 --ethash.cachesinmem value Number of recent ethash caches to keep in memory (16MB each) (default: 2)
  63. 63 --ethash.cachesondisk value Number of recent ethash caches to keep on disk (16MB each) (default: 3)
  64. 64 --ethash.dagdir "/home/milo/.ethash" Directory to store the ethash mining DAGs (default = inside home folder)
  65. 65 --ethash.dagsinmem value Number of recent ethash mining DAGs to keep in memory (1+GB each) (default: 1)
  66. 66 --ethash.dagsondisk value Number of recent ethash mining DAGs to keep on disk (1+GB each) (default: 2)
  67. 67
  68. 68 TRANSACTION POOL OPTIONS:
  69. 69 --txpool.locals value Comma separated accounts to treat as locals (no flush, priority inclusion)
  70. 70 --txpool.nolocals Disables price exemptions for locally submitted transactions
  71. 71 --txpool.journal value Disk journal for local transaction to survive node restarts (default: "transactions.rlp")
  72. 72 --txpool.rejournal value Time interval to regenerate the local transaction journal (default: 1h0m0s)
  73. 73 --txpool.pricelimit value Minimum gas price limit to enforce for acceptance into the pool (default: 1)
  74. 74 --txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10)
  75. 75 --txpool.accountslots value Minimum number of executable transaction slots guaranteed per account (default: 16)
  76. 76 --txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 4096)
  77. 77 --txpool.accountqueue value Maximum number of non-executable transaction slots permitted per account (default: 64)
  78. 78 --txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 1024)
  79. 79 --txpool.lifetime value Maximum amount of time non-executable transaction are queued (default: 3h0m0s)
  80. 80
  81. 81 PERFORMANCE TUNING OPTIONS:
  82. 82 --cache value Megabytes of memory allocated to internal caching (default: 1024)
  83. 83 --cache.database value Percentage of cache memory allowance to use for database io (default: 50)
  84. 84 --cache.trie value Percentage of cache memory allowance to use for trie caching (default: 25)
  85. 85 --cache.gc value Percentage of cache memory allowance to use for trie pruning (default: 25)
  86. 86 --trie-cache-gens value Number of trie node generations to keep in memory (default: 120)
  87. 87
  88. 88 ACCOUNT OPTIONS:
  89. 89 --unlock value Comma separated list of accounts to unlock
  90. 90 --password value Password file to use for non-interactive password input
  91. 91
  92. 92 API AND CONSOLE OPTIONS:
  93. 93 --rpc Enable the HTTP-RPC server
  94. 94 --rpcaddr value HTTP-RPC server listening interface (default: "localhost")
  95. 95 --rpcport value HTTP-RPC server listening port (default: 8545)
  96. 96 --rpcapi value API's offered over the HTTP-RPC interface
  97. 97 --rpc.gascap value Sets a cap on gas that can be used in eth_call/estimateGas (default: 0)
  98. 98 --ws Enable the WS-RPC server
  99. 99 --wsaddr value WS-RPC server listening interface (default: "localhost")
  100. 100 --wsport value WS-RPC server listening port (default: 8546)
  101. 101 --wsapi value API's offered over the WS-RPC interface
  102. 102 --wsorigins value Origins from which to accept websockets requests
  103. 103 --ipcdisable Disable the IPC-RPC server
  104. 104 --ipcpath Filename for IPC socket/pipe within the datadir (explicit paths escape it)
  105. 105 --rpccorsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced)
  106. 106 --rpcvhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost")
  107. 107 --jspath loadScript JavaScript root path for loadScript (default: ".")
  108. 108 --exec value Execute JavaScript statement
  109. 109 --preload value Comma separated list of JavaScript files to preload into the console
  110. 110
  111. 111 NETWORKING OPTIONS:
  112. 112 --bootnodes value Comma separated enode URLs for P2P discovery bootstrap (set v4+v5 instead for light servers)
  113. 113 --bootnodesv4 value Comma separated enode URLs for P2P v4 discovery bootstrap (light server, full nodes)
  114. 114 --bootnodesv5 value Comma separated enode URLs for P2P v5 discovery bootstrap (light server, light nodes)
  115. 115 --port value Network listening port (default: 30303)
  116. 116 --maxpeers value Maximum number of network peers (network disabled if set to 0) (default: 25)
  117. 117 --maxpendpeers value Maximum number of pending connection attempts (defaults used if set to 0) (default: 0)
  118. 118 --nat value NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>) (default: "any")
  119. 119 --nodiscover Disables the peer discovery mechanism (manual peer addition)
  120. 120 --v5disc Enables the experimental RLPx V5 (Topic Discovery) mechanism
  121. 121 --netrestrict value Restricts network communication to the given IP networks (CIDR masks)
  122. 122 --nodekey value P2P node key file
  123. 123 --nodekeyhex value P2P node key as hex (for testing)
  124. 124
  125. 125 MINER OPTIONS:
  126. 126 --mine Enable mining
  127. 127 --miner.threads value Number of CPU threads to use for mining (default: 0)
  128. 128 --miner.notify value Comma separated HTTP URL list to notify of new work packages
  129. 129 --miner.gasprice "1000000000" Minimum gas price for mining a transaction
  130. 130 --miner.gastarget value Target gas floor for mined blocks (default: 8000000)
  131. 131 --miner.gaslimit value Target gas ceiling for mined blocks (default: 8000000)
  132. 132 --miner.etherbase value Public address for block mining rewards (default = first account) (default: "0")
  133. 133 --miner.extradata value Block extra data set by the miner (default = client version)
  134. 134 --miner.recommit value Time interval to recreate the block being mined (default: 3s)
  135. 135 --miner.noverify Disable remote sealing verification
  136. 136
  137. 137 GAS PRICE ORACLE OPTIONS:
  138. 138 --gpoblocks value Number of recent blocks to check for gas prices (default: 20)
  139. 139 --gpopercentile value Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60)
  140. 140
  141. 141 VIRTUAL MACHINE OPTIONS:
  142. 142 --vmdebug Record information useful for VM and contract debugging
  143. 143 --vm.evm value External EVM configuration (default = built-in interpreter)
  144. 144 --vm.ewasm value External ewasm configuration (default = built-in interpreter)
  145. 145
  146. 146 LOGGING AND DEBUGGING OPTIONS:
  147. 147 --fakepow Disables proof-of-work verification
  148. 148 --nocompaction Disables db compaction after import
  149. 149 --verbosity value Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
  150. 150 --vmodule value Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)
  151. 151 --backtrace value Request a stack trace at a specific logging statement (e.g. "block.go:271")
  152. 152 --debug Prepends log messages with call-site location (file and line number)
  153. 153 --pprof Enable the pprof HTTP server
  154. 154 --pprofaddr value pprof HTTP server listening interface (default: "127.0.0.1")
  155. 155 --pprofport value pprof HTTP server listening port (default: 6060)
  156. 156 --memprofilerate value Turn on memory profiling with the given rate (default: 524288)
  157. 157 --blockprofilerate value Turn on block profiling with the given rate (default: 0)
  158. 158 --cpuprofile value Write CPU profile to the given file
  159. 159 --trace value Write execution trace to the given file
  160. 160
  161. 161 METRICS AND STATS OPTIONS:
  162. 162 --metrics Enable metrics collection and reporting
  163. 163 --metrics.influxdb Enable metrics export/push to an external InfluxDB database
  164. 164 --metrics.influxdb.endpoint value InfluxDB API endpoint to report metrics to (default: "http://localhost:8086")
  165. 165 --metrics.influxdb.database value InfluxDB database name to push reported metrics to (default: "geth")
  166. 166 --metrics.influxdb.username value Username to authorize access to the database (default: "test")
  167. 167 --metrics.influxdb.password value Password to authorize access to the database (default: "test")
  168. 168 --metrics.influxdb.tags value Comma-separated InfluxDB tags (key/values) attached to all measurements (default: "host=localhost")
  169. 169
  170. 170 WHISPER (EXPERIMENTAL) OPTIONS:
  171. 171 --shh Enable Whisper
  172. 172 --shh.maxmessagesize value Max message size accepted (default: 1048576)
  173. 173 --shh.pow value Minimum POW accepted (default: 0.2)
  174. 174 --shh.restrict-light Restrict connection between two whisper light clients
  175. 175
  176. 176 DEPRECATED OPTIONS:
  177. 177 --minerthreads value Number of CPU threads to use for mining (deprecated, use --miner.threads) (default: 0)
  178. 178 --targetgaslimit value Target gas floor for mined blocks (deprecated, use --miner.gastarget) (default: 8000000)
  179. 179 --gasprice "1000000000" Minimum gas price for mining a transaction (deprecated, use --miner.gasprice)
  180. 180 --etherbase value Public address for block mining rewards (default = first account, deprecated, use --miner.etherbase) (default: "0")
  181. 181 --extradata value Block extra data set by the miner (default = client version, deprecated, use --miner.extradata)
  182. 182
  183. 183 MISC OPTIONS:
  184. 184 --override.constantinople value Manually specify constantinople fork-block, overriding the bundled setting (default: 0)
  185. 185 --help, -h show help
  186. 186
  187. 187
  188. 188 COPYRIGHT:
  189. 189 Copyright 2013-2018 The go-ethereum Authors

二、truffle框架介绍

终端输入truffle -v

  1. 1 milo@milo-K46CB:~$ truffle -v
  2. 2 Truffle v5.0.18 - a development framework for Ethereum
  3. 3
  4. 4 Usage: truffle <command> [options]
  5. 5
  6. 6 Commands:
  7. 7 build Execute build pipeline (if configuration present)
  8. 8 compile Compile contract source files
  9. 9 config Set user-level configuration options
  10. 10 console Run a console with contract abstractions and commands available
  11. 11 create Helper to create new contracts, migrations and tests
  12. 12 debug Interactively debug any transaction on the blockchain (experimental)
  13. 13 deploy (alias for migrate)
  14. 14 develop Open a console with a local development blockchain
  15. 15 exec Execute a JS module within this Truffle environment
  16. 16 help List all commands or provide information about a specific command
  17. 17 init Initialize new and empty Ethereum project
  18. 18 install Install a package from the Ethereum Package Registry
  19. 19 migrate Run migrations to deploy contracts
  20. 20 networks Show addresses for deployed contracts on each network
  21. 21 obtain Fetch and cache a specified compiler
  22. 22 opcode Print the compiled opcodes for a given contract
  23. 23 publish Publish a package to the Ethereum Package Registry
  24. 24 run Run a third-party command
  25. 25 test Run JavaScript and Solidity tests
  26. 26 unbox Download a Truffle Box, a pre-built Truffle project
  27. 27 version Show version number and exit
  28. 28 watch Watch filesystem for changes and rebuild the project automatically

truffle是一套以太坊的开发测试框架,使用solidity开发语言,类似于javascript

这里我们就不将truffle的安装了

下面进入主要内容

三、启动私有链节点

进入私有链文件夹打开一个终端,后面我们以终端1代指它,在终端1输入以下命令 

  1. 1 milo@milo-K46CB:~/private-geth$ geth --rpc --rpccorsdomain "*" --datadir ./data/00 --port 61910 --rpcport 8545 --rpcapi "db,eth,net,web3" --networkid 100 console

需要注意的是我们这里的启动节点命令与之前我们搭建的节点启动命令略有不同,其中:

--rpc是开启http-rpc服务,可以进行智能合约的部署和调试

--rpccorsdomain "*"表示任何链接都可以连接到此节点

--port 指定以太坊网络监听端口,默认为30303,这里随意选一个就好

--rpcport是指定http-rpc服务监听端口,默认为8545,但也可以自己更改,这里我们就用8545

(敲黑板,这里有个重点,我们这里设置的rpcport要与之后truffle-config.js文件中的port相对应)

--rpcapi是设置允许连接的rpc的客户端,一般为db,eth,net,web3,貌似这里也可以不用加

四、truffle合约编译部署

1、首先我们创建一个项目文件夹truffle_Project,然后打开一个新的终端,之后我们我们用终端2代之它,在终端2输入以下命令创建文件夹并初始化truffle环境

  1. 1 milo@milo-K46CB:~$ mkdir truffleProject
  2. 2 milo@milo-K46CB:~$ cd truffleProject/
  3. 3 milo@milo-K46CB:~/truffleProject$ truffle init

输出以下结果:

  1. 1 ? Preparing to download
  2. 2 ? Downloading
  3. 3 ? Cleaning up temporary files
  4. 4 ? Setting up box
  5. 5
  6. 6 Unbox successful. Sweet!
  7. 7
  8. 8 Commands:
  9. 9
  10. 10 Compile: truffle compile
  11. 11 Migrate: truffle migrate
  12. 12 Test contracts: truffle test

经过初始化后,我们创建的truffle_Project文件夹下会多出contracts,migrations,test三个文件夹和treffle_config.js文件

2、编写合约

进入到contracts文件夹中,我们建立一个简单的智能合约Test.sol,在端口2输入以下命令

  1. 1 milo@milo-K46CB:~/truffleProject$ cd contracts/
  2. 2 milo@milo-K46CB:~/truffleProject/contracts$ vim Test.sol

 输入以上命令出现以下结果:

输入以下内容到文件内,wq保存退出

  1. pragma solidity ^0.5.0;
  2. contract Test {
  3. function multiply(uint a) pure public returns(uint d) {
  4. return a * 7;
  5. }
  6. }

3、修改配置

终端输入指令进入migrateions文件中,创建2_deploy_contracys.js文件,具体操作如下:

  1. 1 milo@milo-K46CB:~/truffleProgect$ cd migrations/
  2. 2 milo@milo-K46CB:~/truffleProgect/migrations$ vim 2_deploy_contracys.js

输入以下内容:

  1. 1 var Test = artifacts.require("./Test.sol");
  2. 2
  3. 3 module.exports = function(deployer) {
  4. 4 deployer.deploy(Test);
  5. 5 };

之后我们在回到trifflr_Project文件夹,修改truffle-config.js文件,如下

  1. 1 milo@milo-K46CB:~/truffleProgect$ vim truffle-config.js
  1. 1 networks: {
  2. 2 live: {
  3. 3 host: "localhost", //本地地址,因为是在本机上建立的节点
  4. 4 port: 8545, //Ethereum的rpc监听的端口号,默认是8545
  5. 5 network_id: 100 // 自定义网络号
  6. 6 }

此处的port要与启动节点参数rpcport相同

4、编译

输入以下指令进行合约编译 

  1. milo@milo-K46CB:~/truffleProject$ truffle compile

编译成功输出以下结果:

  1. 1 Compiling your contracts...
  2. 2 ===========================
  3. 3 > Compiling ./contracts/Test.sol
  4. 4 > Artifacts written to /home/milo/truffleProgect/build/contracts
  5. 5 > Compiled successfully using:
  6. 6 - solc: 0.5.0+commit.1d4f565a.Emscripten.clang

这个时候我们就准备将合约部署到区块链中了,之前我们已经在终端1开启了私有链节点,在部署前,我们最好先开始挖矿,因为有有可能挖出矿的时间太长超过部署时间导致部署失败,在终端1输入:

  1. 1 > miner.start(3)
  2. 2 INFO [06-30|14:41:52.571] Updated mining threads threads=3
  3. 3 INFO [06-30|14:41:52.571] Transaction pool price threshold updated price=1000000000
  4. 4 INFO [06-30|14:56:17.263] Commit new mining work number=57 sealhash=8af97d82bbb5 uncles=0 txs=1 gas=284908 fees=0.00569816 elapsed=29.717ms

 然后我们在到终端2输入以下命令开始部署:

  1. 1 milo@milo-K46CB:~/truffleProject$ truffle migrate --network live

此时终端1会出现:

  1. 1 INFO [06-30|14:56:15.134] Submitted contract creation
    fullhash=0xf429d7cb5f31287af7328ad699c883ddabc346c03d778dbd3adc100de4d53967 contract=0x66C64c5dcacE473aD26497781df1E63d6Dd95688

输入部署命令后,当挖到一个矿时,成功时会出现以下结果:

  1. 1 Compiling your contracts...
  2. 2 ===========================
  3. 3 > Everything is up to date, there is nothing to compile.
  4. 4
  5. 5
  6. 6 Starting migrations...
  7. 7 ======================
  8. 8 > Network name: 'live'
  9. 9 > Network id: 100
  10. 10 > Block gas limit: 0xf25e94c2
  11. 11
  12. 12
  13. 13 1_initial_migration.js
  14. 14 ======================
  15. 15
  16. 16 Deploying 'Migrations'
  17. 17 ----------------------
  18. 18 > transaction hash: 0xf429d7cb5f31287af7328ad699c883ddabc346c03d778dbd3adc100de4d53967
  19. 19 > Blocks: 1 Seconds: 554
  20. 20 > contract address: 0x66C64c5dcacE473aD26497781df1E63d6Dd95688
  21. 21 > block number: 57
  22. 22 > block timestamp: 1561877762
  23. 23 > account: 0x8830397771710ADE101f0080f0da076181Bad374
  24. 24 > balance: 284
  25. 25 > gas used: 284908
  26. 26 > gas price: 20 gwei
  27. 27 > value sent: 0 ETH
  28. 28 > total cost: 0.00569816 ETH
  29. 29
  30. 30
  31. 31 ? Saving migration to chain.

需要注意的是这个时候我们需要继续挖矿才能往下进行,只有挖到新的区块才能将合约部署到区块中

终端1:

  1. 1 INFO [06-30|14:56:17.263] Commit new mining work number=57 sealhash=8af97d82bbb5 uncles=0 txs=1 gas=284908 fees=0.00569816 elapsed=29.717ms
  2. 2 INFO [06-30|15:05:26.447] Successfully sealed new block number=57 sealhash=8af97d82bbb5 hash=f756993cd3f8 elapsed=9m9.184s
  3. 3 INFO [06-30|15:05:26.645] ?? block reached canonical chain number=50 hash=e1bd7866cb22
  4. 4 INFO [06-30|15:05:26.659] ?? mined potential block number=57 hash=f756993cd3f8
  5. 5
  6. 6 INFO [06-30|15:35:36.018] Commit new mining work number=60 sealhash=2c8cb86beaab uncles=0 txs=1 gas=106241 fees=0.00212482 elapsed=24.778ms
  7. 7 INFO [06-30|15:35:36.198] Successfully sealed new block number=60 sealhash=2c8cb86beaab hash=fc8f2ec7e0ad elapsed=180.515ms
  8. 8 INFO [06-30|15:35:36.198] ?? block reached canonical chain number=53 hash=88967f8f12f8
  9. 9 INFO [06-30|15:35:36.198] ?? mined potential block number=60 hash=fc8f2ec7e0ad
  10. 10 INFO [06-30|15:35:36.199] Commit new mining work number=61 sealhash=4ab3e8675cc8 uncles=0 txs=0 gas=0 fees=0 elapsed=267.307µs
  11. 11 INFO [06-30|15:35:36.487] Successfully sealed new block number=61 sealhash=4ab3e8675cc8 hash=fe871e560170 elapsed=288.572ms
  12. 12 INFO [06-30|15:35:36.487] ?? block reached canonical chain number=54 hash=c1945722223c
  13. 13 INFO [06-30|15:35:36.487] ?? mined potential block number=61 hash=fe871e560170
  14. 14 INFO [06-30|15:35:36.488] Commit new mining work number=62 sealhash=314d241b4ece uncles=0 txs=0 gas=0 fees=0 elapsed=165.646µs
  15. 15 INFO [06-30|15:35:36.772] Successfully sealed new block number=62 sealhash=314d241b4ece hash=052003b1004c elapsed=284.138ms

终端2:

  1. 1 ======================
  2. 2
  3. 3 Deploying 'Migrations'
  4. 4 ----------------------
  5. 5 > transaction hash: 0x39a329ee6f0afa49a9a2ebe20c3c8546ac51d081e869ccca1ad34e3e1bc43457
  6. 6 > Blocks: 1 Seconds: 386
  7. 7 > contract address: 0xff6cbFDEEDBA3E0f3714bBA7267658357C351D28
  8. 8 > block number: 58
  9. 9 > block timestamp: 1561879271
  10. 10 > account: 0x8830397771710ADE101f0080f0da076181Bad374
  11. 11 > balance: 289
  12. 12 > gas used: 284908
  13. 13 > gas price: 20 gwei
  14. 14 > value sent: 0 ETH
  15. 15 > total cost: 0.00569816 ETH
  16. 16
  17. 17
  18. 18 > Saving migration to chain.
  19. 19 > Saving artifacts
  20. 20 -------------------------------------
  21. 21 > Total cost: 0.00569816 ETH
  22. 22
  23. 23
  24. 24 2_deploy_contracys.js
  25. 25 =====================
  26. 26
  27. 27 Deploying 'Test'
  28. 28 ----------------
  29. 29 > transaction hash: 0x803270c2ee1625c05fd55902b437d567a56618856f665ee4260dcad59b3526cd
  30. 30 > Blocks: 0 Seconds: 0
  31. 31 > contract address: 0xa12E7a68Cd8F79a0978DdD5764B943Ef9d685493
  32. 32 > block number: 60
  33. 33 > block timestamp: 1561880132
  34. 34 > account: 0x8830397771710ADE101f0080f0da076181Bad374
  35. 35 > balance: 309
  36. 36 > gas used: 106241
  37. 37 > gas price: 20 gwei
  38. 38 > value sent: 0 ETH
  39. 39 > total cost: 0.00212482 ETH
  40. 40
  41. 41
  42. 42 > Saving migration to chain.
  43. 43 > Saving artifacts
  44. 44 -------------------------------------
  45. 45 > Total cost: 0.00212482 ETH
  46. 46
  47. 47
  48. 48 Summary
  49. 49 =======
  50. 50 > Total deployments: 2
  51. 51 > Final cost: 0.00782298 ETH

五、调用合约

以上操作后,我们的简单智能合约就部署完成了

下面我们进行合约的调用

打开truffle_Project/bulid/contracts/Test.json文件,可以看到以下内容

  1. {
  2. abi: [{
  3. constant: false,
  4. inputs: [{...}],
  5. name: "multiply",
  6. outputs: [{...}],
  7. payable: false,
  8. type: "function"
  9. }],
  10. address: "0xa12E7a68Cd8F79a0978DdD5764B943Ef9d685493",
  11. transactionHash: null,
  12. allEvents: function(),
  13. multiply: function()
  14. }
  15. "compiler": {
  16. "name": "solc",
  17. "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  18. },
  19. "networks": {
  20. "100": {
  21. "events": {},
  22. "links": {},
  23. "address": "0xa12E7a68Cd8F79a0978DdD5764B943Ef9d685493",
  24. "transactionHash": "0x803270c2ee1625c05fd55902b437d567a56618856f665ee4260dcad59b3526cd"
  25. }
  26. },
  27. "schemaVersion": "3.0.9",
  28. "updatedAt": "2019-06-30T07:35:39.931Z",

将abi中的内容的内容拿出来先在线压缩,在终端1输入如下:

  1. 1 > abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]

输出:

  1. 1 [{
  2. 2 constant: false,
  3. 3 inputs: [{
  4. 4 name: "a",
  5. 5 type: "uint256"
  6. 6 }],
  7. 7 name: "multiply",
  8. 8 outputs: [{
  9. 9 name: "d",
  10. 10 type: "uint256"
  11. 11 }],
  12. 12 payable: false,
  13. 13 type: "function"
  14. 14 }]

接着在终端1输入:

  1. 1 > test=eth.contract(abi).at("0xa12E7a68Cd8F79a0978DdD5764B943Ef9d685493")

其中这个地址可以在上面的Test.json中看到

之后我们就可以调用啦,在终端1中输入:

  1. 1 > test.multiply.call(100)
  2. 2 700

可以看出成功调用了我们写的合约,到这里所有的工作就完成了

 

原文链接:http://www.cnblogs.com/Falix/p/11111445.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号