EOS小白学习(五)EOS的HTTP API

Wesley13
• 阅读 723

欢迎来到EOS小白学习系列,本系列会记录EOS学习过程中的一些操作和细节,大饼果子非C++出身,如有错误,欢迎指出

接上一篇:

EOS小白学习(四)使用http请求EOS节点

本篇将会列出EOS支持的HTTP API(chain和history),没有过多的讲解,只是小小的给了几个应用场景和调用的数据,以方便大家使用

1. chain/get_info(请求链的信息)

应用场景:

去查当前区块的业务,尤其是执行合约的时候,会附带一个reference的block,用于检查合约执行的action是否因为过期不允许上链

POST:

http://127.0.0.1:8888/v1/chain/get_info

BODY: 什么都不需要填

{}

RESPONSE:

{
    "server_version": "75635168",
    "chain_id": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
    "head_block_num": 43060,
    "last_irreversible_block_num": 43059,
    "last_irreversible_block_id": "0000a833ade6bcfaa05490c14b9e2dec3b59271001314048405a0b2b8fb35f7e",
    "head_block_id": "0000a834303d5901171d86c699f0a00a309dcf86ad28252f1b05191b3f3f509e",
    "head_block_time": "2018-07-24T06:56:29.500",
    "head_block_producer": "eosio",
    "virtual_block_cpu_limit": 200000000,
    "virtual_block_net_limit": 1048576000,
    "block_cpu_limit": 199900,
    "block_net_limit": 1048576
}

2. chain/get_block(请求block的信息)

应用场景:

除了上述执行合约的需要之外,还有比较基本的就是去查询block的信息

POST:

http://127.0.0.1:8888/v1/chain/get_block

BODY: 需要填写block的number

{
  "block_num_or_id": 19238
}

RESPONSE:

{
    "timestamp": "2018-07-22T02:55:41.000",
    "producer": "eosio",
    "confirmed": 0,
    "previous": "00004b25b6213b5de760937e2315611de3a65cdacfea4bdf757ba46730d79d06",
    "transaction_mroot": "0000000000000000000000000000000000000000000000000000000000000000",
    "action_mroot": "1738e6b70e77ce96a56982dc3eda3cc2191801e1e15854935508c91891c10385",
    "schedule_version": 0,
    "new_producers": null,
    "header_extensions": [],
    "producer_signature": "SIG_K1_Jwy7AtXzLMX6wy4DfYQhQ2vKSaA77k4RH7fCBh9cq6FMA8hzdwY5nHSSJzUbgTL8tnzRoerAzgrY3aqNPuvCMgWcreN7rz",
    "transactions": [],
    "block_extensions": [],
    "id": "00004b269841c0b8899b8c5218eaf1d5beb1881ece8f1303954cc65d944a8365",
    "block_num": 19238,
    "ref_block_prefix": 1384946569
}

3. chain/get_account(请求account的信息)

应用场景:

查看account是否存在,并且查看account的资源使用情况

POST:

http://127.0.0.1:8888/v1/chain/get_account

BODY: 需要填写account的名字

{
  "account_name":"dabingguozi"
}

RESPONSE:

{
    "account_name": "dabingguozi",
    "head_block_num": 44279,
    "head_block_time": "2018-07-24T07:06:39.000",
    "privileged": false,
    "last_code_update": "1970-01-01T00:00:00.000",
    "created": "2018-07-21T08:04:17.000",
    "core_liquid_balance": "554.0000 SYS",
    "ram_quota": 8150,
    "net_weight": 10000000,
    "cpu_weight": 10000000,
    "net_limit": {
        "used": 0,
        "available": "347781061036",
        "max": "347781061036"
    },
    "cpu_limit": {
        "used": 0,
        "available": "66333973128",
        "max": "66333973128"
    },
    "ram_usage": 2996,
    "permissions": [
        {
            "perm_name": "active",
            "parent": "owner",
            "required_auth": {
                "threshold": 1,
                "keys": [
                    {
                        "key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
                        "weight": 1
                    }
                ],
                "accounts": [],
                "waits": []
            }
        },
        {
            "perm_name": "owner",
            "parent": "",
            "required_auth": {
                "threshold": 1,
                "keys": [
                    {
                        "key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
                        "weight": 1
                    }
                ],
                "accounts": [],
                "waits": []
            }
        }
    ],
    "total_resources": {
        "owner": "dabingguozi",
        "net_weight": "1000.0000 SYS",
        "cpu_weight": "1000.0000 SYS",
        "ram_bytes": 8150
    },
    "self_delegated_bandwidth": null,
    "refund_request": null,
    "voter_info": null
}

