区块链学堂(9):Geth 基本命令2

た 入场券 2022-06-02 03:21 489阅读 0赞

Ether币的基本单位

Ether币最小的单位是Wei,也是命令行默认的单位, 然后每1000个进一个单位,依次是

  • kwei (1000 Wei)
  • mwei (1000 KWei)
  • gwei (1000 mwei)
  • szabo (1000 gwei)
  • finney (1000 szabo)
  • ether (1000 finney)

简单地说就是就是1 以太币 = 1000000000000000000 Wei (这就是上一站章中为何我们转移0.01个以太币,结果却显示很长的原因)

如何进行ether 和 Wei之间的转换

Ether–> Wei:web3.toWei

  1. > web3.toWei(1)
  2. "1000000000000000000"
  3. > web3.toWei(1.3423423)
  4. "1342342300000000000"
  5. > web3.toWei(0.00034)
  6. "340000000000000"
  7. >

Wei –> Ether: web3.fromWei

  1. > web3.fromWei(10000000000000000)
  2. "0.01"
  3. > web3.fromWei(1000000000000000000)
  4. "1"
  5. >

一个以太币各单位之间的转换工具

http://ether.fund/tool/converter

使用很简单,输入各种单位,就可以自动得到各种转换结果,例如输入0.01ether 可以得到多少Wei, 多少finney等。

import_geth_command2_03.png

开始挖矿 & 停止挖矿

  1. > miner.start() //开始挖矿
  2. true
  3. > miner.stop() //停止挖矿
  4. true
  5. >

部署合约

注意合约部署的时候,以太坊的私有链必须处在挖矿进行的状态,否则合约部署将不会生效

  • 我们在命令行中,首先unlock(eth.accounts[0]),因为部署合约需要消耗gas,也就是以太币。而之前说过由于保护机制,不解锁账户,是不会允许任何以太币流出的。

    personal.unlockAccount(acc0)
    Unlock account 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
    Passphrase:
    true

  • 然后我们复制黏贴下面代码到geth 命令行中。

  1. var a_demotypesContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"f","outputs":[{"name":"b","type":"uint256"}],"payable":false,"type":"function"}]);
  2. var a_demotypes = a_demotypesContract.new(
  3. {
  4. from: web3.eth.accounts[0],
  5. data: '0x6060604052341561000c57fe5b5b60ab8061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b3de648b14603a575bfe5b3415604157fe5b60556004808035906020019091905050606b565b6040518082815260200191505060405180910390f35b600060006008830290508091505b509190505600a165627a7a7230582010decdc0b0a43b565814fe904eae2544665457d6353c7d906fc2c43c81c867e40029',
  6. gas: '4700000'
  7. }, function (e, contract){
  8. console.log(e, contract);
  9. if (typeof contract.address !== 'undefined') {
  10. console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
  11. }
  12. })

结果如下图:

import_geth_command2_01.png

等待片刻,会发现合约被部署到挖矿挖出来的区块中了, 按下回车代表成功

import_geth_command2_02.png

此时输入合约部署的实例a_demotypes, 可以看到a_demotypes的详情。

  1. > a_demotypes
  2. {
  3. abi: [{
  4. constant: false,
  5. inputs: [{...}],
  6. name: "f",
  7. outputs: [{...}],
  8. payable: false,
  9. type: "function"
  10. }],
  11. address: "0x54ed7a5f5a63ddada3bfe83b3e632adabaa5fc2f",
  12. transactionHash: "0x69cde62bcd6458e14f40497f4840f422911d63f5dea2b3a9833e6810db64a1c9",
  13. allEvents: function(),
  14. f: function()
  15. }
  16. >

也可以调用a_demotypes的方法f, 输入任何数字,会返回8*n,如输入100,返回800,输入125,返回1000

  1. > a_demotypes.f.call(100)
  2. 800
  3. > a_demotypes.f.call(125)
  4. 1000
由此可见该合约在我们的私有链上部署成功!

如果出现

  1. TypeError: Cannot access member 'call' of undefined
  2. at <anonymous>:1:1

重新启动挖矿,调用合约,就可以输出正确的值了。

下一章将介绍,如何使用Browser-solidity来进行简单编程。


QQ群:559649971 (区块链学堂粉丝群)
个人微信:steven_k_colin

stevenkcolin.jpg

获取最新区块链咨询,请关注《以太中文网》微信公众号:以太中文网

ethchinese.jpg

发表评论

表情:
评论列表 (有 0 条评论,489人围观)

还没有评论,来说两句吧...

相关阅读