艾达币私链搭建:详细指南与步骤解析

艾达币私链搭建指南

简介

本文档旨在提供一个关于如何搭建艾达币(ADA)私链的详尽指南。私链,作为区块链技术的一种部署方式,允许开发者在完全隔离且可控的环境中模拟真实的区块链环境。通过构建艾达币私链,开发者能够安全地进行以下操作:

  • 应用程序测试: 在无需花费真实ADA的情况下,测试和验证基于Cardano区块链构建的去中心化应用程序 (DApps) 的功能和性能。
  • 协议更新测试: 评估Cardano协议的潜在更新和改进,确保与现有系统的兼容性,并识别可能出现的任何问题。
  • 新功能实验: 探索和试验新的区块链功能,如智能合约、多资产支持或链上治理机制,而无需承担在主网上进行操作的风险。
  • 性能优化: 模拟不同的网络条件和交易负载,以识别性能瓶颈并优化应用程序的性能。
  • 安全性审计: 在受控环境中进行安全审计和渗透测试,以识别和修复潜在的安全漏洞。

本指南将涵盖以下关键步骤,确保读者能够成功搭建并运行一个功能完备的艾达币私链:

  • 必要的软件安装: 详细介绍所需软件(例如Cardano节点软件、命令行工具)的安装过程,包括不同操作系统的安装指南。
  • 配置: 指导用户如何配置节点软件,包括设置网络参数、指定存储路径以及配置加密密钥。
  • 创世区块生成: 详细解释如何创建创世区块,这是私链的第一个区块,也是区块链的起点。我们将提供必要的命令和参数设置,确保创世区块的正确生成。
  • 启动和管理私链: 提供启动私链的步骤,包括节点同步、交易提交和区块链浏览器配置等。还将介绍私链的管理和维护,例如监控节点性能、处理错误以及升级软件。

通过遵循本指南,开发者可以快速搭建一个艾达币私链,并利用它进行应用程序开发、协议测试和新功能实验,从而加速Cardano生态系统的创新和发展。

前提条件

在开始之前,请确保你已经具备以下先决条件,以便顺利完成后续步骤:

  • 操作系统: 你需要一台运行 Linux 操作系统的机器。我们推荐使用 Ubuntu 或 Debian 发行版,因为它们拥有广泛的社区支持和丰富的软件包资源。其他 Linux 发行版原则上也可以使用,但可能需要针对性地调整某些命令和配置。请确保你的 Linux 系统是最新的稳定版本。
  • 命令行熟练度: 你需要对 Linux 命令行操作有一定程度的熟悉。这包括能够使用常用的命令如 cd (切换目录)、 ls (列出文件)、 mkdir (创建目录)、 rm (删除文件)、 cp (复制文件)、 mv (移动文件)等。掌握 Bash 脚本编写基础将更有助于自动化部署和管理过程。
  • 必要的开发工具: 请确保你的系统已经安装了以下必要的开发工具:
    • git :用于版本控制,克隆和管理源代码仓库。可以通过 sudo apt install git sudo yum install git 安装。
    • curl :用于从服务器下载文件,例如安装脚本和配置文件。可以通过 sudo apt install curl sudo yum install curl 安装。
    • build-essential (Debian/Ubuntu) 或 gcc 及相关工具 (其他发行版):用于编译源代码。Debian/Ubuntu 用户可以通过 sudo apt install build-essential 安装。其他发行版用户需要安装 gcc , make , autoconf , automake 等工具。
    • 其他可能需要的依赖:根据具体的加密货币项目,可能还需要安装其他依赖库和工具。请参考项目官方文档的说明。
  • 磁盘空间: 你需要拥有足够的磁盘空间来存储源代码、编译后的二进制文件、区块链数据以及日志文件。根据加密货币项目的规模和区块链的增长速度,所需的磁盘空间可能从几十 GB 到几百 GB 不等。建议至少预留 100GB 的可用空间,并定期检查磁盘空间的使用情况。
  • 内存: 拥有足够的内存对于编译代码和运行节点至关重要。建议至少拥有 4GB 的内存,如果运行对资源要求较高的加密货币节点,建议拥有 8GB 或更高的内存。
  • 网络连接: 稳定的网络连接是运行加密货币节点的基本要求。你需要确保你的机器能够访问互联网,并且具有足够的带宽来同步区块链数据和与其他节点进行通信。
  • 安全意识: 运行加密货币节点需要具备一定的安全意识,例如使用强密码、定期更新系统和软件、配置防火墙等,以防止恶意攻击和数据泄露。

步骤 1:安装 Cardano Node

