ethereum-geth常用操作

2023-10-20 11:18:14 浏览数 (2)

前言

eth已经2.0了,但是1.0除了挖矿之外大部分功能都还是一样的。

geth 能做什么

  • 与eth链交互:console
  • 查看区块链状态
  • 管理账号: personal
  • 发送交易:
  • 挖矿 miner

交互操作: console

通过console启动,可以进行一系统的操作。

1.连接eth主网

默认连接最新的主网。

--datadir: 数据存放目录,不指定默认:/home/$user/.ethereum

代码语言:javascript复制
geth --datadir /data/geth --goerli console

2.连接eth测试网

--goerli: 加入 goerli测试网 --rpcapi: 开启rpc服务,开启后才可以进行操作

代码语言:javascript复制
geth --datadir "/data/geth" --rpc --rpcport 8545 --rpcapi "personal,eth,net,web3,admin" --rpccorsdomain "*" --goerli console 

节点管理: admin

自己搭建节点,第一步是要能使用,如果不是私链,那就需要连接上以太坊的主网或者测试网进行操作。

1.添加节点 admin.addPeer

代码语言:javascript复制
admin.addPeer("enode://19d3655aba7ef72065412365d95a66a10fcf0518f21594d0746b0177467c4d650b726a3e9612792e6dcb9716814498dc6826e3b47ab6e6270d85113d4bc7d6a1@135.181.82.60:30303")

2.查看当前连接节点 admin.peers

下面这个是我连接的节点,是芬兰的一个节点。

代码语言:javascript复制
[{
    caps: ["eth/63", "eth/64", "eth/65"],
    enode: "enode://19d3655aba7ef72065412365d95a66a10fcf0518f21594d0746b0177467c4d650b726a3e9612792e6dcb9716814498dc6826e3b47ab6e6270d85113d4bc7d6a1@135.181.82.60:30303",
    enr: "enr:-Je4QAqQY0hSvgTJLu-FBPW6rnpHa-pm1dge3G3qV4ChlKlMJsZA8togglNFljRAFWhOU6bv7-UHAQxp-siymzU2a24Jg2V0aMfGhMJe-lyAgmlkgnY0gmlwhIe1UjyJc2VjcDI1NmsxoQMZ02Vaun73IGVBI2XZWmahD88FGPIVlNB0awF3RnxNZYN0Y3CCdl-DdWRwgnZf",
    id: "2f927cec8a9408be8acfbf9ecc7b72a905d112c8842b9a1539a7cd40934b7357",
    name: "Geth/v1.9.24-stable-cc05b050/linux-amd64/go1.15.5",
    network: {
      inbound: false,
      localAddress: "192.168.31.128:53372",
      remoteAddress: "135.181.82.60:30303",
      static: false,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 6585792,
        head: "0x8705d7d7a4aa189704385c325ff24ebc82496c87fff884e942bf4aba78467f0f",
        version: 65
      }
    }
}]

查看节点信息 admin.nodeInfo

查询节点自身信息。

enode: 自身的节点地址 enr: discovery: 节点发现服务端口 listener: 连接监听端口 protocols: 协议信息

代码语言:javascript复制
{
  enode: "enode://514cf44d46abc26df3fbb084acef308483a6b1bc0712f9aead5fbbca0f1e5671f86467a2f0ec10628b48b771cde8501294715aa5d4c4b520b1a457daae9a0b3e@111.201.21.10:30303?discport=26172",
  enr: "enr:-KK4QAzy9muCCHDtd8kwjgLS9MrRKa8YKutziw51hBXyjTrJEegdA2eFsh6BR-6BcAHFF9SEu3HPUGu0-yMYTo2xcKQHg2V0aMrJhKP1qwiDF9QzgmlkgnY0gmlwhG_JFcmJc2VjcDI1NmsxoQJRTPRNRqvCbfP7sISs7zCEg6axvAcS-a6tX7vKDx5WcYN0Y3CCdl-DdWRwgmY8hHVkcDaCdl8",
  id: "45fe4324552ac00907ffea5bfbd48f678f3dad5adafe2041b585270a09034410",
  ip: "111.201.21.10",
  listenAddr: "[::]:30303",
  name: "Geth/v1.9.25-stable-e7872729/linux-amd64/go1.16.15",
  ports: {
    discovery: 26172,
    listener: 30303
  },
  protocols: {
    eth: {
      config: {
        byzantiumBlock: 0,
        chainId: 5,
        clique: {...},
        constantinopleBlock: 0,
        daoForkSupport: true,
        eip150Block: 0,
        eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
        eip155Block: 0,
        eip158Block: 0,
        homesteadBlock: 0,
        istanbulBlock: 1561651,
        petersburgBlock: 0
      },
      difficulty: 1,
      genesis: "0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a",
      head: "0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a",
      network: 5
    }
  }
}

