<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **鑰匙庫 Keeper** 是 Token 應用系統的私鑰管理服務,類似于手機加密貨幣錢包,提供生成、保存私鑰和簽名的服務,Keeper 以 Docker 鏡像部署于業務系統的內部環境,并通過接口進行內網訪問,通過加密等防護措施確保私鑰安全。具體接口如下: [TOC] ## 演示環境 接口地址:https://47.104.196.35/bwallet/…… 目前測試環境中使用的種子為: ~~~ "mnemonic": "donate hedgehog exit connect fly cargo velvet basic portion injury vehicle juice", "seed": "f0a09a464d5c6d7af067841efc5d475f53f58fcb39b87716506a713b9fdb865e4391fd9457de77be98e45f487c3a02f23408859c63124e40a8078ae758e6e6e5" ~~~ 雖然可以使用 generateseed 接口無限制的生成種子,但是一旦某種子被啟用,在后繼的生成私鑰的操作中,該種子不可變更。除非清空數據庫才可以重新啟用新的種子,派生新的私鑰。 ## 接口 ### 1. 生成種子 <span id="api00"></span> 接口名稱:/api/v2/generate_seed 請求方法:GET 響應類型:JSON 狀態:有效 接口描述:向私鑰管理服務請求生成密鑰種子,一旦使用了某密鑰種子,請妥善保存該種子,可以將其記錄與紙質文件或U盤中,由重要的人保管! ~~~[api:keeper] get:/api/v2/generate_seed <<< success { "code": 0, "data": { "mnemonic": "supply disagree case say pipe unit use raw test faith mistake hole", "seed": "05e8585bb7d5f6a3a7059c17c6213a980a34619edfe46b858553556e2c79041e8a30f8e1abd23ed27b7b60f0c34b1575cab254c67b8e9d9fcbf9439c1516e59a" } } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | mnemonic | string | 種子助記詞 | | seed | string | 種子 | ### 2. 批量生成地址 <span id="api01"></span> 接口名稱:/api/v2/generate_keys 請求方法:POST 響應類型:JSON 狀態:有效 接口描述:向私鑰管理服務請求生成新的私鑰,私鑰加密保存在內網,返回對應的公鑰和地址,這里生成的地址都是未分配使用的。私鑰的加密是定期更新的,確保即使加密被破解,也僅僅會影響一段時間的安全性。 ~~~[api:keeper] post:/api/v2/generate_keys *string:seed#生成私鑰所需要的種子 *number:amount#新生成地址數量 string:network_id#1:測試網絡(缺省),4:正式網絡 <<< success { "code": 0, "data": [ { "pubKey": "f25fad5ae82804d3e990af6a1b5379dabae5fafd5f26a5295f6cbfc2b33e8989b896192bf14be8c0b2bab184242bc569bccfae224b511a65fd1c51c4f85a96d8", "address": "AUUk3GpbpZum_B5YKLGgQT3FhaXNbN0QGA", "index": 0 }, { "pubKey": "483c5cb5d57bbe2b8223548269dd65d7f9c8d2ceb7b8afa8fa7da7a27960475db45be102e5aa396600d12f1864b2bc6e1c7d5601a37acf28f4c0444de02fe61b", "address": "AfdIP-Gy32OQztxT1iimiWBBHGcbxecG0A", "index": 1 }, { "pubKey": "29b20d5a0e9523a78525698b3d2506e3091630f0a32f0ee86cc95cff7d4aec4258f207e25d3e0286a5c38234a73154f26be8056e5e757e8582dc47da8199e857", "address": "AYRhYtOjRmQ_VXFDZPihkQcZB4Za2fjByg", "index": 2 }, { "pubKey": "2fa3b60b50a587af844c6daefb084c37796b41c85600bdf2f07d7511a00227aeffd0f756e4a734dfbbbd58f31451c1e5d2f20b135341b66662ccf47bacb880ce", "address": "Admlc1WtfTi2ygjoS-_zNHiWSrTUcE3EoA", "index": 3 }, { "pubKey": "3a0d1e5f9aec94c91acb9432f2fa993bea017b38ca95da6d3a975b99f1aead4e300adc8622d9ea3fe262653915b944d3190e8790d722568286e08908351f4733", "address": "AVXND9zP2cX2RABbMiTj0ON5jmKBTHYvCw", "index": 4 } ], "msg": "success" } <<< error { "code": 5000, "msg": "系統異常" } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | pubKey | string | 地址公鑰 | | address | string | 地址 | | index | integer | 地址索引 | ### 3. 獲取 1 個未使用的地址 接口名稱:/api/v2/get_unused_key 請求方法:POST 響應類型:JSON 狀態:有效 接口描述:申請一個未使用的地址公鑰對 ~~~[api:keeper] post:/api/v2/get_unused_key <<< success { "code": 0, "data": { "pubKey": "f7fd57df8a840a26af0cd5671af737d78bfd183a286ea926015a06933a31646b1b6e81976882a245d34a907d0e898580fda242c27cdc16123d8adedb83b400d8", "address": "AdkELJpYcCk4U5QCAit1t54OtasEBH8wtw", "index": 14 } } <<< error { "code": 5000, "msg": "系統異常" } ~~~ ** 返回第一個未使用的地址公鑰對, "pubKey"為公鑰, "address"為對應地址, "index"為索引, 該地址返回后, keeper內部將標示其為已使用. 如果沒有可用的地址, "data"為 {} ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | pubKey | string | 地址公鑰 | | address | string | 地址 | | index | integer | 地址索引 | ### 4. 獲取未使用的地址數量 接口名稱: /api/v2/get_unused_key_count 請求方法:GET 響應類型:JSON 狀態:有效 接口描述:返回keeper內部未使用的地址公鑰對數量 ~~~[api:keeper] get:/api/v2/get_unused_key_count <<< success { "code": 0, "data": { "count": 11 } } <<< error { "code": 5000, "msg": "系統異常" } ~~~ ** 返回未使用的地址公鑰對數量** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | count | int | 未使用地址數量 | ### 5. 事務簽名(指定公鑰) 接口名稱:/api/v2/sign_by_key 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:指定由公鑰對應的私鑰對未簽名事務 hash 進行簽名,返回簽名 ~~~[api:keeper] post:/api/v2/sign_by_key string:hash#待簽名事務hash(32字節,編碼后為64字符) string:pub_key#服務端使用參數所指定公鑰對應的私鑰進行簽名 <<< success { code: 0, data: { "signed_hash" : "f62a74dd5c55e2dc4af650654348b6884bf6b08a2fbb59f424c1ddcfa3974fb49c281fb2aafa7394f0bc20e84866a1094bd9d9ea7ab11a7d91b610855e312764,de67efffc14cc1b2f0bc3bec5f993471f1fa9c411b90249b60511ed960041abb445d49711168315d01ef20a842675f9c89f9a14839d1f093fa934ac9f008f85a" } } <<< error { code: 4100, msg: '簽名服務已關閉' } ~~~ ** 返回數據里"signed_hash"即為簽名成功后的數據, 如果公鑰不合法,或者簽名服務已關閉,則將返回錯誤信息 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | signed_hash | string | 簽名數據 | ### 6. 事務簽名(指定地址) 接口名稱:/api/v2/sign_by_addr 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:指定由參數所指定地址對應的私鑰對未簽名事務 hash 進行簽名,返回簽名 ~~~[api:keeper] post:/api/v2/sign_by_addr string:hash#待簽名事務 hash(32 字節,編碼后為 64 字符) string:address#服務端使用該地址對應的私鑰進行簽名 <<< success { code: 0, data: { "signed_hash" : "f62a74dd5c55e2dc4af650654348b6884bf6b08a2fbb59f424c1ddcfa3974fb49c281fb2aafa7394f0bc20e84866a1094bd9d9ea7ab11a7d91b610855e312764,de67efffc14cc1b2f0bc3bec5f993471f1fa9c411b90249b60511ed960041abb445d49711168315d01ef20a842675f9c89f9a14839d1f093fa934ac9f008f85a" } } <<< error { code: 4200, msg: '系統異常' } ~~~ ** 接口返回數據里"signed_hash"即為簽名成功后的數據, 如果地址不合法,或者簽名服務已關閉,則將返回錯誤信息 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | signed_hash | string | 簽名數據 | ### 7. 設置系統參數 接口名稱:/api/v2/set_params 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:設置系統的運行時參數,用于限制是否可以簽名,黑白地址名單等,這里設置的黑白名單將清除服務端原有的黑白名單設置。 ~~~[api:keeper] post:/api/v2/set_params number:sign_count#簽名數,目前 <= 0 關閉簽名服務 > 0 開啟簽名服務 string:blacklist#白名單數組(數組字符串需要經過編碼處理:[],等數組里的特俗字符) string:whitelist#黑名單數組(數組字符串需要經過編碼處理:[],等數組里的特俗字符) <<< success { code: 0, msg: 'success' } <<< error { code: 4500, msg: '系統異常' } ~~~ 參數示例: ``` { sign_count: 1, blacklist: [{"pub_key": "89c114d91fad38a04a4b0ecc682e7b87bf5e386869c183cac5052c0d8852b1aae139595e811ce95ab93b6a05d3687206f839f13dce0bc27d6334ac918bcfb5f7", "address": "AZvnLUhQSmyE0t-sWTacMdu4ldnsE66mrA"}], whitelist: [{"pub_key": "23e484676e5c783afa8fd4a8fa8783f965d7954649419ed6659e6f6a1796646e97235464d96a137c016f9f2442f8443057fad5208765a0faff8140b1e4f385ac", "address": "ASYJcGipUeKzHxxnILy7T9v8nFZlRAK_gw"}] } ``` ### 8. 黑名單操作 接口名稱:/api/v2/operate_black_list 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:對黑名單進行操作 ~~~[api:keeper] post:/api/v2/operate_black_list string:action#動作(add、remove、get) string:keypairs#公鑰地址對數組(數組字符串,特殊字符需要經過編碼處理 ) <<< success { code: 0, msg: 'success' } <<< error { code: 4600, msg: '系統異常' } ~~~ 參數示例: - 新增黑名單 ``` { action: 'add', keypairs: [{"pub_key": "89c114d91fad38a04a4b0ecc682e7b87bf5e386869c183cac5052c0d8852b1aae139595e811ce95ab93b6a05d3687206f839f13dce0bc27d6334ac918bcfb5f7", "address": "AZvnLUhQSmyE0t-sWTacMdu4ldnsE66mrA"}] } ``` - 移除黑名單 ``` { action: 'remove', keypairs: [{"pub_key": "89c114d91fad38a04a4b0ecc682e7b87bf5e386869c183cac5052c0d8852b1aae139595e811ce95ab93b6a05d3687206f839f13dce0bc27d6334ac918bcfb5f7", "address": "AZvnLUhQSmyE0t-sWTacMdu4ldnsE66mrA"}] } ``` - 獲取黑名單 ``` { action: 'get' } ``` ### 9. 白名單操作 接口名稱:/api/v2/operate_white_list 請求方法:POST 響應類型:JSON 請求數據類型:application/json 狀態:有效 接口描述:對白名單進行操作 ~~~[api:keeper] post:/api/v2/operate_white_list string:action#動作(add、remove、get) string:keypairs#公鑰地址對數組(數組字符串,特殊字符需要經過編碼處理 ) <<< success { code: 0, msg: 'success' } <<< error { code: 4700, msg: '系統異常' } ~~~ 參數示例: - 新增白名單 ``` { action: 'add', keypairs: [{"pub_key": "89c114d91fad38a04a4b0ecc682e7b87bf5e386869c183cac5052c0d8852b1aae139595e811ce95ab93b6a05d3687206f839f13dce0bc27d6334ac918bcfb5f7", "address": "AZvnLUhQSmyE0t-sWTacMdu4ldnsE66mrA"}] } ``` - 移除白名單 ``` { action: 'remove', keypairs: [{"pub_key":"89c114d91fad38a04a4b0ecc682e7b87bf5e386869c183cac5052c0d8852b1aae139595e811ce95ab93b6a05d3687206f839f13dce0bc27d6334ac918bcfb5f7", "address": "AZvnLUhQSmyE0t-sWTacMdu4ldnsE66mrA"}] } ``` - 獲取白名單 ``` { action: 'get' } ``` ### 10. 獲取地址使用狀態 接口名稱:/api/v2/export_keys 請求方法:GET 響應類型:JSON 狀態:有效 接口描述:導出私鑰管理服務系統中的的私鑰被使用的數量以及總數等信息。由外部調用,用于定期備份密鑰狀態 ~~~[api:keeper] get:/api/v2/export_keys <<< success { "code": 0, "data": [ { "used": 10, "total": 32, "pubkey": "89c114d91fad38a04a4b0ecc682e7b87bf5e386869c183cac5052c0d8852b1aae139595e811ce95ab93b6a05d3687206f839f13dce0bc27d6334ac918bcfb5f7" } ] } <<< error { "code": 5000, "msg": "系統異常" } ~~~ ** 接口返回數據里"used"為已使用的私鑰的數量,"total"為總的私鑰數量,"pubkey"為total對應的公鑰的值,如果簽名服務已關閉,則將返回錯誤信息 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | used | integer | 已使用的私鑰的數量 | | total | integer | 總的私鑰數量 | | pubkey | string | total對應公鑰 | ### 11. 恢復密鑰 接口名稱:/api/v2/import_keys 請求方法:POST 響應類型:JSON 請求數據類型:application/json 狀態:有效 接口描述:通過輸入種子和外部備份的密鑰狀態信息,可以恢復導出密鑰狀態時的密鑰狀態情況。當服務異常、升級等情況下可以用來恢復數據 **請求參數** ~~~ { "seed":"38627b052f6ac556cc09e0812f272b37f2f4036b1af919b79f9c93ed6ba17d0938280b72aa3749da30e9cae7a7b79c72f57204a7730283dfc3ba000e33bc3510", "used":1, "total":1, "pubkey":"d82677732d9fdb46265e0f80c2086770e792e5e2a497271e47b623a24bb6bc907ce2dcddc0d0510dd452ef384a30ef733e805a04273be34d449bd55d1874a101" } ~~~ ~~~[api:keeper] post:/api/v2/import_keys string:seed#種子字符串 int:used#使用過的密鑰數 int:total#總共的密鑰數 string:pubkey#total對應的公鑰 <<< success { "code": 0, "data": [ { "pubKey": "f25fad5ae82804d3e990af6a1b5379dabae5fafd5f26a5295f6cbfc2b33e8989b896192bf14be8c0b2bab184242bc569bccfae224b511a65fd1c51c4f85a96d8", "address": "AUUk3GpbpZum_B5YKLGgQT3FhaXNbN0QGA", "index": 0 }, { "pubKey": "483c5cb5d57bbe2b8223548269dd65d7f9c8d2ceb7b8afa8fa7da7a27960475db45be102e5aa396600d12f1864b2bc6e1c7d5601a37acf28f4c0444de02fe61b", "address": "AfdIP-Gy32OQztxT1iimiWBBHGcbxecG0A", "index": 1 }, { "pubKey": "29b20d5a0e9523a78525698b3d2506e3091630f0a32f0ee86cc95cff7d4aec4258f207e25d3e0286a5c38234a73154f26be8056e5e757e8582dc47da8199e857", "address": "AYRhYtOjRmQ_VXFDZPihkQcZB4Za2fjByg", "index": 2 }, { "pubKey": "2fa3b60b50a587af844c6daefb084c37796b41c85600bdf2f07d7511a00227aeffd0f756e4a734dfbbbd58f31451c1e5d2f20b135341b66662ccf47bacb880ce", "address": "Admlc1WtfTi2ygjoS-_zNHiWSrTUcE3EoA", "index": 3 }, { "pubKey": "3a0d1e5f9aec94c91acb9432f2fa993bea017b38ca95da6d3a975b99f1aead4e300adc8622d9ea3fe262653915b944d3190e8790d722568286e08908351f4733", "address": "AVXND9zP2cX2RABbMiTj0ON5jmKBTHYvCw", "index": 4 } ], msg: 'success' } <<< error { code: 5000, msg: '系統異常' } ~~~ ** 接口返回數據里"code"為0表示正常,data為公鑰地址對數組,"pubkey"為公鑰,"address"為公鑰對應的地址,"index"為賬戶索引 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | data | array | 公鑰地址對數組 | | pubkey | string | 公鑰 | | address | string | 地址 | | index | integer | 地址索引 | ### 12. 根據對方公鑰加密 接口名稱:/api/v2/ecies_encrypt_by_address 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:指定由參數所指定地址對應的私鑰對明文加密加密數據,返回加密數據(base64編碼), 此接口可用于提貨信息的加密, 自己和擁有公鑰雙方都可以對加密串解密. **請求參數** ~~~ { "address":"AZSqDujzrpq--uXcD5dJgpDFWzYqmbV4rQ", "to_pubkey": "cabb8a3a73ea4a03d025a6ac2ebbbb19a545e4fb10e791ec9b5c942d77aa20760f64e4604cdfbec665435a382a8c9bfd560c6f0fca8a2708cda302f658368b36", "plain_text":"'{reply:"ok", orderNo: "238812132423"}'", } ~~~ ~~~[api:keeper] post:/api/v2/ecies_encrypt_by_address string:plain_text#待加密數據(utf8編碼) string:to_pubkey#對方的公鑰(hex編碼) string:address#服務端使用該地址對應的私鑰進行加密 <<< success { "code": 0, "data": { "encrypted_base64_str": "UJNCe6+ewXCTNuQC9KOAnQR5GtrgTppdZYkpd8nTcgdZDdsqwnnmcPkl17aap+G/nmFRRK+5xQ8kNh5v2OAnvpymwaRP/TrzvN/8xo+a0HmKBLr9Z2aNfUd989RSidMJ2hQT6nivV8iMXzCyGDbnLcy0iVwAJ0aEPMQvCKynadZWC6YCq8MsncJeM0GSN+o3zkM5BvYQtbA33ZuHMFlCXvzCyRPZCrMin/qCOhz2HdxFYwWslh+eafIQMhyu6YAr4gzC+O+SgE7aDQAZUpI4107b7Tt3gclFw12ztDDeiD1bgA==" } } <<< error { code: 5000, msg: '系統異常' } ~~~ ** 接口返回數據里"encrypted_base64_str"即為加密成功后的數據 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | encrypted_base64_str | string | 加密數據 | ### 13. 根據已加密信息加密 接口名稱:/api/v2/ecies_encrypt_by_address_reply 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:根據已經加密信息包含的上下文信息進行加,返回加密數據(base64編碼), 此接口可用于商品發貨后, 提貨token的打回. **請求參數** ~~~ { "address":"AZSqDujzrpq--uXcD5dJgpDFWzYqmbV4rQ", "old_data":"UJNCe6+ewXCTNuQC9KOAnQR5GtrgTppdZYkpd8nTcgdZDdsqwnnmcPkl17aap+G/nmFRRK+5xQ8kNh5v2OAnvpymwaRP/TrzvN/8xo+a0HmKBLr9Z2aNfUd989RSidMJ2hQT6nivV8iMXzCyGDbnLcy0iVwAJ0aEPMQvCKynadZWC6YCq8MsncJeM0GSN+o3zkM2dZw1NWruOFrCSqcVE5gpsRgp6axPLVt1jaeYRQqLKcXIQK/8VWleldytDV2MkknKxwtUqqD1PW4a6aYW0+yq/F2RXHIcgsjtqO58Wa3ptjJ5sQu90cK+tfNhL8DeVc77lSeD7DXYvnkNg0OrdbdtNb0vmdqTskMWaGWR3k0h2Q==", "plain_text":"'{reply:"ok", orderNo: "238812132423"}'", } ~~~ ~~~[api:keeper] post:/api/v2/ecies_encrypt_by_address_reply string:plain_text#待加密數據(utf8編碼) string:old_data#原加密數據(base64編碼) string:address#服務端使用該地址對應的私鑰進行加密 <<< success { "code": 0, "data": { "encrypted_base64_str": "UJNCe6+ewXCTNuQC9KOAnQR5GtrgTppdZYkpd8nTcgdZDdsqwnnmcPkl17aap+G/nmFRRK+5xQ8kNh5v2OAnvpymwaRP/TrzvN/8xo+a0HmKBLr9Z2aNfUd989RSidMJ2hQT6nivV8iMXzCyGDbnLcy0iVwAJ0aEPMQvCKynadZWC6YCq8MsncJeM0GSN+o3zkM5BvYQtbA33ZuHMFlCXvzCyRPZCrMin/qCOhz2HdxFYwWslh+eafIQMhyu6YAr4gzC+O+SgE7aDQAZUpI4107b7Tt3gclFw12ztDDeiD1bgA==" } } <<< error { code: 5000, msg: '系統異常' } ~~~ ** 接口返回數據里"encrypted_base64_str"即為加密成功后的數據 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | encrypted_base64_str | string | 加密數據 | ### 14. 解密 接口名稱:/api/v2/ecies_decrypt_by_address 請求方法:POST 響應類型:JSON 請求數據類型: application/json 狀態:有效 接口描述:指定由參數所指定地址對應的私鑰對加密數據進行解密,返回解密密數據(utf8編碼) **請求參數** ~~~ { "address":"AZSqDujzrpq--uXcD5dJgpDFWzYqmbV4rQ", "encrypted_str":"UJNCe6+ewXCTNuQC9KOAnQR5GtrgTppdZYkpd8nTcgdZDdsqwnnmcPkl17aap+G/nmFRRK+5xQ8kNh5v2OAnvpymwaRP/TrzvN/8xo+a0HmKBLr9Z2aNfUd989RSidMJ2hQT6nivV8iMXzCyGDbnLcy0iVwAJ0aEPMQvCKynadZWC6YCq8MsncJeM0GSN+o3zkM2dZw1NWruOFrCSqcVE5gpsRgp6axPLVt1jaeYRQqLKcXIQK/8VWleldytDV2MkknKxwtUqqD1PW4a6aYW0+yq/F2RXHIcgsjtqO58Wa3ptjJ5sQu90cK+tfNhL8DeVc77lSeD7DXYvnkNg0OrdbdtNb0vmdqTskMWaGWR3k0h2Q==", } ~~~ ~~~[api:keeper] post:/api/v2/ecies_decrypt_by_address string:encrypted_str#原加密數據(base64編碼) string:address#服務端使用該地址對應的私鑰進行解密 <<< success { "code": 0, "data": { "decrypted_utf8_str": "{foo:\"aaaaaaaaaaaaaaa\",baz:10000, address: \"北京朝陽區望京西路15號樓7單元203\"}" } } <<< error { code: 5000, msg: '系統異常' } ~~~ ** 接口返回數據里"decrypted_utf8_str"即為解密成功后的數據 ** **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | decrypted_utf8_str | string | 解密數據 | ## shuttle接口封裝 **封裝提貨、轉賬、發貨、退貨創建交易事務, keeper簽名, 上鏈的接口調用** ### 1. 轉賬 <span id="api00"></span> 接口名稱:/api/v2/tx/transfer_by_address 請求方法:POST 響應類型:JSON 狀態:有效 接口描述: 構建轉賬事務并上鏈 **請求參數** ~~~ { token_key:VCT1000 from:AcLO3hwkncntl9tTsO1-xUzEeP8SP-hYQw to: AXhfvSAiXjSZaOqBC221BmeLGHbLLtwL5g value:"1" metadata:keeper transfer a token to_pub_key:14c5fe881149bb3c79fe7012670a1106ed7e5d3745dcbea7e6687e25e38408ea0f451096bf99fe13006e7c56ad218e6e7fc20c20d2cc93ed6efeaf2d6090ff4c } ~~~ ~~~[api:keeper] post:/api/v2/tx/transfer_by_address *string:token_key#商品token *string:from#token轉賬發起人 *string:to#token轉賬接收人 *string:value#token轉賬數量 string:metadata#交易meta信息 string:to_pub_key#加密meta所有的公鑰, 該公鑰需要和目標地址對應,否則轉賬接收者不能解密meta數據. 該參數為空,則meta信息不加密 <<< success { "code": 0, "data": { "requestId": "5ce535a78329f30018da6bc6" }, "msg": "create task success, the status of task will be notify" } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | requestId | string | 上鏈事務管理id | ### 2. 提貨 <span id="api00"></span> 接口名稱:/api/v2/tx/exchange_by_address 請求方法:POST 響應類型:JSON 狀態:有效 接口描述: 構建提貨事務并上鏈 **請求參數** ~~~ { token_key:VCT1000 from:AcLO3hwkncntl9tTsO1-xUzEeP8SP-hYQw value:"1" metadata:{"out\_pickup\_no":"","consignee":"張三","cellphone":"13912345678","address":\["北京市","四環到五環之間","朝陽區","望京地區","望京SOHO T1 C座1915室"\],"zipcode":"100001"} } ~~~ ~~~[api:keeper] post:/api/v2/tx/exchange_by_address *string:token_key#商品token *string:from#token提貨發起人 *string:value#token提貨數量 *string:metadata#提貨地址信息 <<< success { "code": 0, "data": { "requestId": "5ce535a78329f30018da6bc6" }, "msg": "create task success, the status of task will be notify" } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | requestId | string | 上鏈事務管理id | ### 3. 發貨 <span id="api00"></span> 接口名稱:/api/v2/tx/deliver_by_address 請求方法:POST 響應類型:JSON 狀態:有效 接口描述: 構建發貨事務并上鏈 **請求參數** ~~~ { token_key:VCT1000 from:AcLO3hwkncntl9tTsO1-xUzEeP8SP-hYQw to: AXhfvSAiXjSZaOqBC221BmeLGHbLLtwL5g value:"1" metadata:keeper deliver a token to_pub_key:14c5fe881149bb3c79fe7012670a1106ed7e5d3745dcbea7e6687e25e38408ea0f451096bf99fe13006e7c56ad218e6e7fc20c20d2cc93ed6efeaf2d6090ff4c, split: 'false' } ~~~ ~~~[api:keeper] post:/api/v2/tx/deliver_by_address *string:token_key#商品token *string:from#token發貨發起人 *string:to#token發貨接收人 *string:value#token發貨數量 *string:split#是否生成新的token, 取值'true' 或者 'false' string:metadata#交易meta信息 string:to_pub_key#加密meta所有的公鑰, 該公鑰需要和目標地址對應,否則發貨接收者不能解密meta數據. 該參數為空,則meta信息不加密 <<< success { "code": 0, "data": { "requestId": "5ce535a78329f30018da6bc6" }, "msg": "create task success, the status of task will be notify" } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | requestId | string | 上鏈事務管理id | ### 4. 申請退貨 <span id="api00"></span> 接口名稱:/api/v2/tx/refunding_by_address 請求方法:POST 響應類型:JSON 狀態:有效 接口描述: 構建客戶申請退貨事務并上鏈 **請求參數** ~~~ { token_key:VCT1000 from:AcLO3hwkncntl9tTsO1-xUzEeP8SP-hYQw to: AXhfvSAiXjSZaOqBC221BmeLGHbLLtwL5g value:"1" metadata:keeper deliver a token to_pub_key:14c5fe881149bb3c79fe7012670a1106ed7e5d3745dcbea7e6687e25e38408ea0f451096bf99fe13006e7c56ad218e6e7fc20c20d2cc93ed6efeaf2d6090ff4c } ~~~ ~~~[api:keeper] post:/api/v2/tx/refunding_by_address *string:token_key#商品token *string:from#token申請退貨發起人 *string:value#token申請退貨數量 string:metadata#交易meta信息 <<< success { "code": 0, "data": { "requestId": "5ce535a78329f30018da6bc6" }, "msg": "create task success, the status of task will be notify" } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | requestId | string | 上鏈事務管理id | ### 5. 退貨 <span id="api00"></span> 接口名稱:/api/v2/tx/refund_by_address 請求方法:POST 響應類型:JSON 狀態:有效 接口描述: 構建退貨事務并上鏈 **請求參數** ~~~ { token_key:VCT1000 from:AcLO3hwkncntl9tTsO1-xUzEeP8SP-hYQw to: AXhfvSAiXjSZaOqBC221BmeLGHbLLtwL5g value:1 metadata:keeper deliver a token to_pub_key:14c5fe881149bb3c79fe7012670a1106ed7e5d3745dcbea7e6687e25e38408ea0f451096bf99fe13006e7c56ad218e6e7fc20c20d2cc93ed6efeaf2d6090ff4c } ~~~ ~~~[api:keeper] post:/api/v2/tx/refund_by_address *string:token_key#商品token *string:from#token退貨發起人 *string:to#token退貨接收人 *string:value#token退貨數量 string:metadata#交易meta信息 string:to_pub_key#加密meta所有的公鑰, 該公鑰需要和目標地址對應,否則退貨接收者不能解密meta數據. 該參數為空,則meta信息不加密 <<< success { "code": 0, "data": { "requestId": "5ce535a78329f30018da6bc6" }, "msg": "create task success, the status of task will be notify" } ~~~ **返回值** | 參數名 | 參數類型 | 描述 | | --- | --- | --- | | requestId | string | 上鏈事務管理id | ## 接口錯誤碼匯總 ``` 4000: 接口請求參數錯誤 4100: keeper簽名服務已關閉 4200: keeper簽名地址不合法 4300: keeper簽名公鑰不合法 4400: keeper更新黑名單失敗 4500: keeper更新白名單失敗 4600: keeper使用錯誤種子生成批量生成地址 5000: 接口調用異常 ``` ## 接口使用示例 **獲取密鑰種子 seed** 該部署完成后,該接口只需要調用一次,一旦用該 seed 生成了地址后,除非恢復,后續將不能再修改,請妥善保存seed。 *使用我們提供的測試環境則不需要再調用了* ``` # curl http://127.0.0.1:8003/api/v2/generate_seed # { "code": 0, "data": { "mnemonic": "supply disagree case say pipe unit use raw test faith mistake hole", "seed": "05e8585bb7d5f6a3a7059c17c6213a980a34619edfe46b858553556e2c79041e8a30f8e1abd23ed27b7b60f0c34b1575cab254c67b8e9d9fcbf9439c1516e59a" } } ``` **批量生成密鑰對** ``` # curl -H "Content-Type: application/json" -X POST --data '{"seed":"6f21c9239acc5d127d9159d06bbfc656f6eba20bd3fb658105fba456f9eef4d4907e452bdc79b9f3fd0781a8375707f76270380788151866691604015e891151", "amount" : 1}' http://127.0.0.1:8003/api/v2/generate_keys ``` **返回公鑰地址對, 這里生成的公鑰對都是未分配的** ``` # {"code":0,"data":\[{"pubKey":"06032117d1367819cf010cdba9efd2f57c7f223c6e1fc5489e0e8cc8d547b25756ae03ca816fa9b8269f61f07915fa49b45c3f4577d8f71323f078212d4d4e61","address":"AYZe38fxK7bUivWOrBbGKb0EAraGP1I17A","index":38}\],"msg":"success"} ``` **申請一個未使用的地址** ``` # curl http://127.0.0.1:8003//api/v2/get_unused_key ``` **返回一個地址,系統內部標示其為已使用** ``` # {"code":0,"data":{"pubKey":"799f5e6ed68f90d7131ae7e82fde680cde039e705be88e34ee91b6c22974e1cb6d30ffc4d0c91657e0f530e86582935678c0f8111970a9818019b88c8343833e","address":"AWKgbWiyhRIh09PZ6-OBv46nJDEE6tTyOA","index":0}} ``` **使用公鑰簽名** ``` #curl -H "Content-Type: application/json" -X POST --data '{"hash":"D36BF29D562CF53F92727A8608C054D26F122611D9DF06EC923C6F7868813CC3", "pub_key" : "06032117d1367819cf010cdba9efd2f57c7f223c6e1fc5489e0e8cc8d547b25756ae03ca816fa9b8269f61f07915fa49b45c3f4577d8f71323f078212d4d4e61"}' http://127.0.0.1:8003//api/v2/sign_by_key ``` **簽名后返回數據** ``` # {"code":0,"data":{"signed\_hash":"EC:01,06032117d1367819cf010cdba9efd2f57c7f223c6e1fc5489e0e8cc8d547b25756ae03ca816fa9b8269f61f07915fa49b45c3f4577d8f71323f078212d4d4e61,6dae86c6fe20af788167a53da6a0475542e65ed7362269e8d7ba7a96d235a13b2eeee041ca7d6d641714b99d67af036090b6871a4a165bcad1ca165ee461d0df:"}} ``` ## Docker 容器 Keeper 服務需要部署在應用系統的服務器環境,我們提供 Keeper Docker 容器鏡像。用戶可在自己的服務器環境中啟動一個 Keeper 容器,用戶直接請求容器,Keeper 容器將提供如上的接口功能。 **如何啟動一個 Keeper docker 容器(地址/私鑰保存在docker容器對應外部存儲中)** ``` docker run --name keeper -p 8003:8003 -d -v /opt/data:/var/lib/mysql -e PORT=8003 -e EGG_SERVER_ENV=test -e SHUTTLE_APIKEY=5a72327aafbb45fe9917938e1a9f1c4b -e SHUTTLE_SECKEY=3e2d7169f946458b92febf3140327014 -e SHUTTLE_BASE=https://shuttle.stringon.com -e MATRIX_BASE=https://matrix.stringon.com -e MYSQL_ROOT_PASSWORD=mypassword stringon/keeper:1.0.26 /apps/apj/setup.sh ``` **如何啟動一個 Keeper docker 容器(地址/私鑰不保存在docker容器)** ``` docker run --name keeper -p 8003:8003 -d -e PORT=8003 -e EGG_SERVER_ENV=test -e SHUTTLE_APIKEY=5a72327aafbb45fe9917938e1a9f1c4b -e SHUTTLE_SECKEY=3e2d7169f946458b92febf3140327014 -e SHUTTLE_BASE=https://shuttle.stringon.com -e MATRIX_BASE=https://matrix.stringon.com -e MYSQL_ROOT_PASSWORD=mypassword stringon/keeper:2.0.7 /apps/apj/setup.sh ``` - env:環境,test-測試環境,prod-生產環境 - /opt/data:數據保存目錄(該目錄自行指定) - SHUTTLE_BASE: shuttle訪問url - SHUTTLE_APIKEY, SHUTTLE_SECKEY對應在matrix上申請 - MATRIX_BASE: matrix訪問url
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看