// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.4.21 <0.6.11;
contract CarbonBehavior {
constructor() public {
}
struct trip { //出行
string way; //方式
uint itinerary;//行程单号
string traveler;//出行者
address recorder;//记录者
uint mileage;//里程
string ridingTime;//乘车时间
string route;//路线
uint savingCarbonEmissions;//节约碳排放 (g)
}
uint[] internal itineraryList;//行程单号列表
mapping(uint => trip) internal tripRecord;//每个单号对应一次出行记录
function addTripRecord(string memory _traveler,string memory _way,uint _itinerary,uint _mileage ,string memory _ridingTime , string memory _route , uint _savingCarbonEmissions)public returns(string memory){
tripRecord[_itinerary].traveler=_traveler;
tripRecord[_itinerary].way=_way;
tripRecord[_itinerary].itinerary=_itinerary;
tripRecord[_itinerary].recorder=msg.sender;
tripRecord[_itinerary].mileage=_mileage;
tripRecord[_itinerary].ridingTime=_ridingTime;
tripRecord[_itinerary].route=_route;
tripRecord[_itinerary].savingCarbonEmissions=_savingCarbonEmissions;
itineraryList.push(_itinerary);
return "添加出行记录成功!";
}
function getTripRecord (uint _itinerary) public view returns(string memory,uint,string memory,/*address,*/uint,string memory,string memory,uint)
{
require(itineraryVerify(_itinerary), "查询单号不存在不存在 !!!");
return (tripRecord[_itinerary].way,
_itinerary,
tripRecord[_itinerary].traveler,
tripRecord[_itinerary].mileage,
tripRecord[_itinerary].ridingTime,
tripRecord[_itinerary].route,
tripRecord[_itinerary].savingCarbonEmissions);
}
function getAllTripRecord() public view returns (string memory,uint,string memory,/*address,*/uint,string memory,string memory,uint){
for(uint i=0;i<itineraryList.length;i++){
return getTripRecord(itineraryList[i]);
}
}
function updateTripRecord (string memory _traveler,string memory _way,uint _itinerary,uint _mileage ,string memory _ridingTime , string memory _route , uint _savingCarbonEmissions)public returns(string memory){
tripRecord[_itinerary].traveler=_traveler;
tripRecord[_itinerary].way=_way;
tripRecord[_itinerary].itinerary=_itinerary;
tripRecord[_itinerary].recorder=msg.sender;
tripRecord[_itinerary].mileage=_mileage;
tripRecord[_itinerary].ridingTime=_ridingTime;
tripRecord[_itinerary].route=_route;
tripRecord[_itinerary].savingCarbonEmissions=_savingCarbonEmissions;
// itineraryList.push(_itinerary);
return "修改出行记录成功!";
}
function deleteTripRecord (uint _itinerary) public returns (string memory){
require(tripRecordVerify(_itinerary,msg.sender), "只有管理员可以操作!!!");
for(uint i=0;i < itineraryList.length;i++){
if( itineraryList[i] == _itinerary ){
for(uint j=i;j<itineraryList.length-1;j++){
itineraryList[j] = itineraryList[j+1];
}
itineraryList[itineraryList.length-1] = 0;
itineraryList.length =itineraryList.length - 1;
}
}
return "成功删除记录!";
}
function tripRecordVerify(uint _itinerary, address _user) internal view returns(bool){
if(tripRecord[_itinerary].recorder == _user){
return true;
}
return false;
}
function itineraryVerify(uint _itinerary) internal view returns(bool){
for(uint i=0;i < itineraryList.length;i++){
if( itineraryList[i] == _itinerary ){
return true;
break;
}
}
return false;
}
function getItineraryList() public view returns(uint[] memory){
return itineraryList;
}
}
-
点击右上角导出java项目
-
IDE打开项目确认配置,运行项目无报错
注意非国密注释SM_BINARY配置项
-
写conroller,以区块相关接口为例,其他模块同样
@Api(tags = "区块模块")
@RestController
@RequestMapping("/api/block")
public class BlockController {
@Autowired
private CarbonBehaviorService carbonBehaviorService;
@Autowired
private ServiceManager serviceManager;
BcosBlock.Block block;
BcosBlockHeader.BlockHeader blockHeader;
/**
* 获取当前块高
* @return
* return helloWorldService.getClient().getBlockNumber().getResult();
*/
@GetMapping("/getBlockNumber")
public BigInteger getBlockNumber(){
System.out.println(serviceManager.getClient().getBlockNumber().getBlockNumber());
return carbonBehaviorService.getClient().getBlockNumber().getBlockNumber();
}
/**
*http://localhost:8080/block/getBlockHashByNumber?number=14
* 通过区块号得到区块哈希
* @param number
* @return
*/
@GetMapping("/getBlockHashByNumber")
public String getBlockHashByNumber(BigInteger number){
return carbonBehaviorService.getClient().getBlockHashByNumber(number).getBlockHashByNumber();
}
/**
*
*http://localhost:8080/block/getBlockByNumber?number=14
* 根据区块号查询区块信息
* @param number
* @return
*/
@GetMapping("/getBlockByNumber")
public BcosBlock.Block getBlock(BigInteger number){
block = carbonBehaviorService.getClient().getBlockByNumber(number,true).getBlock();
return block;
}
/**
* http://localhost:8080/block/getBlockByHash?blockHash=0x26e4c100994c33038181c33e52dbb292e5c0aa814fc2ade805e0cc5c667b0da7
* 根据区块Hash查询区块信息
* @param blockHash
* @return
*/
@GetMapping("/getBlockByHash")
public BcosBlock.Block getBlock(String blockHash){
block = carbonBehaviorService.getClient().getBlockByHash(blockHash,true).getBlock();
return block;
}
/**
* http://localhost:8080/block/getBlockHeaderByNumber?number=13
* 根据区块号查询区块头信息
* @param number
* @return
*/
@GetMapping("/getBlockHeaderByNumber")
public BcosBlockHeader.BlockHeader getBlockHeaderByNumber(BigInteger number){
blockHeader = carbonBehaviorService.getClient().getBlockHeaderByNumber(number,true).getBlockHeader();
return blockHeader;
}
/**
*http://localhost:8080/block/getBlockHeaderByHash?blockHash=0x3c7520aa602d6c595f816736c2afaf774386a182dc35659266f389fa58669912
*根据区块Hash查询区块头信息
* @param blockHash
* @return
*/
@GetMapping("/getBlockHeaderByHash")
public BcosBlockHeader.BlockHeader getBlockHeaderByHash(String blockHash){
blockHeader = carbonBehaviorService.getClient().getBlockHeaderByHash(blockHash,true).getBlockHeader();
return blockHeader;
}
}
- 接口测试(swagger、postman、网页测试GET请求)
至此我们成功调用javaSDK获取区块数据;