statedb

package
v0.0.0-...-8b03266 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2022 License: Apache-2.0 Imports: 4 Imported by: 0

README

状态数据库

简介

KV状态数据库

SQL状态数据库

关于用户合约的状态数据库
  1. 每个合约对应一个SQL数据库,数据库的名字就是:chainId+"_合约的名字"。
  2. 每个数据库中都有一个默认的表state_infos,用于存储PutState的KV数据
  3. 每个数据库中有一个表state_record_sql,用于存储合约在创建和升级的时候用到的DDL,这个表主要是为了防止DDL执行到一半宕机或者报错的情况,下次再次执行时,知道哪些DDL已经执行了,哪些DDL还没有执行。
关于系统合约的状态数据库

所有系统合约都共用同一个状态数据库chainId+"_statedb" 这个数据库中有表:

  • state_infos 用于保存系统合约中用到的KV信息
  • member_extra_infos 用于保存用户的扩展信息
  • save_points 用于保存当前最新区块高度

关于Sqlite这种不支持多个database的处理

Sqlite主要用于测试的环境,不建议在生产使用, 因为Sqlite中没有多个数据库的概念,所以没办法创建多个数据库,那么就会导致所有合约都共用同一个数据库和表state_infos, 所以在测试的时候不要在多个合约中使用同名的key。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type StateDB

type StateDB interface {
	// InitGenesis 创世块写入
	InitGenesis(genesisBlock *serialization.BlockWithSerializedInfo) error
	// CommitBlock commits the state in an atomic operation
	CommitBlock(blockWithRWSet *serialization.BlockWithSerializedInfo, isCache bool) error
	//GetChainConfig get last chain config
	GetChainConfig() (*configPb.ChainConfig, error)
	// ReadObject returns the state value for given contract name and key, or returns nil if none exists.
	ReadObject(contractName string, key []byte) ([]byte, error)

	// SelectObject returns an iterator that contains all the key-values between given key ranges.
	// startKey is included in the results and limit is excluded.
	SelectObject(contractName string, startKey []byte, limit []byte) (protocol.StateIterator, error)

	// GetLastSavepoint returns the last block height
	GetLastSavepoint() (uint64, error)

	// Close is used to close database
	Close()

	//QuerySingle 不在事务中,直接查询状态数据库,返回一行结果
	QuerySingle(contractName, sql string, values ...interface{}) (protocol.SqlRow, error)
	//QueryMulti 不在事务中,直接查询状态数据库,返回多行结果
	QueryMulti(contractName, sql string, values ...interface{}) (protocol.SqlRows, error)
	//ExecDdlSql 执行DDL语句
	ExecDdlSql(contractName, sql, version string) error
	//BeginDbTransaction 启用一个事务
	BeginDbTransaction(txName string) (protocol.SqlDBTransaction, error)
	//GetDbTransaction 根据事务名,获得一个已经启用的事务
	GetDbTransaction(txName string) (protocol.SqlDBTransaction, error)
	//CommitDbTransaction 提交一个事务
	CommitDbTransaction(txName string) error
	//RollbackDbTransaction 回滚一个事务
	RollbackDbTransaction(txName string) error
	// 创建database
	CreateDatabase(contractName string) error
	//DropDatabase 删除一个合约对应的数据库
	DropDatabase(contractName string) error
	//GetContractDbName 获得一个合约对应的状态数据库名
	GetContractDbName(contractName string) string

	GetMemberExtraData(member *accesscontrol.Member) (*accesscontrol.MemberExtraData, error)
}

StateDB provides handle to world state instances

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL