【BlockChain】以太坊基础知识

一、文件说明

genesis.json 文件

{
  "config": {
        "chainId": 1000, --- 区块链的ID,在geth命令中的 --networkid 参数需要与chainId的值一致
        "homesteadBlock": 0, --- Homestead 硬分叉区块高度,不需要关注
        "eip155Block": 0, --- EIP 155 硬分叉高度,不需要关注
        "eip158Block": 0 ---  EIP 158 硬分叉高度,不需要关注
    },
  "coinbase"   : "0x0000000000000000000000000000000000000000", --- 矿工账号,第一个区块挖出后将给这个矿工账号发送奖励的以太币
  "difficulty" : "0x400", --- 难度值,越大越难
  "extraData"  : "Some Informatica", --- 附加信息随便填
  "gasLimit"   : "0x2fefd8", ---  gas的消耗总量限制,用来限制区块能包含的交易信息总和,因为是私有链,所以填最大
  "nonce"      : "0x0000000000000042", --- 一个 64 位随机数
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000", --- 与nonce 配合用于挖矿,由上一个区块的一部分生成的 hash
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", --- 上一个区块的 hash 值
  "timestamp"  : "0x00",
  "alloc": {} --- 预设账号以及账号的以太币数量,私有链挖矿比较容易可以不配置
}
  • 每一条区块链都有一个创世块
  • 当第一次用geth的默认参数运行一个节点的时候,ethereum主网的创世块就会同步到本地的数据库
  • 对于私有链,通常用一个自定义的创世块

keystore 文件

{
    "crypto" : {
        "cipher" : "aes-128-ctr", --- 对称AES算法的名称
        "cipherparams" : { --- 上述 cipher 算法需要的参数
            "iv" : "83dbcc02d8ccb40e466191a123791e0e"
        },
        "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", ---以太坊私钥使用上述cipher算法进行加密
        "kdf" : "scrypt", --- 密钥生成函数,用于让用户使用密码加密keystore文件
        "kdfparams" : { --- 上述 kdf 算法需要的参数
            "dklen" : 32,
            "n" : 262144,
            "r" : 1,
            "p" : 8,
            "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
        },
        "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097" --- 用于验证密码的代码
    },
    "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
    "version" : 3
}
  • 以太坊账户就是用于加密签署交易的一个私钥 —公钥对
  • 输入密码取得解密秘钥,解密秘钥可以获取以太坊私钥
  • 密码可以生成助记词,助记词是以太坊私钥的另一种表现形式

命令行创建方式

bogon:geth zzs$ ./geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {0f7b73f3034d0d17a165e4cf50bd77051235b4e6}

bogon:geth zzs$ ./geth account list
Account #0: {0f7b73f3034d0d17a165e4cf50bd77051235b4e6} keystore:///Users/zzs/Library/Ethereum/keystore/UTC--2018-02-21T02-56-46.285140000Z--0f7b73f3034d0d17a165e4cf50bd77051235b4e6
bogon:geth zzs$

 

二、搭建过程

初始化创世文件

geth --datadir $HOME/privateNet/bootnode init genesis.json : 初始化genesis,datadir 指定数据存放的目录


启动bootnode

bootnode --genkey=boot.key : 生成boot.key,下次启动bootnode则直接使用,不必再次生成
bootnode --nodekey=boot.key : 启动bootnode,输出显示enode


启动节点

geth --identity "richard" --rpc --rpcport "8545" --datadir book_sharing --port "30303"  --bootnodes "enode://b4c360879ca11b222ac910136f3fbd3939a376b346aad1fdf1f825bd35864835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@10.222.49.22:30301" --networkid="1024" --rpccorsdomain="*" console 2>>geth.log
参数 说明
identity 自定义节点的名字,方便节点中互相辨认识别
rpc 启用HTTP-RPC服务器
rpcport HTTP-RPC服务器监听端口(默认值:8545)
datadir 数据库目录
port 网络监听端口(默认值:30303)
bootnodes 逗号分隔的enode url,用于P2P发现引导
networkid 网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
rpccorsdomain 允许跨域请求的域名列表(逗号分隔),*允许所有主机连接

加入已有私链

  1. 准备相同genesis.json创建创世块
  2. 使用相同networkid启动节点
  • 启动节点方式1:指定相同bootnode
geth --identity "richard1" --rpc --rpcport "8545" --datadir book_sharing --port "30303"  --bootnodes "enode://b4c360879ca11b222ac9104657456739a376b346aad1fdf1f828675678564835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@10.222.49.22:30301" --networkid="1024" --rpccorsdomain="*" console 2>>geth.log
  • 启动节点方式2:手动添加节点
admin.addPeer("enode://d23769667654746745672d9b694dcf3574b17568765895692ee7b9e488503f46f97b6c1cc6bf55c9309ceab4fa7bb05427e7a213bb3efa43beeac5dae580ae12@0.0.0.0:30303");

 
 

参考:
https://www.jianshu.com/p/1568a8097d7e
https://ethfans.org/posts/what-is-an-ethereum-keystore-file
https://weibo.com/ttarticle/p/show?id=2309404156730958348129
https://blog.csdn.net/wo541075754/article/details/79342624

你可能感兴趣的:(【BlockChain】以太坊基础知识)