Coldcard/firmware
GitHub: Coldcard/firmware
Coldcard 硬件钱包的完整开源固件及桌面模拟器,支持可复现构建以验证二进制完整性。
Stars: 697 | Forks: 181
# COLDCARD 硬件钱包
Coldcard 是一款价格实惠、极致安全且可验证的 Bitcoin 硬件钱包。
请访问 [Coldcard.com](http://coldcard.com) 获取您的设备


## 快速链接
- [最新固件变更和更新](releases/ChangeLog.md)
- [PGP 签名文件](releases/signatures.txt)
- [固件二进制文件](https://coldcard.com/downloads)
## 可复现构建
为了确信此源代码树与您设备上的二进制文件一致,
您可以从源代码重新构建并获得**完全相同的字节**。此过程
已使用 Docker 自动化。步骤如下:
1. 安装 [Docker](https://www.docker.com) 并启动它。
2. 如果尚未安装 [make (GNUMake)](https://www.gnu.org/software/make/),请进行安装。
3. 检出特定版本的代码,并启动该过程。
git clone https://github.com/Coldcard/firmware.git
git checkout 2023-12-21T1526-v5.2.2
# 将该二进制文件的副本放入 ./releases/2023-12-21T1526-v5.2.2-mk4-coldcard.dfu
cd firmware/stm32
make -f MK4-Makefile repro
4. 过程结束时将显示清晰的确认消息,或显示差异。
5. 构建产物可在 `firmware/stm32/built` 中找到。
6. 如果您不信任 `make repro` 的结果,请参阅 `docs/notes-on-repro.md`,
其中详细分解了该过程。
7. Q 固件的过程相同,但在最后一步中将 `MK4-Makefile` 更改为 `Q1-Makefile`
## 长期分支
我们现在维护两个分支:`master` 和 `edge`。
“Edge”将包含可能尚未完全成熟的功能,
例如 Taproot 或 Miniscript。我们发布新 Edge
版本的标准较低,因此我们可以更快地迭代并将这些进步
提供给其他开发者。
Q 和 Mk 系列共享相同的代码库。已添加或
删除的单个文件,可以在 `shared/manifest_mk4.py`
和 `shared/manifest_q1.py` 之间的差异中看到。通用文件位于 `shared/manifest.py` 中。
为 Mk5 构建的固件支持 Mk4,没有任何功能差异。
## 检出与设置
**注意** 这是 `master` 分支,涵盖最新的硬件(Mk 和 Q)。
请参阅 `v4-legacy` 分支以获取仅支持 Mk3/Mk2 及更早版本的固件。
执行递归检出以获取所有子模块:
```
git clone --recursive https://github.com/Coldcard/firmware.git
```
已经检出但遇到 git 错误?请执行此操作:
```
git fetch
git reset --hard origin/master
```
或者,要获取最新版本,您可以检出一个带标签的分支:
```
git clone https://github.com/Coldcard/firmware.git
cd firmware
git checkout $(git describe --match "20*" --abbrev=0)
git submodule update --init --recursive
```
不要使用包含任何空格的路径。Makefile 不能很好地
处理这种情况,我们不打算修复它。
请记住,python 依赖项可能会在版本之间发生变化,
因此在顶层执行此命令:
```
pip install -r requirements.txt
```
### macOS
需要 [Python 3.5 或更高版本](https://www.python.org) 和 [Homebrew](https://brew.sh)。
如果在基于 ARM 的 MacOS 系统上工作,您可能需要在开始之前创建一个
使用 `arch -x86_64 bash` 的新 shell,或者继续
在此源代码树上工作。
#### 设置并运行桌面模拟器
您可能至少需要安装这些软件包:
```
brew install sdl2 xterm swig
brew install --cask xquartz gcc-arm-embedded
```
过去这些也是必需的:
```
brew tap PX4/px4
brew search px4/px4/gcc-arm-none-eabi
```
然后安装最新版本,当前为 83:
```
brew install px4/px4/gcc-arm-none-eabi-83
```
您可能需要执行 `brew upgrade gcc-arm-embedded`,因为我们需要 10.2 或更高版本。
然后:
```
brew install automake autogen virtualenv
virtualenv -p python3 ENV
source ENV/bin/activate (or source ENV/bin/activate.csh based on shell preference)
pip install -U pip
pip install -r requirements.txt
# 应用 micropython 补丁
pushd external/micropython
git apply ../../macos-mpy.patch
popd
make -C external/micropython/mpy-cross
cd unix; make setup && make ngu-setup && make && ./simulator.py
```
您可能需要重启以避免出现 `DISPLAY is not set` 错误。
下次您想运行模拟器时,只需执行
```
source ENV/bin/activate && cd unix && ./simulator.py
```
#### 构建固件
- `cd ../cli; pip install --editable .`
- `cd ../stm32; make setup && make; make firmware-signed.dfu`
- 生成的文件 `firmware-signed.dfu` 可以使用此命令(已基于上述步骤安装)
直接加载到 Coldcard 上
- `ckcc upgrade firmware-signed.dfu`
如下所示:
```
[ENV] [firmware/stm32 42] ckcc upgrade firmware-signed.dfu
675328 bytes (start @ 293) to send from 'firmware-signed.dfu'
Uploading [##########--------------------------] 29% 0d 00:01:04
```
#### Big Sur 问题
`defaults write org.python.python ApplePersistenceIgnoreState NO` 将抑制关于 `Python[22580:10101559] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to...` 的警告
请参阅
### Linux
在 Ubuntu 20.04 上安装和运行 Coldcard 模拟器所需的所有步骤:
```
# 安装(系统)要求、工具和库
apt install build-essential git python3 python3-pip libudev-dev gcc-arm-none-eabi libffi-dev xterm swig libpcsclite-dev python-is-python3 autoconf libtool python3-venv
# 获取源代码,这需要很长时间(因为外部库),然后打开
git clone --recursive https://github.com/Coldcard/firmware.git
cd firmware
# 应用 address 补丁
# 如果 unix/linux_addr.patch 存在,请使用以下命令
# 当前版本不需要
# git apply unix/linux_addr.patch
# * ubuntu 24.04 需要以下内容
pushd external/micropython
git apply ../../ubuntu24_mpy.patch
popd
# *
# 创建 Python virtual environment 并激活它
python3 -m venv ENV # or virtualenv -p python3 ENV
source ENV/bin/activate
# 安装依赖
pip install -U pip setuptools
pip install -r requirements.txt #general requirements
pip install pysdl2-dll # Ubuntu needs this dependency
# 构建 Coldcard 模拟器
cd unix
pushd ../external/micropython/mpy-cross/
make # mpy-cross
popd
make setup
make ngu-setup
make
# 在活动的 virtualenv 中运行模拟器
./simulator.py
# 稍后,如果您想运行它(重启后)。这假设您将 git repo 解压在 ~ (home) 中
cd ~/firmware
source ENV/bin/activate
cd unix
./simulator.py
```
还要确保您的 python3 已符号链接到 python。
## 代码组织
顶层目录:
`shared`
- 桌面测试版本和真实版本之间的共享代码
- 预计主要为 python,且属于较高级别
- Mk4 或 Mk5 专用的代码将列在 `manifest_mk4.py` 中,
而 Q 专用的代码将列在 `manifest_q1.py` 中
`unix`
- unix (macOS) 版本,用于测试/快速开发
- 这是产品的模拟器
`testing`
- 测试用例和相关数据
`stm32`
- 嵌入式二进制文件(及构建),用于实际产品硬件
- 最终目标是要加载到硬件上的二进制文件
`external`
- 来自其他项目的代码,即可怕的子模块
`graphics`
- 作为最终产品一部分提供的图像(图标)
`stm32/bootloader`
- 32k 的出厂设置代码,您无法更改 (Mk3)
- 但是,您可以检查 coldcard 上的代码并将其与此进行比较。
`stm32/mk4-bootloader`
`stm32/q1-bootloader`
- 128k 的出厂设置代码,您无法更改
- 但是,您可以检查 coldcard 上的代码并将其与此进行比较。
`hardware`
- Coldcard 所有版本的原理图和物料清单。
`unix/work/...`
- `/MicroSD/*` “模拟” microSD 卡上的文件
- `/VirtDisk/*` 模拟的虚拟磁盘文件。
- `/settings/*.aes` 模拟器的持久设置
## 支持
发现错误?电子邮件:support@coinkite.com
标签:DFU, Docker, Makefile, Miniscript, PSBT, STM32, Taproot, 冷卡, 冷钱包, 加密货币, 区块链, 可复现构建, 固件, 多重签名, 安全防御评估, 嵌入式系统, 开源硬件, 微控制器, 数字货币安全, 服务器监控, 极简安全, 比特币, 硬件钱包, 离线签名, 私钥管理, 网络安全研究, 请求拦截, 逆向工具, 金融科技