DCore API接口说明

在这里插入图片描述

DCore API接口说明

本篇文档会向DCore的开发者或集成者介绍DCore的应用程序接口(API)。

访问以下链接,您可以浏览所有的API接口。

API接口架构

根据API接口来源,主要划分为两种。

  • Daemon API - 调用此接口需连接到运行中的Daemon(守护者进程)(decentd)。
  • Wallet API - 钱包API接口 – 调用此接口需连接到运行中的CLI命令行钱包。

守护者进程API接口分为以下接口组件:

  • 登录 - 包含login和enable_api组件。这是唯一不需要提前调用enable_api就可以使用的API接口组件(连同database API一起)。其他所有的接口组件都需要通过提前调用enable_api,才能够调用并获取接口id。id的作用是调用特殊组件中所有的API接口。接下来的API调用事例中会详细解释该操作。
  • 数据库 - 包含可从全节点数据库接收信息的API接口,例如交易目标、交易、区块、账户、财产等信息。
  • 交易历史 - 包含提供交易历史的API接口。
  • 网络广播 - 包括广播至全网的API接口。
  • 网络节点 - 包含获取或变更点对点网络设置的API接口。
  • 加密 - 包含签名和进行验证的API接口。
  • 消息传送 - 包含发送和接收消息的API接口。
    钱包API接口不包含API接口组件。
通讯协议

用于API接口调用的通讯协议是HTTP和Websocket。两者的主要差异是HTTP协议不会保持会话状态,所以我们只能调用守护者进程 (Daemon API)内的数据库 (database)API接口组件中的一个。钱包API组件 (Wallet API)既可以通过Websocket调用,也可以通过HTTP调用,因为运行中的CLI钱包程序可以为每一次连接保留会话数据。

我们首先会展示一些使用Websocket协议的实例,之后会展示使用HTTP协议的实例。

使用Websocket协议的先决条件

以下指南为API接口组件的测试环境提供了简易的安装程序。

为了通过Websocket协议调用daemon或钱包API接口,您需要:
• 运行decentd (decentd也被称为daemon)
• 运行适合Websocket协议连接的CLI钱包(仅限钱包API接口)
• 安装wscat应用程序

该测试环境在Linux,MacOS和Windows操作系统上均可安装。关于如何运行decentd和CLI钱包的说明请访问: https://docs.decent.ch/API/#calling_dcore_daemon_api_via_websocket

安装wscat:

npm install -g wscat

提示
如果尚未安装NPM,您可以从Node.js webpage下载

通过Websocket 调用 DCore守护者进程API接口

运行守护者进程API接口的测试环境
执行decentd开启DCore守护者进程

./decentd

连接Websocket协议至DCore daemon:

wscat -c ws://127.0.0.1:8090
登录API接口

为从任意应用API组件中成功调用所有API接口,请首先调用登录API接口(可在登录组件当中找到),此接口会默认被激活。

注意
• 不是所有的API接口组件都能够在每个实例中激活(为安全起见,网络节点(network_node)只能在daemon中被激活,并可以配置连接到API接口组件)。
• 其他在上面表单当中提到的API接口组件可以进行任意连接。

API组件调用JSON架构

  • id - call_id(API接口调用的识别码,可对需求进行匹配)

  • method - call - 调用API接口的命令

  • params- [ apiset_id,api_name,[ list_of_params]]

  • 第一个参数 apiset_id为API接口组件的账户

  • 第二个参数 api_name为需要调用的API接口的名称

  • 第三个参数[ list_of_params]是特殊API接口的参数列表,任意参数也可以成为一个独立数值列表,如此一来,列表就被嵌套在括号当中。

调用 - login api:

{"id":1,"method":"call","params":[1,"login",["",""]]}

回应:

{"id":1,"result":true}

说明
通过把 apiset_id 设为1调用 login API 组件 。这个数值被定义为默认值,并且为恒定值。

登录API接口的开发者文档

激活特殊API接口组件

若要激活特殊API接口组件需要调用enable_api。此API接口来自登录API接口组件,并且此接口默认为可获得。

调用 - 激活数据库API接口组件:

{"id":1,"method":"call","params":[1,"database",[]]}

回应:

{"id":1,"result":2}

