佛萨奇系统开发源码部署技术方案(MetaForce 元宇宙)
用户在合约中拼接 SQL 语句,并以字符串形式传入合约 SDK,佛萨奇系统:I80 模式 2857 开发 8624,在合约执行时,由于无法像 KV 数据那样生成读写集,然后基于读写集判断一个区块中的多笔交易是否允许并行执行还是串行执行,所以在支持 SQL 合约的执行过程中,将全部按串行方式执行。一个区块对应一个数据库中的事务,区块开始处理第一笔交易时开启事务,然后针对每一笔交易,在交易执行前将建立事务的 SavePoint 保存点,然后再逐步执行交易中的多条 SQL 语句,如果全部 SQL 语句执行完成,并交易结果返回成功,那么将会把所有 DML 语句记录到写集中(SELECT 语句不产生数据变更,不记录到写集),并建立一个新的事务 SavePoint,继续处理下一笔交易。但一旦该交易中有 SQL 语句执行失败,或者最终该交易的结果返回为失败,则回滚到上一个 SavePoint,并清空该交易的读写集。直到处理完本区块的最后一笔交易,提交整个数据库事务,每个合约对其状态数据库的更改落盘完成。
2.1 初始创建合约
创建合约主要有以下几种方式:
•solidity 创建合约
•truffle 框架创建合约
•web3.js 创建合约
2.2 创建合约的准备事项 Testrpc:
testrpc 是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,testrpc 不同于 geth,geth 是真正的以太坊环境。
Truffle:
truffle 是本地的用来构建项目、编译、部署智能合约的工具
安装 testrpc 和 truffle 的命令:
如果网络原因卡住,需要安装 cnpm:
安装好 cnpm 之后:
core.yaml 设置如下:
peer:
gossip:
useLeaderElection:false#不进行动态选举主节点
orgLeader:true#指定该节点为主节点
或者配置环境变量:
export CORE_PEER_GOSSIP_USELEADERELECTION=false
export CORE_PEER_GOSSIP_ORGLEADER=true
1
2
前面提到,如果指定某个节点不为主节点也是可以的:
peer:
gossip:
useLeaderElection:false#不进行动态选举主节点
orgLeader:false#指定该节点为非主节点
或者配置环境变量:
export CORE_PEER_GOSSIP_USELEADERELECTION=false
export CORE_PEER_GOSSIP_ORGLEADER=false
评论