使用RPC的接口转账
1. 前言
前面我们使用cleos
完成过转账的功能,这篇文章我们尝试使用RPC API的方式进行转账。在测试网络/主网络转账EOS,在测试网络转账代币。
官方文档:https://github.com/EOSBlock/EOS-Tutorials/blob/master/EN/transfer-tokens-using-RPC.md
2. 大致流程
使用RPC API转账的流程如下:
abi_json_to_bin
将转账信息由json
格式序列化为bin
格式字符串get_info
获取当前最新的区块编号get_block
根据区块编号获取区块详情get_required_keys
(可省略) 传入当前拥有的公钥、bin
字符串,区块等信息,筛选出签署交易需要的公钥sign_transaction
传入上面获取的相关参数,通过钱包中私钥对交易进行签署push_transaction
根据第五步获取的签名信息,将交易提交到区块链上
3. 详细流程
3.1 在测试网络转账EOS
3.1.1 查看余额
先查看两个交易账号的EOS余额:
api
http://jungle.cryptolions.io:18888/v1/chain/get_currency_balanceparams
{"code":"eosio.token", "account":"testnetyy111", "symbol":"eos"}
{"code":"eosio.token", "account":"testneths111", "symbol":"eos"}returntestnetyy111
["9641.6587 EOS"
]
testneths111
["0.0000 EOS"
]
3.1.2 将交易信息由JSON格式序列化为BIN格式字符串
从testnetyy111
转100
EOS给testneths111
:
api
http://jungle.cryptolions.io:18888/v1/chain/abi_json_to_binparams
{"code":"eosio.token","action":"transfer","args":{"from":"testnetyy111","to":"testneths111","quantity":"100.0000 EOS", "memo":"hi there"}}return
{"binargs": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"
}
获取到binargs
3.1.3 获取当前最新的区块编号
api
http://jungle.cryptolions.io:18888/v1/chain/get_infoparams
无return
{"server_version": "cc9decff","chain_id": "038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca","head_block_num": 13800828,"last_irreversible_block_num": 13800496,"last_irreversible_block_id": "00d29430d9809c633ddf3cc5c01613b58105394502e9846515c87274765c6d05","head_block_id": "00d2957ccb42d63c2d643c0a1b0b98da69c462b94a62ed434a0e565035bab90b","head_block_time": "2018-09-11T05:39:10.000","head_block_producer": "lioninjungle","virtual_block_cpu_limit": 200000000,"virtual_block_net_limit": 1048576000,"block_cpu_limit": 199900,"block_net_limit": 1048576,"server_version_string": "v1.2.4-dirty"
}
获取到head_block_num
3.1.4 根据区块编号获取区块详情
api
http://jungle.cryptolions.io:18888/v1/chain/get_blockparams
{"block_num_or_id":"13800828"}return
{"timestamp": "2018-09-11T05:39:10.000","producer": "lioninjungle","confirmed": 0,"previous": "00d2957b0e343f2ffa7640591ac1f27ed0ac89d2869e0a9c0576f065a31ee1cc","transaction_mroot": "0000000000000000000000000000000000000000000000000000000000000000","action_mroot": "22546c1e4c12d53a55c60d0ccb7196baa0afb05993612d2cf0591d7bf8fd8d34","schedule_version": 219,"new_producers": null,"header_extensions": [],"producer_signature": "SIG_K1_KXFvmHtXMnDhp8V7CpHuGoYch3whWorL2Fr7nArevzTmC2tXsKRXHCkHiF9myRpbbx3cTShba64jWveKATr49k3Bonp7aw","transactions": [],"block_extensions": [],"id": "00d2957ccb42d63c2d643c0a1b0b98da69c462b94a62ed434a0e565035bab90b","block_num": 13800828,"ref_block_prefix": 171729965
}
获取到timestamp
和ref_block_prefix
3.1.5 筛选出签署交易需要的公钥
钱包中可能有很多公钥存在,调用此方法可以筛选出完成此次交易需要的公钥。如果已明确应该使用的公钥,那可以省略
此方法。
首先调用API打开并解锁钱包,然后获取所有的公钥。这部分内容在EOS开发(八)RPC API都有使用介绍。
参数说明:
available_keys
钱包中的公钥account
合约名称。这里是转账EOS,使用的是eosio.token
actor
调用者。这里相当于转账方permission
使用的权限类型data
之前生成的bin
字符串name
调用的合约方法。这里调用的是转账方法transfer
expiration
过期时间。这里将timestamp
加上了20分钟。可以根据需要来增加时长ref_block_num
前面获取的最新区块号ref_block_prefix
前面获取的ref_block_prefix
api
http://jungle.cryptolions.io:18888/v1/chain/get_required_keysparams
{"available_keys": ["EOS6cnhSLTn4eSUEqS4nC8frYTsVsjeH2M3hos1TUeCgme2Yim5Q5","EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc","EOS7RkP6aevKjN1CiKSqo44Gi1HhPYBczGFgSduBXBD7uHUFhg2qC","EOS7sGb8DfutGgpuMmnDhG1d2stVETfpkrHQ6HhVRJJaPXRqLay2E"],"transaction": {"actions": [{"account": "eosio.token","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265","name": "transfer"}],"context_free_actions": [],"context_free_data": [],"delay_sec": 0,"expiration": "2018-09-11T05:59:10.000","max_kcpu_usage": 0,"max_net_usage_words": 0,"ref_block_num": 13800828,"ref_block_prefix": 171729965,"signatures": []}
}return
{"required_keys": ["EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc"]
}
获取到实际需要的公钥EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc
3.1.6 签署交易
参数说明:
ref_block_num
前面获取的最新区块号ref_block_prefix
前面获取的ref_block_prefix
expiration
过期时间。这里将timestamp
加上了20分钟。可以根据需要来增加时长account
合约名称。这里是转账EOS,使用的是eosio.token
name
调用的合约方法。这里调用的是转账方法transfer
actor
调用者。这里相当于转账方permission
使用的权限类型data
之前生成的bin
字符串EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc
签署此交易的公钥。实际上是由钱包中对应的私钥来签038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca
链id。注明当前处于主网/测试网/私有网络。这里显示的为测试网络
api
http://127.0.0.1:8888/v1/wallet/sign_transactionparams
[{"ref_block_num": 13800828,"ref_block_prefix": 171729965,"expiration": "2018-09-11T05:59:10.000","actions": [{"account": "eosio.token","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"}],"signatures": []},["EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc"], "038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca"
]return
{"expiration": "2018-09-11T05:59:10","ref_block_num": 38268,"ref_block_prefix": 171729965,"max_net_usage_words": 0,"max_cpu_usage_ms": 0,"delay_sec": 0,"context_free_actions": [],"actions": [{"account": "eosio.token","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"}],"transaction_extensions": [],"signatures": ["SIG_K1_K9eDsXiqEMkJs8wPwEjiN6hL1h2Bm3gGQtUheidFczWNdBmDF24AUuPmiosi9CwtEW3jPFPao7HYWLJ63ic3TggjnoKtJF"],"context_free_data": []
}
获取到signatures
3.1.7 提交交易
参数说明:
expiration
过期时间。这里将timestamp
加上了20分钟。可以根据需要来增加时长ref_block_num
前面获取的最新区块号ref_block_prefix
前面获取的ref_block_prefix
account
合约名称。这里是转账EOS,使用的是eosio.token
name
调用的合约方法。这里调用的是转账方法transfer
actor
调用者。这里相当于转账方permission
使用的权限类型data
之前生成的bin
字符串signatures
签署交易后生成的签名字符串
api
http://jungle.cryptolions.io:18888/v1/chain/push_transactionparams
{"compression": "none","transaction": {"expiration": "2018-09-11T05:59:10.000","ref_block_num": 13800828,"ref_block_prefix": 171729965,"context_free_actions": [],"actions": [{"account": "eosio.token","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"}],"transaction_extensions": []},"signatures": ["SIG_K1_K9eDsXiqEMkJs8wPwEjiN6hL1h2Bm3gGQtUheidFczWNdBmDF24AUuPmiosi9CwtEW3jPFPao7HYWLJ63ic3TggjnoKtJF"]
}return
{"transaction_id": "4efb2687ef59c9a677da68264eb409d71aca66d7e3df4b35ee34f59e13783ffc","processed": {"id": "4efb2687ef59c9a677da68264eb409d71aca66d7e3df4b35ee34f59e13783ffc","receipt": {"status": "executed","cpu_usage_us": 1537,"net_usage_words": 17},"elapsed": 1537,"net_usage": 136,"scheduled": false,"action_traces": [{"receipt": {"receiver": "eosio.token","act_digest": "45d232c72b5ca003627bc411ff9881286fd411239ceac528b98e6fb33a50919e","global_sequence": 32142292,"recv_sequence": 1716642,"auth_sequence": [["testnetyy111",37]],"code_sequence": 3,"abi_sequence": 3},"act": {"account": "eosio.token","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": {"from": "testnetyy111","to": "testneths111","quantity": "100.0000 EOS","memo": "hi there"},"hex_data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"},"elapsed": 942,"cpu_usage": 0,"console": "","total_cpu_usage": 0,"trx_id": "4efb2687ef59c9a677da68264eb409d71aca66d7e3df4b35ee34f59e13783ffc","inline_traces": [{"receipt": {"receiver": "testnetyy111","act_digest": "45d232c72b5ca003627bc411ff9881286fd411239ceac528b98e6fb33a50919e","global_sequence": 32142293,"recv_sequence": 16,"auth_sequence": [["testnetyy111",38]],"code_sequence": 3,"abi_sequence": 3},"act": {"account": "eosio.token","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": {"from": "testnetyy111","to": "testneths111","quantity": "100.0000 EOS","memo": "hi there"},"hex_data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"},"elapsed": 100,"cpu_usage": 0,"console": "","total_cpu_usage": 0,"trx_id": "4efb2687ef59c9a677da68264eb409d71aca66d7e3df4b35ee34f59e13783ffc","inline_traces": []},{"receipt": {"receiver": "testneths111","act_digest": "45d232c72b5ca003627bc411ff9881286fd411239ceac528b98e6fb33a50919e","global_sequence": 32142294,"recv_sequence": 7,"auth_sequence": [["testnetyy111",39]],"code_sequence": 3,"abi_sequence": 3},"act": {"account": "eosio.token","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": {"from": "testnetyy111","to": "testneths111","quantity": "100.0000 EOS","memo": "hi there"},"hex_data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004454f5300000000086869207468657265"},"elapsed": 23,"cpu_usage": 0,"console": "","total_cpu_usage": 0,"trx_id": "4efb2687ef59c9a677da68264eb409d71aca66d7e3df4b35ee34f59e13783ffc","inline_traces": []}]}],"except": null}
}
3.1.8 查询转账完成后的余额
testnetyy111 "9541.6587 EOS"
testneths111 "100.0000 EOS"
3.2 在测试网络转账代币
3.2.1 先查询余额
api
http://jungle.cryptolions.io:18888/v1/chain/get_currency_balanceparams
{"code":"testnetyy111", "account":"testnetyy111", "symbol":"ray"}
{"code":"testnetyy111", "account":"testneths111", "symbol":"ray"}returntestnetyy111
["99999800.0000 RAY"
]
testneths111
["200.0000 RAY"
]
3.2.2 将交易信息由JSON格式序列化为BIN格式字符串
从testnetyy111
转100
RAY给testneths111
:
api
http://jungle.cryptolions.io:18888/v1/chain/abi_json_to_binparams
{"code":"testnetyy111","action":"transfer","args":{"from":"testnetyy111","to":"testneths111","quantity":"100.0000 RAY", "memo":"hello there"}}return
{"binargs": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004524159000000000b68656c6c6f207468657265"
}
3.2.3 获取当前最新的区块编号
api
http://jungle.cryptolions.io:18888/v1/chain/get_infoparams
无return
{"server_version": "cc9decff","chain_id": "038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca","head_block_num": 13807658,"last_irreversible_block_num": 13807329,"last_irreversible_block_id": "00d2aee1e209a3a21f0c1bf3a9b3b79322c27cb48353d9e28f17286b0daaa58b","head_block_id": "00d2b02afdedb3e0f487026946a7a56be8f331aecebb8b04faff03cf566a0fb6","head_block_time": "2018-09-11T06:36:50.000","head_block_producer": "astraealions","virtual_block_cpu_limit": 200000000,"virtual_block_net_limit": 1048576000,"block_cpu_limit": 199900,"block_net_limit": 1048576,"server_version_string": "v1.2.4-dirty"
}
3.2.4 根据区块编号获取区块详情
api
http://jungle.cryptolions.io:18888/v1/chain/get_blockparams
{"block_num_or_id":"13807658"}return
{"timestamp": "2018-09-11T06:36:50.000","producer": "astraealions","confirmed": 0,"previous": "00d2b029ac9a6eb269c6ea4f8bb3f2961d948f1f0ca3cd0cc4640ceadc95d37b","transaction_mroot": "0000000000000000000000000000000000000000000000000000000000000000","action_mroot": "0b1b4f510e0cdd272052fe0f3f9b1e74c7c6f83253409d943c3394eefbb7762e","schedule_version": 219,"new_producers": null,"header_extensions": [],"producer_signature": "SIG_K1_KZZ4giS7WxbSt3i6rcdZqgBWGzpE9XXq8A88kkSDDt9s8MbB2Vs1VEdMDoGYAeqTVUqX25xszU2cBwfHkbEvooPnZSm5FR","transactions": [],"block_extensions": [],"id": "00d2b02afdedb3e0f487026946a7a56be8f331aecebb8b04faff03cf566a0fb6","block_num": 13807658,"ref_block_prefix": 1761773556
}
3.2.5 筛选出签署交易需要的公钥
这里省略这一步了,因为我们明确知道需要的公钥为EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc
3.2.6 签署交易
这里的参数
account
变为testnetyy111
,因为其是代币合约
api
http://127.0.0.1:8888/v1/wallet/sign_transactionparams
[{"ref_block_num": 13807658,"ref_block_prefix": 1761773556,"expiration": "2018-09-11T06:56:50.000","actions": [{"account": "testnetyy111","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004524159000000000b68656c6c6f207468657265"}],"signatures": []},["EOS6Z7mUQeFC2cQTT3xMyZh2wsLQoHih1bTMgRhr3dbichprTi7Rc"], "038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca"
]return
{"expiration": "2018-09-11T06:56:50","ref_block_num": 45098,"ref_block_prefix": 1761773556,"max_net_usage_words": 0,"max_cpu_usage_ms": 0,"delay_sec": 0,"context_free_actions": [],"actions": [{"account": "testnetyy111","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004524159000000000b68656c6c6f207468657265"}],"transaction_extensions": [],"signatures": ["SIG_K1_KXFAydwhD6u74pxQcTakiGCjtSuUw9PBsFb7ETxh1ULqjFkXqfyaoL34TkEmZi7iBTgUQZqUJRcVYYkrLWZxbVybRUArNX"],"context_free_data": []
}
3.2.7 提交交易
api
http://jungle.cryptolions.io:18888/v1/chain/push_transactionparams
{"compression": "none","transaction": {"expiration": "2018-09-11T06:56:50.000","ref_block_num": 13807658,"ref_block_prefix": 1761773556,"context_free_actions": [],"actions": [{"account": "testnetyy111","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004524159000000000b68656c6c6f207468657265"}],"transaction_extensions": []},"signatures": ["SIG_K1_KXFAydwhD6u74pxQcTakiGCjtSuUw9PBsFb7ETxh1ULqjFkXqfyaoL34TkEmZi7iBTgUQZqUJRcVYYkrLWZxbVybRUArNX"]
}return
{"transaction_id": "27c120548fee4e0ca31bc779ba85eb61ea4a2c5204043b696800d6cdb11da48b","processed": {"id": "27c120548fee4e0ca31bc779ba85eb61ea4a2c5204043b696800d6cdb11da48b","receipt": {"status": "executed","cpu_usage_us": 1176,"net_usage_words": 17},"elapsed": 1176,"net_usage": 136,"scheduled": false,"action_traces": [{"receipt": {"receiver": "testnetyy111","act_digest": "28d41460e20878bc412281b80c4d46ce174a4a48e8c7caf9ef28a13383e72d9e","global_sequence": 32149270,"recv_sequence": 17,"auth_sequence": [["testnetyy111",40]],"code_sequence": 1,"abi_sequence": 1},"act": {"account": "testnetyy111","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": {"from": "testnetyy111","to": "testneths111","quantity": "100.0000 RAY","memo": "hello there"},"hex_data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004524159000000000b68656c6c6f207468657265"},"elapsed": 782,"cpu_usage": 0,"console": "","total_cpu_usage": 0,"trx_id": "27c120548fee4e0ca31bc779ba85eb61ea4a2c5204043b696800d6cdb11da48b","inline_traces": [{"receipt": {"receiver": "testneths111","act_digest": "28d41460e20878bc412281b80c4d46ce174a4a48e8c7caf9ef28a13383e72d9e","global_sequence": 32149271,"recv_sequence": 8,"auth_sequence": [["testnetyy111",41]],"code_sequence": 1,"abi_sequence": 1},"act": {"account": "testnetyy111","name": "transfer","authorization": [{"actor": "testnetyy111","permission": "active"}],"data": {"from": "testnetyy111","to": "testneths111","quantity": "100.0000 RAY","memo": "hello there"},"hex_data": "1042f03eab99b1ca1042c02dab99b1ca40420f000000000004524159000000000b68656c6c6f207468657265"},"elapsed": 14,"cpu_usage": 0,"console": "","total_cpu_usage": 0,"trx_id": "27c120548fee4e0ca31bc779ba85eb61ea4a2c5204043b696800d6cdb11da48b","inline_traces": []}]}],"except": null}
}
3.2.8 查询转账完成后的余额
testnetyy111 "99999700.0000 RAY"
testneths111 "300.0000 RAY"
转自:https://blog.csdn.net/akai9898/article/details/83447788
使用RPC的接口转账相关推荐
- 介绍一个用于EOS区块链的RPC API接口的PHP开发包SDK
作为我们Block Producer对社区利益的承诺的一部分,我们希望专注于构建有助于提高EOS平台采用率的工具/应用程序.与大多数大型应用程序一样,当你只有少量或过时的文档并且缺乏工具来帮助你进行入 ...
- Java基础学习总结(168)——为什么推荐在RPC的接口中入参和出参都不要使用枚举
前言: 为什么推荐在RPC的接口中入参和出参都不要使用枚举.最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛出了一个IllegalArgumentException,分析堆栈后,发现最根本的 ...
- PHP 支付宝 “(单笔转账接口)转账到支付宝账号”
目录 前言 一.服务层 二.控制层 1.控制层 2.接口返回参数实例 前言 单笔转账接口 | 网页&移动应用 准备: 1:应用的证书(证书申请和配置可以参考我另一篇分享"支付宝 '应 ...
- 【STP生成树】(桥ID、根桥、cost、RPC、接口ID、BPDU报文格式、端口选举举例)-20211216.20211217
目录 一.生成树STP技术背景 1.前言 2.二层交换机的冗余性与环路 二.生成树协议 1.生成树协议 2.生成树能动态感知网络拓扑的变化,调整阻塞或放行端口 生成树: 通过交互报文感知网络拓扑的 ...
- postman调用rpc服务器接口_RPC 原理
RPC 是什么 (what) Remote Procedure Call,缩写为 RPC 远程过程调用 客户端和服务器端约定好一个接口 (eg: SOA api 里边的接口) 客户端调用接口的时候,去 ...
- 使用RPC的接口创建账户
1.POST http://127.0.0.1:8888/v1/chain/abi_json_to_bin (序列化新建账号的 json) {"code": "eosio ...
- 阿里支付接口 转账 java 代码
阿里支付接口的验证机制和普通接口不同,采用的是证书验证,使用支付宝开放平台助手 ---> 生成密钥获取csr文件 公司注意些支付对应的支付宝程序所在的公司的名称. 得到生成好的3个文件 放入对应 ...
- 为什么阿里巴巴RPC接口不允许使用枚举类型?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:今天给大家推荐 6 个 Spring Boot 项目,拿来就可以赚钱! 个人原创100W+访问量博客:点击前往, ...
- 转账到支付宝账户接口常见问题
1.单笔转账接口是否有异步通知? 新版单笔转账接口(alipay.fund.trans.uni.transfer)支持异步回调,可通过在应用网关设置异步地址进行接收,异步通知转账单据状态变更通知相关参 ...
最新文章
- OpenStack社区正式接受UnitedStack有云Steth项目
- 2021年春季学期-信号与系统-第九次作业参考答案-第四小题
- 动作捕捉技术,VR体验沉浸感的“助燃剂”
- linux nginx漏洞修复,nginx-1.14.1 和 nginx-1.15.6 发布,修复HTTP/2和MP4模块中的漏洞
- Java IO流之缓冲流
- 二级c语言无纸化三合一_学习攻略|计算机二级考试重点及注意事项
- 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
- linux脚本算术函数,Linux基础之bash脚本编程初级-变量与算术运算
- Mysql中SQL语句不使用索引的情况
- springboot 的 RedisTemplate 的 execute 和 executePipelined 功能的区别redis
- 假如啤酒只有七天生命
- docker宿主机访问容器_干货来啦!带你初探Docker逃逸
- 核心单词Word List 5
- 四、初识python编程-程序结构(课时11-13)
- 名编辑电子杂志大师教程 | 仿古书翻页
- 处理WIN7任务栏通知区域图标异常问题
- Linux下输出大字、艺术字--figlet
- php zend optimizer,【原创】ZendOptimizer 的安装
- windows10驱动 x64--- 驱动实现遍历VAD树(六)
- 开源项目之饭否 for Android
热门文章
- 前缀表达式(波兰表达式)介绍及其代码实现(Java)
- SETP7 Basic V11 SP1
- 伺服控制-canopen
- matlab基础与应用——常用命令整理
- 泰凌微ble mesh蓝牙模组天猫精灵学习之旅③简单入门安信可TB-02开发开发板轻松接入天猫精灵,语音控制冷暖灯so easy!
- 【OpenCV】透视变换 仿射变换
- 远程无法访问syn服务器,ping回显请求超时time out故障处理过程
- vuecli添加和移除插件_7 款优秀 Vim 插件帮你打造完美 IDE!
- 《笨方法学 Python 3》42.对象、类及从属关系
- 思考免费OA系统能否满足企业管理需求