7.BID-SDK

GitHub地址:https://github.com/caict-4iot-dev/BID-SDK-JAVA

7.1 简介

BID-SDK通过API调用的方式提供了“星火链网”公私钥对生成、“星火链网”私钥签名公钥验签、BID标识生成、BID标识验证等接口,同时还提供了接口使用示例说明,开发者可以调用该SDK方便快捷的生成星火链网公私钥对和BID地址,实现BID标识合法性的校验及主链的快速接入。中国信通院秉持开源开放的理念,将星火“BID-SDK”面向社区和公众完全开源,助力全行业伙伴提升数据价值流通的效率,实现数据价值转化。

7.2 环境准备

7.2.1 软件依赖

java:版本jdk 1.8.0_202或以下

下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

若已安装,请通过命令查看版本:

$ java -version
java version "1.8.0_202"

7.2.2 下载安装

$ git clone -b release/1.0.0  --depth=1 https://github.com/caict-4iot-dev/BID-SDK-JAVA.git

7.3 基本概念介绍

BID开发工具包,主要是为了方便开发者可以快速加入到星火主链的生态建设中,有以下功能:

  • 获取版本号:获取BID-SDK版本号。

  • BID工具:生成BID标识和验证BID地址格式的合法性。

  • 公私钥工具:生成星火格式的公私钥、使用星火格式的私钥生成签名、使用星火格式的公钥生成签名。

  • BID标识工具:创建BID文档模板、创建BID文档、查询BID文档、校验BID文档。

7.4 参考文档

参考文档:《BID解析协议》

7.5 离线API

7.5.1 获取版本号

  1. 接口 getSdkVersion()

  2. 用途:

    用来获取BID-SDK版本号。

  3. 示例

        //创建SDK实例
        SDK sdk = new SDK();
        String sdkVersion= sdk.getSdkVersion();
        System.out.println(sdkVersion);
    

7.5.2 账户生成

  1. 接口 getBidAndKeyPair()

  2. 用途:

    用来生成一个星火链BID地址和对应私钥。

  3. 示例

        //创建SDK实例
        SDK bidSdk = new SDK();
        KeyPairEntity kaypairEntity = bidSdk.getBidAndKeyPair();
        String publicKey = kaypairEntity.getEncPublicKey();
        String privateKey = kaypairEntity.getEncPrivateKey();
        String bid = kaypairEntity.getEncAddress();
        System.out.println(publicKey);
        System.out.println(privateKey);
        System.out.println(bid);
    

7.5.3 根据编码类型生成账户

  1. 接口 getBidAndKeyPair(KeyType)

  2. 用途:

    根据编码类型生成一个星火链BID地址和对应私钥。

  3. 示例

        //创建SDK实例
        SDK bidSdk = new SDK();
        KeyPairEntity kaypairEntity = bidSdk.getBidAndKeyPair(KeyType.ED25519);
        String publicKey = kaypairEntity.getEncPublicKey();
        String privateKey = kaypairEntity.getEncPrivateKey();
        String bid = kaypairEntity.getEncAddress();
        System.out.println(publicKey);
        System.out.println(privateKey);
        System.out.println(bid);
    

7.5.4 根据编解码类型和ChainCode生成账户

  1. 接口 getBidAndKeyPair(KeyType,chaincode)

  2. 用途:

    根据编解码类型和ChainCode生成星火链BID地址和对应私钥。

  3. 示例

        //创建SDK实例
        SDK bidSdk = new SDK();
        KeyPairEntity kaypairEntity = bidSdk.getBidAndKeyPair(KeyType.SM2,"aa1c" );
        String publicKey = kaypairEntity.getEncPublicKey();
        String privateKey = kaypairEntity.getEncPrivateKey();
        String bid = kaypairEntity.getEncAddress();
        System.out.println(publicKey);
        System.out.println(privateKey);
        System.out.println(bid);
    

7.6 在线API

7.6.1 获取BID文档模板

  1. 接口 getBIDTemplate()

  2. 用途:

    用来获取一个星火链BID文档模板。

  3. 示例

        //创建SDK实例
        SDK bidSdk = new SDK();
        Result result = sdk.getBIDTemplate();
        System.out.println(result);
    

