SafeBox
与包含着从一个地址到另一个地址的交易记录的一系列块相反,PascalCoin使用2个组件:SafeBox(包含所有当前帐户余额)和块(链接在一起形成区块链)。就像Bitcoin中,采矿节点负责创建一个新的块。当新块出现的时候,所有节点都会独立地更新它们的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)这是由该块生成的。N设置为5在当前的PascalCoin协议版本,但可能会增加和/或在未来版本中变得动态。
时间戳无符号32位Unix时间戳生成后 这个值永远不变
账户段哈希值32字节此块的哈希值。 它每一个都改变此帐户中的任何帐户细分变化(均衡调整或公共EC键改变)。这验证并确保其完整性这个块。
块头〜180字节这是V2中的新功能。 这个数据允许一个节点重新计算所用的总工作量构建SafeBox而不需要块。
此外,SafeBox还包含一个校验和,该校验和作为所有“帐户段”的汇总散列值创建哈希值。 该值被称为SafeBox哈希,并在最后一个帐户之后立即附加SafeBox中的细分。 下一个块也必须引用此SafeBox哈希才能生效。
区块链
就像比特币一样,财务数据的完整性通过一系列的工作证明来保证块链在一起。 同样类似比特币,这些块包含交易列表用于改变财务状态。但是,与比特币不同,块不直接引用前一个块。相反,它引用了之前的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(工作证明)