你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

【软件工程应用与实践】(7)JDchain对交易的处理

2021/12/28 20:47:30

2021SC@SDUSC

交易

1. 请求

JD Chain限制单笔交易数据大小不得超过 4M
代码的分析写在了注释 中

/**
 * 交易请求;
 */
@DataContract(code= DataCodes.TX_REQUEST)
public interface TransactionRequest {
}
	/**
	 * 交易哈希;
	 */
	@DataField(order = 1, primitiveType = PrimitiveType.BYTES)
	HashDigest getTransactionHash();
}
	/**
	 * 交易内容;
	 */
	@DataField(order = 2, refContract = true)
	TransactionContent getTransactionContent();
}
	/**
	 * 终端用户的签名列表;
	 */
	@DataField(order = 3, list = true, refContract = true)
	DigitalSignature[] getEndpointSignatures();
}
	/**
	 * 接入交易的节点的签名;
	 */

	@DataField(order=4, list=true, refContract=true)
	DigitalSignature[] getNodeSignatures();

}

交易内容:

/**
 * 交易内容;
 */
@DataContract(code = DataCodes.TX_CONTENT)
public interface TransactionContent {
	}
	/**
	 * 执行交易的账本地址;
	 * 
	 * 注:除了账本的创世交易之外,任何交易的账本地址都不允许为 null;
	 */
	@DataField(order = 1, primitiveType = PrimitiveType.BYTES)
	HashDigest getLedgerHash();
}
	/**
	 * 操作列表;
	 */
	@DataField(order = 2, list = true, refContract = true, genericContract = true)
	Operation[] getOperations();
}
	/**
	 * 生成交易的时间;<br>
	 * 以毫秒为单位,表示距离 1970-1-1 00:00:00 (UTC) 的毫秒数;<br>
	 */
	@DataField(order = 3, primitiveType = PrimitiveType.INT64)
	long getTimestamp();

}

2. 操作

Operation接口实现类均为JD Chain交易中支持的操作类型

2.1 共识信息变更

@DataContract(code= DataCodes.TX_OP_CONSENSUS_SETTINGS_UPDATE)
public interface ConsensusSettingsUpdateOperation extends Operation{

	/**
	 * 配置列表
	 */
    @DataField(order = 0, primitiveType = PrimitiveType.BYTES, list = true)
    Property[] getProperties();
}

2.2 合约部署

@DataContract(code= DataCodes.TX_OP_CONTRACT_DEPLOY)
public interface ContractCodeDeployOperation extends Operation {
	/**
	 * 合约账户信息
	 */
	@DataField(order=2, refContract = true)
	BlockchainIdentity getContractID();
	}
	/**
	 * 合约代码字节
	 */
	@DataField(order=3, primitiveType=PrimitiveType.BYTES)
	byte[] getChainCode();
}
	/**
	 * 合约版本
	 */
	@DataField(order=5, primitiveType=PrimitiveType.INT64)
	long getChainCodeVersion();
}

2.3 合约调用

@DataContract(code = DataCodes.TX_OP_CONTRACT_EVENT_SEND)
public interface ContractEventSendOperation extends Operation {
}
	/**
	 * 合约地址;
	 */
	@DataField(order = 2, primitiveType = PrimitiveType.BYTES)
	Bytes getContractAddress();
}
	/**
	 * 合约方法名;
	 * 
	 * @return
	 */
	@DataField(order = 3, primitiveType = PrimitiveType.TEXT)
	String getEvent();
}
	/**
	 * 合约方法调用参数;
	 * 
	 * @return
	 */
	@DataField(order = 4, refContract = true)
	BytesValueList getArgs();
}
	/**
	 * 合约版本;
	 */
	@DataField(order = 5, primitiveType = PrimitiveType.INT64)
	long getVersion();
}