dmc.js
DMC 區塊鏈的通用庫。
請使用 DMC 進行操作,見 安裝
Basic
在區塊鏈中對用戶賬戶信息操作的各種方法
獲取客戶端實例
以鏈接到測試網為例
1 | var DMC = require("dmc.js"); |
get_account
返回一個對象,其中包含有關區塊鏈上特定帳戶的各種詳細信息。
1 | dmc_client.rpc.get_account_sync(account_name) |
參數
參數名 | 類型 | 描述 |
---|---|---|
account_name | string | 賬戶名 |
示例
1 | var getAccount = dmc_client.rpc.get_account_sync("testnetbppa1"); |
返回值
1 | { |
get_info
獲取區塊信息
1 | dmc_client.rpc.get_info_sync(); |
示例
1 | var getInfo = dmc_client.get_info_sync(); |
返回值
1 | { |
返回值參數說明
參數 | 類型 | 說明 |
---|---|---|
server_version | string | 服務端版本 |
chain_id | string | 區塊鏈的鏈地址 |
head_block_num | number | 當前區塊高度 |
last_irreversible_block_num | number | 不可逆區塊高度 |
last_irreversible_block_id | string | 不可逆區塊地址 |
head_block_id | string | 當前區塊地址 |
head_block_time | date | 當前區塊時間 |
head_block_producer | string | 當前區塊進程 |
virtual_block_cpu_limit | number | 虛擬區塊 cpu 限制 |
virtual_block_net_limit | number | 虛擬區塊網絡限制 |
block_cpu_limit | number | 區塊 cpu 限制 |
block_net_limit | number | 區塊網絡限制 |
server_version_string | string | 服務端版本字符串 |
fork_db_head_block_num | number | fork 數據庫區塊高度 |
fork_db_head_block_id | string | fork 數據庫區塊地址 |
server_full_version_string | string | 服務端完整版本字符串 |
earliest_available_block_num | number | 最早可用區塊高度 |
last_irreversible_block_time | date | 不可逆區塊時間 |
get_code
返回一個包含指定合約wasm的對象
1 | dmc_client.rpc.get_code_sync(account_name, code_as_wasm); |
參數
參數 | 類型 | 說明 |
---|---|---|
account_name | string | 合約名 |
code_as_wasm | boolean | true/false |
示例
1 | var getCode = dmc_client.rpc.get_code_sync("dmc.token",true); |
返回值
1 | { |
get_abi
獲取賬戶的abi數據
1 | dmc_client.rpc.get_abi_sync(account_name); |
參數
參數 | 類型 | 說明 |
---|---|---|
account_name | string | 賬號名 |
示例
1 | var getAbi = dmc_client.rpc.get_abi_sync("dmc"); |
返回值
1 | { |
get_block
獲取塊信息
1 | dmc_client.rpc.get_block_sync(block_num_or_id); |
參數
參數 | 類型 | 描述 |
---|---|---|
block_num_or_id | int | 塊的編號或者id值 |
示例
1 | var getBlock = dmc_client.rpc.get_block_sync(5); |
返回值
1 | { |
get_table_rows
返回指定表中的數據
1 | dmc_client.rpc.getTableRows(code, table,scope, index_position,key_type, encode_type, lower_bound, upper_bound, limit, reverse, show_payer); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
code | string | 是 | 合約名 |
table | string | 是 | 表名 |
scope | string | 是 | DMC 賬戶名 |
index_position | string | 否 | 使用的索引位置 |
key_type | string | 否 | 由index_position指定的鍵類型 |
encode_type | string | 否 | 編碼類型 |
lower_bound | string | 否 | 最低界限 |
upper_bound | string | 否 | 最高界限 |
limit | integer | 否 | 返回結果數量 |
reverse | boolean | 否 | 是否將結果倒置 |
show_payer | boolean | 否 | 是否展示RAM支付人 |
示例
1 | var getTableRows = dmc_client.rpc.get_table_rows_sync({ |
返回值
1 | { |
ecc 模塊
橢圓曲線加密函數, 內置多個方法用來生成我們需要的秘鑰
randomKey()
生成隨機私鑰
1 | DMC.ecc.randomKey_sync(cpuEntropyBits?, options); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
cpuEntropyBits | number | 否 | cpu熵位 |
options | object | 否 | 配置項 |
返回值
返回一個隨機私鑰
示例
1 | var randomKey = DMC.ecc.randomKey_sync(undefined, { secureEnv: true }) |
privateToPublic()
通過私鑰信息來計算公鑰信息
1 | DMC.ecc.privateToPublic(key,pubkey_prefix?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
key | string | 是 | 私鑰 |
pubkey_prefix | string | 否 | 公鑰前綴 |
返回值
返回公鑰
示例
1 | var publicKey = DMC.ecc.privateToPublic("5JJznTGghwYBCJoW6EcpzZfybKEDqFULMniatBp9aykeauP55bB"); |
isValidPublic()
判斷公鑰是否有效
1 | DMC.ecc.isValidPublic(pubkey,pubkey_prefix?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
pubkey | string | 是 | 公鑰 |
pubkey_prefix | string | 否 | 公鑰前綴 |
返回值
判斷公鑰是否有效
示例
1 | var isValidPublic = DMC.ecc.isValidPublic("DM75N93rrsoBzEzrdZePZtkDUQsXiTWX51irsSBBukxB6Jg4nrua"); |
isValidPrivate()
判斷私鑰是否有效
1 | DMC.ecc.isValidPrivate(wif); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
wif | string | 是 | 私鑰 |
返回值
判斷私鑰是否有效
示例
1 | var isValidPrivate = DMC.ecc.isValidPrivate("5JJznTGghwYBCJoW6EcpzZfybKEDqFULMniatBp9aykeauP55bB"); |
sign()
使用 data 信息或 hash 來創建簽名
1 | DMC.ecc.sign(data,privateKey,encoding?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
data | string | 是 | 數據 |
PrivateKey | string | 是 | 私鑰 |
encoding | string | 否 | 數據編碼 |
返回值
字符串簽名
示例
1 | var sign = DMC.ecc.sign("i am alive","5JJznTGghwYBCJoW6EcpzZfybKEDqFULMniatBp9aykeauP55bB"); |
signHash()
使用進行 hash 加密的 data 信息和私鑰來創建簽名
1 | DMC.ecc.signHash(dataSha256, privateKey, encoding?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
dataSha256 | string | 是 | sha256 hash 32 字節緩衝區或字符串 |
PrivateKey | string | 是 | 私鑰 |
encoding | string | 否 | dataSha256 編碼(如果是字符串) |
返回值
帶有 hash 加密的字符串簽名
示例
1 | var dataSha256 = ecc.sha256("i am alive") |
verify()
驗證簽名數據
1 | DMC.ecc.verify(signature,data,pubkey,encoding?,hashData?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
signature | string | 是 | 簽名 |
data | string | 是 | 數據 |
pubkey | string | 是 | 公鑰 |
encoding | string | 否 | 數據編碼 |
hashData | boolean | 否 | 是否對數據進行 hash 加密 |
返回值
判斷簽名數據是否成立
示例
1 | var verify = DMC.ecc.verify("SIG_K1_Kb64YDjawgAV8fbJaJXpyjwwFVTAp8tBjzq8zMZKmw4SUrRnWsLiSxcfHfbWp1XFikuBuC7gV71MCoCZm4xfoGLCC7KkGJ","i am alive","DM75N93rrsoBzEzrdZePZtkDUQsXiTWX51irsSBBukxB6Jg4nrua"); |
recover()
恢復用於創建簽名的公鑰
1 | DMC.ecc.recover(signature, data,encoding?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
signature | string | 是 | 簽名 |
data | string | 是 | 數據 |
encoding | string | 否 | 數據編碼 |
返回值
返回公鑰
示例
1 | var recover = DMC.ecc.recover("SIG_K1_Kb64YDjawgAV8fbJaJXpyjwwFVTAp8tBjzq8zMZKmw4SUrRnWsLiSxcfHfbWp1XFikuBuC7gV71MCoCZm4xfoGLCC7KkGJ","i am alive") |
recoverHash()
恢復用於創建 hash 簽名的公鑰
1 | DMC.ecc.recoverHash(signature,dataSha256,encoding); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
signature | string | 是 | 簽名 |
dataSha256 | string | 是 | sha256 hash 32 字節緩衝區或字符串 |
encoding | string | 否 | dataSha256 編碼(如果是字符串) |
返回值
返回一個公鑰
示例
1 | var dataSha256 = ecc.sha256("i am alive") |
sha256()
sha256 加密
1 | DMC.ecc.sha256(data,resultEncoding?,encoding?); |
參數
參數名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
data | string | 是 | 二進制數據,需要 Buffer.from(data,’hex’) |
resultEncoding | string | 否 | 結果編碼成 ‘hex’,’binary’ 或 ‘base64’(可選,默認'hex' ) |
encoding | string | 否 | data 編碼(如果是字符串)(可選,默認'hex' ) |
返回值
使用 hash.sha256 加密後的數據
示例
1 | var dataSha256 = DMC.ecc.sha256("i am alive") |