若可连接API接口组件,组件的成员名称,也就是id,会以名称结果的数值返回(之前的事例当中,名称结果的数值为2)。目前,此id适用于任意数据库API接口的所有调用(作为apiset_idparams中的第一个参数)。请注意,此id可以区分于所有的连接(取决于激活API接口组件的命令)。

通知
还有另外一种可能,能够在不需要调用登录API接口就能够直达数据库API接口组件。为此,可以使用 call login example 的调用框架并且作出以下变更:
apiset_id数值更换为0
apiset_name的数值更换为database

数据库API接口的开发者文档

激活API接口组件调用API接口
我们假设,选中的API接口是获取账户余额(get_account_balances)的接口,我们想要通过id=1.2.21的账户看到其中的余额。由于此API接口属于数据库API接口组件,我们已经有了接口组件,也就是id = 2,所以正确的调用方式为:

调用 - (get_account_balances) api:

{"id":1,"method":"call","params":[2,"get_account_balances",["1.2.21",[]]]}

回应:

{"id":1,"result":[{"amount":"15400490000","asset_id":"1.3.0"}]}

获取账户余额API接口的开发者文档

另外一个通过组件调用API的例子为:从交易历史API接口组件中的获取账户历史(get_account_history)

调用 - 激活交易历史API接口组件:

{"id":1,"method":"call","params":[1,"history",[]]}

回应:

{"id":1,"result":3}

请注意:
所有API接口组件的激活只需调用一次

历史API接口的开发者文档档

成员名称结果的返回数值被用于获取账户历史(get_account_history)调用的API接口组件id。例如,我们通过调用id = 1.2.21查看账户的最后两笔历史记录。

调用 - 获取账户历史(get_account_history)api:

{"id":1,"method":"call","params":[3,"get_account_history",["1.2.21","1.7.1",2,"1.7.1212121"]]}

回应(历史记录表单):

{
  "id": 1,
  "result": [
    {
      "id": "1.7.38270",
      "op": [
        1,
        {
          "fee": {
            "amount": 500000,
            "asset_id": "1.3.0"
          },
          "registrar": "1.2.21",
          "name": "myaccount",
          "owner": {
            "weight_threshold": 1,
            "account_auths": [
            ],
            "key_auths": [
              [
                "DCT66RkRV5vpanRc7iAXdFyAMwFTbmLHCUe9eBB6aQjaHkrTZfBHL",
                1
              ]
            ]
          },
          "active": {
            "weight_threshold": 1,
            "account_auths": [
            ],
            "key_auths": [
              [
                "DCT66RkRV5vpanRc7iAXdFyAMwFTbmLHCUe9eBB6aQjaHkrTZfBHL",
                1
              ]
            ]
          },
          "options": {
            "memo_key": "DCT66RkRV5vpanRc7iAXdFyAMwFTbmLHCUe9eBB6aQjaHkrTZfBHL",
            "voting_account": "1.2.3",
            "num_miner": 0,
            "votes": [
            ],
            "extensions": [
            ],
            "allow_subscription": false,
            "price_per_subscribe": {
              "amount": 0,
              "asset_id": "1.3.0"
            },
            "subscription_period": 0
          },
          "extensions": {
          }
        }
      ],
      "result": [
        1,
        "1.2.4143"
      ],
      "block_num": 702030,
      "trx_in_block": 0,
      "op_in_trx": 0,
      "virtual_op": 37303
    },
    {
      "id": "1.7.37253",
      "op": [
        1,
        {
          "fee": {
            "amount": 500000,
            "asset_id": "1.3.0"
          },
          "registrar": "1.2.21",
          "name": "myaccount",
            "owner": {
            "weight_threshold": 1,
            "account_auths": [
            ],
            "key_auths": [
              [
                "DCT66RkRV5vpanRc7iAXdFyAMwFTbmLHCUe9eBB6aQjaHkrTZfBHL",
                1
              ]
            ]
          },
          "active": {
            "weight_threshold": 1,
            "account_auths": [
            ],
            "key_auths": [
            [
                "DCT66RkRV5vpanRc7iAXdFyAMwFTbmLHCUe9eBB6aQjaHkrTZfBHL",
                1
              ]
            ]
          },
          "options": {
            "memo_key": "DCT66RkRV5vpanRc7iAXdFyAMwFTbmLHCUe9eBB6aQjaHkrTZfBHL",
            "voting_account": "1.2.3",
            "num_miner": 0,
            "votes": [
            ],
            "extensions": [
            ],
            "allow_subscription": false,
            "price_per_subscribe": {
              "amount": 0,
              "asset_id": "1.3.0"
            },
            "subscription_period": 0
          },
          "extensions": {
          }
        }
      ],
      "result": [
        1,
        "1.2.4142"
      ],
      "block_num": 701189,
      "trx_in_block": 0,
      "op_in_trx": 0,
      "virtual_op": 37286
    }
  ]
}

