[software engineering and practice] jdchain data account model introduction, contract type introduction, support for incoming data types

1, The core of data ledger design

1. Data ledger model

The core task of data ledger is to effectively organize and manage data. Therefore, it is necessary to define the data structure and the operation model of data processing.

JD Chain's data ledger model organizes business data in a "key value" structure, defines standard read-write operations, records data change history, maintains data integrity and non repudiation, and manages the proof of data existence.

2, Introduction to data ledger

The data ledger provides all participants with the underlying service functions of the blockchain, including blocks, accounts, configuration, storage, etc.

Block is the main part of JD Chain ledger, which contains transaction information and data snapshot hash value of transaction execution status, but does not store specific transaction operation and status data. JD Chain separates the ledger status from the contract and restricts the access of the contract to the ledger status to realize the separation of data and logic and provide stateless logic abstraction.

JD Chain manages the accounts in the blockchain system by refining account classification and hierarchical classification authorization, so as to achieve the purpose of logic clarity, business isolation and protection of relevant data content.

The configuration file includes key information, storage information and shared participant identity information, so that each node in JD Chain system can perform operations such as connecting other nodes, verifying information, storing and updating account books.

The storage format adopts simple KV data type, and the more mature NoSQL database is used to realize the persistent storage of account books, so that the blockchain system can support massive transactions.

3, List of contract examples

It provides the functions of creating user / data account / event account through contract, writing KV, publishing events, etc

1. Set KV

/**
     * Set KV
     *
     * @param address Data account address
     * @param key     key
     * @param value   value
     * @param version edition
     */
    @ContractEvent(name = "setKVWithVersion")
    void setKVWithVersion(String address, String key, String value, long version);

    /**
     * Set KV based on the latest data version
     *
     * @param address Data account address
     * @param key     key
     * @param value   value
     */
    @ContractEvent(name = "setKV")
    void setKV(String address, String key, String value);

2. Registered user, data account and event account

 /**
     * Registered user
     *
     * @param seed Seed, not less than 32 characters
     */
    @ContractEvent(name = "registerUser")
    String registerUser(String seed);

    /**
     * Registered data account
     *
     * @param seed Seed, not less than 32 characters
     */
    @ContractEvent(name = "registerDataAccount")
    String registerDataAccount(String seed);

    /**
     * Register event account
     *
     * @param seed Seed, not less than 32 characters
     */
    @ContractEvent(name = "registerEventAccount")
    String registerEventAccount(String seed);

4. Release event

/**
     * Publish event
     *
     * @param address  Event account address
     * @param topic    Message name
     * @param content  content
     * @param sequence Maximum sequence number under the current message name (initially - 1)
     */
    @ContractEvent(name = "publishEventWithSequence")
    void publishEventWithSequence(String address, String topic, String content, long sequence);

    /**
     * Publish event, based on the latest time sequence number
     *
     * @param address Event account address
     * @param topic   Message name
     * @param content content
     */
    @ContractEvent(name = "publishEvent")
    void publishEvent(String address, String topic, String content);

4, Supported data types

setText, character type

setInt64, long integer

setJSON, JSON string

setBytes, byte array

setTimestamp, timestamp, long integer

setXML, XML text

setImage, picture byte data

In essence, only String/Long/[]byte data types are supported. JSON/XML/Image/Timestamp plays the role of identification, which is used to expand scene requirements such as differentiated data display
The third parameter in setText("key1", "value1", - 1) is the data version. You need to pass in the highest data version of the current key1 in the JD Chain network, and pass in - 1 when writing for the first time.

Tags: Blockchain

Posted on Sat, 09 Oct 2021 00:08:20 -0400 by iovidiu