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();
}