主链的作用是生成随机数,保存验证节点相关信息,管理验证节点,追踪子链区块,子链的作用是处理交易,存储账户合约的状态。在本文中,术语 ShardBlock被用来与 Block(区块)相区别,因为: (i) 它们是不同的 RLP(Recursive Length Prefix)对象:交易是第 0 层的对象,ShardBlock是用来打包交易的第一层的对象,而 block 则是用来打包 ShardBlock(header)的第二层的对象; (ii) 在子链的情景中这更加清晰。通常,ShardBlock必须由ShardBlockHeader 和 TransactionList(交易列表)组成;
实现功能描述
项目加载自定义变量
自定义变量替换shell模版内容
项目运行shell
功能实现拆解
针对上述功能描述,其实可以拆解为三步
实现项目加载自定义变量
实现替换shell模版内容
运行shell
项目加载自定义变量
这里有两种实现,
一种是项目加载自定义变量文件到系统变量中;
另一种是shell通过source .env环境变量方式加载。
项目加载自定义变量文件到系统变量中
这种方法的好处是项目中可以获取到自定义变量,如果项目代码需要获取自定义变量进行操作,可以考虑使用此方式
新增一个自定义变量文件(当然也可以在代码中固定写入变量直接加载到系统中,这样的缺点就是不灵活,如果有变动就需要改代码)
自定义变量文件如下
BASE_ROOT_DIR=/home
LICENSE_PATH=/home/LICENSE
PACKAGE_PATH=/home/test.tar.gz
java代码如下
/**
* 加载自定义变量文件到系统变量中
* @param configFile
*/
public static void loadProperties(String configFile){
try {
FileInputStream propFile = new FileInputStream(configFile);
Properties p = new Properties(System.getProperties());
p.load(propFile);
System.setProperties(p);
} catch (Exception e) {
e.printStackTrace();
}
}
调用loadProperties方法后,就可以通过System.getProperty("key")获取自定义的变量了
如获取BASE_ROOT_DIR:System.getProperty("BASE_ROOT_DIR")