**
4. chain/get_abi(请求合约的信息)**

应用场景:

去查看合约暴露的方法,去看合约的表名,方便合约执行,方便数据库读取

POST:

http://127.0.0.1:8888/v1/chain/get_abi

BODY: 需要填写合约用户名字

{
  "account_name":"eosio.token"
}

RESPONSE:

{
    "account_name": "eosio.token",
    "abi": {
        "version": "eosio::abi/1.0",
        "types": [
            {
                "new_type_name": "account_name",
                "type": "name"
            }
        ],
        "structs": [
            {
                "name": "transfer",
                "base": "",
                "fields": [
                    {
                        "name": "from",
                        "type": "account_name"
                    },
                    {
                        "name": "to",
                        "type": "account_name"
                    },
                    {
                        "name": "quantity",
                        "type": "asset"
                    },
                    {
                        "name": "memo",
                        "type": "string"
                    }
                ]
            },
            {
                "name": "create",
                "base": "",
                "fields": [
                    {
                        "name": "issuer",
                        "type": "account_name"
                    },
                    {
                        "name": "maximum_supply",
                        "type": "asset"
                    }
                ]
            },
            {
                "name": "issue",
                "base": "",
                "fields": [
                    {
                        "name": "to",
                        "type": "account_name"
                    },
                    {
                        "name": "quantity",
                        "type": "asset"
                    },
                    {
                        "name": "memo",
                        "type": "string"
                    }
                ]
            },
            {
                "name": "account",
                "base": "",
                "fields": [
                    {
                        "name": "balance",
                        "type": "asset"
                    }
                ]
            },
            {
                "name": "currency_stats",
                "base": "",
                "fields": [
                    {
                        "name": "supply",
                        "type": "asset"
                    },
                    {
                        "name": "max_supply",
                        "type": "asset"
                    },
                    {
                        "name": "issuer",
                        "type": "account_name"
                    }
                ]
            }
        ],
        "actions": [
            {
                "name": "transfer",
                "type": "transfer",
                "ricardian_contract": ""
            },
            {
                "name": "issue",
                "type": "issue",
                "ricardian_contract": ""
            },
            {
                "name": "create",
                "type": "create",
                "ricardian_contract": ""
            }
        ],
        "tables": [
            {
                "name": "accounts",
                "index_type": "i64",
                "key_names": [
                    "currency"
                ],
                "key_types": [
                    "uint64"
                ],
                "type": "account"
            },
            {
                "name": "stat",
                "index_type": "i64",
                "key_names": [
                    "currency"
                ],
                "key_types": [
                    "uint64"
                ],
                "type": "currency_stats"
            }
        ],
        "ricardian_clauses": [],
        "error_messages": [],
        "abi_extensions": []
    }
}

5. chain/get_table_rows(请求表的信息)

应用场景:

取出数据库数据,比如币种余额,合约代码要求存的中间状态等等

POST:

http://127.0.0.1:8888/v1/chain/get_table_rows

BODY: 其中code是合约账户,scope是合约中设定的(相当于mysql的database),table也是合约中设定的(相当于mysql的table)

{
  "code":"eosio.token",
  "scope": "dabingguozi",
  "table": "accounts",
  "json": true
}

RESPONSE:

{
    "rows": [
        {
            "balance": "554.0000 SYS"
        }
    ],
    "more": false
}

6. chain/get_currency_balance(请求余额的信息)

应用场景:

取出余额

POST:

http://127.0.0.1:8888/v1/chain/get_currency_balance

BODY: 其中code是合约账户,account是用户account

{
  "code":"eosio.token",
  "account": "dabingguozi"
}

RESPONSE:

[
    "554.0000 SYS"
]

7. history/get_transactions(请求transaction的信息)

应用场景:

合约执行流水,比如说转账流水,账户创建流水等

POST:

http://127.0.0.1:8888/v1/history/get_transaction

BODY: 需要填写transaction的id

{
  "id":"b09395d938e594b838277453cea832ddc5d57ab5e92d8763ea011df9e35d7b34"
}

RESPONSE:

{
    "id": "b09395d938e594b838277453cea832ddc5d57ab5e92d8763ea011df9e35d7b34",
    "trx": {
        "receipt": {
            "status": "executed",
            "cpu_usage_us": 2751,
            "net_usage_words": 16,
            "trx": [
                1,
                {
                    "signatures": [
                        "SIG_K1_KfYZbh4ed1qamontvHfnV5AVUFkMd5NzGxTAXqGmN96xmtUHw5YqJMkFwejRs8JbngUgdD44y8zrRszNwTKVjzZ9tJkEJW"
                    ],
                    "compression": "none",
                    "packed_context_free_data": "",
                    "packed_trx": "4bf2535b264b899b8c52000000000100a6823403ea3055000000572d3ccdcd010000000000ea305500000000a8ed3232210000000000ea305500dca79ab1e98e49a08601000000000004535953000000000000"
                }
            ]
        },
        "trx": {
            "expiration": "2018-07-22T02:56:11",
            "ref_block_num": 19238,
            "ref_block_prefix": 1384946569,
            "max_net_usage_words": 0,
            "max_cpu_usage_ms": 0,
            "delay_sec": 0,
            "context_free_actions": [],
            "actions": [
                {
                    "account": "eosio.token",
                    "name": "transfer",
                    "authorization": [
                        {
                            "actor": "eosio",
                            "permission": "active"
                        }
                    ],
                    "data": {
                        "from": "eosio",
                        "to": "dabingguozi",
                        "quantity": "10.0000 SYS",
                        "memo": ""
                    },
                    "hex_data": "0000000000ea305500dca79ab1e98e49a086010000000000045359530000000000"
                }
            ],
            "transaction_extensions": [],
            "signatures": [
                "SIG_K1_KfYZbh4ed1qamontvHfnV5AVUFkMd5NzGxTAXqGmN96xmtUHw5YqJMkFwejRs8JbngUgdD44y8zrRszNwTKVjzZ9tJkEJW"
            ],
            "context_free_data": []
        }
    },
    "block_time": "2018-07-22T02:55:42.000",
    "block_num": 19240,
    "last_irreversible_block": 63969,
    "traces": [
        {
            "receipt": {
                "receiver": "dabingguozi",
                "act_digest": "f8ce7062290be813e6484e50c7c0e3c22a9898e3240bab76f7e11b99c07abe52",
                "global_sequence": 19298,
                "recv_sequence": 5,
                "auth_sequence": [
                    [
                        "eosio",
                        19293
                    ]
                ],
                "code_sequence": 1,
                "abi_sequence": 1
            },
            "act": {
                "account": "eosio.token",
                "name": "transfer",
                "authorization": [
                    {
                        "actor": "eosio",
                        "permission": "active"
                    }
                ],
                "data": {
                    "from": "eosio",
                    "to": "dabingguozi",
                    "quantity": "10.0000 SYS",
                    "memo": ""
                },
                "hex_data": "0000000000ea305500dca79ab1e98e49a086010000000000045359530000000000"
            },
            "elapsed": 6,
            "cpu_usage": 0,
            "console": "",
            "total_cpu_usage": 0,
            "trx_id": "b09395d938e594b838277453cea832ddc5d57ab5e92d8763ea011df9e35d7b34",
            "inline_traces": []
        }
    ]
}

8. history/get_actions(请求actions的信息)

应用场景:

合约执行流水

POST:

http://127.0.0.1:8888/v1/history/get_actions

BODY: 其中account_name如果没有在config中filter设置过,response就什么都拿不到

{
  "pos":0,
  "offset":1000,
  "account_name": "dabingguozi"
}

RESPONSE:

{
    "actions": [
        {
            "global_action_seq": 19298,
            "account_action_seq": 0,
            "block_num": 19240,
            "block_time": "2018-07-22T02:55:42.000",
            "action_trace": {
                "receipt": {
                    "receiver": "dabingguozi",
                    "act_digest": "f8ce7062290be813e6484e50c7c0e3c22a9898e3240bab76f7e11b99c07abe52",
                    "global_sequence": 19298,
                    "recv_sequence": 5,
                    "auth_sequence": [
                        [
                            "eosio",
                            19293
                        ]
                    ],
                    "code_sequence": 1,
                    "abi_sequence": 1
                },
                "act": {
                    "account": "eosio.token",
                    "name": "transfer",
                    "authorization": [
                        {
                            "actor": "eosio",
                            "permission": "active"
                        }
                    ],
                    "data": {
                        "from": "eosio",
                        "to": "dabingguozi",
                        "quantity": "10.0000 SYS",
                        "memo": ""
                    },
                    "hex_data": "0000000000ea305500dca79ab1e98e49a086010000000000045359530000000000"
                },
                "elapsed": 6,
                "cpu_usage": 0,
                "console": "",
                "total_cpu_usage": 0,
                "trx_id": "b09395d938e594b838277453cea832ddc5d57ab5e92d8763ea011df9e35d7b34",
                "inline_traces": []
            }
        },
        {
            "global_action_seq": 21095,
            "account_action_seq": 1,
            "block_num": 21034,
            "block_time": "2018-07-22T03:10:39.000",
            "action_trace": {
                "receipt": {
                    "receiver": "dabingguozi",
                    "act_digest": "72ae6a2af84b85d4b4e20190a56904f53afa2a79ab4c47ca2f15874c4c309205",
                    "global_sequence": 21095,
                    "recv_sequence": 6,
                    "auth_sequence": [
                        [
                            "eosio",
                            21090
                        ]
                    ],
                    "code_sequence": 1,
                    "abi_sequence": 1
                },
                "act": {
                    "account": "eosio.token",
                    "name": "transfer",
                    "authorization": [
                        {
                            "actor": "eosio",
                            "permission": "active"
                        }
                    ],
                    "data": {
                        "from": "eosio",
                        "to": "dabingguozi",
                        "quantity": "2.0000 SYS",
                        "memo": ""
                    },
                    "hex_data": "0000000000ea305500dca79ab1e98e49204e000000000000045359530000000000"
                },
                "elapsed": 6,
                "cpu_usage": 0,
                "console": "",
                "total_cpu_usage": 0,
                "trx_id": "e1cafa2561470a0b489a4e2032375a5c88665f75e5172bac7b574cd051079d42",
                "inline_traces": []
            }
        }
    ],
    "last_irreversible_block": 64270
}