我们需要安装 Cardano Node,它是搭建私链的核心组件。Cardano Node 负责处理区块链上的交易、验证区块以及与其他节点通信。安装方式主要有两种:一种是从源码编译安装,另一种是使用预编译的二进制文件。从源码编译能够提供更高的自定义性和优化空间,但需要更深入的了解和更多的操作步骤,可能涉及依赖库的安装和配置。为了简化流程,我们推荐使用预编译的二进制文件,这种方式更加快捷方便,尤其适合初学者和快速原型开发。

使用预编译的二进制文件安装 Cardano Node,通常需要访问 Cardano 官方网站或相应的 GitHub 仓库,下载与你的操作系统(如 Linux、macOS 或 Windows)相匹配的版本。下载后,按照官方提供的安装指南进行操作,通常包括解压文件、设置环境变量以及验证安装是否成功。

下载 Cardano Node 二进制文件:

为了参与 Cardano 网络,您需要下载并安装 Cardano 节点软件。本节将指导您从官方渠道获取最新稳定版本的二进制文件。

访问 Cardano 官方 GitHub 仓库的 Releases 页面,这是获取官方发布版本的最可靠途径。 https://github.com/input-output-hk/cardano-node/releases 。

在 Releases 页面上,仔细查找最新的稳定版本。通常,稳定版本会明确标记,并且会提供预编译的二进制文件,方便不同操作系统的用户下载。选择适用于 Linux 操作系统的 cardano-node cardano-cli 二进制文件。

您可以使用 wget 命令,通过命令行下载这些文件。以下是一个示例,演示如何下载 cardano-node cardano-cli 的 Linux 二进制文件。请务必将 X.X.X 替换为实际的版本号。


wget https://github.com/input-output-hk/cardano-node/releases/download/X.X.X/cardano-node-linux.tar.gz
wget https://github.com/input-output-hk/cardano-node/releases/download/X.X.X/cardano-cli-linux.tar.gz

务必确认下载链接中的版本号与 GitHub Releases 页面上显示的最新稳定版本号一致。不正确的版本号可能导致兼容性问题或安全风险。下载完成后,建议验证文件的完整性,可以使用 SHA256 校验和来确保下载的文件未被篡改。校验和信息通常会在 GitHub Releases 页面上提供。

解压二进制文件:

在Linux环境下,为了能够运行Cardano节点和命令行界面(CLI),你需要首先解压官方提供的二进制文件压缩包。这些压缩包通常采用tar.gz格式,这是一种常见的Linux平台压缩格式,结合了tar归档和gzip压缩。

使用以下bash命令来解压 cardano-node-linux.tar.gz cardano-cli-linux.tar.gz 文件:


tar -xvzf cardano-node-linux.tar.gz
tar -xvzf cardano-cli-linux.tar.gz

命令解释:

  • tar : 是Linux下用于创建和提取tar归档文件的命令。
  • -x : 表示提取(extract)tar归档文件。
  • -v : 表示详细(verbose)模式,会在终端显示解压过程中的文件列表。这有助于你了解解压的进度。
  • -z : 表示使用gzip解压缩,因为文件是gzip压缩的tar归档。
  • -f : 表示指定(file)要操作的tar归档文件名。后面紧跟着的就是压缩包的文件名。

执行这些命令后,压缩包中的文件将被解压到当前目录下。 解压后的文件包含了Cardano节点的执行文件和Cardano CLI的执行文件, 它们是运行Cardano网络节点以及与Cardano区块链交互所必需的。

将 Cardano 节点和 CLI 二进制文件移动到 /usr/local/bin/ 目录:

将编译好的 cardano-node cardano-cli 可执行文件移动到 /usr/local/bin/ 目录,使其在系统范围内可用。 /usr/local/bin/ 目录通常用于存放用户安装的程序。由于需要系统级别的权限才能修改该目录,因此使用 sudo 命令提升权限。

bash sudo mv cardano-node /usr/local/bin/ sudo mv cardano-cli /usr/local/bin/

说明:

  • sudo :以超级用户权限执行命令。
  • mv :移动文件的命令。
  • cardano-node :Cardano 节点的可执行文件。
  • cardano-cli :Cardano 命令行界面的可执行文件。
  • /usr/local/bin/ :目标目录,系统存放可执行文件的标准位置之一。

执行这些命令后,您可以在终端中直接使用 cardano-node cardano-cli 命令,而无需指定它们的完整路径。 这极大地简化了后续操作,例如启动节点、查询链状态或创建交易。

验证安装:

安装完成后,务必验证 cardano-node cardano-cli 是否已正确安装并配置到您的系统路径中。 通过执行以下命令进行验证:

