
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Docker Hub上托管的最新已验证镜像摘要。
bloxstaking/key-vault:v1.6.0,bloxstaking/key-vault:latest
运行镜像时使用此哈希。
sha256:2b73f3527789ef2d2556f9bf17dca6e2f731731b1d8cb6164b02d7899ef81660
使用docker run命令和最新已验证的镜像摘要:
sh$ docker run -d --restart unless-stopped --cap-add=IPC_LOCK --name=key_vault\ -v $(pwd)/data:/data -v $(pwd)/policies:/policies -p 8200:8200\ -e VAULT_ADDR='http://127.0.0.1:8200/' -e VAULT_API_ADDR='http://127.0.0.1:8200/'\ -e VAULT_CLIENT_TIMEOUT='30s' -e UNSEAL=true bloxstaking/key-vault@sha256:2b73f3527789ef2d2556f9bf17dca6e2f731731b1d8cb6164b02d7899ef81660
构建镜像并运行容器:
sh$ docker-compose up -d --build
进入容器
sh$ docker-compose exec vault bash
读取根令牌
sh$ docker-compose exec -T vault cat /data/keys/vault.root.token
此端点用于获取key-vault的版本。
| 方法 | 路径 | 输出格式 |
|---|---|---|
GET | :mount-path/:network/version | 200 application/json |
示例响应
以下示例显示查询路径为/ethereum/prater/version时的输出。
json{ "request_id": "b68953bf-811e-f218-a1c4-b5a7aa4122bc", "lease_id": "", "renewable": false, "lease_duration": 0, "data": { "version": "v1.1.1" }, "wrap_info": null, "warnings": null, "auth": null }
此端点用于列出key-vault的所有账户。
| 方法 | 路径 | 输出格式 |
|---|---|---|
LIST | :mount-path/:network/accounts | 200 application/json |
示例响应
以下示例显示当存在1个账户时,查询路径为/ethereum/prater/accounts的输出。
json{ "request_id": "489790dc-b4bd-54e5-be6e-95a894ffc48c", "lease_id": "", "renewable": false, "lease_duration": 0, "data": { "accounts": [ { "id": "9676ef06-d238-49f3-ab50-b3fe9930db0f", "name": "account-0", "validationPubKey": "8a5df36be5f89f9fe19cabadcbb17babc8c518bcd7fe0095c89f83915ea943343fa7dd3c26d8fb6096bce11fbc1ec7d3", "withdrawalPubKey": "887abb059075160ce2556a8bfef745898ee3a11b2b6521b09077d422c164929dea277ac8afcacd5b6d729198238f8f6c" } ] }, "wrap_info": null, "warnings": null, "auth": null }
此端点用于更新存储。
| 方法 | 路径 | 输出格式 |
|---|---|---|
POST | :mount-path/:network/storage | 200 application/json |
示例响应
以下示例显示查询路径为/ethereum/prater/storage的输出。
json{ "request_id": "d53d5075-6a3b-2642-ffde-0714beb595f5", "lease_id": "", "renewable": false, "lease_duration": 0, "data": { "status": true }, "wrap_info": null, "warnings": null, "auth": null }
此端点用于读取slashed存储。
| 方法 | 路径 | 输出格式 |
|---|---|---|
GET | :mount-path/:network/storage/slashing | 200 application/json |
示例响应
以下示例显示查询路径为/ethereum/prater/storage/slashing的输出。
json{ "request_id": "d53d5075-6a3b-2642-ffde-0714beb595f5", "lease_id": "", "renewable": false, "lease_duration": 0, "data": { "<public_key>": "<hex_encoded_slashing_storage>" }, "wrap_info": null, "warnings": null, "auth": null }
此端点用于为特定账户在指定路径签名证明。
| 方法 | 路径 | 输出格式 |
|---|---|---|
POST | :mount-path/:network/accounts/sign | 200 application/json |
参数
public_key (string: <必填>) - 指定要签名的账户公钥。domain (string: <必填>) - 指定域。slot (int: <必填>) - 指定槽位。committeeIndex (int: <必填>) - 指定委员会索引。beaconBlockRoot (string: <必填>) - 指定信标块根。sourceEpoch (int: <必填>) - 指定源纪元。sourceRoot (string: <必填>) - 指定源根。targetEpoch (int: <必填>) - 指定目标纪元。targetRoot (string: <必填>) - 指定目标根。示例响应
以下示例显示/ethereum/accounts/sign签名成功的输出。
json{ "request_id": "b767dcca-5b10-4a52-1d9a-0a9b81b378ae", "lease_id": "", "renewable": false, "lease_duration": 0, "data": { "signature": "kEEOMxNkouz7EOSULfrG6hXzZbIOvRCVVK+lfBofj3U49/PHm7YHji8ac9Gf9vgEFVEmbPp+lhO3OpAElt3yaBajTKaJBWocgXuv64Ojq44tfxLJo6jrzMU5yoP78dYW" }, "wrap_info": null, "warnings": null, "auth": null }
插件的端点路径设计使得管理员级访问策略和签名者级访问策略可以轻松分离。
以下策略分配给签名者级访问令牌,具有列出账户和签名交易的权限。
hcl# 能够列出prater钱包账户("list"权限) path "ethereum/prater/accounts" { capabilities = ["list"] } # 能够列出主网钱包账户("list"权限) path "ethereum/mainnet/accounts" { capabilities = ["list"] } # 能够签名数据("create"权限) path "ethereum/+/accounts/sign" { capabilities = ["create"] } # 能够获取版本("read"权限) path "ethereum/+/version" { capabilities = ["read"] }
以下策略分配给管理员级访问令牌,具有更新存储、列出账户和签名交易的全部权限。
hcl# 能够列出prater钱包账户("list"权限) path "ethereum/prater/accounts" { capabilities = ["list"] } # 能够列出主网钱包账户("list"权限) path "ethereum/mainnet/accounts" { capabilities = ["list"] } # 能够签名数据("create"权限) path "ethereum/+/accounts/sign" { capabilities = ["create"] } # 能够获取版本("read"权限) path "ethereum/+/version" { capabilities = ["read"] } # 能够更新存储("create"权限) path "ethereum/+/storage" { capabilities = ["create"] } # 能够读取slashed存储("read"权限) path "ethereum/+/storage/slashing" { capabilities = ["read"] }
创建名为admin的新策略:
sh$ vault policy write admin policies/admin-policy.hcl
创建附加到admin策略的令牌:
sh$ vault token create -policy="admin"
创建名为signer的新策略:
sh$ vault policy write signer policies/signer-policy.hcl
创建附加到signer策略的令牌:
sh$ vault token create -policy="signer"
项目中有两种类型的测试:端到端测试和单元测试。 要运行包括端到端测试在内的所有测试,请执行以下命令:
bash$ make full-test
新的端到端测试应放在./e2e/tests目录中,并实现E2E接口。
使用当前格式添加新测试。
版本基于标签发布到Docker Hub。 发布标签前,请将docker compose镜像更新为待推送的标签。
该插件支持多个***网络。所有可用网络在./config/vault-plugin.sh中定义。
可通过以下步骤定义新网络:
在./config/vault-plugin.sh中为新网络启用密钥功能。
示例
bash$ vault secrets enable \ -path=ethereum/prater \ -description="Eth Signing Wallet - Prater Test Network" \ -plugin-name=ethsign plugin > /dev/null 2> &1
通过在路径中添加新网络的定义,更新策略./policies/admin-policy.hcl和./policies/signer-policy.hcl。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务