获取账户历史API接口的开发者文档(https://docs.decent.ch/developer/group___history_a_p_i.html#ga2bfce814ce4adde1c30e63662f3fa18c

通过Websocket调用钱包API接口

为钱包运行测试环境
执行decentd开启DCore daemon

./decentd

在默认端口运行适用于Websocket连接的CLI钱包

cli_wallet -r
wscat -c ws://127.0.0.1:8091

将Websocket协议连接至CLI钱包

wscat -c ws://127.0.0.1:8091
调用钱包API接口

根据特殊API接口详细说明,通过设置数值 - method params调用应用程序接口。请注意,params数值是括号当中params的列表数值。 id数值可以为任意值,用于匹配调用及其返回的数值。

调用格式:

{
  "jsonrpc": "2.0",
  "id": "call_id",
  "method": "api_name",
  "params": ["param_1", "param_2", "...", "param_N"]
}

这其中的参数为:
id - 任意识别API接口调用的数字都会出现在JSON回应中。
- method - 被调用API接口的全名。
params - 是特殊API接口的参数列表,任意参数也可以成为一个独立数值列表,这样,列表就被嵌套在括号当中。

钱包API接口的开发者文档

举例说明, unlock API接口在文档中被定义为:

public void unlock(string password)

因此,Websocket 调用定义为:
调用 - unlock api:

{"jsonrpc":"2.0","id":1,"method":"unlock","params":["myUnlockPwd"]}

回应:

{"id":1,"result":null}

Unlock API接口的开发者文档

另一个实例为获取账户(get_account)
调用 - (get_account) api:

{"jsonrpc":"2.0","id":1,"method":"get_account","params":["1.2.21"]}

回应:

{
  "id": 1,
  "result": {
    "id": "1.2.21",
    "registrar": "1.2.20",
    "name": "decent-go",
    "owner": {
      "weight_threshold": 1,
      "account_auths": [
      ],
      "key_auths": [
        [
          "DCT8gwQkHXNYgHp1kzo56oZCLdrm3qV99xN15yeE1QhBcbAYsMDZy",
          1
        ]
      ]
    },
    "active": {
      "weight_threshold": 1,
      "account_auths": [
      ],
      "key_auths": [
        [
          "DCT8gwQkHXNYgHp1kzo56oZCLdrm3qV99xN15yeE1QhBcbAYsMDZy",
          1
        ]
      ]
    },
    "options": {
      "memo_key": "DCT8gwQkHXNYgHp1kzo56oZCLdrm3qV99xN15yeE1QhBcbAYsMDZy",
      "voting_account": "1.2.3",
      "num_miner": 0,
      "votes": [
      ],
      "extensions": [
      ],
      "allow_subscription": false,
      "price_per_subscribe": {
        "amount": 0,
        "asset_id": "1.3.0"
      },
      "subscription_period": 0
    },
    "rights_to_publish": {
      "is_publishing_manager": false,
      "publishing_rights_received": [
      ],
      "publishing_rights_forwarded": [
      ]
    },
    "statistics": "2.5.21",
    "top_n_control_flags": 0
  }
}

获取账户API接口的开发者文档

通过HTTP调用DCore守护者进程API接口

运行DCore守护者进程
通过执行decentd开启DCore守护者进程

./decentd
调用数据库应用程序接口

若通过Websocket协议调用,所有应用程序接口调用都有相同的数据结构。

数据库应用程序接口的开发者文档

举例说明,我们会用一个账户 id参数 1.2.69来调用获取账户 (get_accounts)应用程序接口。

HTTP需求 - 获取账户(get_accounts)api:

curl --data '{"jsonrpc":"2.0","id":1,"method":"get_accounts","params":[["1.2.69"]]}' http://127.0.0.1:8090/rpc

回应:

{
  "id": 1,
  "result": [
    {
      "id": "1.2.69",
      "registrar": "1.2.15",
      "name": "ronald",
      "owner": {
        "weight_threshold": 1,
        "account_auths": [
        ],
        "key_auths": [
          [
            "DCT8SFcioQFYXnNHNSAEcLb5o5EovrhjPk4SMbYnag6t6VhwuvMAc",
            1
          ]
        ]
      },
      "active": {
        "weight_threshold": 1,
        "account_auths": [
        ],
        "key_auths": [
          [
            "DCT8SFcioQFYXnNHNSAEcLb5o5EovrhjPk4SMbYnag6t6VhwuvMAc",
            1
          ]
        ]
      },
      "options": {
        "memo_key": "DCT8SFcioQFYXnNHNSAEcLb5o5EovrhjPk4SMbYnag6t6VhwuvMAc",
        "voting_account": "1.2.3",
        "num_miner": 0,
        "votes": [
          "0:1",
          "0:11"
        ],
        "extensions": [
        ],
        "allow_subscription": true,
        "price_per_subscribe": {
          "amount": 100000000,
          "asset_id": "1.3.0"
        },
        "subscription_period": 7
      },
      "rights_to_publish": {
        "is_publishing_manager": false,
        "publishing_rights_received": [
        ],
        "publishing_rights_forwarded": [
        ]
      },
      "statistics": "2.5.69",
      "top_n_control_flags": 0
    }
  ]
}

获取账户应用API的开发者文档

通过HTTP调用钱包API接口

运行DCore Daemon和钱包

通过执行decentd开启DCore daemon:

./decentd

在默认端口运行适用于Websocket连接的CLI钱包:

cli_wallet -H
钱包API接口调用实例

钱包API接口调用的数据结构不论通过HTTP协议还是通过Websocket协议都是一样的。

以下为调用 unlock API接口的实例

钱包命令:

locked >>> unlock myPassword

HTTP需求 - unlock api:

curl --data '{"jsonrpc":"2.0","id":1,"method":"unlock","params":["myPassword"]}' http://127.0.0.1:8093/rpc

回复

{
  "id": 1,
  "result": null
}

解锁钱包API接口的开发者文档

一旦钱包解锁,我们就能够调用,比如一个简单的DCT交易。
钱包命令:

transfer fromAccount toAccount 1 DCT "note" true

HTTP 需求- transfer api:

curl --data '{"jsonrpc":"2.0","id":1,"method":"transfer","params":["fromAccount" "mictoAccountkey" "1" "DCT" "nate" "true"]}' http://127.0.0.1:8093/rpc

回应:

{
  "id": 1,
  "result": {
    "ref_block_num": 43971,
    "ref_block_prefix": 4115917218,
    "expiration": "2018-01-16T09:53:15",
    "operations": [
      [
        0,
        {
          "fee": {
            "amount": 500000,
            "asset_id": "1.3.0"
          },
          "from": "1.2.69",
          "to": "1.2.73",
          "amount": {
            "amount": 100000000,
            "asset_id": "1.3.0"
          },
          "memo": {
            "from": "DCT8SFcioQFYXnNHNSAEcLb5o5EovrhjPk4SMbYnag6t6VhwuvMAc",
            "to": "DCT5yt9cuR2d6UDmtQQZBckT4eNJ3u9fmmWnBfiBEgqz1PnQyzHqD",
            "nonce": "3964683768455640627",
            "message": "5ccbbb3b98a916ef7bc60c8aff06198a"
          },
          "extensions": [
          ]
        }
      ]
    ],
    "extensions": [
    ],
    "signatures": [
      "1f7e2844d458182ac9490accdda00e61c47ac416bda9502c758dae0cbb3b3603ff70d32c019c5a23bef8944be8ad7c7d2a5f8080f41159a5c483593c51973ad535"
    ]
  }
}

钱包交易API的开发者文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值