# 地址

# 介绍

比原链资产的所有权是通过地址、数字签名来确立的。每笔交易都需要一个有效的签名才会被存储在区块链上,只有有效的数字密钥才能产生有效的数字签名。因此,拥有数字密钥就等于拥有了该账户的资产控制权。密钥是成对出现的,由一个公钥和一个私钥组成。简单地说,公钥可以作为交易输出的地址,而私钥可以为交易生成数字签名。一般情况下,他们被存储在钱包文件中,由钱包软件进行管理。

当发行一笔资产时,会将资产发行到指定的地址上。当花费一笔资产时,从一个已经存在的地址消费它们并转到一个新的地址上。当销毁一笔资产时,同样从一个已经存在的地址消费它们但转到一个永远无法被消费的地址上。

此外,并非所有的地址都是公钥,它们也可以代表其他支付对象,譬如脚本。我们将支付脚本称之为控制程序,每一个控制程序包含一系列为了花费该输出时需要满足的谓词。

# 账户控制程序

其中,最基本的控制程序属于账户控制程序,它定义了多个密钥以及在花费资产单元时需要的签名数。当存入一笔资产到指定账户时,钱包客户端会从根密钥中导出一系列新的子公钥,并创建一个唯一的、且只被使用一次的控制程序,该控制程序使用了之前定义的签名数。

根据账户中密钥的个数可分为单签账户和多签账户。单签账户在创建控制程序时采用P2PKH方式。其主要验证Public Key是否能够转换成正确的地址以及Signature是否正确,也就是证明你是这个Public Key的主人。多签账户在创建控制程序时采用P2SH的方式,例如对于3-2的多签账户,它需要验证至少两个有效的签名。

尽管同一个账户的所有控制程序使用的子公钥都从同一个根密钥导出,但区块链上的其他参与者不可能识别出它们之间的联系。这项技术被称之为分层确定性密钥推导,它确保了只有与你交易的区块链上的参与者才会知道该控制程序属于你的。对于其他人,并不能知道该控制程序的创建者。

# 销毁控制程序

销毁控制程序是一种非常简单的控制程序,它只有一个简单的谓词:FAIL。即它确保了上面的资产单元永远不可能被消费,所以等于说该笔资产从区块链中去除了流通。

# 自定义控制程序

比原的合约虚拟机支持自定义的控制程序。我们开发了一套高级别的语言,使得开发者可以在比原上编写智能合约程序。详细介绍见智能合约文档。

Last Updated: 7/19/2021, 1:46:33 PM