账号管理 personal

1.创建账号 personal.newAccount()

创建账号可以创建多个账号。

代码语言:javascript复制
personal.newAccount("password")

结果:

INFO [12-09|23:28:39.162] Your new key was generated address=0x6C5d3DafE18B5108a0C02B5663f6963EBf9f4CfA WARN [12-09|23:28:39.191] Please backup your key file! path=/data/geth/keystore/UTC--2022-12-09T15-28-34.293134840Z--6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa WARN [12-09|23:28:39.191] Please remember your password! "0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa"

生成一个keystore文件,路径是启动时候我设定的路径: /data/geth/keystorekeystore文件是相关于密钥,签署交易的以太坊私钥的加密文件。如果你丢失了这个文件,你就丢失了私钥。 简单的说keystore就是你加密过后的私钥,要有私钥和你的密码,才能使用你的账号,这样就是双重保险。 几乎每条链都有keystore文件这种形式。

查看一下keystore文件内容:

cipher: 对称加密,用对称加密是因为使用到密码,需要解密。 cipherparams: 是 cipher 算法需要的参数。 iv: 是加密算法需要的初始化向量。 kdf: scrypt 密钥生成函数,用于让你用密码加密 keystore 文件。 kdfparams: kdf 算法需要的参数(scrypt函数需要的参数)。

代码语言:javascript复制
{
    "address": "6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa", 
    "crypto": {
        "cipher": "aes-128-ctr", 
        "ciphertext": "a2816bbca5bf7805e75d4961375579eeb80ede2cb9364f9a8dd8be0be4694a7d", 
        "cipherparams": {}, 
        "kdf": "scrypt", 
        "kdfparams": {
            "dklen": 32, 
            "n": 262144, 
            "p": 1, 
            "r": 8, 
            "salt": "6e7f880f2e53e744c2acb422b01ddad319fbd4ee6dfe38da3e921efbdb4604ff"
        }, 
        "mac": "24c823caf933a0563b1da19982b8259fcaafb423a69cb6fb85108303cd2ebd4e"
    }, 
    "id": "ef6cdbe1-dbe3-43b8-bcea-e7b3e0e121f7", 
    "version": 3
}

2.交互模式 personal.newAccount

执行命令:

代码语言:javascript复制
personal.newAccount()

结果:

Passphrase: #输入密码 Repeat passphrase: #确认密码 INFO [12-09|23:41:31.682] Your new key was generated address=0x1d774CdA456C0f7cC84484b0316A4E959c206E14 WARN [12-09|23:41:31.682] Please backup your key file! path=/data/geth/keystore/UTC--2022-12-09T15-41-30.670272653Z--1d774cda456c0f7cc84484b0316a4e959c206e14 WARN [12-09|23:41:31.682] Please remember your password! "0x1d774cda456c0f7cc84484b0316a4e959c206e14"


链治理:eth

1.查询所有账号 eth.accounts

代码语言:javascript复制
eth.accounts

["0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa", "0x1d774cda456c0f7cc84484b0316a4e959c206e14"]

这是我刚生成的两个账号

选择其中一个:

代码语言:javascript复制
eth.accounts[0]

"0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa"

2.查看余额 eth.getBalance

代码语言:javascript复制
eth.getBalance(eth.accounts[1])

eth.getBalance("0x6c5d3dafe18b5108a0c02b5663f6963ebf9f4cfa")

挖矿 miner

1.开启挖矿

需要区块同步完成,否则无法挖矿

代码语言:javascript复制
miner.start(10)

10表示挖矿线程数。

如果没有同步完成就开启挖矿会报错:

Block sealing failed err="unauthorized signer" Block synchronisation started Mining aborted due to sync

2.停止挖矿 miner.stop

代码语言:javascript复制
miner.stop()

0 人点赞