一. 问题
u 谁在制造新的货币?
u 制造货币规则是什么?
u 谁在维护交易账本?
u 怎样达成共识的?
u 谁有权利批准哪个交易是正当有效的?
u 货币是如何交易的?
u 怎样查询用户账户余额?
二. 解答
1. 谁在制造货币?
分为凯泰内部合同员工或外部合作员工
2. 制造货币规则是什么?
A、货币生产额度由项目预算分配进来,分配多少预算,相应地可以生产多少货币。按照一定量的兑换汇率分配生产配额
B、项目预算分配下来,分配给某个人或某个团队。每个人都会获得某一固定任务,完成这个任务将获得一定量的货币。货币量由初始分配的预算来决定。每个任务对应一个节点,该节点记下从创建开始的交易记录
3. 谁在维护交易账本?
所有节点来共同维护交易账本,即所有任务在维护
4. 怎样达成共识?
达成共识分三步,第一步是获得发言权;第二步是提交提案;第三步是确认提案通过
A、任务完成之后,将会在区块里创建一个节点。这个节点将会获得发言权
B、获得发言权的节点,将自己的提案广播给所以成员。成员收到广播通知之后,与自己的交易记录做对比。如果一致则发送OK,不一致则发送ERROR code。发言人在XX时间内收到超过51%的OK,则算该提案获得通过;如果不超过51%则废弃自己的提案
C、发言人把自己的提案结果发送给每个节点。其他节点收到结果通知后,如果是废弃提案,则交易记录里最后一条记录继续使用原来记录;如果是OK通知,则交易记录里新增一条记录。
5. 谁有权利规定哪些交易是正当有效的?
网络中的每个节点参与批准交易的合法性,如果51%的成员批准,则交易合法
6. 货币是如何交易的?
货币交易分两种,一种是生成货币、一种是转账。完成任务即可获得货币,会产生新的节点,纯转账只会产生交易记录,不会产生新的节点。转账时会查询转账人的所有交易记录,即在转账提交这个时刻,所有转入货币要大于等于转入货币加转账货币。{总转入货币量>=(转出货币量+要转账货币量)}
7. 如何查询用户账户余额?
区块链里不会有专门记录用户余额的记录,需要做运算才能得到
三. 交易共识
1. 共识原则
共识机制指区块链网络中各节点对在区块链系统中进行事务或状态的验证、记录、修改等行为达成一致确认的方法。在区块链系统中,根据不同的业务需求、区块链网络组织形式选择不同的适用共识算法来实现共识机制。
共识机制功能组件应具备以下功能:
a) 支持多个节点参与共识和确认;
b) 支持独立节点对区块链网络提交的相关信息进行有效性验证;
c) 防止任何独立的共识节点未经其他共识节点确认而在区块链系统中进行信息记录或修改;
d) 应具备一定的容错性,包括节点物理或网络故障的非恶意错误,以及节点遭受非法控制的恶意错误,以及节点产生不确定行为的不可控错误。
2. 私有链共识机制
私有链一般使用传统的共识机制,如Paxos共识、Raft共识、VRR共识
如Paxos:
Paxos被用于分布式系统中典型的例子就是Zookeeper,他是第一个被证明的共识算法,其原理基于两阶段提交并扩展。
Paxos共识参考 http://www.jdon.com/artichect/paxos.html
Raft共识参考 http://www.jdon.com/artichect/raft.html
3. 公有链共识机制
A、工作量证明机制(Proof of Work, POW)
B、股权证明机制(Proofof Stake, POS)
POS是根据钱包里面货币的多少以及货币在钱包里存在的天数来合成一个单位(币天)。它根据币天的关系对计算机进行哈希计算。
C、授权股权证明机制(DPOS)
基于POS衍生出的更专业的解决方案,他是类似于董事会的投票机制,选举出n个记账节点,在节点中提案者提交的提案被这些记账节点投票决定谁是正确的。
D、授权拜占庭容错机制(delegated BFT)
用权益来选出记账人,然后记账人之间通过拜占庭容错算法 达成共识。
4. PBFT共识机制
一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。央行选择了PBFT共识算法
假设节点总数为3f+1,f为拜赞庭错误节点:
1、当节点发现leader作恶时,通过算法选举其他的replica为leader。
2、leader通过pre-prepare消息把它选择的 value广播给其他replica节点,其他的replica节点如果接受则发送 prepare,如果失败则不发送。
3、一旦2f个节点接受prepare消息,则节点发送commit消息。
4、当2f+1个节点接受commit消息后,代表该value值被确定
如下图表示了4个节点,0为leader,同时节点3为fault节点,该节点不响应和发出任何消息。最终节点状态达到commited时,表示该轮共识成功达成。
四. 交易方式
1. 区块链下的交易
A 要向B 支付一笔货币,B先公开一个公钥,A 拿这公钥对即将付给B的货币进行加密,并向全网发送。B 用自己对应的私钥解开它,并向全网证明。全网收到后,验证了这次加解密,从而大家都承认这笔钱是付给B 的。然后,这笔交易被记录下来,A的账户上减去一笔金额,B的增加一笔。
由于每完成一定时段的交易后,就把该时段内的所有交易记录下来,且在所有的结点上都进行完整拷贝,这就是一个“区块”。因此,信息几乎没有被篡改的可能,除非有办法入侵几乎所有结点。一个个区块首尾相连,就构成了区块链。
2. 货币生成方式
由于结构洞的货币是根据员工(外部合作员工+内部合同员工)完成的任务来获取的。按照OKR的玩法,是要达成一个目标,可以实现四个关键成果。这四个关键成果,每个关键又可以分成四个子成果,以此类推直到这个总目标能达成。总目标的货币量是固定的,但是按照这种方式根本不可能确定每个能达成的成果的货币量。
一般一个任务会由一个团队来实现。为达成这个目标,由团队leader分配子任务给某些组员。可以固定这些子任务的预算量,即子任务完成之后获得的货币量是固定的。
即生成的货币量是和完成的任务一一对应的。完成了任务,才会生成货币;任务循环进行,不能重复生成货币;完成的所有任务获得的货币总量小于等于目标预算总量;员工完成任务获得货币之后,可以兑换货币,已兑换的货币会做“已兑换”标记,并转到平台已兑换货币账户里;
3. 货币的记录
由于区块链里不会记录某账户的余额,要想得到账户的余额,需进行计算得到。团队竞标某个项目之后,实现这个项目就是个总目标,团长会把这个总目标划分成一些子任务,分给成员。这些任务就是区块链中的节点,完成某个任务就会创建一个节点,这个节点会记录从创建时刻开始的交易数据,包括创建货币、转账交易。和其他的区块链一样,第一条交易记录为该节点获取的货币数量。
如果要得到某个账户的余额,得计算此时该账户所有转入金额与转出金额之差。
4. 货币的交易
货币的交易包括货币的产生、货币转账、货币销毁。货币产生由节点产生,当分配到个人的任务完成之后将可以创建节点;在平台里,员工之间可以进行转账,转账可看货币的交易共识机制;货币兑换成功将会进行货币的销毁工作,销毁的货币将会进入平台销毁账号里。
五. 凯泰币管理
凯泰币管理包括货币的生成、货币的交易。货币的生成由货币预算的产生、货币挖矿、货币充值、以及提现货币构成。
1. 完成任务创建货币
任务分配给成员之后,成员将生成一个区块,该区块尚未能生成货币,也不会记录交易记录,由一个标记来启用该区块,启用之后将会生成货币、记录交易。区块创建之后相应地也生成一份关于该区块的合约,合约里记录任务名称、任务对应的货币值,当合约里的所有任务完成之后将生成货币,同时区块状态将更改为“启用”状态,区块将开始记录系统里广播的交易信息。
2. 平台充值创建货币
在初始或一定阶段由平台创建一定量的货币。每次创建的数量不可超过平台可充值货币量。每次创建将会产生一个区块,这个区块将会立即生效。产生的货币归属与已充值账户,每次交易时都将由已充值账户转移到某个充值人的账户。
3. 充值
结构洞线下活动根据实际需要可能会要求充值功能,充值是由实际货币兑换成凯泰货币功能。
资金从外部进入平台对外账户;再由平台对外账户转入可充值账户;然后由可充值账户转入已充值账户,同时将创建一个区块,该区块创建的货币量为定义的批量数值。
可充值账户余额=Sum(平台对外账户转入启动资金、阶段注入资金)-已充值账户余额
4. 兑换
员工在结构洞平台下工作以后获取凯泰货币,这些货币将可以进行兑换成人民币。员工账户货币余额即为该员工的可兑换金额。所有员工的账户余额之和即为平台可兑换总账户余额。员工提现后,要提现货币将会进入已提现货币总账里。该账户里的货币不可提取,相当于要废弃的货币量。
六. 凯泰账户
1. 凯泰内部账户
平台由两类总账户,即平台对外账户、平台内部账户(已兑换账户、可兑换总账户、充值账户、预算账户)。外部资金进入平台都是由“平台对外账户”接入的。如果是项目预算则进入“预算账户”,如果是启动资金则进入充值账户下的“可充值账户”里。
充值账户由两个子账户,可充值账户和已充值账户构成。
2. 非内部账户
非内部账户没有实际的账务管理,只是记录交易记录。包括项目企业方、投资人、资产管理公司的。
七. 凯泰区块结构
凯泰块结构为三部分构成,即区块顶部信息、区块头、区块体。
区块顶部信息主要是分割本区块与其他区块的标识。
1. 区块头
区块头包括本区块的版本号、上一区块的哈希值、本区块的哈希值、区块创建时间戳、区块类型、以及区块启用标识。
以后结构洞的区块链可能会有功能的拓展,为了更好的管理每种类型的区块,会进行版本标注。也可能存在其他需求,如小版本号为奇数表示测试版本、为偶数则为发布版本。
区块的哈希值为对区块的摘要信息进行哈希计算得到的值。每个区块的摘要对象内容是不一样的,只要有一点点不一样,计算出来的哈希值完全不一样。以哈希值标记不同的区块,区块会记录上一个区块的哈希值,每个区块都用哈希值链接起来,这些就成了一个链条。
区块链时间戳为Unix timestampe。标记该区块的创建时间,以防伪造。
结构洞下的区块类型有两种,一种是为完成项目任务使用的,另外一种是为消费类使用的。平台里大部分区块是完成项目任务,员工开始某个任务,则创建一个区块,完成任务后,该区块将启动,同时开始记录交易信息;平台在开始时或某些阶段将会由平台创建一些货币,以供人员充值使用。
2. 区块体
区块体包括该区块的合约哈希值,以及该区块记录的交易数,包括交易计数、交易记录。交易记录列表里记录的交易名称、交易出账方、交易入账方、交易类型、交易金额、交易合约哈希值、以及交易时间戳。
八. 凯泰合约管理
区块链环境下,一般是伴随着区块的产生而生成合约。合约在区块链里可以是一段程序,也可能是一段脚本。当限定条件达到时,将执行嵌入的执行程序或执行脚本。
合约管理包括合约的生成、合约的传输、合约的查询操作。
凯泰结构洞的合约结构由合约头+合约体构成。合约头包括版本号、父合约哈希值、本合约哈希值、合约创建时间戳、合约种类。合约体包括合约创建信息(合约介绍、合约说明)、合约内容。合约种类,暂时分为三种。分别创建货币合约、兑换货币合约、以及转账合约。
1. 创建货币合约
创建货币合约主要是合约体里含义合约任务列表,每个任务包括任务名称、任务开始时间、任务结束时间、任务对应的货币量。
2. 兑换货币合约
合约体里主要包含兑换货币时候的执行代码
3. 转让货币合约
合约体里主要包含转让货币时的执行代码
4. 合约传输
结构洞最终目标是把项目以基金的形式销售出去。在完成这个最终目标之前,有一系列工作正常完成后方可进行。这些工作都需要以合约的形式定下来。
九. 凯泰账务管理
账务管理主要有两块内容,即生成账务数据和对账务数据进行查询操作。
1. 生成账务数据
账务数据分两种,一种结构洞内部货币账务,另外一种是和外部会货币交易的账务。
其中内部交易数据都是由区块链产生,区块链记录。再由系统另外的账务管理进行批量统计或对账时进行分类统计、归账、以及余额的计算。外部交易数据只存在于账务管理进行记账,区块链不会记录。
外部货币又存在两类情况。一类是确实和结构洞有资金交易的账务;另外一类是不在结构洞平台下交易,但和结构洞有一定的联系,需要结构洞平台给予记录。
2. 查询账务数据
账务数据产生之后,需要对这些数据会进行分类、统计、余额计算等操作,以方便查询。
3. 账务货币合约关系
结构洞账务分为内部账务和外部货币交易的账务,我们这里讨论的是内部账务。账务、货币、合约三者由区块链链接起来。
货币由创建区块,并达成一致时就会产生货币;创建区块过程中也将会创建关于该区块的合约;随着区块的创建成功,将会记录下该区块生成的货币量,在交易结果达成共识后,区块链会记录交易数据,这些达成共识的交易记录就是账务数据。在对账系统中进行分类、统计、归类时,将以这些交易记录作为原始数据。