【软件工程与实践】(5)jdchain的区块账户模型Account以及ContractAccount和UserAccount的账户职能

2021SC@SDUSC

一、京东区块链账户模型

1.区块链账户类型

区块链有两种账户类型:UTXO模型Account模型,而jdchain用的既是Account类型的账户模型

Account账户

对于 Account 模型,Account 模型保存了世界状态,链的状态一般在区块中以 StateRoot 和 ReceiptRoot 等形式进行共识。交易只是事件本身,不包含结果,交易的共识和状态的共识本质上可以隔离的。

Account账户的优缺点

优点:

合约以代码形式保存在 Account 中,并且 Account 拥有自身状态。这种模型具有更好的可编程性,容易开发人员理解,场景更广泛。

批量交易的成本较低。设想矿池向矿工支付手续费,UTXO 中因为每个 Input 和 Out 都需要单独 Witness script 或者 Locking script,交易本身会非常大,签名验证和交易存储都需要消耗链上宝贵的资源。而 Account 模型可以通过合约的方式极大的降低成本。

缺点:

Account 模型交易之间没有依赖性,需要解决重放问题。

对于实现闪电网络/雷电网络,Plasma 等,用户举证需要更复杂的 Proof 证明机制,子链向主链进行状态迁移需要更复杂的协议。

二、Account代码分析

1.接口

1)Account接口

接口引入了两个方法,分别可以获取区块链的ID和调用使用MerkleTree的特性来调取数据设置参数。

import com.jd.blockchain.ledger.BlockchainIdentity;
import com.jd.blockchain.ledger.TypedValue;

public interface Account {
   
	
	BlockchainIdentity getID();
	
	MerkleDataset<String, TypedValue> getDataset();
	
}

2)AccountAccessPolicy接口

代码展示了账户访问的策略,这个接口在提交专用账户的事务之前回先检查账户的访问政策,如果申请的账户满足条件,就可以返回一个true。

import com.jd.blockchain.crypto.PubKey;
import com.jd.blockchain.ledger.BlockchainIdentity;

import utils.Bytes;
public interface AccountAccessPolicy {
   

	boolean checkDataWriting(BlockchainIdentity account);

	boolean checkRegistering(Bytes address, PubKey pubKey);

}

2.类

1) ContractAccount事务账户

我先来看事务账户,它继承了AccountDecorator,同时调用了ContractInfo的接口。下方是ContractInfo的代码。

ContractInfo调用了两个接口用来获取区块的暗码以及最近更新的版本。

@com.jd.binaryproto.DataContract(code = 2560)
public interface ContractInfo extends com.jd.blockchain.ledger.BlockchainIdentity, com.jd.blockchain.ledger.A
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值