PascalCoin架构
SafeBox设计
与(比特币等币)使用一系列块,包含从一个地址到另一个地址的交易记录(即UTXO)不同,PascalCoin使用2个组件:SafeBox(包含所有当前帐户余额)和块(连接在一起形成区块链)。和Bitcoin又相同的是,PascalCoin采矿节点也负责创建一个新块。当新块出现的时候,所有节点都会独立地更新它们本地的SafeBox副本。作为此任务的一部分,节点需要基于区块中操作,更新已存在账户的余额(和其他字段),以及创建新的包含全新的PascalCoin帐户的帐户段,这些账户将被授予成功挖到新块的矿工。
创世区块
在第一个块被创造之前,第一个编号0的SafeBox(创世SafeBox)被创造,其中没有任何帐户。通过工作证明(PoW),其中创世Safebox的hash值作为输入,矿工将为区块链寻找新的块。在第一个块被创建后,一个相应的新版本的SafeBox将被创造,伴随着包含N个新帐户的帐户段,其中N由协议定义(N在当前PascalCoin版本2中设置为5)。现在,矿工们将开始在区块链的下一个块中进行处理,以生成下一版本的SafeBox,其中将包括由节点传播的新的待处理操作。
操作
与比特币和其他加密货币类似,PascalCoin中的块是交易信息的容器,交易信息被称为“操作”。它们之所以被称为操作,是因为它们广义化了交易的表现,即,不仅仅是在账户之间转移资金。还有,例如,有操作更改帐户的密钥,更改其名称或将其标记为待售等等。但最重要的和常见的操作依然是在账户之间转账的交易操作。
帐号
SafeBox本质上就是一个帐户列表。 账户包含账户余额,拥有者的公钥,一个独一无二的名称和一个类型字段。
账户数据结构如下:
元素名 | 数据类型 | 描述 |
---|---|---|
账号编号 | 无符号32位 | 用于识别账户的序列数字,它永远不会改变。 |
公开的椭圆曲线密钥 | 公钥(类型,X和Y)(处于66和200字节之间) | 这个公钥相当于账户的PIN。这个值可以被随时改变,但只有当前公钥对应的私钥的所有人才可以执行操作 |
余额 | 无符号64位 | 当前账户余额 |
最新块 | 无符号32位 | 在区块链中最后一个修改此账户信息的操作所在的块编号。这个值帮助在浑浊列表中识别出未使用的账户 |
N操作 | 无符号32位 | 一个用于指出基于此账户的交易数的递增数字,而且确保了操作订单独一无二且因此不会重复 |
账户名 | RawBytes | 一个独一无二且公开的账户名称。默认是空的。该名称根据PascalCoin64算法编码。 |
类型 | 单一字符 | 用于区分不同用途的账户,当二层协议被建立后它的值将变的非常实用。例如,类型为2的可能为“聊天频道”保留,类型为3的为“在线商店”储备,等等 |
帐户段
SafeBox中的帐户按分段分组,以形成所谓的“帐户段”。每次矿工通过采矿附加到SafeBox时都会生成帐户段。换句话说,SafeBox每次都有一个新的块,用原来的一个新的账户段进行扩展正在开采
每个帐户段中的内容如下:
元素名 | 数据类型 | 描述 |
---|---|---|
块编号 | 无符号32位 | 这相当于块号块链(见后面部分)。 |
账户 | 数组N | 具有帐号的固定数组(大小N)这是由该块生成的。 在当前的PascalCoin协议版本下N设置为5,但在未来版本中可能会增加和/或成为变量。 |
时间戳 | 无符号32位 | Unix时间戳生成后 这个值永远不变 |
账户段哈希值 | 32字节 | 此块的哈希值。 它每一个都改变此帐户中的任何帐户段变化(均衡调整或公共EC键改变)。这验证并确保其完整性这个块。 |
块头 | 〜180字节 | 这是V2中的新功能。 这个数据允许一个节点重新计算所用的总工作量构建SafeBox而不需要块。 |
此外,SafeBox还包含一个校验和,该校验和作为所有“帐户段”的汇总散列值创建哈希值。 该值被称为SafeBox哈希,并在最后一个帐户之后立即附加SafeBox中的账户段。 下一个块也必须引用此SafeBox的哈希才能生效。
区块链
就像比特币一样,财务数据的完整性通过一系列的工作证明来保证块链在一起。 同样类似比特币,这些块包含交易列表用于改变财务状态。但是,和比特币不同,在PascalCoin中,块不直接引用前一个块的哈希值。相反,它引用了之前的SafeBox的哈希值,通过它传递性地连接到上一个块中此SafeBox哈希对应的帐户段。如前面所述,当矿工赢得工作证明时,它将发布新的块,导致更新的SafeBox将包含一个新的帐户段(N个新帐号)。这些新帐户被分配绑定到被奖励的矿工的公钥上。
块结构包含以下字段:
元素名 | 数据类型 | 描述 |
---|---|---|
块编号 | 无符号32位 | 由矿工生成的区块编号 |
账户密钥 | 公钥(类型,X和Y)(在66和200字节之间) | 矿工列出的它自己的公钥,此公钥将被分配到该区块账户中N个新账户 |
奖励 | 无符号64位 | 矿工奖励,初始被设置为100Pascal且每四年减半 |
酬金 | 无符号64位 | 通过挖掘区块链中本区块及相应账户段,矿工们搜集到的所有交易费 |
协议版本 | 无符号16位 | 协议版本 |
可用协议 | 无符号16位 | 协议编号,可以使矿工成为本区块的拥有者 (为未来协议升级的适配) |
时间戳 | 无符号32位 | 区块被创建时的Unix时间戳 |
适配目标 | 无符号32位 | 矿工在PoW工作中必须获得的难度水平 |
随机数 | 无符号32位 | 随机数,用于通过矿工以工作证明去获得要求的结果(例如,散列具有多个前导0位,就像比特币一样) |
上个SafeBox哈希值 | 32位 | 上一个SafeBox的哈希值,同样也被用于创建下一个SafeBox版本 |
操作的哈希值 | 32位 | 梅克尔树(Merkle Tree)哈希(见下面) |
工作证明 | 32位 | 本块的哈希值,用于PoW(工作证明) |
Donate: 7711-71
Translator: Command