
适用范围:先确定代码负责什么
“区块链代码原理”涵盖多种机制,适用条件取决于代码承担的职责。账户代码涉及谁能授权操作,合约代码涉及按什么规则执行,钱包代码涉及信息展示、签名与网络通信。讨论这些原理时,需要明确目标网络和功能,不能把一种账户机制直接套用到所有区块链。
条件一:区分密钥控制与合约控制
以太坊账户文档区分了由私钥控制的外部账户和由代码逻辑控制的合约账户。前者可以发起交易,后者在交易引发的调用中执行逻辑;合约部署还会占用网络资源并产生费用。

因此,涉及账户授权的设计,需要明确授权依据是私钥签名还是合约规则。涉及自动执行的设计,则需要有明确的调用入口与执行条件。仅把规则写进合约,并不意味着合约会自行定时启动。

条件二:签名内容必须符合真实意图
数字签名用于验证相应密钥对操作的授权。它能帮助防止他人冒充签名者,却不能判断操作是否符合持钥人的真实意图。代码接收到有效签名,与用户理解并认可全部操作内容,是两个需要分别确认的条件。
这意味着签名系统需要让授权内容可核对,并妥善保护私钥。文件加密可以保护尚未解密的密钥文件,但无法单独解决密钥使用过程中被恶意程序读取的问题。
条件三:签名与联网可以分离
比特币开发者钱包指南将钱包功能拆分为公钥分发、交易签名和网络交互。这些功能可以由一个程序承担,也可以分别部署;离线钱包与硬件钱包体现了将签名环节独立出来的思路。
这种分工适用于希望减少私钥接触联网环境的系统,但需要可靠的数据传递和内容核对。隔离签名设备只能缩小部分攻击面;如果设备存在缺陷,或签名内容未经确认,仍不能据此保证操作安全。
常见问题:钱包、账户与安全是否等同
钱包就是账户吗?在以太坊语境中,账户是链上的实体,钱包是与账户交互的应用或界面。比特币语境中的钱包也可能指程序或保存密钥等信息的文件,因此需要结合上下文理解。
有合约代码就能保证业务正确吗?代码只会按其逻辑处理输入,业务目标是否被准确表达仍需检查。上述机制说明的是授权、执行与软件分工的适用条件,不能直接证明某个具体系统已经实现安全可靠的设计。