如何配置以太坊PoA私有链
发布于 3 个月前 作者 stvenyin 265 次浏览 来自 以太坊
  • 如何配置以太坊PoA私有链
  • TurboEtyyy支持通过Fluidity核心软件客户端进行权限证明(PoA)私有链 flu。权威证书链使用许多秘密密钥(权限)来合作并创建最长的链,而不是公共Ethereum网络的工作证明(Ethash)。
  • flu 通过JSON格式文件进行配置,该文件指定与块链相关的所有各种设置。以下是JSON文件示例:
  • {
  • "sealEngine": "BasicAuthority", 
    
  • "options": { 
    
  •     "authorities": [ 
    
  •         "0xfa0c706a1410c8785baa7498325cf7461b325583", 
    
  •         "0x7766d151b2c63cb096f624daa091ccb27a2c693f" 
    
  •     ] 
    
  • }, 
    
  • "params": { 
    
  •     "accountStartNonce": "0x", 
    
  •     "maximumExtraDataSize": "0x1000000", 
    
  •     "blockReward": "0x", 
    
  •     "registrar": "", 
    
  •     "networkID" : "0x45" 
    
  • }, 
    
  • "genesis": { 
    
  •     "author": "0x0000000000000000000000000000000000000000", 
    
  •     "timestamp": "0x00", 
    
  •     "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
    
  •     "extraData": "0x", 
    
  •     "gasLimit": "0x1000000000000" 
    
  • }, 
    
  • "accounts": { 
    
  •     "0000000000000000000000000000000000000001": { "wei": "1", "precompiled": { "name": "ecrecover", "linear": { "base": 3000, "word": 0 } } }, 
    
  •     "0000000000000000000000000000000000000002": { "wei": "1", "precompiled": { "name": "sha256", "linear": { "base": 60, "word": 12 } } }, 
    
  •     "0000000000000000000000000000000000000003": { "wei": "1", "precompiled": { "name": "ripemd160", "linear": { "base": 600, "word": 120 } } }, 
    
  •     "0000000000000000000000000000000000000004": { "wei": "1", "precompiled": { "name": "identity", "linear": { "base": 15, "word": 3 } } } 
    
  • }, 
    
  • "network": { 
    
  •     "nodes": [ 
    
  •         "enode://f12709ce6a10fdc76cea6129c6e85e44225d4539ac1e5b26d2cb73f436b9f34c2a1a623ea14a39893b10df2cdc4560e16f9db0aada9ac06b20bc4c5e5dd894c8@127.0.0.1:40401", 
    
  •         "enode://9bd11ae2cdbdd670dcbd34fa04ff71d840a9fb658d166f4d58192ec8f3d23c07cda490e717d7707e37a4e193ee6cdc8d1ee45320badf3b5476d7a356e6ff9de5@127.0.0.1:40402" 
    
  •     ] 
    
  • } 
    
  • }
  • 打破它:
  • “sealEngine”: “BasicAuthority”,
  • 这表明我们希望使用的链条的BasicAuthority 密封发动机是 密封发动机; 这创建了一个权威证据链(而不是公共网络上的Ethash证明工作链)。
  • “options”: {
  • "authorities": [ 
    
  •     "0xfa0c706a1410c8785baa7498325cf7461b325583", 
    
  •     "0x7766d151b2c63cb096f624daa091ccb27a2c693f" 
    
  • ] 
    
  • },
  • 这为我们的BasicAuthority 密封发动机提供了许多选择 。在这种情况下,我们提供被授权签署一个新块的两个帐户的Ethereum地址。
  • 确保你拥有这些或者你会发现很难追加新的块。
  • “params”: {
  • "accountStartNonce": "0x", 
    
  • "maximumExtraDataSize": "0x1000000", 
    
  • "blockReward": "0x", 
    
  • "registrar": "", 
    
  • "networkID" : "0x45" 
    
  • },
  • “genesis”: {
  • "author": "0x0000000000000000000000000000000000000000", 
    
  • "timestamp": "0x00", 
    
  • "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
    
  • "extraData": "0x", 
    
  • "gasLimit": "0x1000000000000" 
    
  • },
  • 这为链的共识逻辑提供了附加参数。(参数和选项之间的差异对于本指南来说太微妙了。)在这种情况下,我们设置允许大量气体限制和额外数据字段大小,否则使所有数据都为零。这对大多数私人连锁店来说都是好事
  • “accounts”: {
  •     "0000000000000000000000000000000000000001": { "wei": "1", "precompiled": { "name": "ecrecover", "linear": { "base": 3000, "word": 0 } } }, 
    
  •     "0000000000000000000000000000000000000002": { "wei": "1", "precompiled": { "name": "sha256", "linear": { "base": 60, "word": 12 } } }, 
    
  •     "0000000000000000000000000000000000000003": { "wei": "1", "precompiled": { "name": "ripemd160", "linear": { "base": 600, "word": 120 } } }, 
    
  •     "0000000000000000000000000000000000000004": { "wei": "1", "precompiled": { "name": "identity", "linear": { "base": 15, "word": 3 } } } 
    
  • },
  • 这定义了在起源块中预先指定的任何帐户。您可以指定每个帐户的余额,余额,代码和存储空间。您还可以使用强大的预编译合同系统,将预先编译的合同放在每个帐户中以及天然气成本规则。
  • 在这种情况下,我们将在每个预编译的合同帐户中设置一个标记值,以避免第一个交易者被使用。我们也将其设置与公共网络类似,前四个插槽中的四个算法中的每一个与公共网络的天然气成本一起。
  • 可以通过使用宏创建和链接库来添加进一步的预编译合同算法ETH_REGISTER_PRECOMPILED。例如,要创建一个算法,它将输入的简单字节XOR校验和放在输出中:
  • ETH_REGISTER_PRECOMPILED(xorchecksum)(bytesConstRef _in, bytesRef _out)
  • {
  • // No point doing any computation if there's nowhere to place the result. 
    
  • if (_out.size() >= 1) 
    
  • { 
    
  •     // XOR every byte in the input together into the accumulator acc. 
    
  •     byte acc = 0; 
    
  •     for (unsigned i = 0; i < _in.size(); ++i) 
    
  •         acc ^= _in; 
    
  •     // Place the result into the output. 
    
  •     _out[0] = acc; 
    
  • } 
    
  • }
  • 有了这个定义,你可以自由地命名一个预编译的合同:
  • “precompiled”: {
  • "name": "xorchecksum", 
    
  • "linear": { "base": 1, "word": 1 } 
    
  • }
  • 您可以选择成本(1个气体加1个气体输入中的每个32个字节的字)。
  • “network”: {
  • "nodes": [ 
    
  •     "enode://f12709ce6a10fdc76cea6129c6e85e44225d4539ac1e5b26d2cb73f436b9f34c2a1a623ea14a39893b10df2cdc4560e16f9db0aada9ac06b20bc4c5e5dd894c8@127.0.0.1:40401", 
    
  •     "enode://9bd11ae2cdbdd670dcbd34fa04ff71d840a9fb658d166f4d58192ec8f3d23c07cda490e717d7707e37a4e193ee6cdc8d1ee45320badf3b5476d7a356e6ff9de5@0.0.0.0:0" 
    
  • ] 
    
  • }
  • 最后我们设置了网络。在这种情况下,我们定义允许哪些节点ID连接(并被连接),并为它们提供一些IP /端口。注意即使IP /端口不知道,重要的是列出专用网络上的所有节点ID。列出具有无效IP /端口的ID,如第二个条目所示,很好。
  • 建立PoA私有网络
  • 要设置您的PoA专用网络,首先确定要坐在其上的每个节点的网络ID。作为一个与上述类似的JSON文件,但是使用 network.nodes 这些ID填充数组(尽可能地,正确的IP /端口将使引导更容易)。
  • 查找节点ID很容易 flu:运行时只需要注意一行:
  • Node ID: enode://…
  • 确定哪些节点将能够签署新的块。对于他们中的每一个,请确保您至少具有JSON文件options.authorities 部分中列出的一个键 。
  • flu 在新的机器上 运行 客户端(或使用新的 --path 目录)将导致密钥存储区具有单个新创建的帐户密钥。
  • 你可以通过寻找一条线来找出它是什么:
  • Created key: 0x…
  • 客户端(可能在稍后的调用中)可以使用此帐户对块进行签名,如果它包含在options.authorities 列表中。
  • 您可以根据您的选择创建JSON文件的其余部分,也许可以改变创建 extraData 字段来自定义链接,并避免与其他较旧或较新的链条混淆。
  • 准备好后,您可以使用此文件启动一个或多个节点(让我们假设它被调用 myconfig.json ,并且已经将它复制到每个机器的 ~ 路径中:
  • $ flu console --config ~/myconfig.json
  • 的 console ,我们希望有一个指定 的JavaScript 与我们的互动节点控制台(忽略它的非交互模式)和 --config 指定我们的JSON配置文件。
  • 要开始密封,请web3.admin.eth.setMining(true) 在控制台使用 。JS API的所有其余部分可供您使用。
  • 有许多选项可以帮助您配置您的特定情况:
  • –path 改变块/状态数据库和密钥/机密数据库的路径。默认为~/.fluidity。
  • –master 指定用于加密/解密密钥数据库和默认密码的密码。
  • –client-name 指定此特定节点的名称。
  • –public-ip 指定此节点的公共IP(即我们做广告的公共IP)。
  • –listen-ip 指定我们正在监听的IP(例如本地适配器IP)。
  • –listen-port 指定我们应该听的端口。
  • –start-sealing 立即开始密封。
  • –jsonrpc 在端口8545上启用JSON-RPC服务器。
  • –jsonrpc-port 在给定端口上启用JSON-RPC服务器。
  • –jsonrpc-cors-domain 配置JSON-RPC服务器的CORS域。
  • 通过启用JSON-RPC服务器,您可以使用例如 ethconsole 连接到私有链和与其互动。
回到顶部