7.6.2 创建BID文档

  1. 接口 createBIDByTemplate(bidDocument)

  2. 用途:

    根据星火链BID文档模板创建BID文档。

  3. 示例

         //bid文档
         String request ="{\"bifamount\":0,\"senderAddress\":\"did:bid:efZfEeQAE1jup1H9musAZP1S3PqV3UdF\",\"feeLimit\":1000000,\"BIFAmount\":0,\"bid\":[{\"document\":{\"version\":\"1.0.0\",\"id\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH\",\"publicKey\":[{\"id\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH#key-1\",\"type\":\"ED25519\",\"publicKeyHex\":\"b0656631627656f082b438a747164c2c9abbe5dd72a0582bdbf404e959c133b89b723e\",\"controller\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH\"}],\"authentication\":[\"did:bid:efZfEeQAE1jup1H9musAZP1S3PqV3UdF#key-1\"],\"alsoKnownAs\":[{\"id\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH\",\"type\":101}],\"extension\":{\"recovery\":[\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH#key-2\"],\"ttl\":86400,\"type\":102,\"delegateSign\":{\"signer\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH#key-1\",\"signatureValue\":\"A897845DAD953A68BCF22F31FC7EE2BB316EDA74D0BA5C02D99FF99981E610E50659D65EB2082D30312E91D677E7CFDAF3773155BBEE330E3C67412786E2BD01\"},\"attributes\":[{\"key\":\"name\",\"desc\":\"名称\",\"value\":\"BID文档\",\"format\":\"text\",\"encrypt\":1}],\"acsns\":[\"acsn\"],\"verifiableCredentials\":[{\"id\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH\",\"type\":201}]},\"service\":[{\"id\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH#resolver\",\"type\":\"DIDDecrypt\",\"protocol\":2,\"serverType\":0,\"serviceEndpoint\":\"https://bidresolver.com\"}],\"created\":\"2022-09-09T17:37:19Z\",\"updated\":\"2022-09-09T17:37:19Z\",\"proof\":{\"creator\":\"did:bid:efWH8wDnogNijNJWiaWJcZ33QSEF9beH#key-1\",\"signatureValue\":\"BCB3818AFC60C2121D88A6E6AF9B4FBD4F36931D27428DD72E149EF37E6E5A413787585E7E52BA32CCEA52AC3EB36664FCDAF8EBD02BC116F8875AFF00E28700\"},\"@context\":[\"https://www.w3.org/ns/did/v1\"]}},{\"document\":{\"version\":\"1.0.0\",\"id\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7\",\"publicKey\":[{\"id\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7#key-1\",\"type\":\"ED25519\",\"publicKeyHex\":\"b065668a2dd499847a0e4edec1560e7c10a2366b671a96011461fdcf1455d27e6b5d2a\",\"controller\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7\"}],\"authentication\":[\"did:bid:efZfEeQAE1jup1H9musAZP1S3PqV3UdF#key-1\"],\"alsoKnownAs\":[{\"id\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7\",\"type\":101}],\"extension\":{\"recovery\":[\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7#key-2\"],\"ttl\":86400,\"type\":102,\"delegateSign\":{\"signer\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7#key-1\",\"signatureValue\":\"DD3CCC07EDB286A4AEC2A2A63562A498C8582EDA3CE779425D86FE46D5F6774EF0831E9F03FCAA579882F20F21FCAD6616D62689D360AC8159F4414F112D2F09\"},\"attributes\":[{\"key\":\"name\",\"desc\":\"名称\",\"value\":\"BID文档\",\"format\":\"text\",\"encrypt\":1}],\"acsns\":[\"acsn\"],\"verifiableCredentials\":[{\"id\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7\",\"type\":201}]},\"service\":[{\"id\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7#resolver\",\"type\":\"DIDDecrypt\",\"protocol\":2,\"serverType\":0,\"serviceEndpoint\":\"https://bidresolver.com\"}],\"created\":\"2022-09-09T17:45:09Z\",\"updated\":\"2022-09-09T17:45:09Z\",\"proof\":{\"creator\":\"did:bid:efgeUN1NrZ8g8emyaxMrpH6yKZvTfar7#key-1\",\"signatureValue\":\"3A6C2D2601CA3A78EA3C736D3D5E93AFF194BF32CC45CE308AFC47854BDDD72A81776F88798B83D56E2770BFDFDBCC3A250D51CDB63C45E34773ED910C2F770F\"},\"@context\":[\"https://www.w3.org/ns/did/v1\"]}}],\"ceilLedgerSeq\":0,\"remarks\":\"creat DDO\",\"privateKey\":\"priSPKhJ59Y6EePWbFybWzNkhPGjJ1ReQBeFk3KgaC2nFz4Nfy\",\"gasPrice\":1000}";
         SDK sdk = SDK.getInstance("http://test.bifcore.bitfactory.cn/");
         Result result = sdk.createBIDByTemplate(request);
         System.out.println(result);
    

7.6.2 解析BID文档

  1. 接口 resolverBid(bid)

  2. 用途:

    用来查询BID文档。

  3. 示例

       //创建SDK实例
       SDK sdk = SDK.getInstance("http://test-bidresolver.bitfactory.cn");
       String bid="did:bid:efj3FikDU8c7An3SPUoRtEWf2JDg1Hg9";
       Result result = sdk.resolverBid(bid);
       System.out.println(result);