cardano-node --version
cardano-cli --version

上述命令会分别显示 cardano-node cardano-cli 的版本信息。 如果命令成功执行并显示版本号,例如:

cardano-node 1.35.4 - linux-x86_64 - ghc-8.10
git rev 3429a34e56a3b1079e6f4c1d538066485e7b74ce
cardano-cli 1.35.4 - linux-x86_64 - ghc-8.10

则表示安装过程顺利完成。 确保显示的 cardano-node cardano-cli 的版本与您预期安装的版本一致。 如果未显示版本信息,或者出现 "command not found" 错误,请检查您的环境变量配置,确保 cardano-node cardano-cli 的可执行文件所在的目录已添加到系统的 PATH 环境变量中。 检查安装过程中是否有任何错误提示,并根据提示进行排查和修复。 安装验证是确保后续操作顺利进行的关键步骤,请务必认真对待。

步骤 2:生成 Genesis 文件

Genesis 文件是区块链的基石,它定义了区块链的初始状态,包括但不限于:创世区块的内容、初始账户的 ADA 代币分配、共识机制的关键参数、以及网络的其他重要配置信息。一个精心设计的 Genesis 文件对于私有链的稳定运行至关重要。

  1. 详细来说,Genesis 文件通常包含以下关键信息:
    • 初始 ADA 分配: 定义哪些账户在区块链启动时拥有 ADA 代币,以及每个账户的初始余额。这对于激励早期参与者和分配资源至关重要。
    • 共识参数: 设置区块链的共识机制,例如区块生成时间、区块大小限制、以及其他与共识算法相关的参数。这些参数直接影响区块链的性能和安全性。
    • 网络参数: 配置网络的各种参数,例如网络 ID、协议版本、以及其他与网络通信相关的设置。这些参数确保网络中的节点能够正确地相互通信。
    • 创世区块: 包含区块链的第一个区块,其中通常包含时间戳、难度目标、以及其他与创世区块相关的信息。创世区块是区块链的起点,也是所有后续区块的根基。

创建工作目录:

在开始构建Cardano私有网络之前,我们需要创建一个专门的工作目录,用于存放所有相关的配置文件、脚本以及生成的文件。这样做有助于组织和管理项目,避免文件混淆,并方便后续的维护和升级。

使用以下命令创建并进入工作目录:


mkdir cardano-private-net
cd cardano-private-net

mkdir cardano-private-net 命令会在当前目录下创建一个名为 cardano-private-net 的新目录。这个目录将作为我们私有网络项目的根目录。

cd cardano-private-net 命令会将当前的工作目录切换到刚刚创建的 cardano-private-net 目录下。后续的操作都将在这个目录下进行,确保所有相关的文件都存放在正确的位置。

建议在执行这些命令之前,确保你已经安装了 Bash shell 或其他类似的 shell 环境。这些命令在 Linux 和 macOS 系统中通常是默认提供的,但在 Windows 系统中可能需要安装额外的软件,例如 Git Bash 或者 Windows Subsystem for Linux (WSL)。

生成 Genesis 文件配置:

Genesis 文件是区块链的创世块的配置文件,定义了区块链的初始状态,包括初始代币分配、共识参数等关键信息。可以使用 cardano-cli 工具生成一个默认的 Genesis 文件配置作为起点,然后根据实际需求进行详细的修改和定制。这将允许你根据你的特定需求调整区块链的各个方面。

使用 cardano-cli genesis create-genesis-keys 命令可以创建创世密钥对,这些密钥用于签署创世块和后续的一些关键操作。 --genesis-verification-key-file --genesis-signing-key-file 参数指定了验证密钥和签名密钥的保存路径和文件名。 --genesis-supply 参数定义了创世块中初始发行的代币总量。需要注意的是,创世区块的配置对于整个区块链的安全性至关重要,应该小心谨慎地进行配置。

cardano-cli genesis create-genesis-keys \
   --genesis-verification-key-file genesis-verification-key.key \
   --genesis-signing-key-file genesis-signing-key.key \
   --genesis-supply 1000000000000000

执行上述命令后,会生成两个关键的文件: genesis-verification-key.key genesis-signing-key.key genesis-verification-key.key 文件包含用于验证创世块签名的公钥。 genesis-signing-key.key 文件包含用于签署创世块的私钥,必须妥善保管,防止泄露,因为拥有此密钥意味着可以控制创世区块的某些方面。 为了安全起见,强烈建议将此文件存储在安全的环境中,例如硬件钱包或者离线存储。

生成 Genesis 文件:

使用 cardano-cli genesis create 命令可以创建区块链的创世 (Genesis) 文件,这是启动 Cardano 网络或私链的必要步骤。该文件包含了网络的初始配置和参数。

以下是一个 cardano-cli genesis create 命令的示例:


bash
cardano-cli genesis create \
  --genesis-verification-key genesis-verification-key.key \
  --genesis-signing-key genesis-signing-key.key \
  --start-time $(date +%s) \
  --k 10 \
  --protocol-magic 42 \
  --security-param 2160 \
  --max-lovelace-supply 45000000000000000000 \
  --out-file genesis.
  • --genesis-verification-key genesis-verification-key.key : 指定用于验证创世块的验证密钥。此密钥与创世签名密钥配对,用于证明创世块的真实性。
  • --genesis-signing-key genesis-signing-key.key : 指定用于签署创世块的签名密钥。此密钥必须保密,因为它控制着网络的初始状态。
  • --start-time $(date +%s) : 设置区块链启动的时间戳。 $(date +%s) 命令会获取当前的 Unix 时间戳(自 1970-01-01 00:00:00 UTC 以来的秒数),确保私链在命令执行时立即启动。
  • --k 10 : 指定 k 参数,该参数定义了槽领导者选举所需的最小权益数量。较小的 k 值会使网络更容易受到攻击,而较大的值会增加权益池运营者的最低要求。 在私链环境中,可以根据具体需求调整此参数。
  • --protocol-magic 42 : 定义私链的协议 Magic Number。这是一个唯一的数字标识符,用于区分不同的 Cardano 网络。使用与主网或测试网不同的 protocol-magic 对于隔离私链至关重要,可以防止意外的网络交互和数据混淆。
  • --security-param 2160 : 设置安全参数 ( security_param ),它决定了区块链抵抗双重支付攻击的能力。此参数通常表示为 epoch 的数量,一个 epoch 大约相当于 5 天。 默认值通常为 2160,这意味着需要至少 2160 个区块才能确认交易的最终性。
  • --max-lovelace-supply 45000000000000000000 : 指定网络中 Lovelace 的最大总供应量。 Lovelace 是 Cardano 的最小货币单位 (1 ADA = 1,000,000 Lovelace)。 此参数定义了可以创建的最大 ADA 数量。
  • --out-file genesis. : 指定输出的创世文件名称。 创世文件通常命名为 genesis. ,并包含用于启动区块链的所有初始配置数据。

编辑 Genesis 文件 (可选):

为了对区块链的初始状态进行更精细的控制,你可以使用文本编辑器,例如 VS Code、Sublime Text 或任何其他你喜欢的代码编辑器,打开 genesis. 文件。Genesis 文件是区块链的创世区块配置文件,包含了区块链启动时的所有关键参数。

在此文件中,你可以根据项目需求修改各项参数。最重要的调整包括:

  • 初始 ADA 分配: genesis. 文件中,你可以精确控制每个地址在区块链启动时获得的 ADA 数量。这对于分配初始代币,进行空投或分配给团队成员至关重要。请仔细核对分配比例,确保公平和准确。
  • 共识参数: 可以调整与区块链共识机制相关的参数。例如,在权益证明(PoS)区块链中,你可以修改 staking 奖励率、出块时间、epoch 长度等关键参数。修改这些参数会直接影响网络的安全性、交易速度和能源效率。请务必理解每个参数的含义及其潜在影响。
  • 协议版本: Genesis 文件也可能包含协议版本信息。如果需要使用特定的协议版本,可以在这里进行设置。不同的协议版本可能支持不同的功能和改进。
  • 其他网络配置: 除了上述参数外,还可以调整其他网络配置,例如难度调整算法、区块大小限制等。这些参数通常需要高级用户或开发者进行调整。

重要提示: 修改 genesis. 文件需要谨慎操作。不正确的参数设置可能导致区块链无法启动或运行不稳定。在修改之前,请务必备份原始文件,并仔细阅读相关文档,充分理解每个参数的含义和影响。建议在测试网络上进行充分的测试,确认所有参数都符合预期后再应用于主网络。

步骤 3:创建 Node 配置文件

Node 配置文件对于 Cardano 节点的正确运行至关重要。它定义了节点启动和运行所需的所有关键参数,包括但不限于网络配置(例如,所连接的Cardano网络的主网、测试网或开发网的魔法值)、数据库路径(指定节点存储区块链数据的硬盘位置)、日志级别(控制节点输出的日志信息的详细程度,例如debug、info、warn、error等)、链的历史记录、交易验证策略以及共识协议参数。一个正确的配置文件能够确保节点能够与其他节点安全可靠地通信,并且能够准确地验证区块链数据。