致此,一些目前常用的HTTP API,就列在这里了,之后会有进阶版举例其他API

下一篇是时候总结和讨论一下eos的结构了,接连接:

(在编辑。。。)

ps. 因为我没有在插件中设置wallet-api,所以wallet相关的HTTP API就不可用

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Wesley13 Wesley13
2年前
JAVA并发编程1
新手小白学习JAVA并发编程,写个博客记录一下而已(可能会有错的内容,毕竟小白)。首先有一个打印数字的类,publicclassCounter{privateintcount;publicvoidadd(){try{for(inti0;i<10;i){
Easter79 Easter79
2年前
SpringCloud Hystrix源码解析(一)
SpringCloudHystrix源码解析看本篇之前请看五分钟学会SpringCloudHystrix:服务容错保护(小白必看,一看就会系列教程)(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fweixin_443022
Stella981 Stella981
2年前
Guava库学习:学习Guava Files系列(二)
  上一篇,Guava库学习:学习GuavaFiles系列(一)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.xx566.com%2Fdetail%2F216.html)中,我们简单的学习了使用Files进行文件的读写等常用操作,本篇我们继续进行GuavaFiles系列
Wesley13 Wesley13
2年前
EOS智能合约开发(二):EOS创建和管理钱包
上节介绍了EOS智能合约开发之EOS环境搭建及启动节点(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.jianshu.com%2Fp%2Fae8e72a05a2f)那么,节点启动后我们要做的第一件事儿是什么呢?就是我们首先要有账号,但是有账号的前提是什么呢?倒不是先创建账号
Wesley13 Wesley13
2年前
Ubuntu虚拟机EOS安装教程
EOS安装一、源码下载注意事项:二、编译源码注意事项:三、安装1.install安装2.测试(可跳过)四、运行总结一、源码下载gitclonehttps://github.com
Stella981 Stella981
2年前
EOS cleos get code 查询智能合约
查询智能合约命令格式:$cleosgetcodea${contract}.abi${contract}根据合约中定义的表结构,你可以查询合约中的数据。例如,currency合约ABI包含账户表。$cleosgetcodeacurrency.abicurrencycodehash:
Stella981 Stella981
2年前
Elasticsearch学习记录(1.安装,简单的查询,聚合,防止数据重复,冲突控制等)
首先我的学习是基于该教程进行的(下列部分代码文字出自该教程,在学习过程中增加我自己的理解和补充,便于更好的裂解和学习,并指出下列教程错误的地方):http://es.xiaoleilu.com/(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fes.xiaoleilu.com%2F
Wesley13 Wesley13
2年前
EOS开发基础之一:源代码下载与开发环境搭建
区块链最近挺火的,我又是个非常缺钱的人,所以紧跟了潮流一头扎进区块链的研究中。这EOS项目是目前比较火的一个项目,相信很多朋友拿到这份EOS的源代码后都会一脸懵逼,因为……这代码写得太高级了,老纸看不懂(各种宏各种模板元编程各种智能指针和所谓的石墨烯技术……在哪里?)目前EOS项目是只能运行在Linux和Mac操作系统上的,要想在Windows上运行
Wesley13 Wesley13
2年前
HarmonyOS三方件开发指南(13)
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑【课程入口】(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fharmonyos.51cto.com%2Factivity%2F43%23kyzg)目录:1\.SwipeLayou