基于FISCO BCOS的小程序设计(一)

  1. 搭建fisco bcos和WeBASE组件
    bcos搭建版本为2.8官网
    WeBASE版本为1.5.3官网
  2. 部署智能合约
// 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;
    }
}

在这里插入图片描述

  1. 点击右上角导出java项目
    在这里插入图片描述

  2. IDE打开项目确认配置,运行项目无报错
    在这里插入图片描述
    注意非国密注释SM_BINARY配置项
    在这里插入图片描述

  3. 写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;
    }
}

在这里插入图片描述

  1. 接口测试(swagger、postman、网页测试GET请求)
    在这里插入图片描述
    在这里插入图片描述
    至此我们成功调用javaSDK获取区块数据;
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值