配置文件通常是一个JSON格式的文件,并可以通过命令行参数传递给 Cardano 节点程序。错误的配置可能导致节点无法启动、无法同步区块链数据或者与其他节点通信失败,因此务必仔细检查和理解配置文件的每一个参数。

创建 Node 配置文件:

创建一个名为 node-config. 的文件(务必注意文件扩展名为 . ),并仔细地将以下JSON格式的内容复制到文件中。此文件是节点运行的关键配置文件,包含了节点启动和运行所需的各种参数。


{
  "AlonzoGenesisFile": "genesis.",
  "AlonzoGenesisHash": "...",
  "ConwayGenesisFile": "genesis.",
  "ConwayGenesisHash": "...",
  "ByronGenesisFile": "genesis.",
  "ByronGenesisHash": "...",
  "ShelleyGenesisFile": "genesis.",
  "ShelleyGenesisHash": "...",
  "EnableLogMetrics": true,
  "EnableProducers": true,
  "ExperimentalProtocolsEnabled": [
    "Conway"
  ],
  "GenesisFile": "genesis.",
  "GenesisHash": "...",
  "KESUpdatePropagationDelay": 43200,
  "LastKnownBlockVersion-Major": 15,
  "LastKnownBlockVersion-Minor": 0,
  "LastKnownBlockVersion-Patch": 0,
  "MaxConcurrencyBulkSync": 2,
  "MaxConcurrencyStake": 2,
  "MemPoolCapacityBytes": 692060,
  "MemPoolCapacityTxs": 3000,
  "MinimumChainDensity": 0.75,
  "NodeAddress": "127.0.0.1",
  "NodePort": 3001,
  "PBftSignatureThreshold": 0.8,
  "Protocol": "Cardano",
  "RequiresGenesis": true,
  "Secrets": {
    "TLSKeyFile": "tls/server.key",
    "TLSCertFile": "tls/server.crt",
    "TLSCaCertFile": "tls/ca.crt"
  },
  "SlotLength": 1,
  "StaticKeySigningKeyFile": "node.skey",
  "StaticKeyVRFKeyFile": "node.vrf",
  "StorageConfig": {
    "dbPath": "db",
    "staticRootPath": "."
  },
  "TraceAcceptAt": "Info",
  "TraceBlockFetchClient": false,
  "TraceBlockFetchDecisions": false,
  "TraceBlockFetchProtocol": false,
  "TraceBlockFetchSerialisation": false,
  "TraceChainDb": false,
  "TraceChainSyncClient": false,
  "TraceChainSyncHeaderServer": false,
  "TraceChainSyncProtocol": false,
  "TraceChainSyncServer": false,
  "TraceConnectionManager": false,
  "TraceDNSResolver": false,
  "TraceErrorPolicy": false,
  "TraceForge": true,
  "TraceHandshake": false,
  "TraceInboundGovernor": false,
  "TraceIpSubscription": false,
  "TraceLedgerPeers": false,
  "TraceLocalChainSyncProtocol": false,
  "TraceLocalErrorPolicy": false,
  "TraceLocalHandshake": false,
  "TraceLocalTxSubmissionProtocol": false,
  "TraceMempool": false,
  "TraceMuxC": false,
  "TracePeerSelection": false,
  "TracePublicChainSyncProtocol": false,
  "TraceROCursorPipelining": false,
  "TraceRequestedSnapshotHashes": false,
  "TraceRequestedSnapshots": false,
  "TraceServer": false,
  "TraceTxSubmission": false,
  "TraceTxSubmissionProtocol": false,
  "TracingVerbosity": "Normal",
  "TurnOnLogMetrics": false,
  "UpdatePeersInterval": 60,
  "ValidateDB": false
}
  • GenesisHash 替换为与你的网络对应的 genesis. 文件的哈希值。这个哈希值是网络的唯一标识符。可以使用以下命令通过 jq 工具获取哈希值。 请确保已经安装了 jq 工具。 如果尚未安装, 可以使用 sudo apt-get install jq (Debian/Ubuntu) 或 brew install jq (macOS) 进行安装。

    jq -r .genesisHash genesis.
  • 为了确保配置的一致性, 将 AlonzoGenesisHash ConwayGenesisHash ByronGenesisHash ShelleyGenesisHash 替换为相同的 Genesis Hash 值。这些哈希值代表了不同协议时代的创世区块哈希,在测试网络环境中,通常将其设置为相同的值来简化配置。

  • NodePort 定义了节点监听网络连接的端口。 默认端口是 3001 , 但是你可以根据你的需要修改这个值。请确保所选端口未被其他应用程序占用,并且防火墙允许通过该端口的流量,以便节点可以与其他节点通信。

  • NodeAddress 定义了节点绑定的IP地址。默认是 127.0.0.1 (localhost),表示节点只监听来自本地的连接。如果要让节点接受来自外部的连接,需要将其设置为节点的公网IP地址或 0.0.0.0 ,表示监听所有可用的网络接口。

  • StorageConfig 部分定义了节点数据的存储路径。 dbPath 指定了区块链数据库的存储位置, staticRootPath 指定了静态文件的根目录。

  • Secrets 部分配置了 TLS 加密相关的密钥和证书文件。 TLSKeyFile , TLSCertFile TLSCaCertFile 分别指定了 TLS 私钥、证书和 CA 证书的路径。 使用TLS可以保护节点间的通信安全。

  • Trace 开头的配置项用于控制节点的日志输出。 可以根据需要启用或禁用不同的跟踪选项来调试和监控节点运行状况。 例如,将 TraceForge 设置为 true 可以记录区块锻造的详细信息。

