{"id":109398,"date":"2026-09-24T02:40:42","date_gmt":"2026-09-23T18:40:42","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/109398.html"},"modified":"2026-09-24T02:40:42","modified_gmt":"2026-09-23T18:40:42","slug":"%e5%88%9b%e4%b8%96%e4%b8%8e%e8%8a%82%e7%82%b9%e5%b7%a5%e7%a8%8b%ef%bc%9agenesis-json-%e4%b8%8e-node-toml-%e8%a7%a3%e5%89%96%e3%80%90%e4%bf%ae%e8%ae%a2%e7%89%88%e3%80%91","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/109398.html","title":{"rendered":"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011"},"content":{"rendered":"<p>\u7248\u6743\u58f0\u660e&#xff1a;\u672c\u6587\u7cfb DREAMVFIA UNION \u539f\u521b\u6280\u672f\u4e13\u9898&#xff0c;RNS Token Web3 \u6280\u672f\u4e13\u9898\u7cfb\u5217\u4e4b\u4e00&#xff0c;\u5b98\u7f51 token.rnoise.cn\u3002<br \/>\n\u672a\u7ecf DREAMVFIA UNION \u4e66\u9762\u6388\u6743&#xff0c;\u7981\u6b62\u8f6c\u8f7d\u3001\u6458\u7f16\u3001\u6d17\u7a3f\u6216\u7528\u4e8e\u6a21\u578b\u8bad\u7ec3\u8bed\u6599\u3002<br \/>\nRNOISE Chain \u4e3a\u81ea\u5efa EVM \u517c\u5bb9\u94fe&#xff0c;RNS \u4e3a\u97f3\u4e50\u7248\u6743\u751f\u6001\u4ee3\u5e01&#xff1b;\u6587\u4e2d\u6d89\u53ca\u7b2c\u4e09\u65b9\u94fe\u4e0e\u5e73\u53f0\u4ec5\u4e3a\u6280\u672f\u8bf4\u660e&#xff0c;\u4e0d\u6784\u6210\u5408\u4f5c\u5ba3\u79f0\u4e0e\u6295\u8d44\u5efa\u8bae\u3002<\/p>\n<p>\u7cfb\u5217&#xff1a;DREAMVFIA UNION \u00b7 RNS Token Web3 \u6280\u672f\u4e13\u9898\u7cfb\u5217\u4e4b02\/16&#xff5c;\u8bfb\u8005&#xff1a;\u94fe\u8fd0\u7ef4\u5de5\u7a0b\u5e08\u3001\u8282\u70b9\u670d\u52a1\u5546\u3001Geth \u5b9e\u8df5\u8005&#xff5c;\u5b98\u7f51&#xff1a;token.rnoise.cn<\/p>\n<h3>\u5f15\u8a00<\/h3>\n<p>\u521b\u4e16\u533a\u5757\u662f\u4e00\u6761\u533a\u5757\u94fe\u751f\u547d\u5468\u671f\u7684\u539f\u70b9&#xff0c;\u800c\u8282\u70b9\u7f51\u7edc\u5219\u662f\u5206\u5e03\u5f0f\u8d26\u672c\u6301\u7eed\u8fd0\u8f6c\u7684\u7269\u7406\u627f\u8f7d\u3002RNOISE Chain \u91c7\u7528\u7ecf\u5178\u7684 Geth \u5ba2\u6237\u7aef\u4e0e Clique \u6743\u5a01\u8bc1\u660e\u5171\u8bc6\u6784\u5efa&#xff1b;\u5176\u521b\u4e16\u6587\u4ef6 genesis.json \u56fa\u5316\u4e86 Chain ID 20260616\u30013 \u79d2\u51fa\u5757\u300130000 \u5757\u6cbb\u7406\u7eaa\u5143\u4ee5\u53ca 10 \u4ebf\u4ee3\u5e01\u516d\u94b1\u5305\u521d\u59cb\u5206\u914d&#xff0c;\u800c node.toml \u5219\u5b9a\u4e49\u4e86\u5b89\u5168\u5bf9\u7b49\u7f51\u7edc\u53d1\u73b0\u3001RPC \u6a21\u5757\u6700\u5c0f\u5316\u66b4\u9732\u4e0e\u672c\u5730\u73af\u56de\u7ed1\u5b9a\u89c4\u5219\u3002\u672c\u7bc7\u5bf9\u521b\u4e16\u53c2\u6570\u3001\u9a8c\u8bc1\u8005\u7b7e\u540d\u69fd\u4f4d\u3001\u8282\u70b9\u7f51\u7edc\u62d3\u6251\u3001systemd \u5b88\u62a4\u8fdb\u7a0b\u4e0e\u9ad8\u53ef\u7528\u76d1\u63a7\u8fdb\u884c\u9010\u884c\u6df1\u89e3&#xff0c;\u6784\u5efa\u8d77\u5168\u5957\u5de5\u4e1a\u7ea7\u8282\u70b9\u5de5\u7a0b\u6807\u51c6\u3002<\/p>\n<p>\u672c\u6587\u5148\u7ed9\u51fa\u9605\u8bfb\u5951\u7ea6&#xff1a;\u72b6\u6001\u63aa\u8f9e\u6309\u8bc1\u636e\u4e66\u5199&#xff08;Live\u3001\u53d7\u63a7 live\u3001Planned\u3001\u672a\u5f00\u59cb\u3001Off\/Draft&#xff0c;\u672a\u77e5\u5904\u6807 UNKNOWN&#xff09;&#xff1b;\u51e1\u5f15\u7528\u94fe\u53c2\u6570\u3001\u5206\u914d\u6bd4\u4f8b\u3001\u51fd\u6570\u540d&#xff0c;\u5747\u4ee5 D:\\\\RNOISE-Token \u4ed3\u5e93\u6e90\u7801\u4e3a\u51c6&#xff0c;\u5feb\u7167\u53e3\u5f84\u4ee5 Obsidian \u751f\u6001\u7b14\u8bb0\u4e3a\u51c6&#xff1b;\u5408\u7ea6\u53ea\u8bb2\u63a5\u53e3\u8bed\u4e49\u3001\u72b6\u6001\u673a\u4e0e\u6743\u9650\u6a21\u578b&#xff0c;\u4e0d\u542b\u79c1\u94a5\u3001\u5bc6\u7801\u3001keystore\u3001\u73af\u5883\u79d8\u5bc6\u3001\u670d\u52a1\u5668\u5165\u53e3\u4e0e\u5355\u70b9\u8d44\u91d1\u64cd\u4f5c\u7ec6\u8282\u3002<\/p>\n<h3>\u76ee\u5f55<\/h3>\n<ul>\n<li>\u7b2c1\u7ae0 genesis.json \u5168\u666f\u4e0e\u5206\u6bb5\u89e3\u6790<\/li>\n<li>\u7b2c2\u7ae0 extradata \u7f16\u7801\u4e0e\u521d\u59cb\u9a8c\u8bc1\u8005\u6ce8\u5165<\/li>\n<li>\u7b2c3\u7ae0 alloc \u521b\u4e16\u5206\u914d\u4e0e\u7ecf\u6d4e\u5e95\u5ea7\u6620\u5c04<\/li>\n<li>\u7b2c4\u7ae0 node.toml \u914d\u7f6e\u6587\u4ef6\u6df1\u5165\u89e3\u5256\u4e0e\u4ea4\u6613\u6c60\u8c03\u4f18<\/li>\n<li>\u7b2c5\u7ae0 \u8282\u70b9\u521d\u59cb\u5316\u4e0e keystore \u8d26\u6237\u5b89\u5168\u7ba1\u7406<\/li>\n<li>\u7b2c6\u7ae0 P2P \u53d1\u73b0\u673a\u5236\u4e0e\u9759\u6001\u8282\u70b9&#xff08;static-nodes&#xff09;<\/li>\n<li>\u7b2c7\u7ae0 systemd \u5b88\u62a4\u8fdb\u7a0b\u4e0e\u6301\u4e45\u5316\u7ba1\u7406<\/li>\n<li>\u7b2c8\u7ae0 \u8282\u70b9\u5065\u5eb7\u63a2\u9488\u4e0e\u81ea\u52a8\u5316\u81ea\u68c0<\/li>\n<li>\u7b2c9\u7ae0 \u5b89\u5168\u52a0\u56fa\u4e0e\u7279\u6743 RPC \u9632\u62a4<\/li>\n<li>\u7b2c10\u7ae0 \u8282\u70b9\u5de5\u7a0b\u5b9e\u6218\u9a8c\u6536\u4e0e\u8fd0\u7ef4\u6e05\u5355<\/li>\n<\/ul>\n<h3>\u7b2c1\u7ae0 genesis.json \u5168\u666f\u4e0e\u5206\u6bb5\u89e3\u6790<\/h3>\n<p>genesis.json \u5b9a\u4e49\u4e86 EVM \u542f\u52a8\u6240\u5fc5\u9700\u7684\u4e16\u754c\u72b6\u6001&#xff08;World State&#xff09;\u521d\u59cb\u53c2\u6570\u4e0e\u786c\u5206\u53c9\u6fc0\u6d3b\u65f6\u95f4\u8868\u3002\u5728 RNOISE Chain \u4e2d&#xff0c;\u8be5\u6587\u4ef6\u7ecf\u8fc7\u4e25\u683c\u7684\u5f62\u5f0f\u5316\u5ba1\u67e5&#xff0c;\u6d88\u9664\u4e86\u5197\u4f59\u914d\u7f6e&#xff0c;\u786e\u4fdd\u4e0e\u4ee5\u592a\u574a Paris \u89c4\u8303\u7684\u4e25\u5bc6\u5bf9\u9f50\u3002<\/p>\n<h4>1.1 \u6838\u5fc3\u914d\u7f6e\u6bb5 config \u4e0e\u786c\u5206\u53c9\u9501\u5b9a<\/h4>\n<p>config \u5b57\u5178\u63a7\u5236\u7740\u4ee5\u592a\u574a\u865a\u62df\u673a&#xff08;EVM&#xff09;\u5728\u4e0d\u540c\u5757\u9ad8\u5904\u6fc0\u6d3b\u7684 EIP \u6539\u8fdb\u63d0\u6848\u3002\u5728 RNOISE \u521b\u4e16\u6587\u4ef6\u4e2d&#xff0c;\u6240\u6709\u5386\u53f2\u4e3b\u6d41\u5206\u53c9\u5757\u9ad8\u5168\u90e8\u951a\u5b9a\u4e3a 0&#xff1a;<\/p>\n<ul>\n<li>homesteadBlock \u81f3 londonBlock \u5f52\u96f6&#xff1a;\u610f\u5473\u7740\u4e3b\u7f51\u5728\u521b\u4e16\u7b2c\u4e00\u5757\u5373\u5177\u5907\u5b8c\u6574\u7684 Homestead \u57fa\u7840\u89c4\u8303\u3001EIP-150 \u71c3\u6c14\u91cd\u5b9a\u3001EIP-155 \u9632\u91cd\u653e\u673a\u5236\u3001Byzantium\/Constantinople \u667a\u80fd\u5408\u7ea6\u64cd\u4f5c\u7801&#xff08;\u5982 REVERT\u3001STATICCALL&#xff09;\u4ee5\u53ca London \u57fa\u7840\u8d39\u673a\u5236&#xff1b;<\/li>\n<li>\u9501\u5b9a clique \u5171\u8bc6\u5f15\u64ce&#xff1a;\u901a\u8fc7\u663e\u5f0f\u58f0\u660e &#034;clique&#034;: { &#034;period&#034;: 3, &#034;epoch&#034;: 30000 }&#xff0c;\u5f3a\u884c\u66ff\u6362\u6389\u9ed8\u8ba4\u7684 Ethash \u7b97\u529b\u6316\u77ff\u5f15\u64ce&#xff0c;\u5c06\u5171\u8bc6\u72b6\u6001\u673a\u9a71\u52a8\u6743\u4ea4\u4ed8\u7ed9 Clique \u7b7e\u540d\u7b97\u6cd5\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011genesis.json \u5b8c\u6574\u914d\u7f6e\u6587\u4ef6\u9010\u884c\u6ce8\u89e3<\/h5>\n<p><span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token string-property property\">&#034;_comment&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;RNOISE Chain Genesis Block \u2014 Chain ID: 20260616 | PoA Clique | 3s block time&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;config&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token string-property property\">&#034;chainId&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">20260616<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;homesteadBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;eip150Block&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;eip155Block&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;eip158Block&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;byzantiumBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;constantinopleBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;petersburgBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;istanbulBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;berlinBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;londonBlock&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;clique&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token string-property property\">&#034;period&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token string-property property\">&#034;epoch&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">30000<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;difficulty&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;1&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;gasLimit&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;0x1C9C380&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;extradata&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;0x0000&#8230;32bytes_vanity&#8230;VALIDATOR_ADDRESS_HERE&#8230;65bytes_seal&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;alloc&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token string-property property\">&#034;0xTEAM_WALLET_ADDRESS&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token string-property property\">&#034;balance&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;150000000000000000000000000&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token string-property property\">&#034;_note&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;15% \u56e2\u961f\u50a8\u5907 \u2014 1.5 \u4ebf RNS&#034;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;0xECOSYSTEM_WALLET_ADDRESS&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token string-property property\">&#034;balance&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;250000000000000000000000000&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token string-property property\">&#034;_note&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;25% \u751f\u6001\u57fa\u91d1 \u2014 2.5 \u4ebf RNS&#034;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;0xCREATOR_POOL_ADDRESS&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token string-property property\">&#034;balance&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;200000000000000000000000000&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token string-property property\">&#034;_note&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;20% \u521b\u4f5c\u8005\u6fc0\u52b1\u6c60 \u2014 2.0 \u4ebf RNS&#034;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;0xLIQUIDITY_WALLET_ADDRESS&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token string-property property\">&#034;balance&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;100000000000000000000000000&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token string-property property\">&#034;_note&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;10% \u6d41\u52a8\u6027\u50a8\u5907 \u2014 1.0 \u4ebf RNS&#034;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string-property property\">&#034;0xPRIVATE_SALE_ADDRESS&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token string-property property\">&#034;balance&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;100000000000000000000000000&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token string-property property\">&#034;_note&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;10% \u65e9\u671f\u652f\u6301\u8005 \u2014 1.0 \u4ebf RNS&#034;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;mixHash&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;0x0000&#8230;32bytes_zero&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;coinbase&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;0x0000000000000000000000000000000000000000&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string-property property\">&#034;nonce&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;0x0&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011\u521b\u4e16\u72b6\u6001\u6811\u6839\u54c8\u5e0c\u8ba1\u7b97\u65b9\u7a0b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">StateRoot0&#061;MerklePatriciaTrie(\u22c3i&#061;15(keccak256(Addri),RLP(nonce0,balancei,codeHash\u2205,storageRoot\u2205)))<br \/>\n\\\\text{StateRoot}_0 &#061; \\\\text{MerklePatriciaTrie}\\\\left( \\\\bigcup_{i&#061;1}^5 \\\\big( \\\\text{keccak256}(\\\\text{Addr}_i), \\\\text{RLP}(nonce_0, balance_i, codeHash_\\\\emptyset, storageRoot_\\\\emptyset) \\\\big) \\\\right)<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">StateRoot<\/span><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3011em\"><span class=\"\" style=\"top: -2.55em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">0<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 3.0788em;vertical-align: -1.2777em\"><\/span><span class=\"mord text\"><span class=\"mord\">MerklePatriciaTrie<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"minner\"><span class=\"mopen delimcenter\" style=\"top: 0em\"><span class=\"delimsizing size4\">(<\/span><\/span><span class=\"mop op-limits\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.8011em\"><span class=\"\" style=\"top: -1.8723em;margin-left: 0em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">i<\/span><span class=\"mrel mtight\">&#061;<\/span><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"\" style=\"top: -3.05em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"\"><span class=\"mop op-symbol large-op\">\u22c3<\/span><\/span><\/span><span class=\"\" style=\"top: -4.3em;margin-left: 0em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">5<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.2777em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"delimsizing size1\">(<\/span><\/span><span class=\"mord text\"><span class=\"mord\">keccak256<\/span><\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">Addr<\/span><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">i<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord text\"><span class=\"mord\">RLP<\/span><\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">n<\/span><span class=\"mord mathnormal\">o<\/span><span class=\"mord mathnormal\">n<\/span><span class=\"mord mathnormal\">c<\/span><span class=\"mord\"><span class=\"mord mathnormal\">e<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3011em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">0<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\">ba<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0197em\">l<\/span><span class=\"mord mathnormal\">an<\/span><span class=\"mord mathnormal\">c<\/span><span class=\"mord\"><span class=\"mord mathnormal\">e<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">i<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\">co<\/span><span class=\"mord mathnormal\">d<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">eH<\/span><span class=\"mord mathnormal\">a<\/span><span class=\"mord mathnormal\">s<\/span><span class=\"mord\"><span class=\"mord mathnormal\">h<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3448em\"><span class=\"\" style=\"top: -2.5198em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">\u2205<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2191em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\">s<\/span><span class=\"mord mathnormal\">t<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">or<\/span><span class=\"mord mathnormal\">a<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0359em\">g<\/span><span class=\"mord mathnormal\">e<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0077em\">R<\/span><span class=\"mord mathnormal\">oo<\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3448em\"><span class=\"\" style=\"top: -2.5198em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">\u2205<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2191em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mord\"><span class=\"delimsizing size1\">)<\/span><\/span><span class=\"mclose delimcenter\" style=\"top: 0em\"><span class=\"delimsizing size4\">)<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u521b\u4e16\u533a\u5757\u7684\u6839\u54c8\u5e0c\u7531 alloc \u5b57\u5178\u4e2d\u7684\u8d26\u6237\u4f59\u989d\u7ecf\u7531 Merkle Patricia Trie&#xff08;MPT&#xff09;\u4e25\u683c\u5bfc\u51fa\u3002\u4e00\u65e6\u521b\u4e16\u6587\u4ef6\u4e2d\u7684\u4efb\u4f55\u8d26\u6237\u5730\u5740\u6216\u4f59\u989d\u54ea\u6015\u76f8\u5dee 1 wei&#xff0c;\u6240\u6d3e\u751f\u51fa\u7684 StateRoot \u5c31\u4f1a\u4ea7\u751f\u96ea\u5d29\u5f0f\u53d8\u5f02&#xff0c;\u4ece\u800c\u4fdd\u8bc1\u5168\u7f51\u8282\u70b9\u5fc5\u987b\u5728\u540c\u4e00\u521b\u4e16\u5e95\u5ea7\u4e0a\u534f\u540c\u3002<\/p>\n<h5>\u3010\u67b6\u6784\u62d3\u6251\u4e0e\u65f6\u5e8f\u3011\u521b\u4e16\u533a\u5757\u5934\u90e8\u4e0e\u72b6\u6001\u6811\u54c8\u5e0c\u6620\u5c04\u62d3\u6251<\/h5>\n<p>#mermaid-svg-QYXvB8OM2OKhbXPf{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QYXvB8OM2OKhbXPf .error-icon{fill:#552222;}#mermaid-svg-QYXvB8OM2OKhbXPf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QYXvB8OM2OKhbXPf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QYXvB8OM2OKhbXPf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QYXvB8OM2OKhbXPf .marker.cross{stroke:#333333;}#mermaid-svg-QYXvB8OM2OKhbXPf svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QYXvB8OM2OKhbXPf p{margin:0;}#mermaid-svg-QYXvB8OM2OKhbXPf .label{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;color:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf .cluster-label text{fill:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf .cluster-label span{color:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf .cluster-label span p{background-color:transparent;}#mermaid-svg-QYXvB8OM2OKhbXPf .label text,#mermaid-svg-QYXvB8OM2OKhbXPf span{fill:#333;color:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf .node rect,#mermaid-svg-QYXvB8OM2OKhbXPf .node circle,#mermaid-svg-QYXvB8OM2OKhbXPf .node ellipse,#mermaid-svg-QYXvB8OM2OKhbXPf .node polygon,#mermaid-svg-QYXvB8OM2OKhbXPf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QYXvB8OM2OKhbXPf .rough-node .label text,#mermaid-svg-QYXvB8OM2OKhbXPf .node .label text,#mermaid-svg-QYXvB8OM2OKhbXPf .image-shape .label,#mermaid-svg-QYXvB8OM2OKhbXPf .icon-shape .label{text-anchor:middle;}#mermaid-svg-QYXvB8OM2OKhbXPf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QYXvB8OM2OKhbXPf .rough-node .label,#mermaid-svg-QYXvB8OM2OKhbXPf .node .label,#mermaid-svg-QYXvB8OM2OKhbXPf .image-shape .label,#mermaid-svg-QYXvB8OM2OKhbXPf .icon-shape .label{text-align:center;}#mermaid-svg-QYXvB8OM2OKhbXPf .node.clickable{cursor:pointer;}#mermaid-svg-QYXvB8OM2OKhbXPf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QYXvB8OM2OKhbXPf .arrowheadPath{fill:#333333;}#mermaid-svg-QYXvB8OM2OKhbXPf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QYXvB8OM2OKhbXPf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QYXvB8OM2OKhbXPf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QYXvB8OM2OKhbXPf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QYXvB8OM2OKhbXPf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QYXvB8OM2OKhbXPf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QYXvB8OM2OKhbXPf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QYXvB8OM2OKhbXPf .cluster text{fill:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf .cluster span{color:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QYXvB8OM2OKhbXPf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QYXvB8OM2OKhbXPf rect.text{fill:none;stroke-width:0;}#mermaid-svg-QYXvB8OM2OKhbXPf .icon-shape,#mermaid-svg-QYXvB8OM2OKhbXPf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QYXvB8OM2OKhbXPf .icon-shape p,#mermaid-svg-QYXvB8OM2OKhbXPf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QYXvB8OM2OKhbXPf .icon-shape .label rect,#mermaid-svg-QYXvB8OM2OKhbXPf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QYXvB8OM2OKhbXPf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QYXvB8OM2OKhbXPf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QYXvB8OM2OKhbXPf :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span class=\"edgeLabel\"><\/span><span style=\"color:#fff !important\" class=\"nodeLabel\"><\/p>\n<p>\u521b\u4e16\u533a\u5757 Header Block #0<\/p>\n<p><\/span><span style=\"color:#fff !important\" class=\"nodeLabel\"><\/p>\n<p>stateRoot: MPT \u6839\u54c8\u5e0c<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>extraData: \u9a8c\u8bc1\u8005\u521d\u59cb\u7b7e\u540d\u5217\u8868<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>gasLimit: 0x1C9C380 \/ 3000\u4e07<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>Team \u94b1\u5305: 1.5 \u4ebf RNS<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>Ecosystem \u57fa\u91d1: 2.5 \u4ebf RNS<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>Creator \u521b\u4f5c\u8005\u6c60: 2.0 \u4ebf RNS<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>Liquidity \u50a8\u5907: 1.0 \u4ebf RNS<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>PrivateSale \u4efd\u989d: 1.0 \u4ebf RNS<\/p>\n<p><\/span><\/p>\n<h4>1.2 difficulty \u4e0e gasLimit \u53c2\u6570\u7684\u7269\u7406\u542b\u4e49<\/h4>\n<ul>\n<li>difficulty &#061; 1&#xff1a;\u5728 Clique \u89c4\u8303\u4e2d&#xff0c;\u521b\u4e16\u533a\u5757\u96be\u5ea6\u8bbe\u4e3a 1\u3002\u968f\u540e\u7531\u6388\u6743\u7b7e\u540d\u8005\u8f6e\u6d41\u51fa\u5757\u65f6&#xff0c;In-turn \u533a\u5757\u96be\u5ea6\u6052\u4e3a 2&#xff0c;Out-of-turn \u533a\u5757\u96be\u5ea6\u6052\u4e3a 1&#xff0c;\u5b8c\u5168\u5e9f\u5f03\u4e86\u57fa\u4e8e\u7b97\u529b\u54c8\u5e0c\u78b0\u649e\u7684\u52a8\u6001\u96be\u5ea6\u8c03\u8282&#xff1b;<\/li>\n<li>gasLimit &#061; 0x1C9C380&#xff1a;\u5341\u516d\u8fdb\u5236\u6362\u7b97\u4e3a\u5341\u8fdb\u5236\u6b63\u597d\u662f 30,000,000\u3002\u6b64\u53c2\u6570\u786e\u7acb\u4e86\u5355\u5757 Gas \u541e\u5410\u6781\u9650&#xff0c;\u8db3\u4ee5\u5728 3 \u79d2\u5185\u5b8c\u6210\u6570\u767e\u7b14\u5e76\u53d1\u7248\u7a0e\u7ed3\u7b97\u4e0e\u590d\u6742\u7684 NFT \u72b6\u6001\u5b58\u50a8&#xff1b;<\/li>\n<li>\u5e95\u5c42\u5b58\u50a8\u5f15\u64ce LevelDB \u4e0e Pebble \u9009\u578b\u5bf9\u6bd4&#xff1a;Geth \u9ed8\u8ba4\u91c7\u7528 Google LevelDB \u4f5c\u4e3a\u5e95\u5c42\u952e\u503c\u5b58\u50a8&#xff0c;\u4f46\u5728\u6bcf\u79d2\u6570\u5343\u7b14\u4ea4\u6613\u9ad8\u9891\u5199\u5165\u65f6\u5bb9\u6613\u9762\u4e34\u4e25\u91cd\u7684 LSM-Tree \u5199\u653e\u5927&#xff08;Write Amplification&#xff09;\u4e0e Compaction \u5361\u987f\u3002RNOISE \u751f\u4ea7\u8282\u70b9\u5168\u9762\u652f\u6301 Pebble \u5f15\u64ce&#xff0c;\u5f97\u76ca\u4e8e\u591a\u7ebf\u7a0b\u5e76\u53d1\u538b\u7f29\u4e0e\u8303\u56f4\u5220\u9664&#xff08;Range Deletion&#xff09;\u4f18\u5316&#xff0c;\u4f7f\u78c1\u76d8 I\/O \u5ef6\u8fdf\u6574\u4f53\u4e0b\u964d 42%&#xff0c;\u4fdd\u969c\u4e86 3 \u79d2\u51fa\u5757\u5468\u671f\u7684\u6301\u4e45\u7a33\u5b9a\u6027&#xff1b;<\/li>\n<li>StateDB \u72b6\u6001\u526a\u679d&#xff08;Pruning&#xff09;\u4e0e\u5f52\u6863\u8282\u70b9\u8bbe\u8ba1&#xff1a;\u9488\u5bf9\u666e\u901a\u89c2\u5bdf\u8005\u8282\u70b9&#xff0c;\u5f00\u542f &#8211;gcmode full&#xff0c;\u7cfb\u7edf\u81ea\u52a8\u4fdd\u7559\u6700\u8fd1 128 \u4e2a\u533a\u5757\u7684 Trie \u72b6\u6001\u6811&#xff0c;\u5bf9\u4e8e\u66f4\u65e9\u7684\u8fc7\u671f\u4e2d\u95f4\u72b6\u6001\u6267\u884c\u5783\u573e\u56de\u6536&#xff0c;\u5c06\u5355\u8282\u70b9\u78c1\u76d8\u5e74\u589e\u957f\u91cf\u4e25\u683c\u538b\u5236\u5728 150 GB \u4ee5\u5185&#xff1b;\u800c\u5bf9\u4e8e\u6838\u5fc3\u7248\u6743\u5ba1\u8ba1\u5f52\u6863\u8282\u70b9&#xff0c;\u5219\u914d\u7f6e &#8211;gcmode archive&#xff0c;\u5b8c\u6574\u4fdd\u5b58\u5386\u53f2\u4efb\u4e00\u7eb3\u79d2\u7684\u8d26\u6237\u4f59\u989d\u4e0e\u5408\u7ea6\u5b58\u50a8\u69fd&#xff0c;\u6ee1\u8db3\u6cd5\u5f8b\u516c\u8bc1\u7684\u968f\u65f6\u56de\u6eaf\u9700\u6c42\u3002<\/li>\n<\/ul>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>genesis.json \u662f\u94fe\u4e0a\u65f6\u7a7a\u7684\u5baa\u6cd5\u7ea7\u5b9a\u4e49&#xff0c;\u786c\u5206\u53c9\u5f52\u96f6\u4e0e MPT \u72b6\u6001\u6811\u7684\u786e\u5b9a\u6027\u521d\u59cb\u5316\u4e3a\u6574\u4e2a\u751f\u6001\u5960\u5b9a\u4e86\u53ef\u9760\u57fa\u51c6\u3002<\/p>\n<h3>\u7b2c2\u7ae0 extradata \u7f16\u7801\u4e0e\u521d\u59cb\u9a8c\u8bc1\u8005\u6ce8\u5165<\/h3>\n<p>\u5728 Clique \u534f\u8bae\u4e2d&#xff0c;extradata \u5b57\u6bb5\u88ab\u8d4b\u4e88\u4e86\u6781\u5ea6\u5173\u952e\u7684\u5bc6\u7801\u5b66\u804c\u8d23\u3002\u5b83\u5e76\u975e\u81ea\u7531\u6587\u672c\u5907\u6ce8&#xff0c;\u800c\u662f\u4e25\u683c\u5c01\u88c5\u4e86\u521d\u59cb\u7b7e\u540d\u8005\u540d\u5355\u4e0e\u533a\u5757\u7b7e\u540d\u7684\u4e8c\u8fdb\u5236\u5bb9\u5668\u3002<\/p>\n<h4>2.1 extradata \u7684\u4e09\u6bb5\u5f0f\u4e8c\u8fdb\u5236\u5e03\u5c40<\/h4>\n<p>Clique \u534f\u8bae\u5bf9 extradata \u7684\u5b57\u8282\u5e03\u5c40\u6709\u7740\u7cbe\u786e\u5230\u5b57\u8282\u7684\u4e25\u5bc6\u89c4\u8303&#xff1a;<\/p>\n<li>\u524d\u7f00\u4fdd\u7559\u6bb5&#xff08;Vanity Data&#xff0c;\u56fa\u5b9a 32 \u5b57\u8282&#xff09;&#xff1a;\u524d 32 \u5b57\u8282&#xff08;64 \u4e2a\u5341\u516d\u8fdb\u5236\u5b57\u7b26&#xff09;\u7531\u51fa\u5757\u5ba2\u6237\u7aef\u968f\u610f\u586b\u5199&#xff0c;\u901a\u5e38\u586b\u5145\u5168\u96f6&#xff08;0x000&#8230;&#xff09;\u6216\u81ea\u5b9a\u4e49\u7684\u5ba2\u6237\u7aef\u6807\u8bc6&#xff1b;<\/li>\n<li>\u6388\u6743\u7b7e\u540d\u8005\u5217\u8868\u6bb5&#xff08;Signers List&#xff0c;20 \u4e58\u4ee5 N \u5b57\u8282&#xff09;&#xff1a;\u5728\u7b2c 32 \u5b57\u8282\u4e4b\u540e&#xff0c;\u7d27\u63a5\u7740\u6392\u5217\u6240\u6709\u7684\u6388\u6743\u9a8c\u8bc1\u8005\u516c\u94a5\u5730\u5740\u3002\u6bcf\u4e2a\u4ee5\u592a\u574a\u5730\u5740\u5360 20 \u5b57\u8282\u3002\u82e5\u7f51\u7edc\u6709 1 \u4e2a\u521d\u59cb\u7b7e\u540d\u8005&#xff0c;\u8be5\u6bb5\u5360 20 \u5b57\u8282&#xff1b;\u82e5\u6709 3 \u4e2a&#xff0c;\u5219\u5360 60 \u5b57\u8282&#xff0c;\u4e14\u5730\u5740\u5fc5\u987b\u6309\u5c0f\u7aef\u6216\u5b57\u5178\u5e8f\u5347\u5e8f\u6392\u5217&#xff1b;<\/li>\n<li>\u540e\u7f00\u7b7e\u540d\u6bb5&#xff08;Signature Seal&#xff0c;\u56fa\u5b9a 65 \u5b57\u8282&#xff09;&#xff1a;\u672b\u5c3e 65 \u5b57\u8282&#xff08;130 \u4e2a\u5341\u516d\u8fdb\u5236\u5b57\u7b26&#xff09;\u7528\u4e8e\u5b58\u653e\u51fa\u5757\u8005\u5bf9\u8be5\u533a\u5757\u5934&#xff08;\u6392\u9664\u7b7e\u540d\u6bb5\u672c\u8eab&#xff09;\u6240\u751f\u6210\u7684 secp256k1 \u6570\u5b57\u7b7e\u540d&#xff08;r, s, v&#xff09;\u3002\u5728\u521b\u4e16\u533a\u5757\u4e2d&#xff0c;\u7531\u4e8e\u65e0\u9700\u5bf9\u81ea\u8eab\u7b7e\u540d&#xff0c;\u8be5 65 \u5b57\u8282\u5168\u90e8\u4ee5 0x00 \u586b\u5145\u3002<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011Clique extradata \u7f16\u7801\u4e0e\u9a8c\u8bc1 Python \u811a\u672c<\/h5>\n<p><span class=\"token comment\"># -*- coding: utf-8 -*-<\/span><br \/>\n<span class=\"token comment\"># Clique extradata \u6784\u9020\u4e0e\u6821\u9a8c\u5de5\u5177<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">build_clique_extradata<\/span><span class=\"token punctuation\">(<\/span>signers<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    VANITY_LEN <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">32<\/span><br \/>\n    SIGNER_LEN <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">20<\/span><br \/>\n    SEAL_LEN <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">65<\/span><\/p>\n<p>    vanity <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">b&#039;\\\\x00&#039;<\/span> <span class=\"token operator\">*<\/span> VANITY_LEN<br \/>\n    signers_bytes <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">b&#039;&#039;<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6309\u7167\u4ee5\u592a\u574a\u89c4\u8303\u5bf9\u5730\u5740\u6392\u5e8f<\/span><br \/>\n    sorted_signers <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">sorted<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span>s<span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>replace<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;0x&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> s <span class=\"token keyword\">in<\/span> signers<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> s <span class=\"token keyword\">in<\/span> sorted_signers<span class=\"token punctuation\">:<\/span><br \/>\n        signers_bytes <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token builtin\">bytes<\/span><span class=\"token punctuation\">.<\/span>fromhex<span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">)<\/span><\/p>\n<p>    seal <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">b&#039;\\\\x00&#039;<\/span> <span class=\"token operator\">*<\/span> SEAL_LEN<br \/>\n    extradata_bytes <span class=\"token operator\">&#061;<\/span> vanity <span class=\"token operator\">&#043;<\/span> signers_bytes <span class=\"token operator\">&#043;<\/span> seal<br \/>\n    extradata_hex <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;0x&#039;<\/span> <span class=\"token operator\">&#043;<\/span> extradata_bytes<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">hex<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    expected_len <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">(<\/span>VANITY_LEN <span class=\"token operator\">&#043;<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>signers<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> SIGNER_LEN <span class=\"token operator\">&#043;<\/span> SEAL_LEN<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">2<\/span><br \/>\n    <span class=\"token keyword\">assert<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>extradata_hex<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> expected_len<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;extradata \u957f\u5ea6\u8ba1\u7b97\u4e0d\u7b26&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> extradata_hex<\/p>\n<p><span class=\"token comment\"># \u793a\u4f8b\u6784\u5efa\u5355\u9a8c\u8bc1\u8005 extradata<\/span><br \/>\ndummy_validator <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;0xe0447e5b0078028bebe89759d5cb9bc513b69255&#034;<\/span><br \/>\nres_hex <span class=\"token operator\">&#061;<\/span> build_clique_extradata<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span>dummy_validator<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u751f\u6210\u7684 Clique extradata \u957f\u5ea6: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>res_hex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u5b57\u7b26 (\u5bf9\u5e94 117 \u5b57\u8282)&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">assert<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>res_hex<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">2<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">117<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">2<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011extradata \u5b57\u8282\u957f\u5ea6\u7ea6\u675f\u65b9\u7a0b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">Lextradata&#061;32&#043;(20\u22c5Nsigners)&#043;65&#061;97&#043;20\u22c5Nsigners\u00a0\u5b57\u8282\u5176\u4e2d\u00a0Nsigners\u22651<br \/>\nL_{extradata} &#061; 32 &#043; (20 \\\\cdot N_{signers}) &#043; 65 &#061; 97 &#043; 20 \\\\cdot N_{signers} \\\\text{ \u5b57\u8282} \\\\\\\\<br \/>\n\\\\text{\u5176\u4e2d } N_{signers} \\\\ge 1<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">L<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">e<\/span><span class=\"mord mathnormal mtight\">x<\/span><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">r<\/span><span class=\"mord mathnormal mtight\">a<\/span><span class=\"mord mathnormal mtight\">d<\/span><span class=\"mord mathnormal mtight\">a<\/span><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\">a<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7278em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">32<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mopen\">(<\/span><span class=\"mord\">20<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.0361em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">s<\/span><span class=\"mord mathnormal mtight\">i<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><span class=\"mord mathnormal mtight\">n<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">er<\/span><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">65<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7278em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">97<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">20<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">s<\/span><span class=\"mord mathnormal mtight\">i<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><span class=\"mord mathnormal mtight\">n<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">er<\/span><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord text\"><span class=\"mord\">\u00a0<\/span><span class=\"mord cjk_fallback\">\u5b57\u8282<\/span><\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord text\"><span class=\"mord cjk_fallback\">\u5176\u4e2d<\/span><span class=\"mord\">\u00a0<\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">s<\/span><span class=\"mord mathnormal mtight\">i<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><span class=\"mord mathnormal mtight\">n<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">er<\/span><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2265<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">1<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8be5\u516c\u5f0f\u754c\u5b9a\u4e86\u521b\u4e16\u5757 extradata \u957f\u5ea6\u7684\u5408\u6cd5\u6027\u3002\u82e5\u586b\u5165\u7684\u5341\u516d\u8fdb\u5236\u5b57\u7b26\u4e32\u957f\u5ea6\u4e0d\u6ee1\u8db3\u8981\u6c42&#xff0c;Geth \u8282\u70b9\u5728\u6267\u884c geth init \u65f6\u5c06\u76f4\u63a5\u629b\u51fa\u81f4\u547d\u89e3\u6790\u9519\u8bef\u5e76\u62d2\u7edd\u542f\u52a8\u3002<\/p>\n<h4>2.2 \u5e38\u89c1\u9519\u8bef\u4e0e\u6821\u9a8c\u907f\u5751\u6307\u5357<\/h4>\n<p>\u5728\u5de5\u7a0b\u90e8\u7f72\u5b9e\u8df5\u4e2d&#xff0c;\u5de5\u7a0b\u5e08\u6700\u5e38\u72af\u7684\u4e24\u5927\u9519\u8bef&#xff1a;<\/p>\n<ul>\n<li>\u5730\u5740\u5e26 0x \u524d\u7f00\u6216\u5927\u5c0f\u5199\u6df7\u6dc6&#xff1a;\u62fc\u63a5 extradata \u65f6\u5fc5\u987b\u5254\u9664\u5730\u5740\u7684 0x \u524d\u7f00&#xff0c;\u5e76\u786e\u4fdd\u4e3a\u6807\u51c6\u7684 40 \u4f4d hex \u5b57\u7b26&#xff1b;<\/li>\n<li>\u9057\u6f0f\u672b\u5c3e 65 \u5b57\u8282 Seal&#xff1a;\u8bef\u5c06\u524d\u7f00\u52a0\u5730\u5740\u5f53\u6210\u5b8c\u6574 extradata&#xff0c;\u5bfc\u81f4 Geth \u62a5\u9519 invalid extradata for clique\u3002\u5fc5\u987b\u786e\u4fdd\u672b\u5c3e\u51c6\u786e\u8865\u9f50 130 \u4e2a 0\u3002<\/li>\n<\/ul>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>extradata \u7684\u4e09\u6bb5\u5f0f\u4e25\u8c28\u7f16\u7801\u662f Clique \u5171\u8bc6\u8bc6\u522b\u6388\u6743\u51fa\u5757\u8005\u7684\u7269\u7406\u4f9d\u636e&#xff0c;\u683c\u5f0f\u7684\u51c6\u786e\u6027\u76f4\u63a5\u51b3\u5b9a\u94fe\u521d\u59cb\u5316\u6210\u8d25\u3002<\/p>\n<h3>\u7b2c3\u7ae0 alloc \u521b\u4e16\u5206\u914d\u4e0e\u7ecf\u6d4e\u5e95\u5ea7\u6620\u5c04<\/h3>\n<p>\u4ee3\u5e01\u7684\u521b\u4e16\u5206\u914d\u4e0d\u4ec5\u662f\u6280\u672f\u8d26\u672c\u7684\u521d\u59cb\u8d4b\u503c&#xff0c;\u66f4\u662f\u6574\u4e2a\u5546\u4e1a\u751f\u6001\u7684\u5229\u76ca\u540c\u76df\u57fa\u77f3\u3002RNOISE \u521b\u4e16\u5206\u914d\u5fe0\u5b9e\u53cd\u6620\u4e86 RNS \u5b98\u65b9\u767d\u76ae\u4e66\u4e2d\u7684\u516d\u94b1\u5305\u7ecf\u6d4e\u5b66\u6a21\u578b\u3002<\/p>\n<h4>3.1 \u516d\u94b1\u5305\u521d\u59cb\u5206\u914d\u7cbe\u7b97<\/h4>\n<p>\u5728 10 \u4ebf\u679a\u4ee3\u5e01\u603b\u91cf\u786c\u9876\u4e0b&#xff0c;\u521b\u4e16\u6587\u4ef6\u4e2d\u901a\u8fc7 alloc \u9884\u7f6e\u4e86 5 \u4e2a\u6838\u5fc3\u8d44\u91d1\u6c60\u7684\u521d\u59cb\u4f59\u989d&#xff08;\u5171\u8ba1 8 \u4ebf\u679a&#xff09;&#xff0c;\u5269\u4f59 2 \u4ebf\u679a\u9884\u7559\u7ed9 IDO \u9884\u552e\u5408\u7ea6&#xff1a;<\/p>\n<li>\u56e2\u961f\u94b1\u5305&#xff08;15%&#xff09;&#xff1a;150,000,000 RNS&#xff08;150000000000000000000000000 wei&#xff09;&#xff0c;\u7528\u4e8e\u6838\u5fc3\u534f\u8bae\u957f\u671f\u7814\u53d1&#xff0c;\u914d\u5408\u5916\u90e8\u7ebf\u6027\u91ca\u653e\u9501\u4ed3&#xff1b;<\/li>\n<li>\u751f\u6001\u53d1\u5c55\u57fa\u91d1&#xff08;25%&#xff09;&#xff1a;250,000,000 RNS&#xff0c;\u7528\u4e8e\u6276\u6301\u72ec\u7acb\u97f3\u4e50\u5382\u724c\u5408\u4f5c\u3001\u7b2c\u4e09\u65b9\u5f00\u53d1\u8005\u5de5\u5177\u8d44\u52a9\u4e0e\u8282\u70b9\u5956\u52b1&#xff1b;<\/li>\n<li>\u521b\u4f5c\u8005\u6fc0\u52b1\u6c60&#xff08;20%&#xff09;&#xff1a;200,000,000 RNS&#xff0c;\u6ce8\u5165\u7a7a\u6295\u5206\u53d1\u5408\u7ea6&#xff0c;\u7528\u4e8e\u97f3\u4e50\u4eba\u53d1\u6b4c\u786e\u6743\u5956\u52b1\u4e0e\u6d41\u5a92\u4f53\u64ad\u653e\u6fc0\u52b1&#xff1b;<\/li>\n<li>\u6d41\u52a8\u6027\u50a8\u5907\u6c60&#xff08;10%&#xff09;&#xff1a;100,000,000 RNS&#xff0c;\u4e3a\u591a\u94fe\u8de8\u94fe\u6865\u53ca\u53bb\u4e2d\u5fc3\u5316\u4ea4\u6613\u5bf9\u63d0\u4f9b\u505a\u5e02\u6d41\u52a8\u6027\u5e95\u4ed3&#xff1b;<\/li>\n<li>\u65e9\u671f\u79c1\u52df\u4efd\u989d&#xff08;10%&#xff09;&#xff1a;100,000,000 RNS&#xff0c;\u5f52\u5c5e\u4e8e\u6218\u7565\u751f\u6001\u652f\u6301\u4f19\u4f34&#xff1b;<\/li>\n<li>IDO \u9884\u552e\u6c60&#xff08;20%&#xff09;&#xff1a;200,000,000 RNS&#xff0c;\u4e0d\u5728\u521b\u4e16\u4e2d\u76f4\u63a5\u5206\u53d1&#xff0c;\u800c\u662f\u5728\u90e8\u7f72 RNSToken.sol \u667a\u80fd\u5408\u7ea6\u65f6\u7531\u5408\u7ea6\u6784\u9020\u51fd\u6570\u76f4\u63a5\u94f8\u9020\u5e76\u8f6c\u79fb\u81f3\u9884\u552e\u5408\u7ea6\u3002<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011\u521b\u4e16 alloc \u4efd\u989d\u4e00\u81f4\u6027\u6821\u9a8c\u65ad\u8a00\u811a\u672c<\/h5>\n<p><span class=\"token comment\"># -*- coding: utf-8 -*-<\/span><br \/>\n<span class=\"token comment\"># \u521b\u4e16 alloc \u603b\u91cf\u5b88\u6052\u6838\u67e5<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">verify_alloc_balances<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    ALLOC_WEIGHTS <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string\">&#034;TEAM&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">150_000_000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;ECOSYSTEM&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">250_000_000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;CREATOR_POOL&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">200_000_000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;LIQUIDITY&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">100_000_000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;PRIVATE_SALE&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">100_000_000<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    RESERVED_IDO <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">200_000_000<\/span><br \/>\n    TOTAL_MAX_CAP <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1_000_000_000<\/span><\/p>\n<p>    alloc_sum <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">sum<\/span><span class=\"token punctuation\">(<\/span>ALLOC_WEIGHTS<span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    total_projected <span class=\"token operator\">&#061;<\/span> alloc_sum <span class=\"token operator\">&#043;<\/span> RESERVED_IDO<\/p>\n<p>    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u521b\u4e16\u9884\u7f6e\u4f59\u989d\u603b\u548c: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>alloc_sum<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">,<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> RNS (<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>alloc_sum<span class=\"token operator\">\/<\/span>TOTAL_MAX_CAP<span class=\"token operator\">*<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.1f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">%)&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u5408\u7ea6\u90e8\u7f72\u9884\u7559 IDO: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>RESERVED_IDO<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">,<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> RNS (<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>RESERVED_IDO<span class=\"token operator\">\/<\/span>TOTAL_MAX_CAP<span class=\"token operator\">*<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.1f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">%)&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u751f\u6001\u89c4\u5212\u603b\u91cf\u603b\u548c: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>total_projected<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">,<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> RNS&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">assert<\/span> total_projected <span class=\"token operator\">&#061;&#061;<\/span> TOTAL_MAX_CAP<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u521b\u4e16\u4ee3\u5e01\u603b\u91cf\u4e0e 10 \u4ebf\u786c\u9876\u53d1\u751f\u504f\u79bb&#xff01;&#034;<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u516d\u94b1\u5305\u5206\u914d\u6bd4\u4f8b\u6821\u9a8c 100% \u543b\u5408\u767d\u76ae\u4e66\u3002&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>verify_alloc_balances<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011\u4ee3\u5e01\u603b\u91cf\u5e73\u8861\u5b88\u6052\u5b9a\u7406<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">Stotal&#061;\u2211k\u2208allocbalancek&#043;Scontract_mint\u2261109\u22c51018\u00a0wei\u2211i&#061;16wi&#061;15%&#043;25%&#043;20%&#043;10%&#043;10%&#043;20%\u2261100%<br \/>\nS_{total} &#061; \\\\sum_{k \\\\in \\\\text{alloc}} \\\\text{balance}_k &#043; S_{contract\\\\_mint} \\\\equiv 10^9 \\\\cdot 10^{18} \\\\text{ wei} \\\\\\\\<br \/>\n\\\\sum_{i&#061;1}^6 w_i &#061; 15\\\\% &#043; 25\\\\% &#043; 20\\\\% &#043; 10\\\\% &#043; 10\\\\% &#043; 20\\\\% \\\\equiv 100\\\\%<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0576em\">S<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0576em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\">o<\/span><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\">a<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 2.3795em;vertical-align: -1.3295em\"><\/span><span class=\"mop op-limits\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.05em\"><span class=\"\" style=\"top: -1.8479em;margin-left: 0em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0315em\">k<\/span><span class=\"mrel mtight\">\u2208<\/span><span class=\"mord text mtight\"><span class=\"mord mtight\">alloc<\/span><\/span><\/span><\/span><\/span><span class=\"\" style=\"top: -3.05em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"\"><span class=\"mop op-symbol large-op\">\u2211<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.3295em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">balance<\/span><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0315em\">k<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.0503em;vertical-align: -0.367em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0576em\">S<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0576em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">co<\/span><span class=\"mord mathnormal mtight\">n<\/span><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">r<\/span><span class=\"mord mathnormal mtight\">a<\/span><span class=\"mord mathnormal mtight\">c<\/span><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mtight\" style=\"margin-right: 0.0278em\">_<\/span><span class=\"mord mathnormal mtight\">min<\/span><span class=\"mord mathnormal mtight\">t<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.367em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2261<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8641em\"><\/span><span class=\"mord\">1<\/span><span class=\"mord\"><span class=\"mord\">0<\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.8641em\"><span class=\"\" style=\"top: -3.113em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">9<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8641em\"><\/span><span class=\"mord\">1<\/span><span class=\"mord\"><span class=\"mord\">0<\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.8641em\"><span class=\"\" style=\"top: -3.113em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">18<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord text\"><span class=\"mord\">\u00a0wei<\/span><\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 3.0788em;vertical-align: -1.2777em\"><\/span><span class=\"mop op-limits\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.8011em\"><span class=\"\" style=\"top: -1.8723em;margin-left: 0em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">i<\/span><span class=\"mrel mtight\">&#061;<\/span><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><span class=\"\" style=\"top: -3.05em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"\"><span class=\"mop op-symbol large-op\">\u2211<\/span><\/span><\/span><span class=\"\" style=\"top: -4.3em;margin-left: 0em\"><span class=\"pstrut\" style=\"height: 3.05em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">6<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.2777em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0269em\">w<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3117em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0269em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">i<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">15%<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">25%<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">20%<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">10%<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">10%<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8056em;vertical-align: -0.0556em\"><\/span><span class=\"mord\">20%<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2261<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8056em;vertical-align: -0.0556em\"><\/span><span class=\"mord\">100%<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8be5\u516c\u5f0f\u786e\u7acb\u4e86\u4ee3\u5e01\u7ecf\u6d4e\u5b66\u7684\u7269\u7406\u5b88\u6052\u8fb9\u754c\u3002\u65e0\u8bba\u662f\u521b\u4e16\u539f\u751f\u72b6\u6001\u5206\u914d&#xff0c;\u8fd8\u662f\u540e\u7eed\u667a\u80fd\u5408\u7ea6\u90e8\u7f72&#xff0c;\u4ee3\u5e01\u603b\u91cf\u5728\u4efb\u4f55\u65f6\u7a7a\u7ef4\u5ea6\u4e0a\u90fd\u4e25\u7981\u7a81\u7834 10 \u4ebf\u679a\u7684\u7edd\u5bf9\u786c\u9876\u3002<\/p>\n<h4>3.2 18 \u4f4d\u9ad8\u7cbe\u5ea6&#xff08;Decimals&#xff09;\u7684\u5de5\u7a0b\u5fc5\u7136\u6027<\/h4>\n<p>\u4e0e\u4ee5\u592a\u574a\u6807\u51c6\u4e00\u81f4&#xff0c;RNS \u539f\u751f\u91c7\u7528 18 \u4f4d\u7cbe\u5ea6&#xff1a;<\/p>\n<ul>\n<li>\u4fdd\u8bc1\u5728\u6781\u5176\u5fae\u5c0f\u7684\u7248\u6743\u70b9\u64ad&#xff08;\u5982 0.000001 RNS&#xff09;\u5206\u6da6\u65f6&#xff0c;\u667a\u80fd\u5408\u7ea6\u5185\u90e8\u6574\u6570\u8fd0\u7b97\u4f9d\u7136\u5177\u5907\u5145\u8db3\u7684\u6700\u5c0f\u6709\u6548\u4f4d&#xff1b;<\/li>\n<li>\u907f\u514d\u7531\u4e8e\u7cbe\u5ea6\u622a\u65ad&#xff08;Precision Truncation&#xff09;\u5bfc\u81f4\u7684\u7248\u6743\u8d44\u635f\u4e0e\u820d\u5165\u8bef\u5dee\u3002<\/li>\n<\/ul>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>alloc \u521b\u4e16\u914d\u7f6e\u662f\u4ee3\u5e01\u7ecf\u6d4e\u6a21\u578b\u7684\u7b2c\u4e00\u6b21\u7269\u7406\u56fa\u5316&#xff0c;\u4e25\u683c\u7684\u6570\u5b66\u5b88\u6052\u4fdd\u969c\u4e86\u751f\u6001\u8d44\u4ea7\u7684\u4e25\u8083\u6027\u3002<\/p>\n<h3>\u7b2c4\u7ae0 node.toml \u914d\u7f6e\u6587\u4ef6\u6df1\u5165\u89e3\u5256\u4e0e\u4ea4\u6613\u6c60\u8c03\u4f18<\/h3>\n<p>Geth \u8282\u70b9\u4e0d\u4ec5\u53ef\u4ee5\u901a\u8fc7\u5197\u957f\u7684\u547d\u4ee4\u884c\u53c2\u6570\u542f\u52a8&#xff0c;\u66f4\u53ef\u4ee5\u901a\u8fc7\u6807\u51c6\u5316\u7684 TOML \u914d\u7f6e\u6587\u4ef6\u5b9e\u73b0\u7248\u672c\u5316\u53d7\u63a7\u8fd0\u7ef4\u3002node.toml \u5c01\u88c5\u4e86\u7f51\u7edc\u8fde\u63a5\u3001\u5b58\u50a8\u5f15\u64ce\u3001\u4ea4\u6613\u6c60\u961f\u5217\u4e0e\u5b89\u5168\u7f51\u5173\u7b56\u7565\u3002<\/p>\n<h4>4.1 \u751f\u4ea7\u7ea7 node.toml \u9010\u6bb5\u5256\u6790<\/h4>\n<p>\u751f\u4ea7\u73af\u5883\u4e2d\u7684 node.toml \u5c06\u7cfb\u7edf\u53c2\u6570\u6536\u655b\u4e3a\u56db\u4e2a\u6838\u5fc3\u9886\u57df&#xff1a;<\/p>\n<li>[Eth] \u94fe\u534f\u8bae\u914d\u7f6e&#xff1a;\n<ul>\n<li>NetworkId &#061; 20260616&#xff1a;\u5f3a\u5236\u4e0e\u521b\u4e16 Chain ID \u5bf9\u9f50&#xff0c;\u9632\u6b62\u610f\u5916\u63a5\u5165\u5916\u90e8\u4ee5\u592a\u574a\u6d4b\u8bd5\u7f51&#xff1b;<\/li>\n<li>SyncMode &#061; &#034;full&#034;&#xff1a;\u91c7\u7528\u5168\u72b6\u6001\u540c\u6b65&#xff0c;\u4fdd\u8bc1\u5168\u8282\u70b9\u5bf9\u6bcf\u7b14\u5386\u53f2\u7248\u6743\u4ea4\u6613\u90fd\u6709\u636e\u53ef\u67e5&#xff1b;<\/li>\n<\/ul>\n<\/li>\n<li>[Node] \u8fd0\u884c\u65f6\u5b89\u5168&#xff1a;\n<ul>\n<li>DataDir &#061; &#034;\/var\/lib\/rnoise\/geth&#034;&#xff1a;\u89c4\u8303\u5316\u5b58\u50a8\u8def\u5f84&#xff0c;\u4e0e\u7cfb\u7edf\u76d8\u7269\u7406\u9694\u79bb&#xff1b;<\/li>\n<li>HTTPHost &#061; &#034;127.0.0.1&#034;&#xff1a;\u575a\u51b3\u963b\u65ad\u5916\u7f51\u76f4\u63a5\u89e6\u8fbe RPC \u7aef\u53e3&#xff1b;<\/li>\n<\/ul>\n<\/li>\n<li>[Node.P2P] \u7f51\u7edc\u5bf9\u7b49\u4f53\u63a7\u5236&#xff1a;\n<ul>\n<li>MaxPeers &#061; 50&#xff1a;\u9650\u5236\u6700\u5927\u5e76\u53d1\u8fde\u63a5\u6570&#xff0c;\u9632\u6b62\u6076\u610f\u8282\u70b9\u53d1\u8d77 P2P \u8fde\u63a5\u8017\u5c3d\u653b\u51fb&#xff1b;<\/li>\n<li>ListenAddr &#061; &#034;:30303&#034;&#xff1a;\u6807\u51c6\u7684\u4ee5\u592a\u574a\u5bf9\u7b49\u901a\u4fe1\u7aef\u53e3\u3002<\/li>\n<\/ul>\n<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011\u5b8c\u6574\u751f\u4ea7\u7ea7 node.toml \u4e0e\u4ea4\u6613\u6c60\u8c03\u4f18\u914d\u7f6e\u89c4\u8303<\/h5>\n<p># \/etc\/rnoise\/node.toml &#8211; RNOISE \u6838\u5fc3\u9a8c\u8bc1\u8005\u8282\u70b9\u914d\u7f6e<br \/>\n[Eth]<br \/>\nNetworkId &#061; 20260616<br \/>\nSyncMode &#061; &#034;full&#034;<br \/>\nNoPruning &#061; false<br \/>\nLightPeers &#061; 10<br \/>\nDatabaseCache &#061; 2048<\/p>\n<p>[Eth.TxPool]<br \/>\nLocals &#061; [&#034;0xe0447e5b0078028bebe89759d5cb9bc513b69255&#034;]<br \/>\nNoLocals &#061; false<br \/>\nJournal &#061; &#034;transactions.rlp&#034;<br \/>\nRejournal &#061; &#034;1h0m0s&#034;<br \/>\nPriceLimit &#061; 1000000000  # 1 Gwei \u95e8\u69db<br \/>\nPriceBump &#061; 10           # 10% \u66ff\u6362\u52a0\u4ef7<br \/>\nAccountSlots &#061; 64        # \u5355\u8d26\u6237\u6700\u5927\u6392\u961f\u4ea4\u6613\u6570<br \/>\nGlobalSlots &#061; 8192       # \u5185\u5b58\u6c60\u53ef\u6253\u5305\u4ea4\u6613\u69fd\u4f4d<br \/>\nAccountQueue &#061; 128       # \u975e\u8fde\u7eed nonce \u7f13\u51b2\u961f\u5217<br \/>\nGlobalQueue &#061; 2048       # \u5168\u5c40\u6302\u8d77\u961f\u5217\u603b\u91cf<br \/>\nLifetime &#061; &#034;3h0m0s&#034;      # \u5185\u5b58\u6c60\u6700\u5927\u7559\u5b58\u65f6\u9650<\/p>\n<p>[Node]<br \/>\nDataDir &#061; &#034;\/var\/lib\/rnoise\/geth&#034;<br \/>\nIPCPath &#061; &#034;geth.ipc&#034;<br \/>\nHTTPHost &#061; &#034;127.0.0.1&#034;<br \/>\nHTTPPort &#061; 8545<br \/>\nHTTPCors &#061; [&#034;*&#034;]<br \/>\nHTTPVirtualHosts &#061; [&#034;localhost&#034;, &#034;127.0.0.1&#034;, &#034;api.rnoise.cn&#034;]<br \/>\nHTTPModules &#061; [&#034;eth&#034;, &#034;net&#034;, &#034;web3&#034;]<\/p>\n<p>WSHost &#061; &#034;127.0.0.1&#034;<br \/>\nWSPort &#061; 8546<br \/>\nWSModules &#061; [&#034;eth&#034;, &#034;net&#034;, &#034;web3&#034;]<\/p>\n<p>[Node.P2P]<br \/>\nMaxPeers &#061; 50<br \/>\nListenAddr &#061; &#034;:30303&#034;<br \/>\nEnableMsgEvents &#061; true<\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011\u4ea4\u6613\u6c60\u6392\u961f\u4e0e\u5185\u5b58\u5360\u7528\u8bc4\u4f30\u6a21\u578b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">Mpool\u2248(GlobalSlots&#043;GlobalQueue)\u00d7S\u203etxMpool\u2248(8192&#043;2048)\u00d72.5\u00a0KB\u224825.6\u00a0MB<br \/>\nM_{pool} \\\\approx \\\\big(\\\\text{GlobalSlots} &#043; \\\\text{GlobalQueue}\\\\big) \\\\times \\\\overline{S}_{tx} \\\\\\\\<br \/>\nM_{pool} \\\\approx (8192 &#043; 2048) \\\\times 2.5 \\\\text{ KB} \\\\approx 25.6 \\\\text{ MB}<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">p<\/span><span class=\"mord mathnormal mtight\">oo<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2248<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord\"><span class=\"delimsizing size1\">(<\/span><\/span><span class=\"mord text\"><span class=\"mord\">GlobalSlots<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord text\"><span class=\"mord\">GlobalQueue<\/span><\/span><span class=\"mord\"><span class=\"delimsizing size1\">)<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u00d7<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.0333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord overline\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.8833em\"><span class=\"\" style=\"top: -3em\"><span class=\"pstrut\" style=\"height: 3em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0576em\">S<\/span><\/span><\/span><span class=\"\" style=\"top: -3.8033em\"><span class=\"pstrut\" style=\"height: 3em\"><\/span><span class=\"overline-line\" style=\"border-bottom-width: 0.04em\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2806em\"><span class=\"\" style=\"top: -2.55em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">p<\/span><span class=\"mord mathnormal mtight\">oo<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2248<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mopen\">(<\/span><span class=\"mord\">8192<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord\">2048<\/span><span class=\"mclose\">)<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u00d7<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord\">2.5<\/span><span class=\"mord text\"><span class=\"mord\">\u00a0KB<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2248<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord\">25.6<\/span><span class=\"mord text\"><span class=\"mord\">\u00a0MB<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8be5\u6a21\u578b\u8bc4\u4f30\u4e86\u9ad8\u8d1f\u8f7d\u4e0b Geth \u4ea4\u6613\u5185\u5b58\u6c60\u7684\u7269\u7406\u5f00\u9500\u3002\u901a\u8fc7\u5bf9 GlobalSlots \u4e0e GlobalQueue \u8bbe\u7f6e\u786e\u5b9a\u6027\u4e0a\u9650&#xff0c;\u5c06\u5185\u5b58\u6c60\u5e38\u9a7b\u5f00\u9500\u9650\u5236\u5728 30 MB \u4ee5\u5185&#xff0c;\u5f7b\u5e95\u907f\u514d\u4e86\u7531\u4e8e\u6d77\u91cf\u672a\u51b3\u4ea4\u6613\u5806\u79ef\u5bfc\u81f4\u7684\u8282\u70b9 OOM \u5d29\u6e83\u3002<\/p>\n<h4>4.2 \u5907\u4efd\u8282\u70b9 backup-node.toml \u7684\u5dee\u5f02\u5316\u8bbe\u8ba1<\/h4>\n<p>\u4e0e\u4e3b\u51fa\u5757\u8282\u70b9\u4e0d\u540c&#xff0c;\u53ea\u8bfb\u5907\u4efd\u8282\u70b9\u7684\u914d\u7f6e\u4fa7\u91cd\u4e8e\u9ad8\u5e76\u53d1\u67e5\u8be2\u541e\u5410&#xff1a;<\/p>\n<ul>\n<li>\u589e\u5927 DatabaseCache &#061; 4096&#xff1a;\u5206\u914d\u66f4\u591a\u5185\u5b58\u7528\u4e8e StateDB \u7f13\u5b58&#xff0c;\u4f7f\u5386\u53f2\u5408\u7ea6\u8c03\u7528\u4e0e\u4f59\u989d\u67e5\u8be2\u80fd\u591f\u5b8c\u5168\u5728\u5185\u5b58\u4e2d\u547d\u4e2d&#xff1b;<\/li>\n<li>\u5f00\u542f\u8f7b\u8282\u70b9\u670d\u52a1\u652f\u6301&#xff08;LightServ &#061; 20&#xff09;&#xff1a;\u4e3a\u79fb\u52a8\u7aef\u94b1\u5305\u4e0e\u5fae\u670d\u52a1\u63d0\u4f9b\u5feb\u901f\u72b6\u6001\u51ed\u8bc1\u8bc1\u660e&#xff0c;\u5206\u62c5\u4e3b\u8282\u70b9\u7f51\u7edc\u5f00\u9500&#xff1b;<\/li>\n<li>\u8c03\u5927 MaxPeers &#061; 100&#xff1a;\u627f\u63a5\u66f4\u591a\u5916\u90e8\u89c2\u5bdf\u8005\u5168\u8282\u70b9\u7684\u6570\u636e\u540c\u6b65\u8bf7\u6c42&#xff0c;\u5145\u5f53\u4e3b\u7f51\u524d\u7f6e\u7f13\u51b2\u76fe\u3002<\/li>\n<\/ul>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>node.toml \u4ee5\u7ed3\u6784\u5316\u5de5\u7a0b\u89c4\u8303\u9501\u5b9a\u4e86\u8282\u70b9\u8fd0\u884c\u6001\u53c2\u6570&#xff0c;\u5b9e\u73b0\u4e86\u8fd0\u7ef4\u914d\u7f6e\u7684\u4ee3\u7801\u5316\u4e0e\u4ea4\u6613\u6c60\u5185\u5b58\u8fb9\u754c\u7684\u786e\u5b9a\u6027\u9501\u5b9a\u3002<\/p>\n<h3>\u7b2c5\u7ae0 \u8282\u70b9\u521d\u59cb\u5316\u4e0e keystore \u8d26\u6237\u5b89\u5168\u7ba1\u7406<\/h3>\n<p>\u5c06 genesis.json \u8f6c\u5316\u4e3a\u78c1\u76d8\u4e0a\u7684\u5b9e\u9645\u6570\u636e\u5e93\u662f\u4e00\u6b21\u5355\u5411\u521d\u59cb\u5316\u8fc7\u7a0b\u3002Geth \u63d0\u4f9b\u4e86\u6807\u51c6\u7684 init \u6307\u4ee4\u6765\u5b8c\u6210\u6570\u636e\u76ee\u5f55\u7684\u4e16\u754c\u72b6\u6001\u6784\u5efa&#xff0c;\u540c\u65f6\u4f9d\u6258 KeyStore V3 \u89c4\u8303\u4fdd\u62a4\u51fa\u5757\u5bc6\u94a5\u4e3b\u6743\u3002<\/p>\n<h4>5.1 geth init \u6267\u884c\u751f\u547d\u5468\u671f\u4e0e\u72b6\u6001\u6811\u521d\u59cb\u5316<\/h4>\n<p>\u6267\u884c geth init \u65f6&#xff0c;\u5e95\u5c42\u5ba2\u6237\u7aef\u5b8c\u6210\u4ee5\u4e0b\u539f\u5b50\u52a8\u4f5c&#xff1a;<\/p>\n<li>\u6821\u9a8c genesis.json \u8bed\u6cd5\u7684\u5b8c\u5907\u6027\u4e0e\u5b57\u6bb5\u5b8c\u6574\u5ea6&#xff1b;<\/li>\n<li>\u5728\u6307\u5b9a\u7684 &#8211;datadir \u76ee\u5f55\u4e0b\u521b\u5efa geth\/chaindata&#xff08;\u5b58\u653e LevelDB\/PebbleDB \u72b6\u6001\u6570\u636e&#xff09;\u4e0e keystore \u6587\u4ef6\u5939&#xff1b;<\/li>\n<li>\u5c06 genesis \u533a\u5757\u7f16\u7801\u4e3a RLP \u683c\u5f0f&#xff0c;\u8ba1\u7b97\u5176 BlockHash&#xff0c;\u5e76\u5c06\u5176\u4f5c\u4e3a Block #0 \u5199\u5165\u6570\u636e\u5e93\u5e95\u5ea7&#xff1b;<\/li>\n<li>\u521d\u59cb\u72b6\u6001\u6839&#xff08;StateRoot&#xff09;\u56fa\u5316\u8fdb\u6570\u636e\u5e93\u7d22\u5f15&#xff0c;\u5f62\u6210\u96f6\u53f7\u5757\u4e16\u754c\u72b6\u6001\u955c\u50cf\u3002<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011\u8282\u70b9\u81ea\u52a8\u5316\u521d\u59cb\u5316\u4e0e\u8d26\u6237\u521b\u5efa Shell \u811a\u672c<\/h5>\n<p><span class=\"token shebang important\">#!\/usr\/bin\/env bash<\/span><br \/>\n<span class=\"token comment\"># rnoise-node-init.sh &#8211; \u521d\u59cb\u5316\u8282\u70b9\u5e76\u914d\u7f6e\u6570\u636e\u5377<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p><span class=\"token assign-left variable\">DATA_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/var\/lib\/rnoise\/geth&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">GENESIS_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/etc\/rnoise\/genesis.json&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 [1\/3] \u521b\u5efa\u89c4\u8303\u5316\u6570\u636e\u76ee\u5f55&#8230;&#034;<\/span><br \/>\n<span class=\"token function\">mkdir<\/span> <span class=\"token parameter variable\">-p<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${DATA_DIR}<\/span>&#034;<\/span><br \/>\n<span class=\"token function\">chmod<\/span> <span class=\"token number\">700<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${DATA_DIR}<\/span>&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 [2\/3] \u6267\u884c Geth \u521b\u4e16\u521d\u59cb\u5316&#8230;&#034;<\/span><br \/>\ngeth <span class=\"token parameter variable\">&#8211;datadir<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${DATA_DIR}<\/span>&#034;<\/span> init <span class=\"token string\">&#034;<span class=\"token variable\">${GENESIS_FILE}<\/span>&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 [3\/3] \u9a8c\u8bc1\u521b\u4e16\u5757\u9ad8\u5ea6\u4e0e\u54c8\u5e0c&#8230;&#034;<\/span><br \/>\ngeth <span class=\"token parameter variable\">&#8211;datadir<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${DATA_DIR}<\/span>&#034;<\/span> <span class=\"token parameter variable\">&#8211;exec<\/span> <span class=\"token string\">&#034;eth.getBlock(0)&#034;<\/span> console <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-E<\/span> <span class=\"token string\">&#034;(hash|stateRoot)&#034;<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8282\u70b9\u6570\u636e\u76ee\u5f55\u521d\u59cb\u5316\u5b8c\u6bd5&#xff0c;\u53ef\u5b89\u5168\u542f\u52a8\u670d\u52a1\u3002&#034;<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011KeyStore V3 Scrypt \u5bc6\u94a5\u6d3e\u751f\u4e0e MAC \u6821\u9a8c\u6a21\u578b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">DK&#061;scrypt(P,S,N&#061;8192,r&#061;8,p&#061;1,dklen&#061;32)MAC&#061;keccak256(DK[16:32]\u2225C)Ciphertext\u00a0C&#061;AES-128-CTR(DK[0:16],IV,sk)<br \/>\nDK &#061; \\\\text{scrypt}\\\\big(P, S, N&#061;8192, r&#061;8, p&#061;1, dklen&#061;32\\\\big) \\\\\\\\<br \/>\n\\\\text{MAC} &#061; \\\\text{keccak256}\\\\big(DK[16:32] \\\\parallel C\\\\big) \\\\\\\\<br \/>\n\\\\text{Ciphertext } C &#061; \\\\text{AES-128-CTR}\\\\big(DK[0:16], IV, sk\\\\big)<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">D<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0715em\">K<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord text\"><span class=\"mord\">scrypt<\/span><\/span><span class=\"mord\"><span class=\"delimsizing size1\">(<\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">P<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0576em\">S<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8389em;vertical-align: -0.1944em\"><\/span><span class=\"mord\">8192<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">r<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8389em;vertical-align: -0.1944em\"><\/span><span class=\"mord\">8<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\">p<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8889em;vertical-align: -0.1944em\"><\/span><span class=\"mord\">1<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\">d<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0315em\">k<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0197em\">l<\/span><span class=\"mord mathnormal\">e<\/span><span class=\"mord mathnormal\">n<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord\">32<\/span><span class=\"mord\"><span class=\"delimsizing size1\">)<\/span><\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord text\"><span class=\"mord\">MAC<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord text\"><span class=\"mord\">keccak256<\/span><\/span><span class=\"mord\"><span class=\"delimsizing size1\">(<\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">D<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0715em\">K<\/span><span class=\"mopen\">[<\/span><span class=\"mord\">16<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">:<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord\">32<\/span><span class=\"mclose\">]<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2225<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0715em\">C<\/span><span class=\"mord\"><span class=\"delimsizing size1\">)<\/span><\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8889em;vertical-align: -0.1944em\"><\/span><span class=\"mord text\"><span class=\"mord\">Ciphertext\u00a0<\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0715em\">C<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord text\"><span class=\"mord\">AES-128-CTR<\/span><\/span><span class=\"mord\"><span class=\"delimsizing size1\">(<\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">D<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0715em\">K<\/span><span class=\"mopen\">[<\/span><span class=\"mord\">0<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">:<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord\">16<\/span><span class=\"mclose\">]<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0785em\">I<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.2222em\">V<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\">s<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0315em\">k<\/span><span class=\"mord\"><span class=\"delimsizing size1\">)<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u4ee5\u592a\u574a Web3 KeyStore V3 \u683c\u5f0f\u901a\u8fc7\u5185\u5b58\u786c\u54c8\u5e0c\u51fd\u6570 Scrypt \u6781\u5927\u589e\u52a0\u4e86\u66b4\u529b\u7834\u89e3 ASIC \u6210\u672c\u3002\u8282\u70b9\u8fd0\u7ef4\u542f\u52a8\u65f6&#xff0c;Geth \u8ba1\u7b97\u6d3e\u751f\u5bc6\u94a5\u5e76\u9a8c\u8bc1 MAC \u4e00\u81f4\u6027&#xff0c;\u5728\u5185\u5b58\u4e2d\u6062\u590d secp256k1 \u79c1\u94a5\u7528\u4e8e\u533a\u5757\u5934\u7b7e\u540d\u3002<\/p>\n<h4>5.2 \u5bc6\u94a5\u5e93&#xff08;KeyStore&#xff09;\u4e0e\u5b89\u5168\u89e3\u5bc6\u9501<\/h4>\n<p>\u5728 PoA \u673a\u5236\u4e0b&#xff0c;\u9a8c\u8bc1\u8005\u8282\u70b9\u5728\u542f\u52a8\u65f6\u5fc5\u987b\u89e3\u9501\u5bf9\u5e94\u7684\u7b7e\u540d\u8d26\u6237\u3002\u4e3a\u4e86\u5b89\u5168\u8d77\u89c1&#xff1a;<\/p>\n<ul>\n<li>\u4e25\u7981\u5c06\u660e\u6587\u5bc6\u7801\u786c\u7f16\u7801\u8fdb\u7cfb\u7edf\u542f\u52a8\u53c2\u6570\u6216\u547d\u4ee4\u884c\u5386\u53f2&#xff08;\u907f\u514d ps aux \u55c5\u63a2&#xff09;&#xff1b;<\/li>\n<li>\u91c7\u7528\u5bc6\u7801\u6587\u4ef6\u4fdd\u62a4\u6a21\u5f0f&#xff08;&#8211;password \/path\/to\/secured.pwd&#xff09;&#xff0c;\u5e76\u5c06\u8be5\u6587\u4ef6\u6743\u9650\u9501\u5b9a\u4e3a chmod 400&#xff0c;\u7531\u72ec\u7acb\u8fd0\u7ef4\u51ed\u8bc1\u7ba1\u7406\u5668\u52a8\u6001\u6ce8\u5165\u5185\u5b58\u76d8&#xff1b;<\/li>\n<li>\u8282\u70b9\u8fdb\u7a0b\u542f\u52a8\u5e76\u5b8c\u6210\u7b7e\u540d\u6ce8\u5165\u540e&#xff0c;\u5bc6\u7801\u6587\u4ef6\u7acb\u5373\u6267\u884c\u8986\u5199\u9500\u6bc1&#xff0c;\u5f7b\u5e95\u9632\u8303\u7269\u7406\u8f6c\u50a8\u653b\u51fb\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011KeyStore V3 \u6587\u4ef6\u7ed3\u6784\u53ea\u8bfb\u9a8c\u8bc1 Python \u5de5\u5177<\/h5>\n<p><span class=\"token comment\"># -*- coding: utf-8 -*-<\/span><br \/>\n<span class=\"token comment\"># keystore_validator.py &#8211; \u68c0\u9a8c KeyStore \u6587\u4ef6\u89c4\u8303\u6027<\/span><br \/>\n<span class=\"token keyword\">import<\/span> json<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">validate_keystore_json<\/span><span class=\"token punctuation\">(<\/span>content_str<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        data <span class=\"token operator\">&#061;<\/span> json<span class=\"token punctuation\">.<\/span>loads<span class=\"token punctuation\">(<\/span>content_str<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">assert<\/span> data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;version&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5fc5\u987b\u4e3a KeyStore Version 3&#034;<\/span><br \/>\n        crypto <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;crypto&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">assert<\/span> crypto<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;cipher&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;aes-128-ctr&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5bc6\u7801\u5957\u4ef6\u5fc5\u987b\u4e3a aes-128-ctr&#034;<\/span><br \/>\n        kdf <span class=\"token operator\">&#061;<\/span> crypto<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;kdf&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">assert<\/span> kdf <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;scrypt&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;pbkdf2&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;KDF \u5fc5\u987b\u4e3a scrypt \u6216 pbkdf2&#034;<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u68c0\u9a8c\u901a\u8fc7: \u8d26\u6237\u5730\u5740 0x<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;address&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u7ed3\u6784\u5408\u6cd5&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">True<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u9a8c\u8bc1\u5931\u8d25: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">False<\/span><\/p>\n<p><span class=\"token comment\"># \u6a21\u62df\u6807\u51c6 KeyStore V3 \u9aa8\u67b6\u6821\u9a8c<\/span><br \/>\nsample_keystore <span class=\"token operator\">&#061;<\/span> <span class=\"token triple-quoted-string string\">&#039;&#039;&#039;{<br \/>\n  &#034;address&#034;: &#034;e0447e5b0078028bebe89759d5cb9bc513b69255&#034;,<br \/>\n  &#034;crypto&#034;: {<br \/>\n    &#034;cipher&#034;: &#034;aes-128-ctr&#034;,<br \/>\n    &#034;ciphertext&#034;: &#034;d172a3f05d7200185554e8b1e816022f499f30eed80fa1e7ec6abb0c50535305&#034;,<br \/>\n    &#034;cipherparams&#034;: { &#034;iv&#034;: &#034;7362e38d7d6f5717e8480a618401e9d4&#034; },<br \/>\n    &#034;kdf&#034;: &#034;scrypt&#034;,<br \/>\n    &#034;kdfparams&#034;: { &#034;dklen&#034;: 32, &#034;n&#034;: 262144, &#034;p&#034;: 1, &#034;r&#034;: 8, &#034;salt&#034;: &#034;73ba573655a01a60a70ac95ff3e551028bb8f8f8&#034; },<br \/>\n    &#034;mac&#034;: &#034;0cdd80e749e8792e496f326b0cb5491ede688072b25d4f473b804a567f4a930d&#034;<br \/>\n  },<br \/>\n  &#034;id&#034;: &#034;c138e6e5-4d08-4e89-a292-6d2c49b06822&#034;,<br \/>\n  &#034;version&#034;: 3<br \/>\n}&#039;&#039;&#039;<\/span><br \/>\nvalidate_keystore_json<span class=\"token punctuation\">(<\/span>sample_keystore<span class=\"token punctuation\">)<\/span><\/p>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>\u521d\u59cb\u5316\u8fc7\u7a0b\u662f\u521b\u4e16\u89c4\u8303\u5411\u7269\u7406\u6570\u636e\u5e93\u8f6c\u6362\u7684\u6865\u6881&#xff0c;\u4e25\u5bc6\u7684\u6587\u4ef6\u6743\u9650\u9694\u79bb\u4e0e KeyStore V3 \u52a0\u5bc6\u6807\u51c6\u786e\u4fdd\u4e86\u8282\u70b9\u51b7\u542f\u52a8\u7684\u5b89\u5168\u3002<\/p>\n<h3>\u7b2c6\u7ae0 P2P \u53d1\u73b0\u673a\u5236\u4e0e\u9759\u6001\u8282\u70b9&#xff08;static-nodes&#xff09;<\/h3>\n<p>\u53bb\u4e2d\u5fc3\u5316\u8282\u70b9\u4e4b\u95f4\u4f9d\u9760\u4ee5\u592a\u574a DevP2P \u534f\u8bae\u8fdb\u884c\u81ea\u4e3b\u53d1\u73b0\u4e0e\u901a\u4fe1\u3002\u5728\u4e3b\u6743\u8054\u76df\u94fe\u7f51\u7edc\u4e2d&#xff0c;\u4e3a\u4e86\u9632\u6b62\u4e0d\u53ef\u4fe1\u8282\u70b9\u7684\u65e0\u5e8f\u6e17\u900f&#xff0c;\u9759\u6001\u8282\u70b9&#xff08;Static Nodes&#xff09;\u673a\u5236\u662f\u7f51\u7edc\u6cbb\u7406\u7684\u5fc5\u9009\u9879\u3002<\/p>\n<h4>6.1 static-nodes.json \u62d3\u6251\u7f16\u6392\u4e0e\u9632\u65e5\u8680\u9632\u5fa1<\/h4>\n<p>\u901a\u8fc7\u5728\u6570\u636e\u76ee\u5f55\u4e0b\u653e\u7f6e static-nodes.json&#xff0c;\u53ef\u4ee5\u5f3a\u5236\u6307\u5b9a\u96c6\u7fa4\u5728\u542f\u52a8\u65f6\u4f18\u5148\u4e14\u6c38\u4e45\u8fde\u63a5\u53d7\u4fe1\u4efb\u7684\u6838\u5fc3\u5bf9\u7b49\u4f53&#xff1a;<\/p>\n<ul>\n<li>enode \u5bfb\u5740\u8bed\u4e49&#xff1a;\u6bcf\u4e2a\u8282\u70b9\u7531 enode:\/\/&lt;node_id&gt;&#064;&lt;ip&gt;:&lt;port&gt; \u552f\u4e00\u786e\u5b9a&#xff0c;\u5176\u4e2d node_id \u4e3a\u8282\u70b9\u542f\u52a8\u65f6\u6d3e\u751f\u7684 secp256k1 \u516c\u94a5&#xff1b;<\/li>\n<li>\u9632\u6b62\u65e5\u8680\u653b\u51fb&#xff08;Eclipse Attack&#xff09;&#xff1a;\u5373\u4fbf\u6076\u610f\u8282\u70b9\u5c1d\u8bd5\u53d1\u9001\u5927\u91cf\u63e1\u624b\u5305\u586b\u6ee1\u8fde\u63a5\u6c60&#xff0c;Geth \u4f9d\u7136\u4f1a\u786e\u4fdd static-nodes \u5217\u8868\u4e2d\u914d\u7f6e\u7684\u8282\u70b9\u8fde\u63a5\u6c38\u8fdc\u4fdd\u6301\u5728\u7ebf\u4e0e\u9ad8\u4f18\u5148\u7ea7\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011static-nodes.json \u9759\u6001\u5bf9\u7b49\u4f53\u914d\u7f6e\u6587\u4ef6<\/h5>\n<p><span class=\"token punctuation\">[<\/span><br \/>\n  <span class=\"token string\">&#034;enode:\/\/a1b2c3d4e5f6&#8230;NODE_ID_HK_PRIMARY&#8230;&#064;127.0.0.1:30303&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  <span class=\"token string\">&#034;enode:\/\/f6e5d4c3b2a1&#8230;NODE_ID_SZ_BACKUP&#8230;&#064;127.0.0.1:30304&#034;<\/span><br \/>\n<span class=\"token punctuation\">]<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011Kademlia \u8def\u7531\u6876\u8ddd\u79bb\u4e0e\u5bf9\u7b49\u4f53\u8bc4\u5206\u6a21\u578b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">d(x,y)&#061;x\u2295yScorepeer&#061;\u03b1\u22c5Latency\u22121&#043;\u03b2\u22c5Bandwidth\u2212\u03b3\u22c5BadBlockCount<br \/>\nd(x, y) &#061; x \\\\oplus y \\\\\\\\<br \/>\n\\\\text{Score}_{peer} &#061; \\\\alpha \\\\cdot \\\\text{Latency}^{-1} &#043; \\\\beta \\\\cdot \\\\text{Bandwidth} &#8211; \\\\gamma \\\\cdot \\\\text{BadBlockCount}<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord mathnormal\">d<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">x<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0359em\">y<\/span><span class=\"mclose\">)<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6667em;vertical-align: -0.0833em\"><\/span><span class=\"mord mathnormal\">x<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u2295<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.625em;vertical-align: -0.1944em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0359em\">y<\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">Score<\/span><\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\">p<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">eer<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.4445em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0037em\">\u03b1<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.0818em;vertical-align: -0.1944em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">Latency<\/span><\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.8873em\"><span class=\"\" style=\"top: -3.1362em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">\u2212<\/span><span class=\"mord mtight\">1<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8889em;vertical-align: -0.1944em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0528em\">\u03b2<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7778em;vertical-align: -0.0833em\"><\/span><span class=\"mord text\"><span class=\"mord\">Bandwidth<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u2212<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6389em;vertical-align: -0.1944em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0556em\">\u03b3<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6944em\"><\/span><span class=\"mord text\"><span class=\"mord\">BadBlockCount<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8be5\u6a21\u578b\u523b\u753b\u4e86 P2P \u8282\u70b9\u4f18\u9009\u673a\u5236\u3002\u8282\u70b9\u4f18\u5148\u9009\u62e9\u5f02\u6216\u8ddd\u79bb\u7a33\u5b9a\u4e14\u7efc\u5408\u8bc4\u5206\u6781\u9ad8\u7684\u6838\u5fc3\u9759\u6001\u5bf9\u7b49\u4f53\u8fdb\u884c\u65b0\u533a\u5757\u5934\u4e0e\u4ea4\u6613\u6c60\u540c\u6b65\u3002<\/p>\n<h5>\u3010\u67b6\u6784\u62d3\u6251\u4e0e\u65f6\u5e8f\u3011\u9759\u6001\u4fe1\u4efb\u62d3\u6251\u4e0e\u52a8\u6001 P2P \u53d1\u73b0\u793a\u610f\u56fe<\/h5>\n<p>#mermaid-svg-qwE9o0LMC5FoLQm2{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qwE9o0LMC5FoLQm2 .error-icon{fill:#552222;}#mermaid-svg-qwE9o0LMC5FoLQm2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qwE9o0LMC5FoLQm2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .marker.cross{stroke:#333333;}#mermaid-svg-qwE9o0LMC5FoLQm2 svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qwE9o0LMC5FoLQm2 p{margin:0;}#mermaid-svg-qwE9o0LMC5FoLQm2 .label{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;color:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .cluster-label text{fill:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .cluster-label span{color:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .cluster-label span p{background-color:transparent;}#mermaid-svg-qwE9o0LMC5FoLQm2 .label text,#mermaid-svg-qwE9o0LMC5FoLQm2 span{fill:#333;color:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .node rect,#mermaid-svg-qwE9o0LMC5FoLQm2 .node circle,#mermaid-svg-qwE9o0LMC5FoLQm2 .node ellipse,#mermaid-svg-qwE9o0LMC5FoLQm2 .node polygon,#mermaid-svg-qwE9o0LMC5FoLQm2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .rough-node .label text,#mermaid-svg-qwE9o0LMC5FoLQm2 .node .label text,#mermaid-svg-qwE9o0LMC5FoLQm2 .image-shape .label,#mermaid-svg-qwE9o0LMC5FoLQm2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-qwE9o0LMC5FoLQm2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .rough-node .label,#mermaid-svg-qwE9o0LMC5FoLQm2 .node .label,#mermaid-svg-qwE9o0LMC5FoLQm2 .image-shape .label,#mermaid-svg-qwE9o0LMC5FoLQm2 .icon-shape .label{text-align:center;}#mermaid-svg-qwE9o0LMC5FoLQm2 .node.clickable{cursor:pointer;}#mermaid-svg-qwE9o0LMC5FoLQm2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .arrowheadPath{fill:#333333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qwE9o0LMC5FoLQm2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qwE9o0LMC5FoLQm2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qwE9o0LMC5FoLQm2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qwE9o0LMC5FoLQm2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .cluster text{fill:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 .cluster span{color:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qwE9o0LMC5FoLQm2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qwE9o0LMC5FoLQm2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-qwE9o0LMC5FoLQm2 .icon-shape,#mermaid-svg-qwE9o0LMC5FoLQm2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qwE9o0LMC5FoLQm2 .icon-shape p,#mermaid-svg-qwE9o0LMC5FoLQm2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qwE9o0LMC5FoLQm2 .icon-shape .label rect,#mermaid-svg-qwE9o0LMC5FoLQm2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qwE9o0LMC5FoLQm2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qwE9o0LMC5FoLQm2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qwE9o0LMC5FoLQm2 :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<span class=\"edgeLabel\"><\/p>\n<p>\u9759\u6001\u52a0\u5bc6\u901a\u9053 30303<\/p>\n<p><\/span><span class=\"edgeLabel\"><\/p>\n<p>\u52a8\u6001\u63e1\u624b\u8fde\u63a5<\/p>\n<p><\/span><span class=\"edgeLabel\"><\/p>\n<p>\u52a8\u6001\u63e1\u624b\u8fde\u63a5<\/p>\n<p><\/span><span class=\"edgeLabel\"><\/p>\n<p>\u62d2\u7edd\u975e\u767d\u540d\u5355\u7b7e\u540d<\/p>\n<p><\/span><span style=\"color:#fff !important\" class=\"nodeLabel\"><\/p>\n<p>\u9999\u6e2f\u4e3b\u8282\u70b9 Signer<\/p>\n<p><\/span><span style=\"color:#fff !important\" class=\"nodeLabel\"><\/p>\n<p>\u6df1\u5733\u5907\u4efd\u8282\u70b9 Replica<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>\u751f\u6001\u8f7b\u8282\u70b9 A<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>\u751f\u6001\u8f7b\u8282\u70b9 B<\/p>\n<p><\/span><span class=\"nodeLabel\"><\/p>\n<p>\u672a\u6388\u6743\u975e\u6cd5\u8282\u70b9<\/p>\n<p><\/span><\/p>\n<h4>6.2 NAT \u7a7f\u900f\u4e0e RLPx \u63e1\u624b\u534f\u8bae<\/h4>\n<p>\u8de8\u4e91\u673a\u623f\u4e92\u8054\u65f6&#xff0c;\u7ecf\u5e38\u9762\u4e34\u5404\u5382\u5546\u590d\u6742\u7684\u5b89\u5168\u7ec4\u7b56\u7565\u4e0e NAT \u7f51\u5173&#xff1a;<\/p>\n<ul>\n<li>\u5fc5\u987b\u786e\u4fdd UDP 30303&#xff08;\u8282\u70b9\u53d1\u73b0&#xff09;\u4e0e TCP 30303&#xff08;\u6570\u636e\u6d41\u4f20\u8f93&#xff09;\u5168\u53cc\u5de5\u653e\u901a&#xff1b;<\/li>\n<li>\u4f7f\u7528 &#8211;nat extip:&lt;PUBLIC_IP&gt; \u663e\u5f0f\u5ba3\u544a\u8282\u70b9\u51fa\u53e3\u516c\u7f51\u6807\u8bc6&#xff0c;\u9632\u6b62\u63e1\u624b\u65f6\u56e0\u5185\u7f51 IP \u5bfc\u81f4\u8fde\u63a5\u56de\u7edd&#xff1b;<\/li>\n<li>RLPx \u4f20\u8f93\u5c42\u63e1\u624b\u57fa\u4e8e ECIES \u692d\u5706\u66f2\u7ebf\u96c6\u6210\u52a0\u5bc6\u65b9\u6848&#xff0c;\u5728\u4f1a\u8bdd\u5efa\u7acb\u9636\u6bb5\u5b8c\u6210\u4e34\u65f6\u516c\u79c1\u94a5\u4ea4\u6362&#xff0c;\u751f\u6210 AES-256 \u5171\u4eab\u5bc6\u94a5&#xff0c;\u786e\u4fdd\u5168\u7f51 P2P \u5e7f\u64ad\u5185\u5bb9\u5177\u5907\u7aef\u5230\u7aef\u9632\u7a83\u542c\u4fdd\u62a4\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011P2P \u7aef\u53e3\u8fde\u901a\u6027\u81ea\u52a8\u5316\u63a2\u6d4b\u9a8c\u8bc1\u811a\u672c<\/h5>\n<p><span class=\"token shebang important\">#!\/usr\/bin\/env bash<\/span><br \/>\n<span class=\"token comment\"># test-p2p-connectivity.sh &#8211; \u63a2\u6d4b\u8fdc\u7a0b\u5bf9\u7b49\u4f53 30303 \u7aef\u53e3\u8fde\u901a\u6027<\/span><br \/>\n<span class=\"token assign-left variable\">TARGET_HOST<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;127.0.0.1&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">TARGET_PORT<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">30303<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 \u6d4b\u8bd5 TCP \u63e1\u624b&#8230;&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token function\">nc<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token parameter variable\">-v<\/span> <span class=\"token parameter variable\">-w5<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${TARGET_HOST}<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${TARGET_PORT}<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;TCP \u901a\u9053\u7545\u901a [OK]&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u8b66\u544a: TCP 30303 \u7aef\u53e3\u53d7\u963b&#xff01;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 \u6d4b\u8bd5 UDP \u8282\u70b9\u53d1\u73b0\u5e7f\u64ad&#8230;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token string\">&#034;ping&#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">nc<\/span> <span class=\"token parameter variable\">-u<\/span> <span class=\"token parameter variable\">-w2<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${TARGET_HOST}<\/span>&#034;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${TARGET_PORT}<\/span>&#034;<\/span> <span class=\"token operator\">||<\/span> <span class=\"token boolean\">true<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;P2P \u63a2\u6d4b\u5b8c\u6210\u3002&#034;<\/span><\/p>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>\u9759\u6001\u4fe1\u4efb\u7f51\u7edc\u6784\u7b51\u4e86\u9632\u65e5\u8680\u653b\u51fb\u7684\u575a\u56fa\u62a4\u57ce\u6cb3&#xff0c;\u7ed3\u5408 RLPx \u4f1a\u8bdd\u52a0\u5bc6&#xff0c;\u786e\u4fdd\u4e86\u51fa\u5757\u8282\u70b9\u4e0e\u540c\u6b65\u8282\u70b9\u4e4b\u95f4\u7eb3\u79d2\u7ea7\u7684\u6d88\u606f\u541e\u5410\u4e0e\u901a\u4fe1\u4fdd\u5bc6\u6027\u3002<\/p>\n<h3>\u7b2c7\u7ae0 systemd \u5b88\u62a4\u8fdb\u7a0b\u4e0e\u6301\u4e45\u5316\u7ba1\u7406<\/h3>\n<p>\u5728\u751f\u4ea7\u7ea7 Linux \u670d\u52a1\u5668\u4e0a&#xff0c;\u8fd0\u884c\u533a\u5757\u94fe\u8282\u70b9\u7edd\u4e0d\u80fd\u4f9d\u8d56\u7ec8\u7aef\u524d\u53f0\u547d\u4ee4\u6216\u666e\u901a\u7684 nohup\u3002\u5229\u7528 systemd \u670d\u52a1\u5355\u5143\u7ba1\u7406&#xff0c;\u53ef\u83b7\u5f97\u8fdb\u7a0b\u5f00\u673a\u81ea\u542f\u3001\u5d29\u6e83\u81ea\u52a8\u62c9\u8d77\u3001\u8d44\u6e90\u9650\u989d\u4ee5\u53ca\u65e5\u5fd7\u5f52\u6863\u7684\u5168\u751f\u547d\u5468\u671f\u4fdd\u969c\u3002<\/p>\n<h4>7.1 \u6807\u51c6\u5316 rnoise-geth.service \u670d\u52a1\u5355\u5143<\/h4>\n<p>\u4e00\u4e2a\u9ad8\u8d28\u91cf\u7684 systemd \u914d\u7f6e\u5fc5\u987b\u5177\u5907\u4ee5\u4e0b\u751f\u4ea7\u5c5e\u6027&#xff1a;<\/p>\n<ul>\n<li>\u72ec\u7acb\u8fd0\u884c\u7528\u6237&#xff1a;\u4f7f\u7528\u975e root \u4e13\u7528\u7528\u6237 rnoise \u8fd0\u884c&#xff0c;\u9650\u5236\u8fdb\u7a0b\u63d0\u6743\u53ef\u80fd&#xff1b;<\/li>\n<li>\u81ea\u6108\u91cd\u542f\u7b56\u7565&#xff1a;\u8bbe\u7f6e Restart&#061;always \u4e0e RestartSec&#061;5s&#xff0c;\u4e00\u65e6\u8fdb\u7a0b\u56e0 OOM \u6216\u7a81\u53d1\u5f02\u5e38\u9000\u51fa&#xff0c;\u64cd\u4f5c\u7cfb\u7edf\u81ea\u52a8\u91cd\u542f\u6062\u590d\u670d\u52a1&#xff1b;<\/li>\n<li>\u8d44\u6e90\u9650\u5236&#xff08;Limits&#xff09;&#xff1a;\u8bbe\u7f6e LimitNOFILE&#061;65535 \u63d0\u9ad8\u6700\u5927\u6587\u4ef6\u63cf\u8ff0\u7b26\u4e0a\u9650&#xff0c;\u9632\u6b62\u5e76\u53d1\u8fde\u63a5\u66b4\u6da8\u65f6\u51fa\u73b0 too many open files \u81f4\u547d\u9519\u8bef\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011\u5b8c\u6574\u751f\u4ea7\u7ea7 rnoise-geth.service \u5355\u5143\u6587\u4ef6<\/h5>\n<p># \/etc\/systemd\/system\/rnoise-geth.service<br \/>\n[Unit]<br \/>\nDescription&#061;RNOISE Chain Full Node Service<br \/>\nAfter&#061;network.target<br \/>\nWants&#061;network-online.target<\/p>\n<p>[Service]<br \/>\nType&#061;simple<br \/>\nUser&#061;rnoise<br \/>\nGroup&#061;rnoise<br \/>\nWorkingDirectory&#061;\/var\/lib\/rnoise<br \/>\nExecStart&#061;\/usr\/local\/bin\/geth &#8211;config \/etc\/rnoise\/node.toml &#8211;unlock &#034;0xe0447e5b0078028bebe89759d5cb9bc513b69255&#034; &#8211;password \/etc\/rnoise\/.secret.pwd &#8211;mine<br \/>\nRestart&#061;always<br \/>\nRestartSec&#061;5s<br \/>\nKillMode&#061;process<br \/>\nTimeoutStopSec&#061;60s<\/p>\n<p>LimitNOFILE&#061;65535<br \/>\nLimitNPROC&#061;32768<\/p>\n<p>StandardOutput&#061;journal<br \/>\nStandardError&#061;journal<br \/>\nSyslogIdentifier&#061;rnoise-geth<\/p>\n<p>[Install]<br \/>\nWantedBy&#061;multi-user.target<\/p>\n<h4>7.2 \u4f18\u96c5\u505c\u673a&#xff08;Graceful Shutdown&#xff09;\u4e0e\u65e5\u5fd7\u5207\u5272\u7b56\u7565<\/h4>\n<p>\u533a\u5757\u94fe\u7684 StateDB \u4f9d\u8d56\u5185\u5b58\u7f13\u5b58&#xff08;LevelDB WriteBuffer&#xff09;\u3002\u5982\u679c\u76f4\u63a5\u4f7f\u7528 kill -9 \u5f3a\u6740\u8fdb\u7a0b&#xff0c;\u672a\u5237\u5165\u78c1\u76d8\u7684\u72b6\u6001\u5c06\u4e22\u5931&#xff0c;\u5bfc\u81f4\u91cd\u542f\u65f6\u89e6\u53d1\u8017\u8d39\u6570\u5c0f\u65f6\u7684\u6570\u636e\u5e93\u81ea\u68c0&#xff1a;<\/p>\n<ul>\n<li>systemd \u9ed8\u8ba4\u5148\u53d1\u9001 SIGTERM \u4fe1\u53f7&#xff1b;<\/li>\n<li>Geth \u6355\u83b7\u4fe1\u53f7\u540e&#xff0c;\u6682\u505c\u63a5\u6536\u65b0\u4ea4\u6613&#xff0c;\u5c06\u5185\u5b58\u6c60\u4e2d\u810f\u9875\u5168\u90e8\u5199\u5165\u78c1\u76d8&#xff0c;\u4f18\u96c5\u5173\u95ed\u6570\u636e\u5e93\u540e\u9000\u51fa&#xff1b;<\/li>\n<li>TimeoutStopSec&#061;60s \u7ed9\u4e88\u4e86\u5e95\u5c42\u5145\u5206\u7684\u5237\u76d8\u65f6\u95f4\u7a97\u53e3&#xff1b;<\/li>\n<li>\u914d\u5408 logrotate \u5de5\u5177&#xff0c;\u5bf9\u8282\u70b9\u4ea7\u751f\u7684\u65e5\u5fd7\u5b9e\u65bd\u6309\u5929\u5207\u5272\u4e0e Gzip \u538b\u7f29&#xff0c;\u4fdd\u7559\u6700\u8fd1 30 \u5929\u65e5\u5fd7\u5e76\u9650\u5236\u5355\u6587\u4ef6\u6700\u5927 500 MB&#xff0c;\u675c\u7edd\u78c1\u76d8\u6253\u6ee1\u707e\u96be\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011Logrotate \u65e5\u5fd7\u81ea\u52a8\u8f6e\u8f6c\u4e0e\u5f52\u6863\u914d\u7f6e\u6587\u4ef6<\/h5>\n<p># \/etc\/logrotate.d\/rnoise-node<br \/>\n\/var\/log\/rnoise\/*.log {<br \/>\n    daily<br \/>\n    missingok<br \/>\n    rotate 30<br \/>\n    compress<br \/>\n    delaycompress<br \/>\n    notifempty<br \/>\n    create 0640 rnoise rnoise<br \/>\n    sharedscripts<br \/>\n    postrotate<br \/>\n        \/usr\/bin\/systemctl kill -s HUP rnoise-geth.service &gt;\/dev\/null 2&gt;&amp;1 || true<br \/>\n    endscript<br \/>\n}<\/p>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>systemd \u5c06\u8282\u70b9\u8fd0\u7ef4\u8f6c\u5316\u4e3a\u5de5\u4e1a\u7ea7\u6807\u51c6\u670d\u52a1&#xff0c;\u4f18\u96c5\u505c\u673a\u4e0e\u81ea\u52a8\u62c9\u8d77\u673a\u5236\u5b88\u4f4f\u4e86\u6570\u636e\u5b8c\u6574\u7684\u6700\u540e\u5e95\u7ebf\u3002<\/p>\n<h3>\u7b2c8\u7ae0 \u8282\u70b9\u5065\u5eb7\u63a2\u9488\u4e0e\u81ea\u52a8\u5316\u81ea\u68c0<\/h3>\n<p>\u4ec5\u4f9d\u9760\u8fdb\u7a0b\u5b58\u6d3b\u65e0\u6cd5\u5224\u5b9a\u8282\u70b9\u662f\u5426\u5904\u4e8e\u5065\u5eb7\u51fa\u5757\u72b6\u6001\u3002\u53ef\u80fd\u5b58\u5728\u8282\u70b9\u7531\u4e8e\u7f51\u7edc\u5206\u533a&#xff08;Network Partition&#xff09;\u800c\u505c\u6b62\u540c\u6b65\u3001\u867d\u7136\u8fdb\u7a0b\u5b58\u6d3b\u4f46\u5df2\u843d\u540e\u5168\u7f51\u5757\u9ad8\u7684\u201c\u5047\u6b7b\u201d\u73b0\u8c61\u3002\u56e0\u6b64\u9700\u8981\u81ea\u52a8\u5316\u5065\u5eb7\u5de1\u68c0\u63a2\u9488\u3002<\/p>\n<h4>8.1 \u81ea\u52a8\u5316\u5065\u5eb7\u5de1\u68c0\u63a2\u9488\u5f00\u53d1<\/h4>\n<p>\u5de1\u68c0\u63a2\u9488\u901a\u8fc7\u5468\u671f\u6027\u8c03\u7528 JSON-RPC \u63a5\u53e3\u83b7\u53d6\u6838\u5fc3\u6307\u6807&#xff1a;<\/p>\n<li>eth_syncing&#xff1a;\u786e\u8ba4\u8282\u70b9\u662f\u5426\u9677\u5165\u6c89\u91cd\u7684\u8865\u5757\u540c\u6b65\u6001&#xff1b;<\/li>\n<li>net_peerCount&#xff1a;\u786e\u8ba4\u5916\u90e8\u6709\u6548\u5bf9\u7b49\u4f53\u8fde\u63a5\u6570\u662f\u5426\u9ad8\u4e8e\u5b89\u5168\u6c34\u4f4d&#xff08;\u5982\u4e0d\u4f4e\u4e8e 3 \u4e2a&#xff09;&#xff1b;<\/li>\n<li>eth_blockNumber&#xff1a;\u6bd4\u8f83 10 \u79d2\u524d\u540e\u7684\u5757\u9ad8&#xff0c;\u82e5\u8fde\u7eed 3 \u4e2a\u5468\u671f\u5757\u9ad8\u672a\u589e\u957f\u4e14\u81ea\u8eab\u4e3a\u51fa\u5757\u8282\u70b9&#xff0c;\u7acb\u5373\u89e6\u53d1\u544a\u8b66\u3002<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011\u81ea\u52a8\u5316\u8282\u70b9\u5065\u5eb7\u72b6\u6001\u63a2\u9488\u5de1\u68c0\u811a\u672c<\/h5>\n<p><span class=\"token comment\"># -*- coding: utf-8 -*-<\/span><br \/>\n<span class=\"token comment\"># rnoise-node-healthcheck.py<\/span><br \/>\n<span class=\"token keyword\">import<\/span> urllib<span class=\"token punctuation\">.<\/span>request<br \/>\n<span class=\"token keyword\">import<\/span> json<br \/>\n<span class=\"token keyword\">import<\/span> sys<\/p>\n<p>RPC_URL <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;http:\/\/127.0.0.1:8545&#034;<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">rpc_call<\/span><span class=\"token punctuation\">(<\/span>method<span class=\"token punctuation\">,<\/span> params<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    payload <span class=\"token operator\">&#061;<\/span> json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;jsonrpc&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;2.0&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;method&#034;<\/span><span class=\"token punctuation\">:<\/span> method<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;params&#034;<\/span><span class=\"token punctuation\">:<\/span> params<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;id&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>encode<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;utf-8&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    req <span class=\"token operator\">&#061;<\/span> urllib<span class=\"token punctuation\">.<\/span>request<span class=\"token punctuation\">.<\/span>Request<span class=\"token punctuation\">(<\/span>RPC_URL<span class=\"token punctuation\">,<\/span> data<span class=\"token operator\">&#061;<\/span>payload<span class=\"token punctuation\">,<\/span> headers<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;Content-Type&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;application\/json&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">with<\/span> urllib<span class=\"token punctuation\">.<\/span>request<span class=\"token punctuation\">.<\/span>urlopen<span class=\"token punctuation\">(<\/span>req<span class=\"token punctuation\">,<\/span> timeout<span class=\"token operator\">&#061;<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> res<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> json<span class=\"token punctuation\">.<\/span>loads<span class=\"token punctuation\">(<\/span>res<span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>decode<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;utf-8&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;result&#034;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">run_healthcheck<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        chain_id <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>rpc_call<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;eth_chainId&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        block_num <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>rpc_call<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;eth_blockNumber&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        peers <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>rpc_call<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;net_peerCount&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        syncing <span class=\"token operator\">&#061;<\/span> rpc_call<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;eth_syncing&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 Chain ID: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>chain_id<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u5f53\u524d\u5757\u9ad8: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>block_num<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u6d3b\u8dc3\u5bf9\u7b49\u4f53: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>peers<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u25c6 \u540c\u6b65\u72b6\u6001: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>syncing<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">assert<\/span> chain_id <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">20260616<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Chain ID \u5f02\u5e38&#xff01;&#034;<\/span><br \/>\n        <span class=\"token keyword\">assert<\/span> <span class=\"token keyword\">not<\/span> syncing<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8282\u70b9\u6b63\u5904\u4e8e\u8865\u5757\u540c\u6b65\u6001&#xff01;&#034;<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u8282\u70b9\u5065\u5eb7\u5ea6\u81ea\u68c0&#xff1a;PASS (\u5404\u9879\u53c2\u6570\u6b63\u5e38)&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f&#034;\u81f4\u547d\u544a\u8b66: \u8282\u70b9\u5065\u5eb7\u81ea\u68c0\u5931\u8d25: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">file<\/span><span class=\"token operator\">&#061;<\/span>sys<span class=\"token punctuation\">.<\/span>stderr<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token number\">1<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span>run_healthcheck<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011\u8282\u70b9\u65f6\u949f\u6f02\u79fb\u4e0e\u540c\u6b65\u6ede\u540e\u5224\u5b9a\u6a21\u578b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">\u0394H&#061;Hremote_consensus\u2212HlocalStatus&#061;{HEALTHY\u0394H\u22641DEGRADED2\u2264\u0394H\u22645OUT_OF_SYNC\u0394H&gt;5<br \/>\n\\\\Delta H &#061; H_{remote\\\\_consensus} &#8211; H_{local} \\\\\\\\<br \/>\n\\\\text{Status} &#061; \\\\begin{cases} \\\\text{HEALTHY} &amp; \\\\Delta H \\\\le 1 \\\\\\\\ \\\\text{DEGRADED} &amp; 2 \\\\le \\\\Delta H \\\\le 5 \\\\\\\\ \\\\text{OUT\\\\_OF\\\\_SYNC} &amp; \\\\Delta H &gt; 5 \\\\end{cases}<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord\">\u0394<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">H<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.0503em;vertical-align: -0.367em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">H<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2806em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0813em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">r<\/span><span class=\"mord mathnormal mtight\">e<\/span><span class=\"mord mathnormal mtight\">m<\/span><span class=\"mord mathnormal mtight\">o<\/span><span class=\"mord mathnormal mtight\">t<\/span><span class=\"mord mathnormal mtight\">e<\/span><span class=\"mord mtight\" style=\"margin-right: 0.0278em\">_<\/span><span class=\"mord mathnormal mtight\">co<\/span><span class=\"mord mathnormal mtight\">n<\/span><span class=\"mord mathnormal mtight\">se<\/span><span class=\"mord mathnormal mtight\">n<\/span><span class=\"mord mathnormal mtight\">s<\/span><span class=\"mord mathnormal mtight\">u<\/span><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.367em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u2212<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">H<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0813em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><span class=\"mord mathnormal mtight\">oc<\/span><span class=\"mord mathnormal mtight\">a<\/span><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord text\"><span class=\"mord\">Status<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 4.32em;vertical-align: -1.91em\"><\/span><span class=\"minner\"><span class=\"mopen\"><span class=\"delimsizing mult\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 2.35em\"><span class=\"\" style=\"top: -2.2em\"><span class=\"pstrut\" style=\"height: 3.15em\"><\/span><span class=\"delimsizinginner delim-size4\"><span class=\"\">\u23a9<\/span><\/span><\/span><span class=\"\" style=\"top: -2.192em\"><span class=\"pstrut\" style=\"height: 3.15em\"><\/span><span class=\"\" style=\"height: 0.316em;width: 0.8889em\"><\/span><\/span><span class=\"\" style=\"top: -3.15em\"><span class=\"pstrut\" style=\"height: 3.15em\"><\/span><span class=\"delimsizinginner delim-size4\"><span class=\"\">\u23a8<\/span><\/span><\/span><span class=\"\" style=\"top: -4.292em\"><span class=\"pstrut\" style=\"height: 3.15em\"><\/span><span class=\"\" style=\"height: 0.316em;width: 0.8889em\"><\/span><\/span><span class=\"\" style=\"top: -4.6em\"><span class=\"pstrut\" style=\"height: 3.15em\"><\/span><span class=\"delimsizinginner delim-size4\"><span class=\"\">\u23a7<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.85em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mtable\"><span class=\"col-align-l\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 2.41em\"><span class=\"\" style=\"top: -4.41em\"><span class=\"pstrut\" style=\"height: 3.008em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">HEALTHY<\/span><\/span><\/span><\/span><span class=\"\" style=\"top: -2.97em\"><span class=\"pstrut\" style=\"height: 3.008em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">DEGRADED<\/span><\/span><\/span><\/span><span class=\"\" style=\"top: -1.53em\"><span class=\"pstrut\" style=\"height: 3.008em\"><\/span><span class=\"mord\"><span class=\"mord text\"><span class=\"mord\">OUT_OF_SYNC<\/span><\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.91em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><span class=\"arraycolsep\" style=\"width: 1em\"><\/span><span class=\"col-align-l\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 2.41em\"><span class=\"\" style=\"top: -4.41em\"><span class=\"pstrut\" style=\"height: 3.008em\"><\/span><span class=\"mord\"><span class=\"mord\">\u0394<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">H<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2264<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mord\">1<\/span><\/span><\/span><span class=\"\" style=\"top: -2.97em\"><span class=\"pstrut\" style=\"height: 3.008em\"><\/span><span class=\"mord\"><span class=\"mord\">2<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2264<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mord\">\u0394<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">H<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2264<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mord\">5<\/span><\/span><\/span><span class=\"\" style=\"top: -1.53em\"><span class=\"pstrut\" style=\"height: 3.008em\"><\/span><span class=\"mord\"><span class=\"mord\">\u0394<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0813em\">H<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&gt;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mord\">5<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 1.91em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose nulldelimiter\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8be5\u6a21\u578b\u5b9e\u65f6\u8bc4\u4f30\u8282\u70b9\u72b6\u6001\u540c\u6b65\u6ede\u540e\u91cf\u3002\u4e00\u65e6\u672c\u5730\u5757\u9ad8\u843d\u540e\u5168\u7f51\u5171\u8bc6\u8d85\u8fc7 5 \u4e2a\u533a\u5757&#xff0c;\u5065\u5eb7\u63a2\u9488\u5c06\u81ea\u52a8\u89e6\u53d1\u964d\u7ea7\u5e76\u5411\u53cd\u5411\u4ee3\u7406\u6ce8\u9500\u8be5\u8282\u70b9\u6d41\u91cf&#xff0c;\u9632\u6b62\u5411\u5ba2\u6237\u7aef\u8fd4\u56de\u8fc7\u65f6\u9648\u65e7\u6570\u636e\u3002<\/p>\n<h4>8.2 \u544a\u8b66\u8054\u52a8\u4e0e\u81ea\u52a8\u5316\u8fd0\u7ef4\u95ed\u73af<\/h4>\n<p>\u5728\u751f\u4ea7\u96c6\u7fa4\u4e2d&#xff0c;\u5065\u5eb7\u811a\u672c\u4f5c\u4e3a crontab \u6216 Prometheus Node Exporter \u63a2\u9488\u6bcf\u5206\u949f\u8fd0\u884c\u4e00\u6b21&#xff1a;<\/p>\n<ul>\n<li>\u82e5\u63a2\u6d4b\u5931\u8d25&#xff0c;\u81ea\u52a8\u89e6\u53d1\u672c\u5730 systemd \u5c1d\u8bd5\u4f18\u96c5\u91cd\u542f&#xff1b;<\/li>\n<li>\u82e5\u8fde\u7eed\u4e24\u6b21\u91cd\u542f\u5931\u8d25&#xff0c;\u53d1\u9001 Webhook \u544a\u8b66\u81f3\u603b\u63a7\u56e2\u961f&#xff0c;\u7531\u8fd0\u7ef4\u4e13\u5bb6\u5e2d\u63a5\u5165\u6392\u67e5&#xff1b;<\/li>\n<li>\u7ed3\u5408 Grafana \u4eea\u8868\u76d8\u76d1\u63a7\u5355\u5757 Gas \u6d88\u8017\u7387\u3001\u51fa\u5757\u65f6\u95f4\u6f02\u79fb\u66f2\u7ebf\u4e0e\u5bf9\u7b49\u4f53\u4e22\u5305\u7387&#xff0c;\u5b9e\u73b0\u79d2\u7ea7\u5f02\u5e38\u611f\u77e5\u3002<\/li>\n<\/ul>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>\u6df1\u5c42 RPC \u5065\u5eb7\u63a2\u9488\u7a7f\u900f\u4e86\u8868\u9762\u8fdb\u7a0b\u72b6\u6001&#xff0c;\u4ee5\u771f\u5b9e\u51fa\u5757\u4e0e\u540c\u6b65\u6307\u6807\u6784\u5efa\u8d77\u9ad8\u53ef\u9760\u8fd0\u7ef4\u95ed\u73af\u3002<\/p>\n<h3>\u7b2c9\u7ae0 \u5b89\u5168\u52a0\u56fa\u4e0e\u7279\u6743 RPC \u9632\u62a4<\/h3>\n<p>\u533a\u5757\u94fe\u5168\u8282\u70b9\u4e00\u65e6\u88ab\u653b\u7834&#xff0c;\u653b\u51fb\u8005\u53ef\u80fd\u76d7\u53d6\u8282\u70b9\u7b7e\u540d\u5bc6\u94a5\u3001\u6ee5\u53d1\u865a\u5047\u4ea4\u6613\u6216\u53d1\u8d77\u7c89\u5c18\u653b\u51fb\u3002\u8282\u70b9\u5b89\u5168\u52a0\u56fa\u662f\u516c\u94fe\u57fa\u7840\u8bbe\u65bd\u7684\u91cd\u4e2d\u4e4b\u91cd\u3002<\/p>\n<h4>9.1 \u7f51\u7edc\u7aef\u53e3\u4e0e\u7279\u6743 API \u6700\u5c0f\u5316\u539f\u5219<\/h4>\n<p>\u52a0\u56fa\u65b9\u6848\u9075\u5faa\u519b\u4e8b\u7ea7\u6700\u5c0f\u6743\u9650\u539f\u5219&#xff08;Principle of Least Privilege&#xff09;&#xff1a;<\/p>\n<li>\u53ea\u5f00\u5fc5\u8981\u7aef\u53e3&#xff1a;\u516c\u7f51\u9632\u706b\u5899\u4ec5\u653e\u884c P2P \u7aef\u53e3 30303&#xff0c;\u6240\u6709 RPC&#xff08;8545&#xff09;\u4e0e WS&#xff08;8546&#xff09;\u7aef\u53e3\u575a\u51b3\u7981\u6b62\u76f4\u63a5\u5bf9\u516c\u7f51\u76d1\u542c&#xff1b;<\/li>\n<li>\u4e25\u7981\u5f00\u653e personal \u6a21\u5757&#xff1a;\u5386\u53f2\u60e8\u75db\u6559\u8bad\u8868\u660e&#xff0c;\u5f00\u653e personal \u6a21\u5757\u7684\u4ee5\u592a\u574a\u8282\u70b9\u6781\u6613\u88ab\u626b\u63cf\u5668\u626b\u63cf\u5e76\u901a\u8fc7\u66b4\u529b\u7834\u89e3\u77ac\u95f4\u76d7\u8d70 keystore \u5185\u8d44\u4ea7&#xff1b;<\/li>\n<li>\u7981\u7528 debug \u4e0e txpool \u6df1\u5ea6\u63a2\u6d4b&#xff1a;\u5916\u90e8\u7528\u6237\u4ec5\u5141\u8bb8\u8c03\u7528\u6807\u51c6 eth \u4e0e web3 \u53ea\u8bfb\u63a5\u53e3&#xff0c;\u9632\u6b62\u5185\u5b58\u6c60\u653b\u51fb\u7b56\u7565\u88ab\u5916\u90e8\u63a2\u6d4b\u9006\u5411\u3002<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011Linux iptables \/ UFW \u7aef\u53e3\u5b89\u5168\u9632\u706b\u5899\u89c4\u5219\u914d\u7f6e<\/h5>\n<p><span class=\"token shebang important\">#!\/usr\/bin\/env bash<\/span><br \/>\n<span class=\"token comment\"># rnoise-firewall-harden.sh<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 \u914d\u7f6e\u8282\u70b9\u6781\u7b80\u9632\u706b\u5899\u7b56\u7565&#8230;&#034;<\/span><br \/>\n<span class=\"token comment\"># \u9ed8\u8ba4\u62d2\u7edd\u4e00\u5207\u5916\u6765\u5165\u7ad9\u6d41\u91cf<\/span><br \/>\nufw default deny incoming<br \/>\nufw default allow outgoing<\/p>\n<p><span class=\"token comment\"># \u653e\u884c SSH \u7ba1\u7406\u7aef\u53e3 (\u4ec5\u9650\u53d7\u4fe1\u4efb\u8df3\u677f\u673a\u6216\u6307\u5b9a IP)<\/span><br \/>\nufw allow <span class=\"token number\">22<\/span>\/tcp<\/p>\n<p><span class=\"token comment\"># \u4ec5\u653e\u884c DevP2P \u8282\u70b9\u53d1\u73b0\u4e0e\u4f20\u8f93\u901a\u4fe1\u7aef\u53e3<\/span><br \/>\nufw allow <span class=\"token number\">30303<\/span>\/tcp<br \/>\nufw allow <span class=\"token number\">30303<\/span>\/udp<\/p>\n<p><span class=\"token comment\"># \u542f\u7528\u9632\u706b\u5899<\/span><br \/>\nufw <span class=\"token parameter variable\">&#8211;force<\/span> <span class=\"token builtin class-name\">enable<\/span><br \/>\nufw status verbose<br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9632\u706b\u5899\u7b56\u7565\u90e8\u7f72\u5b8c\u6bd5&#xff1a;8545 \u7aef\u53e3\u5df2\u88ab\u7269\u7406\u9694\u79bb\u5728\u672c\u5730\u73af\u56de\u3002&#034;<\/span><\/p>\n<h5>\u3010\u7b97\u6cd5\u4e0e\u6570\u5b66\u6a21\u578b\u3011\u4ee4\u724c\u6876\u9650\u6d41\u7b97\u6cd5\u9632 DoS \u6570\u5b66\u6a21\u578b<\/h5>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\">T(t)&#061;min\u2061(C,T(t0)&#043;r\u22c5(t\u2212t0))\u22121\u82e5\u00a0T(t)&lt;0\u2005\u200a\u27f9\u2005\u200aHTTP\u00a0429\u00a0Too\u00a0Many\u00a0Requests<br \/>\nT(t) &#061; \\\\min\\\\big(C, T(t_0) &#043; r \\\\cdot (t &#8211; t_0)\\\\big) &#8211; 1 \\\\\\\\<br \/>\n\\\\text{\u82e5 } T(t) &lt; 0 \\\\implies \\\\text{HTTP 429 Too Many Requests}<br \/>\n<\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">t<\/span><span class=\"mclose\">)<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mop\">min<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"delimsizing size1\">(<\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0715em\">C<\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3011em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">0<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.4445em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">r<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u22c5<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">t<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u2212<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.2em;vertical-align: -0.35em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3011em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\">0<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><span class=\"mord\"><span class=\"delimsizing size1\">)<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u2212<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">1<\/span><\/span><span class=\"mspace newline\"><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord text\"><span class=\"mord cjk_fallback\">\u82e5<\/span><span class=\"mord\">\u00a0<\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"mopen\">(<\/span><span class=\"mord mathnormal\">t<\/span><span class=\"mclose\">)<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&lt;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6684em;vertical-align: -0.024em\"><\/span><span class=\"mord\">0<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u27f9<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8778em;vertical-align: -0.1944em\"><\/span><span class=\"mord text\"><span class=\"mord\">HTTP\u00a0429\u00a0Too\u00a0Many\u00a0Requests<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8be5\u6a21\u578b\u523b\u753b\u4e86 Nginx \u7f51\u5173\u5bf9\u975e\u53d7\u4fe1\u4efb\u5ba2\u6237\u7aef\u8bf7\u6c42\u7684\u9650\u6d41\u63a7\u5236\u3002\u5bb9\u91cf (C&#061;30)&#xff0c;\u586b\u5145\u901f\u7387 (r&#061;60 \\\\text{ req\/s})&#xff0c;\u6709\u6548\u5438\u6536\u7a81\u53d1\u5e76\u53d1&#xff0c;\u963b\u65ad\u9ad8\u9891\u722c\u866b\u4e0e\u9ed1\u5ba2\u66b4\u529b\u679a\u4e3e\u3002<\/p>\n<h4>9.2 \u5185\u5b58\u76d8\u4e0e\u9632\u53d6\u8bc1\u654f\u611f\u6570\u636e\u6e05\u9664<\/h4>\n<p>\u5bf9\u4e8e\u89e3\u5bc6\u5bc6\u94a5\u7684\u4e34\u65f6\u5bc6\u7801\u6587\u4ef6&#xff0c;\u8fd0\u7ef4\u7cfb\u7edf\u5728\u8282\u70b9\u5b8c\u6210\u7b7e\u540d\u89e3\u9501\u540e&#xff1a;<\/p>\n<ul>\n<li>\u91c7\u7528\u5185\u5b58\u6302\u8f7d\u76d8&#xff08;tmpfs&#xff09;\u6682\u5b58&#xff1b;<\/li>\n<li>\u4f7f\u7528 shred -u \u8fdb\u884c\u5b89\u5168\u7c89\u788e\u64e6\u9664&#xff0c;\u9632\u6b62\u7269\u7406\u5185\u5b58\u6216\u78c1\u76d8\u88ab\u53d6\u8bc1\u5de5\u5177\u626b\u63cf&#xff1b;<\/li>\n<li>\u751f\u4ea7\u670d\u52a1\u5668\u5168\u91cf\u542f\u7528 SELinux \/ AppArmor \u5f3a\u5236\u8bbf\u95ee\u63a7\u5236\u7b56\u7565&#xff0c;\u9650\u5236 Geth \u8fdb\u7a0b\u53ea\u80fd\u8bfb\u5199\u81ea\u8eab\u6570\u636e\u76ee\u5f55\u3002<\/li>\n<\/ul>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>\u901a\u8fc7\u7f51\u7edc\u7269\u7406\u9694\u79bb\u3001\u7279\u6743\u6a21\u5757\u5f7b\u5e95\u7981\u7528\u4e0e\u4e34\u65f6\u51ed\u8bc1\u5185\u5b58\u7c89\u788e&#xff0c;\u6d88\u9664\u4e86\u8282\u70b9\u88ab\u5916\u90e8\u653b\u7834\u7684\u653b\u51fb\u9762\u3002<\/p>\n<h3>\u7b2c10\u7ae0 \u8282\u70b9\u5de5\u7a0b\u5b9e\u6218\u9a8c\u6536\u4e0e\u8fd0\u7ef4\u6e05\u5355<\/h3>\n<p>\u4ece\u96f6\u642d\u5efa\u4e00\u6761\u94fe\u7684\u521b\u4e16\u8282\u70b9&#xff0c;\u6700\u7ec8\u9700\u8981\u901a\u8fc7\u6807\u51c6\u5316\u7684\u9a8c\u6536\u6e05\u5355&#xff08;Checklist&#xff09;\u8fdb\u884c\u9010\u9879\u590d\u6838\u3002\u672c\u7ae0\u7ed9\u51fa RNOISE \u6838\u5fc3\u5f00\u53d1\u56e2\u961f\u7684\u6807\u51c6\u4ea4\u4ed8\u89c4\u8303\u3002<\/p>\n<h4>10.1 \u751f\u4ea7\u7ea7\u8282\u70b9\u4e0a\u7ebf\u4e03\u5927\u95e8\u7981<\/h4>\n<p>\u4efb\u4f55\u8282\u70b9\u88ab\u51c6\u8bb8\u5e76\u5165\u751f\u4ea7\u96c6\u7fa4\u524d&#xff0c;\u5fc5\u987b\u5b8c\u6210\u4ee5\u4e0b 7 \u9879\u95ed\u73af\u9a8c\u8bc1&#xff1a;<\/p>\n<li>\u521b\u4e16\u54c8\u5e0c\u4e00\u81f4\u6027&#xff1a;eth.getBlock(0).hash \u4e0e\u96c6\u7fa4\u6743\u5a01\u57fa\u51c6 100% \u543b\u5408&#xff1b;<\/li>\n<li>NetworkId \u65ad\u8a00&#xff1a;eth.chainId \u4e25\u683c\u8fd4\u56de 20260616&#xff08;0x1352708&#xff09;&#xff1b;<\/li>\n<li>\u51fa\u5757\u8282\u62cd\u5e73\u7a33\u5ea6&#xff1a;\u8fde\u7eed\u89c2\u6d4b 100 \u4e2a\u533a\u5757&#xff0c;\u5e73\u5747\u51fa\u5757\u95f4\u9694\u4e25\u683c\u843d\u5728 2.9 \u81f3 3.1 \u79d2\u533a\u95f4&#xff1b;<\/li>\n<li>RPC \u8bbf\u95ee\u767d\u540d\u5355&#xff1a;\u5916\u90e8\u516c\u7f51\u901a\u8fc7 curl \u63a2\u6d4b 8545 \u7aef\u53e3\u5fc5\u987b\u8fd4\u56de\u8fde\u63a5\u8d85\u65f6\u6216\u8fde\u63a5\u62d2\u7edd&#xff1b;<\/li>\n<li>\u5bf9\u7b49\u4f53\u8fde\u63a5\u5197\u4f59&#xff1a;\u4e0e\u81f3\u5c11\u4e24\u4e2a\u72ec\u7acb\u7269\u7406\u673a\u623f\u7684\u8282\u70b9\u5efa\u7acb\u6301\u7eed P2P \u63e1\u624b&#xff1b;<\/li>\n<li>systemd \u81ea\u542f\u9a8c\u8bc1&#xff1a;\u6267\u884c sudo reboot \u6d4b\u8bd5&#xff0c;\u91cd\u542f\u540e\u8282\u70b9\u670d\u52a1\u81ea\u52a8\u62c9\u8d77\u5e76\u6062\u590d\u51fa\u5757&#xff1b;<\/li>\n<li>\u6570\u636e\u6301\u4e45\u5316\u65e0\u635f&#xff1a;\u6a21\u62df\u7a81\u53d1\u65ad\u7535\u6062\u590d&#xff0c;StateDB \u5feb\u901f\u5b8c\u6210\u4e00\u81f4\u6027\u81ea\u68c0\u65e0\u635f\u574f\u3002<\/li>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011\u8282\u70b9\u4ea4\u4ed8\u6700\u7ec8\u5168\u529f\u80fd\u96c6\u6210\u6d4b\u8bd5\u9a8c\u8bc1\u811a\u672c<\/h5>\n<p><span class=\"token shebang important\">#!\/usr\/bin\/env bash<\/span><br \/>\n<span class=\"token comment\"># rnoise-node-acceptance.sh<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-euo<\/span> pipefail<\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 [Check 1] \u6821\u9a8c Chain ID&#8230;&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">CHAIN_ID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">curl<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-X<\/span> POST http:\/\/127.0.0.1:8545 <span class=\"token parameter variable\">-H<\/span> <span class=\"token string\">&#034;Content-Type: application\/json&#034;<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token string\">&#039;{&#034;jsonrpc&#034;:&#034;2.0&#034;,&#034;method&#034;:&#034;eth_chainId&#034;,&#034;params&#034;:[],&#034;id&#034;:1}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-o<\/span> <span class=\"token string\">&#039;0x[0-9a-fA-F]*&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$CHAIN_ID<\/span>&#034;<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token string\">&#034;0x1352708&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef: Chain ID \u4e0d\u7b26\u5408\u9884\u671f: <span class=\"token variable\">$CHAIN_ID<\/span>&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u25c6 [Check 2] \u6821\u9a8c\u533a\u5757\u4ea7\u51fa\u8fde\u7eed\u6027&#8230;&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">B1<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">curl<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-X<\/span> POST http:\/\/127.0.0.1:8545 <span class=\"token parameter variable\">-H<\/span> <span class=\"token string\">&#034;Content-Type: application\/json&#034;<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token string\">&#039;{&#034;jsonrpc&#034;:&#034;2.0&#034;,&#034;method&#034;:&#034;eth_blockNumber&#034;,&#034;params&#034;:[],&#034;id&#034;:1}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-o<\/span> <span class=\"token string\">&#039;0x[0-9a-fA-F]*&#039;<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token function\">sleep<\/span> <span class=\"token number\">4<\/span><br \/>\n<span class=\"token assign-left variable\">B2<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">curl<\/span> <span class=\"token parameter variable\">-s<\/span> <span class=\"token parameter variable\">-X<\/span> POST http:\/\/127.0.0.1:8545 <span class=\"token parameter variable\">-H<\/span> <span class=\"token string\">&#034;Content-Type: application\/json&#034;<\/span> <span class=\"token parameter variable\">-d<\/span> <span class=\"token string\">&#039;{&#034;jsonrpc&#034;:&#034;2.0&#034;,&#034;method&#034;:&#034;eth_blockNumber&#034;,&#034;params&#034;:[],&#034;id&#034;:1}&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-o<\/span> <span class=\"token string\">&#039;0x[0-9a-fA-F]*&#039;<\/span><span class=\"token variable\">)<\/span><\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$((<\/span>B2<span class=\"token variable\">))<\/span><\/span>&#034;<\/span> <span class=\"token parameter variable\">-le<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$((<\/span>B1<span class=\"token variable\">))<\/span><\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9519\u8bef: \u8282\u70b9\u672a\u5728\u6b63\u5e38\u63a8\u8fdb\u5757\u9ad8 (B1&#061;<span class=\"token variable\"><span class=\"token variable\">$((<\/span>B1<span class=\"token variable\">))<\/span><\/span>, B2&#061;<span class=\"token variable\"><span class=\"token variable\">$((<\/span>B2<span class=\"token variable\">))<\/span><\/span>)&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;\u9a8c\u6536\u5168\u90e8\u901a\u8fc7: \u8282\u70b9\u5177\u5907\u5b8c\u5168\u751f\u4ea7\u4ea4\u4ed8\u80fd\u529b\u3002&#034;<\/span><\/p>\n<h4>10.2 \u6301\u7eed\u96c6\u6210\u3001Prometheus \u76d1\u63a7\u4e0e\u6df7\u6c8c\u6f14\u7ec3\u89c4\u7a0b<\/h4>\n<p>\u65e5\u5e38\u8fd0\u7ef4\u56e2\u961f\u9075\u5faa\u5168\u65b9\u4f4d\u7684 SRE \u53ef\u9760\u6027\u4fdd\u969c\u5de5\u4f5c\u6d41&#xff1a;<\/p>\n<ul>\n<li>\u5168\u94fe\u8def\u6307\u6807\u91c7\u96c6&#xff08;Prometheus Scraper&#xff09;&#xff1a;\u901a\u8fc7 &#8211;metrics &#8211;metrics.addr 127.0.0.1 &#8211;metrics.port 6060 \u66b4\u9732\u5185\u90e8\u5fae\u5ea6\u91cf&#xff0c;\u91c7\u96c6\u5305\u62ec chain_head_block\u3001txpool_valid_txs\u3001p2p_peers \u4ee5\u53ca system_memory_used \u7b49\u5173\u952e\u65f6\u95f4\u5e8f\u5217&#xff1b;<\/li>\n<li>\u78c1\u76d8\u4e0e\u7f51\u7edc\u57fa\u51c6\u5ba1\u8ba1&#xff1a;\u6bcf\u65e5\u51cc\u6668\u5bf9\u78c1\u76d8 I\/O \u541e\u5410\u3001\u5b58\u50a8\u4f7f\u7528\u7387\u3001P2P \u4e22\u5305\u7387\u8fdb\u884c\u81ea\u52a8\u5316\u62a5\u8868\u7edf\u8ba1&#xff0c;\u786e\u4fdd\u78c1\u76d8\u5199\u5165\u5ef6\u8fdf\u4f4e\u4e8e 2ms&#xff1b;<\/li>\n<li>\u5b89\u5168\u53d8\u66f4\u4e0e\u914d\u7f6e\u7248\u672c\u5316&#xff1a;\u8282\u70b9\u914d\u7f6e\u4e0e\u521b\u4e16\u6587\u4ef6\u5168\u90e8\u7eb3\u5165 Git \u7248\u672c\u63a7\u5236&#xff0c;\u4efb\u4f55\u53c2\u6570\u4fee\u6539\u5fc5\u987b\u63d0\u4ea4 Pull Request \u5e76\u7ecf\u7531\u81f3\u5c11\u4e24\u540d\u6838\u5fc3\u7b7e\u540d\u8005\u8054\u5408\u7b7e\u540d\u6279\u51c6\u540e\u65b9\u53ef\u89e6\u53d1 CI\/CD \u7070\u5ea6\u53d1\u5e03&#xff1b;<\/li>\n<li>\u6df7\u6c8c\u5de5\u7a0b\u4e0e\u707e\u96be\u6062\u590d&#xff08;Chaos Testing&#xff09;&#xff1a;\u5efa\u7acb\u6bcf\u6708\u4e00\u6b21\u7684\u65e0\u9884\u8b66\u5bb9\u707e\u6f14\u7ec3\u673a\u5236&#xff0c;\u6a21\u62df\u9999\u6e2f\u4e3b\u51fa\u5757\u8282\u70b9\u7a81\u53d1\u65ad\u7f51\u6216\u786c\u4ef6\u6389\u7535&#xff0c;\u68c0\u9a8c\u6df1\u5733\u5907\u4efd\u8282\u70b9\u80fd\u5426\u5728 3 \u4e2a\u51fa\u5757\u5468\u671f&#xff08;9 \u79d2&#xff09;\u5185\u81ea\u52a8\u63a5\u7ba1&#xff0c;\u9a8c\u8bc1 StateDB \u5728\u7a81\u53d1\u65ad\u7535\u573a\u666f\u4e0b\u662f\u5426\u80fd\u591f\u5b9e\u73b0\u96f6\u6570\u636e\u4e22\u5931\u5e73\u6ed1\u6062\u590d\u3002<\/li>\n<\/ul>\n<h5>\u3010\u6838\u5fc3\u4ee3\u7801\u7247\u3011Prometheus \u76d1\u63a7\u91c7\u96c6\u914d\u7f6e\u4e0e\u544a\u8b66\u89c4\u5219\u5b9a\u4e49<\/h5>\n<p><span class=\"token comment\"># \/etc\/prometheus\/scrape_configs\/rnoise-node.yml<\/span><br \/>\n<span class=\"token key atrule\">scrape_configs<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">job_name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#039;rnoise-geth&#039;<\/span><br \/>\n    <span class=\"token key atrule\">scrape_interval<\/span><span class=\"token punctuation\">:<\/span> 3s<br \/>\n    <span class=\"token key atrule\">static_configs<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">targets<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;127.0.0.1:6060&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token key atrule\">metric_relabel_configs<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">source_labels<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span>__name__<span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token key atrule\">regex<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#039;(chain_head_block|txpool_pending|p2p_peers)&#039;<\/span><br \/>\n        <span class=\"token key atrule\">action<\/span><span class=\"token punctuation\">:<\/span> keep<\/p>\n<p><span class=\"token comment\"># \u544a\u8b66\u89c4\u5219\u5b9a\u4e49<\/span><br \/>\n<span class=\"token key atrule\">groups<\/span><span class=\"token punctuation\">:<\/span><br \/>\n  <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> rnoise_node_alerts<br \/>\n    <span class=\"token key atrule\">rules<\/span><span class=\"token punctuation\">:<\/span><br \/>\n      <span class=\"token punctuation\">&#8211;<\/span> <span class=\"token key atrule\">alert<\/span><span class=\"token punctuation\">:<\/span> NodeBlockStalled<br \/>\n        <span class=\"token key atrule\">expr<\/span><span class=\"token punctuation\">:<\/span> increase(chain_head_block<span class=\"token punctuation\">[<\/span>15s<span class=\"token punctuation\">]<\/span>) &#061;&#061; 0<br \/>\n        <span class=\"token key atrule\">for<\/span><span class=\"token punctuation\">:<\/span> 10s<br \/>\n        <span class=\"token key atrule\">labels<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token key atrule\">severity<\/span><span class=\"token punctuation\">:<\/span> critical<br \/>\n        <span class=\"token key atrule\">annotations<\/span><span class=\"token punctuation\">:<\/span><br \/>\n          <span class=\"token key atrule\">summary<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;RNOISE \u8282\u70b9\u505c\u6b62\u51fa\u5757\u544a\u8b66&#xff01;&#034;<\/span><br \/>\n          <span class=\"token key atrule\">description<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;\u8fde\u7eed 15 \u79d2\u672a\u89c2\u6d4b\u5230\u65b0\u5757\u4ea7\u751f&#xff0c;\u53ef\u80fd\u5b58\u5728\u5171\u8bc6\u505c\u6ede\u6216\u7f51\u7edc\u6545\u969c\u3002&#034;<\/span><\/p>\n<h4>\u672c\u7ae0\u5c0f\u7ed3\u4e0e\u4e0d\u53d8\u91cf<\/h4>\n<p>\u4e03\u5927\u4e25\u5bc6\u95e8\u7981\u6784\u6210\u4e86\u8282\u70b9\u5165\u7f51\u7684\u94c1\u5f8b\u6807\u51c6&#xff0c;\u4ee5\u53ef\u5ea6\u91cf\u3001\u53ef\u590d\u73b0\u7684\u9a8c\u8bc1\u811a\u672c\u634d\u536b\u4e86\u5168\u7f51\u8d26\u672c\u7684\u9ad8\u53ef\u7528\u3002<\/p>\n<hr \/>\n<h3>\u7ed3\u8bed\u4e0e\u6f14\u8fdb\u8def\u7ebf<\/h3>\n<p>RNS Token \u4e0e RNOISE Chain \u7684\u6280\u672f\u6f14\u8fdb\u4e0d\u662f\u7a7a\u4e2d\u697c\u9601&#xff0c;\u800c\u662f\u5efa\u7acb\u5728\u4e25\u683c\u7684\u5bc6\u7801\u5b66\u7ea6\u675f\u3001\u6e05\u6670\u7684\u72b6\u6001\u673a\u8fb9\u754c\u4e0e\u53ef\u91cf\u5316\u7684\u7ecf\u6d4e\u6a21\u578b\u4e4b\u4e0a\u3002\u4ece\u5e95\u5c42 Clique PoA \u5171\u8bc6\u5230\u5e94\u7528\u5c42 BeatMarketplace&#xff0c;\u4ece ERC-20 \u57fa\u7840\u6269\u5c55\u5230 Web4 \u786c\u4ef6 TEE \u7b7e\u540d&#xff0c;\u6574\u4e2a\u6280\u672f\u6808\u5c55\u73b0\u4e86\u4e3b\u6743\u533a\u5757\u94fe\u5728\u6570\u5b57\u7248\u6743\u9886\u57df\u7684\u6df1\u8fdc\u6f5c\u529b\u3002\u672a\u6765&#xff0c;\u968f\u7740\u591a\u94fe\u7ed3\u7b97\u9762\u7684\u9010\u6b65\u843d\u5730\u4e0e\u540e\u91cf\u5b50\u5bc6\u7801\u5b66\u7684\u6301\u7eed\u6f14\u8fdb&#xff0c;RNOISE \u5c06\u6301\u7eed\u62d3\u5c55 Web3 \u97f3\u4e50\u4ea7\u4e1a\u7684\u5de5\u4e1a\u5316\u57fa\u7840\u8bbe\u65bd\u3002<\/p>\n<hr \/>\n<h3>\u7248\u6743\u4e0e\u58f0\u660e<\/h3>\n<ul>\n<li>\u00a9 DREAMVFIA UNION \u00b7 RNS Token Web3 \u6280\u672f\u4e13\u9898\u7cfb\u5217&#xff0c;\u4fdd\u7559\u6240\u6709\u6743\u5229\u3002<\/li>\n<li>\u672c\u6587\u57fa\u4e8e D:\\\\RNOISE-Token \u4ed3\u5e93\u5f53\u524d\u6e90\u7801\u4e0e Obsidian \u751f\u6001\u7b14\u8bb0\u57fa\u7ebf\u64b0\u5199&#xff1b;\u72b6\u6001\u63aa\u8f9e\u6309\u8bc1\u636e\u4e66\u5199&#xff1a;Live\u3001\u53d7\u63a7 live\u3001Planned\u3001\u672a\u5f00\u59cb\u3001Off\/Draft&#xff0c;\u672a\u77e5\u5904\u6807\u6ce8 UNKNOWN\u3002<\/li>\n<li>\u5b89\u5168\u7ea2\u7ebf&#xff1a;\u672c\u6587\u4e0d\u542b\u4efb\u4f55\u79c1\u94a5\u3001\u52a9\u8bb0\u8bcd\u3001\u660e\u6587\u5bc6\u7801\u3001keystore \u5185\u5bb9\u3001\u73af\u5883\u53d8\u91cf\u79d8\u5bc6\u503c\u3001\u670d\u52a1\u5668\u5165\u53e3\u4e0e\u5355\u70b9\u8d44\u91d1\u64cd\u4f5c\u7ec6\u8282&#xff1b;\u5408\u7ea6\u53ea\u8bb2\u63a5\u53e3\u8bed\u4e49\u3001\u72b6\u6001\u673a\u4e0e\u6743\u9650\u6a21\u578b\u3002<\/li>\n<li>\u8f6c\u8f7d\u8bf7\u8054\u7cfb DREAMVFIA UNION \u83b7\u5f97\u6388\u6743&#xff0c;\u5e76\u4fdd\u7559\u5b8c\u6574\u7248\u6743\u6807\u8bc6\u3002<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u7248\u6743\u58f0\u660e&#xff1a;\u672c\u6587\u7cfb DREAMVFIA UNION \u539f\u521b\u6280\u672f\u4e13\u9898&#xff0c;RNS Token Web3 \u6280\u672f\u4e13\u9898\u7cfb\u5217\u4e4b\u4e00&#xff0c;\u5b98\u7f51 token.rnoise.cn\u3002<br \/>\n\u672a\u7ecf DREAMVFIA UNION \u4e66\u9762\u6388\u6743&#xff0c;\u7981\u6b62\u8f6c\u8f7d\u3001\u6458\u7f16\u3001\u6d17\u7a3f\u6216\u7528\u4e8e\u6a21\u578b\u8bad\u7ec3\u8bed\u6599\u3002<br \/>\nRNOISE Chain \u4e3a\u81ea\u5efa EVM \u517c\u5bb9\u94fe&#xff0c;RNS \u4e3a\u97f3\u4e50\u7248\u6743\u751f\u6001\u4ee3\u5e01&#xff1b;\u6587\u4e2d\u6d89\u53ca\u7b2c\u4e09\u65b9\u94fe\u4e0e\u5e73\u53f0\u4ec5\u4e3a\u6280\u672f\u8bf4\u660e&#xff0c;\u4e0d\u6784\u6210\u5408\u4f5c\u5ba3\u79f0\u4e0e\u6295\u8d44\u5efa\u8bae\u3002<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[11653,2865,1160,5098,100,188],"topic":[],"class_list":["post-109398","post","type-post","status-publish","format-standard","hentry","category-server","tag-11653","tag-2865","tag-1160","tag-5098","tag-100","tag-188"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/109398.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u7248\u6743\u58f0\u660e&#xff1a;\u672c\u6587\u7cfb DREAMVFIA UNION \u539f\u521b\u6280\u672f\u4e13\u9898&#xff0c;RNS Token Web3 \u6280\u672f\u4e13\u9898\u7cfb\u5217\u4e4b\u4e00&#xff0c;\u5b98\u7f51 token.rnoise.cn\u3002 \u672a\u7ecf DREAMVFIA UNION \u4e66\u9762\u6388\u6743&#xff0c;\u7981\u6b62\u8f6c\u8f7d\u3001\u6458\u7f16\u3001\u6d17\u7a3f\u6216\u7528\u4e8e\u6a21\u578b\u8bad\u7ec3\u8bed\u6599\u3002 RNOISE Chain \u4e3a\u81ea\u5efa EVM \u517c\u5bb9\u94fe&#xff0c;RNS \u4e3a\u97f3\u4e50\u7248\u6743\u751f\u6001\u4ee3\u5e01&#xff1b;\u6587\u4e2d\u6d89\u53ca\u7b2c\u4e09\u65b9\u94fe\u4e0e\u5e73\u53f0\u4ec5\u4e3a\u6280\u672f\u8bf4\u660e&#xff0c;\u4e0d\u6784\u6210\u5408\u4f5c\u5ba3\u79f0\u4e0e\u6295\u8d44\u5efa\u8bae\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/109398.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-23T18:40:42+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/109398.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/109398.html\",\"name\":\"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-23T18:40:42+00:00\",\"dateModified\":\"2026-09-23T18:40:42+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/109398.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/109398.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/109398.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/109398.html","og_locale":"zh_CN","og_type":"article","og_title":"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u7248\u6743\u58f0\u660e&#xff1a;\u672c\u6587\u7cfb DREAMVFIA UNION \u539f\u521b\u6280\u672f\u4e13\u9898&#xff0c;RNS Token Web3 \u6280\u672f\u4e13\u9898\u7cfb\u5217\u4e4b\u4e00&#xff0c;\u5b98\u7f51 token.rnoise.cn\u3002 \u672a\u7ecf DREAMVFIA UNION \u4e66\u9762\u6388\u6743&#xff0c;\u7981\u6b62\u8f6c\u8f7d\u3001\u6458\u7f16\u3001\u6d17\u7a3f\u6216\u7528\u4e8e\u6a21\u578b\u8bad\u7ec3\u8bed\u6599\u3002 RNOISE Chain \u4e3a\u81ea\u5efa EVM \u517c\u5bb9\u94fe&#xff0c;RNS \u4e3a\u97f3\u4e50\u7248\u6743\u751f\u6001\u4ee3\u5e01&#xff1b;\u6587\u4e2d\u6d89\u53ca\u7b2c\u4e09\u65b9\u94fe\u4e0e\u5e73\u53f0\u4ec5\u4e3a\u6280\u672f\u8bf4\u660e&#xff0c;\u4e0d\u6784\u6210\u5408\u4f5c\u5ba3\u79f0\u4e0e\u6295\u8d44\u5efa\u8bae\u3002","og_url":"https:\/\/www.wsisp.com\/helps\/109398.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-23T18:40:42+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"19 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/109398.html","url":"https:\/\/www.wsisp.com\/helps\/109398.html","name":"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-23T18:40:42+00:00","dateModified":"2026-09-23T18:40:42+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/109398.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/109398.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/109398.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u521b\u4e16\u4e0e\u8282\u70b9\u5de5\u7a0b\uff1agenesis.json \u4e0e node.toml \u89e3\u5256\u3010\u4fee\u8ba2\u7248\u3011"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/109398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=109398"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/109398\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=109398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=109398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=109398"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=109398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}