合约创建
用户合约在创建时,系统会自动创建一个新的数据库给该合约,所以不同的用户合约的状态数据以数据库进行区隔。在创建合约对应的数据库后,系统会执行合约init_contract函数中的SQL语句,包含非数据库事务的DDL语句,出于安全考虑,一个创建合约的交易或升级合约的交易将会被单独打包到区块中,不能与其他普通合约调用的交易一起打包。
合约调用
用户在合约中拼接SQL语句,并以字符串形式传入合约SDK,在合约执行时,由于无法像KV数据那样生成读写集,然后基于读写集判断一个区块中的多笔交易是否允许并行执行还是串行执行,所以在支持SQL合约的执行过程中,将全部按串行方式执行。一个区块对应一个数据库中的事务,区块开始处理第一笔交易时开启事务,然后针对每一笔交易,在交易执行前将建立事务的SavePoint保存点,然后再逐步执行交易中的多条SQL语句,如果全部SQL语句执行完成,并交易结果返回成功,那么将会把所有DML语句记录到写集中(SELECT语句不产生数据变更,不记录到写集),并建立一个新的事务SavePoint,继续处理下一笔交易。但一旦该交易中有SQL语句执行失败,或者最终该交易的结果返回为失败,则回滚到上一个SavePoint,并清空该交易的读写集。直到处理完本区块的最后一笔交易,提交整个数据库事务,每个合约对其状态数据库的更改落盘完成。
SPV轻节点配置参数
spv.yml配置文件如下:
注意:SPV轻节点配置文件中的路径请使用绝对路径。
#链配置chains:#类型,当前仅支持(ChainMaker_Light,ChainMaker_SPV,Fabric_SPV)三种类型-chain_type:"ChainMaker_Light"#链ID chain_id:"chain1"#同步链中节点区块最新高度信息的时间间隔,单位:毫秒sync_interval:10000#并发请求区块的数量concurrent_nums:100#sdk配置文件路径sdk_config_path:"/release_path/config/chainmaker/chainmaker_sdk.yml"#类型,
当前仅支持(ChainMaker_Light,ChainMaker_SPV,Fabric_SPV)三种类型-chain_type:"ChainMaker_SPV"#链ID chain_id:"chain1"#同步链中节点区块最新高度信息的时间间隔,单位:毫秒sync_interval:10000#并发请求区块的数量concurrent_nums:100#sdk配置文件路径sdk_config_path:O7I8,"/release_path/config/chainmaker/chainmaker_sdk.yml"#类型,当前仅支持(ChainMaker_Light,ChainMaker_SPV,Fabric_SPV)三种类型-chain_type:
"Fabric_SPV"#链ID chain_id:"mychannel"#同步链中节点区块最新高度信息的时间间隔,单位:毫秒sync_interval:10000#并发请求区块的数量concurrent_nums:100#sdk配置文件路径sdk_config_path:"/release_path/config/fabric/fabric_sdk.yml"#fabric特有的配置项,其他类型的链不需要配置fabric_extra_config:#节点列表peers:-peer:"peer0.org1.example.com"-peer:"peer1.org1.example.com"#grpc配置grpc:#grpc监听网卡地址address:127.0.0.1#grpc监听端口port:12345#是否开启tls验证enable_tls:false security:#是否开启CA验证ca_auth:false#ca文件ca_file:-"/release_path/config/tls/ca.pem"#tls证书文件cert_file:"/release_path/config/tls/server.pem"#tls私钥文件key_file:
"/release_path/config/tls/server.key"#web配置web:#web服务监听网卡地址,http或https由${enable_tls}参数判断,无需配置address:127.0.0.1#web监听端口port:12346#是否开启tls验证enable_tls:false security:#是否开启CA验证ca_auth:false#ca文件ca_file:-"/release_path/config/tls/ca.pem"#tls证书文件cert_file:"/release_path/config/tls/server.pem"#tls私钥文件key_file:
"/release_path/config/tls/server.key"#存储配置storage:#存储类型,当前仅支持leveldb类型provider:"leveldb"#leveldb的详细配置leveldb:#leveldb的存储路径store_path:"/release_path/data/spv_db"#leveldb写入Buffer大小,单位:MB write_buffer_size:32#leveldb布隆过滤器的bit长度bloom_filter_bits:10#日志配置,用于配置日志的打印log:#日志打印级别log_level:"INFO"#日志文件路径file_path:
"/release_path/log/spv.log"#日志最长保存时间,单位:天max_age:365#日志滚动时间,单位:小时rotation_time:1#是否展示日志到终端,仅限于调试使用log_in_console:false#是否打印颜色日志show_color:true