步骤 4:启动 Cardano 节点

  1. 启动 Cardano 节点是参与 Cardano 网络并验证交易的关键步骤。这一过程涉及运行 Cardano 节点软件,使其与其他节点同步,并维护区块链的本地副本。

创建 TLS 证书 (可选):

如果需要在节点之间建立安全的、加密的通信通道,可以使用传输层安全协议 (TLS)。 这需要创建 TLS 证书。一种常用的方法是使用 openssl 工具来生成自签名证书。在私有区块链环境中,由于所有参与者都在受控范围内,自签名证书通常足以满足安全需求,简化了证书颁发和管理的复杂性。

使用自签名证书时,客户端需要配置信任该证书,否则会提示证书不受信任。在生产环境中,建议使用受信任的证书颁发机构 (CA) 签发的证书。

以下是如何使用 openssl 生成自签名 TLS 证书的示例:

bash
mkdir tls
openssl req -newkey rsa:2048 -nodes -keyout tls/server.key -x509 -days 365 -out tls/server.crt
openssl req -new -x509 -extensions v3_ca -keyout tls/ca.key -out tls/ca.crt -newkey rsa:2048 -nodes -days 3650

命令详解:

  • mkdir tls : 创建一个名为 "tls" 的目录,用于存放生成的证书和密钥文件。
  • openssl req -newkey rsa:2048 -nodes -keyout tls/server.key -x509 -days 365 -out tls/server.crt : 生成服务器证书。
    • req : 调用 OpenSSL 的证书请求子命令。
    • -newkey rsa:2048 : 生成一个新的 RSA 密钥,密钥长度为 2048 位。 密钥长度决定了加密的强度。 2048 位是一个常用的安全长度。
    • -nodes : 不使用密码保护私钥。在自动化部署环境中,这简化了流程。 但在生产环境中,强烈建议使用密码保护私钥。
    • -keyout tls/server.key : 将生成的私钥保存到 "tls/server.key" 文件中。
    • -x509 : 生成自签名证书。
    • -days 365 : 设置证书的有效期为 365 天。 请注意,证书过期后将不再有效。
    • -out tls/server.crt : 将生成的证书保存到 "tls/server.crt" 文件中。
  • openssl req -new -x509 -extensions v3_ca -keyout tls/ca.key -out tls/ca.crt -newkey rsa:2048 -nodes -days 3650 : 生成证书颁发机构 (CA) 证书。
    • req : 调用 OpenSSL 的证书请求子命令。
    • -new : 生成一个新的证书请求。
    • -x509 : 生成自签名证书。
    • -extensions v3_ca : 指定使用 v3_ca 扩展,允许此证书作为证书颁发机构。
    • -keyout tls/ca.key : 将生成的 CA 私钥保存到 "tls/ca.key" 文件中。
    • -out tls/ca.crt : 将生成的 CA 证书保存到 "tls/ca.crt" 文件中。
    • -newkey rsa:2048 : 生成一个新的 RSA 密钥,密钥长度为 2048 位。
    • -nodes : 不使用密码保护私钥。
    • -days 3650 : 设置证书的有效期为 3650 天 (10年)。

生成证书的过程中,系统会提示你输入一些信息,例如国家/地区、组织名称、通用名称等。 这些信息将包含在证书中。 通用名称 (Common Name) 应该设置为服务器的域名或 IP 地址。 在私链环境中,可以设置为任意值。

安全性提示:

  • 请妥善保管你的私钥文件 ( server.key ca.key )。 任何拥有你的私钥的人都可以伪造你的身份。
  • 不要将私钥文件存储在公共目录中。
  • 定期更新你的证书,以确保证书的安全性。
  • 在生产环境中,考虑使用硬件安全模块 (HSM) 来保护私钥。

启动 Cardano 节点:

启动 Cardano 节点是参与 Cardano 网络的第一步。以下命令展示了如何使用 cardano-node run 命令启动节点:


cardano-node run \
  --topology topology. \
  --database-path db \
  --socket-path node.socket \
  --config node-config.

各个参数的具体含义如下:

  • --topology :指定网络拓扑文件,定义节点如何与其他节点连接。对于简单的单节点测试网络,可以使用一个包含本地节点信息的 JSON 文件。正确配置拓扑是节点能够发现和连接到网络中其他节点的关键。请注意此处topology文件名称应与实际topology文件名一致。
  • --database-path :设置节点数据库的存储路径。节点会将所有区块数据、交易记录和其他必要信息存储在此目录中。选择一个具有足够存储空间的路径至关重要,尤其是在同步主网数据时。
  • --socket-path :定义节点套接字文件的路径。其他应用程序,如 cardano-cli ,会使用此套接字与节点进行通信,发送交易、查询链上数据等。此路径必须是应用程序可访问的。
  • --config :指定节点配置文件的路径。该文件包含了节点的各种配置参数,如网络 ID、协议参数和日志设置。建议使用与所连接网络(主网、测试网等)相匹配的配置文件。

为了创建基本的单节点拓扑文件 ( topology. ),请在当前工作目录中创建如下内容的 JSON 文件:


{
  "Producers": [
    {
      "addr": "127.0.0.1",
      "port": 3001,
      "valency": 1
    }
  ]
}

此拓扑文件配置节点连接到本地主机 ( 127.0.0.1 ) 上的另一个节点,端口号为 3001 valency 属性指定节点应该尝试与该地址建立的连接数量。在一个单节点私有链场景中,节点会连接到自身。对于更复杂的网络, Producers 数组可以包含多个节点的地址和端口信息。

验证节点运行状态:

为了确保Cardano节点正常运行并同步区块链数据,可以使用 cardano-cli 命令行工具进行状态查询。此工具允许你与节点进行交互,并检索关键的运行信息。

使用以下命令查询节点当前的状态,该命令会连接到节点的本地socket文件,并以Cardano模式执行查询:

cardano-cli query tip --socket-path node.socket --cardano-mode

--socket-path node.socket 参数指定了节点用于监听连接的Unix域套接字文件路径。 --cardano-mode 参数指示 cardano-cli 使用Cardano协议进行通信,这对于与Cardano节点交互至关重要。请确保 node.socket 文件存在并且路径正确,否则命令将无法连接到节点。

如果命令成功执行,它将返回包含当前区块链状态信息的JSON对象。此信息包括:区块高度( block )、区块哈希( headerHash )、槽位( slot )和纪元( epoch )。 如果成功显示区块高度和其他信息,则表示节点正在正常运行,并且正在同步最新的区块链数据。如果未返回任何信息或返回错误,则可能表示节点未运行、配置不正确或者存在网络连接问题。

步骤 5:创建地址和发送 ADA

现在,让我们深入探讨如何创建您的Cardano (ADA) 地址,并执行首次ADA转账。以下是详细步骤:

创建支付密钥对:

在 Cardano 区块链中,支付密钥对是管理和控制 ADA 代币的关键组成部分。这个密钥对由一个私钥(Signing Key)和一个公钥(Verification Key)组成。私钥用于签署交易,证明你有权花费与该地址关联的 ADA,必须安全保存,绝不能泄露给任何人。公钥则用于验证交易的有效性,可以公开分享。使用 Cardano 命令行界面 (CLI),你可以按照以下步骤生成支付密钥对:

cardano-cli address key-gen \ --signing-key-file payment.skey \ --verification-key-file payment.vkey

命令解释:

  • cardano-cli address key-gen : 调用 Cardano CLI 工具的地址密钥生成功能。
  • --signing-key-file payment.skey : 指定私钥的保存路径和文件名。在这个例子中,私钥将被保存为 payment.skey 文件。请务必妥善保管此文件,因为它掌握着你的资金控制权。任何获得此文件的人都可以花费与该地址关联的 ADA。建议对该文件进行加密存储,并备份到安全的地方。
  • --verification-key-file payment.vkey : 指定公钥的保存路径和文件名。在这个例子中,公钥将被保存为 payment.vkey 文件。公钥可以安全地分享给他人,用于验证交易的有效性,或者用于生成 Cardano 地址。

