小蚁链
<p>[[toc]]</p>
<h3>修改历史</h3>
<ul>
<li><code>2018-07-17</code> 增加<strong>检查地址是否合法</strong>的接口</li>
<li><code>2018-07-17</code> 增加<strong>批量查询余额</strong>接口</li>
<li><code>2018-07-04</code> 发送交易增加uuid参数,保证幂等性</li>
<li><code>2018-07-04</code> 创建账户,根据私钥生成地址,发送交易改为强制使用HTTPS,使用443端口(HTTPS默认端口,可以不指定),请求时需要指定<a href="https://www.tapd.cn/21308131/documents/file_list/1121308131001000093">CA根证书</a></li>
</ul>
<h2>1 总体说明</h2>
<p>所有方法均返回JSON数据,所有调用应先检查status code,若不是<strong>200</strong>,则调用出错,返回的HTTP body中包含具体错误信息,如</p>
<pre><code> {
"error" : "some error message"
} </code></pre>
<h2>2 创建账户</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>创建账户</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>https://47.254.31.29/neo/account</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<ul>
<li>None</li>
</ul>
<p><strong>调用示例</strong>
<code>curl --cacert ROOT.crt https://47.254.31.29/neo/account</code></p>
<p><strong>返回示例</strong></p>
<pre><code>{
"privateKey": "b684723eaacdee0d8eefb3c084358604bbe91d709dc4f3fea794c570068a6e36",
"address": "ATvWXBnFNk72gdJJVUpAVtdkqfzcrjxVZT"
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">privateKey</td>
<td style="text-align: left;">string</td>
<td>私钥</td>
</tr>
</tbody>
</table>
<h2>3 根据私钥生成地址</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>根据私钥,生成对应的以太坊地址</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>https://47.254.31.29/neo/account/getaddress/[:privateKey]</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">privateKey</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>私钥</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>curl --cacert ROOT.crt https://47.254.31.29/neo/account/getaddress/b684723eaacdee0d8eefb3c084358604bbe91d709dc4f3fea794c570068a6e36</code></pre>
<p><strong>返回示例</strong></p>
<pre><code> {
"address": "ATvWXBnFNk72gdJJVUpAVtdkqfzcrjxVZT",
"privateKey": "b684723eaacdee0d8eefb3c084358604bbe91d709dc4f3fea794c570068a6e36"
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">privateKey</td>
<td style="text-align: left;">string</td>
<td>私钥</td>
</tr>
</tbody>
</table>
<h2>4 查询余额</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>查询指定地址的余额</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/account/[:address]/balance</code>
<strong>请求方式:</strong></li>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>curl http://47.254.31.29:8080/neo/account/AQoWQepNMtiYcvawH5M6GCM7Zw6j24c7RE/balance </code></pre>
<p><strong>返回示例</strong></p>
<pre><code>{
"address": "AQoWQepNMtiYcvawH5M6GCM7Zw6j24c7RE",
"balances": [
{
"name": "NEO",
"balance": "1"
}
]
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">balance</td>
<td style="text-align: left;">array</td>
<td>余额</td>
</tr>
</tbody>
</table>
<h2>5 查询交易历史</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>查询指定地址的历史交易记录</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/account/[:address]/history?page=1&pagesize=10</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">page</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>分页,默认为1</td>
</tr>
<tr>
<td style="text-align: left;">pagesize</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>分页大小,默认为10</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong>
<code>curl http://47.254.31.29:8080/neo/account/AQoWQepNMtiYcvawH5M6GCM7Zw6j24c7RE/history</code></p>
<p><strong>返回示例</strong></p>
<pre><code>{
"address": "AQoWQepNMtiYcvawH5M6GCM7Zw6j24c7RE",
"transactions": [
"0x752a8b25790fc3294fac6eedbc3e6e8e8e201e3e52b6da70fade4e08a832452a"
]
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">transactions</td>
<td style="text-align: left;">array</td>
<td>交易ID</td>
</tr>
</tbody>
</table>
<h2>6 查询详细交易历史</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>查询指定地址的详细交易记录,除了交易ID,还附带from,to,value,timestamp</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/account/[:address]/history.detail?page=1&pagesize=10</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">page</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>分页,默认为1</td>
</tr>
<tr>
<td style="text-align: left;">pagesize</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>分页大小,默认为10</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>curl http://47.254.31.29:8080/neo/account/0xeca692E0E5E118705988E499F09b4B579edDa0e6/history.detail</code></pre>
<p><strong>返回示例</strong></p>
<pre><code>{
"address": "ARBrk6BkcEVqaQ86uLRg3ZRXXLKMxhtzhR",
"transactions": [
{
"hash": "0x57cd1dfc262f5eafd858fb635a551e1086b57f437a9f95df2c52dde053b3c676",
"timestamp": "1500702814",
"from": [
{
"address": "AM2maBhfz1NMsXzECkTe5YZ14oSDmB5skA",
"coinName": "量子股份",
"amount": "396"
},
{
"address": "ARBrk6BkcEVqaQ86uLRg3ZRXXLKMxhtzhR",
"coinName": "量子积分",
"amount": "4700"
}
],
"to": [
{
"address": "ARBrk6BkcEVqaQ86uLRg3ZRXXLKMxhtzhR",
"coinName": "量子股份",
"amount": "396"
},
{
"address": "AM2maBhfz1NMsXzECkTe5YZ14oSDmB5skA",
"coinName": "量子积分",
"amount": "3960"
},
{
"address": "ARBrk6BkcEVqaQ86uLRg3ZRXXLKMxhtzhR",
"coinName": "量子积分",
"amount": "740"
}
],
"blockNumber": "1173427",
"blockHash": "0x8e0b5a68d90e97fb5bfced4e0f559336c1e643e36f5b521dd39f62893941989a"
}
]
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
<tr>
<td style="text-align: left;">transactions</td>
<td style="text-align: left;">array</td>
<td>交易记录</td>
</tr>
<tr>
<td style="text-align: left;">transactions.from</td>
<td style="text-align: left;">string</td>
<td>交易发起者</td>
</tr>
<tr>
<td style="text-align: left;">transactions.to</td>
<td style="text-align: left;">string</td>
<td>交易目标</td>
</tr>
<tr>
<td style="text-align: left;">transactions.value</td>
<td style="text-align: left;">string</td>
<td>交易金额</td>
</tr>
<tr>
<td style="text-align: left;">transactions.hash</td>
<td style="text-align: left;">string</td>
<td>交易ID</td>
</tr>
</tbody>
</table>
<h2>7 发起交易</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>发起一笔交易</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>https://47.254.31.29/neo/transaction</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>POST </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">privateKey</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>私钥</td>
</tr>
<tr>
<td style="text-align: left;">to</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>目的地址</td>
</tr>
<tr>
<td style="text-align: left;">amount</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>转账金额</td>
</tr>
<tr>
<td style="text-align: left;">fee</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">string</td>
<td>手续费,默认为0,为0也可以成功被打包</td>
</tr>
<tr>
<td style="text-align: left;">uuid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>通用唯一识别码,请确保每次交易uuid不同</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>curl --cacert ROOT.crt -H "Content-Type:application/json" -X POST –data \
'{"privateKey": "8276250b42354f24549216e8b43239dbaec3e7814dbe08889f8f878636785614", \
"to": "AQoWQepNMtiYcvawH5M6GCM7Zw6j24c7RE", "amount":"1","uuid":"abc" }' \
https://47.254.31.29/neo/transaction
</code></pre>
<p><strong>返回示例</strong></p>
<pre><code>{
"txid": "0x752a8b25790fc3294fac6eedbc3e6e8e8e201e3e52b6da70fade4e08a832452a"
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">txid</td>
<td style="text-align: left;">string</td>
<td>交易ID</td>
</tr>
</tbody>
</table>
<h2>8 发送已签名交易</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>发送一笔已经用私钥签名了的交易</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/transaction/sendsigned/[:rawTransaction]</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">rawTransaction</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>已签名交易的hex string</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong>
<code>curl http://47.254.31.29:8080/neo/transaction/sendsigned/789abcd</code></p>
<p><strong>返回示例</strong></p>
<pre><code> {
"txid": "0x972b58d8331ad4bca2d6fd565ce1754bd4c35be40d29940c1b3cc5d4270be803"
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">txid</td>
<td style="text-align: left;">string</td>
<td>交易ID</td>
</tr>
</tbody>
</table>
<h2>9 查看交易确认次数</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>查看一笔交易的确认次数</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/transaction/[:hash]/confirmation</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">hash</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>transactionHash</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>curl http://47.254.31.29:8080/neo/transaction/0x752a8b25790fc3294fac6eedbc3e6e8e8e201e3e52b6da70fade4e08a832452a/confirmation </code></pre>
<p><strong>返回示例</strong></p>
<pre><code> {
"number": "186"
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">number</td>
<td style="text-align: left;">string</td>
<td>交易确认次数</td>
</tr>
</tbody>
</table>
<h2>10 查询交易打包信息</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>查询一个交易的信息</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/transaction/[:txhash]/info</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">txhash</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>交易哈希</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong>
<code>curl http://47.254.31.29:8080/neo/transaction/0x752a8b25790fc3294fac6eedbc3e6e8e8e201e3e52b6da70fade4e08a832452a/info</code></p>
<p><strong>返回示例</strong></p>
<pre><code>{
"blockHash": "0x5b49995e8c6b3a6a0ef55f51d12d41f83cb1d0234fc482e5c2e3e61388d799a8",
"blockNumber": "2329153",
"from": [
{
"address": "AceZkysXecdCihzf3GVY9vaiN6JT9tJsLB",
"coinName": "NEO",
"amount": "1"
}
],
"to": [
{
"address": "AQoWQepNMtiYcvawH5M6GCM7Zw6j24c7RE",
"coinName": "NEO",
"amount": "1"
}
],
"fee": "0",
"type": "ContractTransaction",
"timestamp": "1527647659"
}</code></pre>
<p><strong>返回参数说明</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">blockHash</td>
<td style="text-align: left;">string</td>
<td>交易所在区块的哈希</td>
</tr>
<tr>
<td style="text-align: left;">blockNumber</td>
<td style="text-align: left;">string</td>
<td>交易所在区块的序号</td>
</tr>
<tr>
<td style="text-align: left;">from</td>
<td style="text-align: left;">string</td>
<td>交易发起地址</td>
</tr>
<tr>
<td style="text-align: left;">to</td>
<td style="text-align: left;">string</td>
<td>交易目的地址</td>
</tr>
<tr>
<td style="text-align: left;">fee</td>
<td style="text-align: left;">string</td>
<td>实际手续费</td>
</tr>
<tr>
<td style="text-align: left;">timestamp</td>
<td style="text-align: left;">uinx time</td>
<td>交易所在区块的时间戳</td>
</tr>
</tbody>
</table>
<h2>11 批量查询余额</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>查询多个地址的余额</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/account/balances</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>POST </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">addr</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">array</td>
<td>地址数组</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>// POST BODY
{
"addrs":["AN3HYvW47LYzyXCxXPbJoNjeY6ztoRiaJc", "AJhtnr7JBPPHbSLzBTNhCNi42LGEJaZDVE"]
}</code></pre>
<p><strong>返回示例</strong></p>
<pre><code>[
{
"address": "AN3HYvW47LYzyXCxXPbJoNjeY6ztoRiaJc",
"balances": [
{
"name": "NEO",
"balance": "228"
},
{
"name": "NeoGas",
"balance": "124.04875475"
}
]
},
{
"address": "AJhtnr7JBPPHbSLzBTNhCNi42LGEJaZDVE",
"balances": [
{
"name": "NEO",
"balance": "0"
}
]
}
]</code></pre>
<p><strong>返回参数说明</strong> </p>
<p>结果数组</p>
<h2>12 检查地址是否合法</h2>
<p><strong>简要描述:</strong> </p>
<ul>
<li>检验地址是否正确,如果地址为全小写或者全大写,将会跳过校验和检查</li>
</ul>
<p><strong>请求URL:</strong> </p>
<ul>
<li><code>http://47.254.31.29:8080/neo/account/:address/check</code></li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>GET </li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">address</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>地址</td>
</tr>
</tbody>
</table>
<p><strong>调用示例</strong></p>
<pre><code>curl 47.254.31.29:8080/neo/account/AN3HYvW47LYzyXCxXPbJoNjeY6ztoRiaJc/check</code></pre>
<p><strong>返回示例</strong></p>
<pre><code>{
"result": true
}</code></pre>
<table>
<thead>
<tr>
<th style="text-align: left;"><strong>返回参数说明</strong></th>
<th style="text-align: left;">参数名</th>
<th>类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">result</td>
<td style="text-align: left;">bool</td>
<td>结果</td>
</tr>
</tbody>
</table>