【软件工程与实践】(2)jdchain数据账户模型介绍、合约类型介绍、支持传入数据类型

本文详细介绍了JD Chain的数据账本模型,强调了其以键值结构组织业务数据,提供数据完整性和不可否认性的特点。内容涵盖数据账本、合约样例,如设置KV、注册用户/账户、发布事件,以及支持的数据类型,如字符串、长整型、JSON等。通过合约,可以实现区块链系统中的账户管理、数据操作等功能。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

一、数据账本的设计核心

1.数据账本模型

数据账本的核心任务是对数据进行有效地组织和管理,因此,需要定义数据的结构和数据处理的操作模型。

JD Chain的数据账本模型以“键值”结构来组织业务数据,定义标准的读写操作,记录数据变更历史,维护数据完整性与不可否认性,管理数据的存在性证明。

二、数据账本的介绍

数据账本为各参与方提供区块链底层服务功能,包括区块、账户、配置和存储等。

区块是JD Chain账本主要组成部分,包含交易信息和交易执行状态的数据快照哈希值,但不存储具体的交易操作和状态数据。JD Chain将账本状态和合约进行分离,并约束合约对账本状态的访问,来实现数据与逻辑分离,提供无状态逻辑抽象。

JD Chain通过细化账户分类、分级分类授权的方式,对区块链系统中的账户进行管理,达到逻辑清晰化、隔离业务和保护相关数据内容的目的。

配置文件包括密钥信息,存储信息以及共享的参与者身份信息等内容,使JD Chain系统中各节点能够执行诸如连接其他节点、验证信息、存储并更新账本等操作。

存储格式采用简洁的KV数据类型, 使用较为成熟的NoSQL数据库来实现账本的持久化存储,使区块链系统能够支持海量交易。

三、合约样例一览

提供通过合约创建用户/数据账户/事件账户,写入KV,发布事件等功

1.设置KV

/**
     * 设置KV
     *
     * @param address 数据账户地址
     * @param key     键
     * @param value   值
     * @param version 版本
     */
    @ContractEvent(name = "setKVWithVersion")
    void setKVWithVersion(String address, String key, String value, long version);

    /**
     * 设置KV,基于最新数据版本
     *
     * @param address 数据账户地址
     * @param key     键
     * @param value   值
     */
    @ContractEvent(name = "setKV")
    void setKV(String address, String key, String value);

如上代码,我们可以看到,第一段代码调用了setKVWithVersion的方法,该方法可以帮助初始数据账户、键、值、以及版本的信息。

@Override
    public void setKVWithVersion(String address, String key, String value, long version) {
   
        eventContext.getLedger().dataAccount(Bytes.fromBase58(address)).setText(key, value, version);
    }

第二段代码的setKV可以基于最新版本的KV进行设置,if语句用于判别该版本是否为最新版本,若不为最新版本则version = entries[0].getVersion();该语句可以更新到最新版本。

@Override
    public void setKV(String address, String key, String value) {
   
        // 查询最新版本,初始为-1
        // 查询已提交区块数据,不包括此操作所在未提交区块的所有数据
        // TypedKVEntry[] entries = eventContext.getLedger().getDataEntries(eventContext.getCurrentLedgerHash(), address, key);
        // 可查询包括此操作所在未提交区块的所有数据
        TypedKVEntry[] entries = eventContext.getUncommittedLedger
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值