运行此命令后,你将在当前目录下看到 payment.skey payment.vkey 两个文件。请务必妥善保管你的私钥文件 ( payment.skey )。丢失私钥将导致你永久失去对与该地址关联的 ADA 的控制权。建议将私钥备份到多个安全的地方,例如离线存储设备、硬件钱包等。

从验证密钥生成地址:

在Cardano区块链中,地址的生成通常始于验证密钥。验证密钥 (`payment.vkey`) 是公钥的一种形式,用于验证交易的签名。通过Cardano命令行界面 (CLI),我们可以使用验证密钥来构建一个Cardano地址。

以下命令展示了如何使用验证密钥文件创建一个地址,该地址适用于Cardano的测试网络:

bash
cardano-cli address build \
  --payment-verification-key-file payment.vkey  \
  --testnet-magic 42 \
  --out-file payment.addr

命令详解:

  • cardano-cli address build : 调用Cardano CLI的地址构建功能。
  • --payment-verification-key-file payment.vkey : 指定包含支付验证密钥的文件。 验证密钥与私钥配对,用于验证从该地址发起的交易。
  • --testnet-magic 42 : 指定测试网络的magic number。 testnet-magic 是一个用于区分不同 Cardano 网络(例如主网、测试网)的唯一标识符。 使用正确的 testnet-magic 至关重要,以确保地址与正确的网络关联。
  • --out-file payment.addr : 指定输出地址的文件名。 生成的Cardano地址将被写入名为 payment.addr 的文件中。

--testnet-magic 必须与 genesis. 文件中定义的 protocol-magic 相同。 genesis. 文件包含了网络的初始配置信息,包括 protocol-magic 。 确保 testnet-magic 的值与 genesis. 中的 protocol-magic 相匹配,对于确保地址在正确的Cardano网络上有效至关重要。

从 Genesis 文件中获取初始资金:

genesis. 文件中检索初始 ADA 分配信息,并将其转移到你所创建的 Cardano 地址。Genesis 文件包含了区块链最初状态的数据,包括初始的 ADA 分配方案。要实现这一过程,需要借助 cardano-cli 命令行工具,该工具提供了构建和提交交易所需的各种命令和功能。

具体步骤涉及解析 Genesis 文件,确定与你的地址关联的初始 ADA 数量,然后构造一笔交易,将这些 ADA 从 Genesis 地址发送到你控制的地址。交易构建过程包括指定输入(Genesis 地址和相应的 UTXO)、输出(你的地址和转账金额)以及交易费用。

由于交易构建和提交过程相对复杂,涉及到密钥管理、交易签名和区块链同步等多个环节,在此不提供详尽的步骤指南。强烈建议参考 Cardano 官方文档,文档中包含了详细的命令示例和最佳实践,可以帮助你安全、有效地完成初始资金的转移。务必仔细阅读文档,理解每个命令的含义和参数,避免因操作失误而造成资金损失。

步骤 6: 创建VRF密钥和节点操作密钥

  1. 为了确保链上预言机请求的随机性和安全性,以及节点操作的可靠性,需要创建两类关键密钥:VRF(可验证随机函数)密钥和节点操作密钥。VRF密钥负责生成可验证的随机数,而节点操作密钥则用于执行节点自身的管理和维护操作。这两类密钥在保护预言机网络安全方面发挥着重要作用。

    VRF密钥对的生成是离线进行的,这意味着密钥对是在一个与互联网隔离的安全环境中创建的,以防止潜在的网络攻击。生成的私钥必须妥善保管,因为私钥控制着VRF功能的运作。公钥则会被上传到链上,用于验证VRF输出的有效性。VRF确保了随机数的不可预测性和可验证性,这对许多区块链应用至关重要,例如公平的抽奖和随机的资源分配。

    节点操作密钥用于管理节点的日常运营,包括更新软件、配置参数和监控系统状态。类似于VRF密钥,节点操作密钥的安全性也至关重要。建议将节点操作密钥存储在硬件安全模块 (HSM) 或其他安全存储解决方案中,以防止未经授权的访问。保护节点操作密钥可以有效防止节点被恶意控制,从而维护整个区块链网络的稳定性和安全性。
VRF密钥 bash cardano-cli node key-gen-VRF \ --vrf-signing-key-file vrf.skey \ --vrf-verification-key-file vrf.vkey
  • 节点操作密钥 bash cardano-cli node key-gen \ --cold-signing-key-file node.skey \ --cold-verification-key-file node.vkey \ --operational-certificate-issue-counter-file node.counter
  • 本指南提供了一个基本的艾达币私链搭建流程。根据实际需求,可以进行更高级的配置和定制。 例如,可以配置多个节点,创建不同的网络拓扑结构,或者修改共识参数。