aschplatform / asch-docs Goto Github PK
View Code? Open in Web Editor NEWAsch documents
Asch documents
Dapp的出块周期能不能自定义,比方说50S?
在【主链和侧链】上设置自定义资产的发行量为100亿,精确到小数点后4位,是怎样表达的?
调用接口AschJS.uia.createAsset,设置参数:maximum=1000000000000000000,precision=4?
该接口里面的amount参数如何理解?
我调用这个接口,参数形式和实例是一致的,值是真实的,用的是真实网络,header中的内容是{magic:"5f5b3cf5",version:''}, 请问为什么一直报 500
npm ERR! fetch failed https://github.com/AschPlatform/asch-sandbox/tarball/master
npm WARN retry will retry, error on last attempt: Error: fetch failed with status code 404
使用 ./aschd start 命令没有报错,查看状态又是没有跑起来的状态。
使用 node app.js时 又说asch服务已启动
用户自定义资产白名单地址列表里的地址具有什么权限?
【主链和侧链】用户自定义资产支持的最大数量限制是多少?
Saw documentation about Fees
https://github.com/AschPlatform/asch-docs/blob/master/http_api/en.md#31-basic-contracts
But is there any way to Decide custom fees? like 5% or 2% percent of total coin?
Its not issue but Enhancement & Query.
Thanks
The asch-cli documentation is not up-to-date.
But first needs the asch-cli package be made compatible to the latest asch version.
Can someone assign this issue to me?
Thank you!
All the best!
a1300
【主链和侧链】用户自定义资产支持的最小小数位数是多少?
不是的话,怎样设置为不需要任何费用,或者收取其他资产?
您好,我按照《区块链开发实战》做DApp Demo,做到注册应用这个一步,我用相同的指令得到了错误信息:
Server error: Error: Invalid description
请问这可能是哪里出了问题?
阿希团队于今日(2018.9.27)正式发布Asch v1.4.5 版本,建议所有节点进行升级。
本次升级主要解决的问题:
首先查看节点的版本(使用./aschd version
命令),根据版本选择升级策略。
运行 ./aschd upgrade
选择合适的节点(一般建议选择0或者1)
升级完以后运行./aschd start
即可
观察区块同步情况
请直接下载最新安装包
wget http://china.aschcdn.com/asch-linux-latest-mainnet.tar.gz
将原来版本的 data 覆盖过来即可;
使用快照:
wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz
解压替换 asch 目录下的 data 目录即可。
使用git clone 克隆 asch 最新代码,运行npm install
即可(注意不要使用 npm缓存)
阿希团队于今日(2019.10.31)发布v1.6.0版本,请各位节点尽快升级。
cd asch (此处为asch运行目录)
./aschd upgrade
根据需要输入合适的数字(默认为0)
./aschd start
升级完后观察下自己服务器的区块同步情况。
接口地址 /api/transactions/
请求方式 GET
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
id | string | id | string |
height | string | height | string |
blockId | string | ||
type | number | type | number |
timestamp | number | timestamp | number |
senderPublicKey | string | senderPublicKey | string |
senderId | string | senderId | string |
recipientId | string | recipientId | string |
amount | number | amount | number |
signature | string | signature | string |
signSignature | string | signSignature | string |
signatures | string | signatures | string |
confirmations | string | comfirmations | string |
args | object | args | object |
message | string | message | string |
asset | object | asset | object |
argsNew | object | argsNew | object |
diff: blockId、signSignature
接口地址 /api/transactions/get
请求方式 GET
参数说明 id
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
id | string | id | string |
height | string | height | string |
blockId | string | ||
type | number | type | number |
timestamp | number | timestamp | number |
senderPublicKey | string | senderPublicKey | string |
senderId | string | senderId | string |
recipientId | string | recipientId | string |
amount | number | amount | number |
signature | string | signature | string |
signSignature | string | signSignature | string |
signatures | string | signatures | string |
confirmations | string | confirmations | string |
args | object | args | object |
message | string | message | string |
asset | object | asset | object |
argsNew | object | argsNew | object |
diff: blockId
接口地址 /api/blocks
请求方式 GET
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
id | string | id | string |
version | number | version | number |
timestamp | number | timestamp | number |
height | number | height | number |
payloadHash | string | payloadHash | string |
numberOfTransactions | number | numberOfTransactions | number |
totalFee | number | totalFee | number |
generatorPublicKey | string | generatorPublicKey | string |
blockSignature | string | ||
confirmations | string | confirmations | number |
previousBlock | string | previousBlock | string |
totalAmount | number | ||
reward | number | ||
payloadLength | number | ||
generatorId | string | ||
totalForged | number |
diff: confirmations
接口地址 /api/blocks
请求方式 GET
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
id | string | id | string |
version | number | version | number |
timestamp | number | timestamp | number |
height | number | height | number |
payloadHash | string | payloadHash | string |
numberOfTransactions | number | numberOfTransactions | number |
totalFee | number | totalFee | number |
generatorPublicKey | string | generatorPublicKey | string |
blockSignature | string | ||
previousBlock | string | previousBlock | string |
transactions | array | transactions | array |
comfirmations | number | ||
totalAmount | number | ||
reward | number | ||
payloadLength | number | ||
generatorId | string | ||
totalForged | number |
接口地址 /api/uia/balances/:address/:currency
请求方式 GET
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
address | string | ||
currency | string | currency | string |
balance | string | balance | string |
flag | number | ||
_ version _ | number | ||
name | string | ||
desc | string | ||
maximum | string | maximum | string |
quantity | string | quantity | string |
issuerId | string | ||
writeoff | number | writeoff | number |
maximumShow | string | maximumShow | string |
quantityShow | string | quantityShow | string |
precision | number | precision | number |
balanceShow | string |
接口地址 /api/uia/balances/:address/
请求方式 GET
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
address | string | ||
currency | string | currency | string |
balance | string | balance | string |
maximum | string | maximum | string |
precision | number | precision | number |
quantity | string | quantity | string |
writeoff | number | writeoff | number |
maximumShow | string | maximumShow | string |
quantityShow | string | quantityShow | string |
balanceShow | string | balanceShow | string |
name | string | ||
desc | string | ||
_ version _ | number | ||
flag | number | ||
issuerId | string |
接口地址 /api/uia/transfers/:address/:currency
接口地址 /api/uia/transactions/my/:address/:currency
请求方式 GET
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
id | string | id | string |
height | string | height | string |
blockId | string | ||
type | number | type | number |
timestamp | number | timestamp | number |
senderPublicKey | string | senderPublicKey | string |
senderId | string | senderId | string |
recipientId | string | recipientId | string |
amount | number | amount | number |
fee | number | fee | number |
signature | string | signature | string |
signatures | string | signatures | string |
signSignature | string | signSignature | string |
confirmations | string | confirmations | string |
args | object | args | object |
message | string | message | string |
asset | object | asset | object |
argsNew | array |
下面补充asset里面uiaTransfer参数
1.3.6-名称 | 类型 | 1.4.3-名称 | 类型 |
---|---|---|---|
transactionId | string | transactionId | string |
currency | string | currency | string |
amount | string | amount | string |
amountShow | string | amountShow | string |
precision | number | precision | number |
通过asch-js里面封装好的transaction.createTransactionEx(params)方法获得到transaction,然后将这个transaction POST 发送到peer/transactions路由。
params是一个对象,先介绍下它的所含属性。
type: 合约编号
fee: 手续费
args: 合约所需参数
message:备注
secret: 发送者密码
secondSecret:二级密码
对于不同的合约,合约编号,手续费及合约所需要的参数是不同的。
下面列举一个转账合约的例子
let message = '备注' ,amount = 50*100000000,
recipient = 'A3w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ', //(只是给出地址格式,并非有效地址)
mySecret = 'cat craft often annual face marriage lyrics clutch room helmet crowd biology',
secondSecret = 'abcd12345'
let args = [amount,recipient], //第一个参数是转账金额,第二个参数是目标地址
//构造params对象
let params = {
type:1, //转账的合约编号是1
fee:0.1*100000000, //转账的手续费是0.1XAS
args:args //合约所需要参数
message, //做一些备注(非必需)
secret:mySecret, //我的密码(发送这笔交易的人的secret)
secondSecret:mySecondSecret} //二级密码(没设置可以填null,但有些交易必需使用)
//到这里位置所需要的params对象就构造好了,下面将这个对象交给asch-js里的createTransactionEx()接口
let aschjs = require('asch-js')
//这个方法返回的transaction就是需要提交到服务器的交易数据
let transaction = aschjs.transaction.createTransactionEx(params)
//附带篇 (提交交易)
let axios = require('axios')
axios({
method: 'post',
url: 'http://serverhost:port/peer/transactions', //port默认是4096
json:true,
data:{
transaction:transaction
},
headers:{
'Content-Type':'application/json',
'version':'',
'magic':'594fe0f3'
}
}).then(function(response){
console.log(response.data)
}).catch(function(error){
console.log(error)
})
//上述步骤成功后应该返回的是成功交易的交易ID
{success: true,transactionId:"609074700dcea17b56e5a98bbfeee5f6416935b6b444c0750e5cb319d818a502"}
以上就是调用一次合约的全部过程,其实对于不同的合约,所需要变换的变量有type,fee,args这三个属性。
下面枚举所有合约所需要的这三个属性(主要是这三个属性)
XAS的精度是小数点后八位,所以使用XAS币的时候需要乘上100000000,为了简洁,下面使用XAS的时候替换如下:
const xAS = 100000000
type:1
fee: 0.1*xAS
args: [amount,recipient]
名称 | 类型 | 说明 |
---|---|---|
amount | number | 转账金额 |
recipient | string | 接收地址 |
代码示例
//args参数示例
let amount = 100*xAX //转账金额
let recipent = 'A3w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ' //接收地址
let args = [amount,recipent]
type:2
*fee: 1/10/40/80/100/200 xAX
args: [name]
这里对手续费要左下说明,对于名字越长,手续费越便宜(有上限)
len-fee关系表
len | fee |
---|---|
2 | 200*xAS |
3 | 100*xAS |
4 | 80*xAS |
5 | 40*xAS |
6-10 | 10*xAS |
>10 | 1*xAS |
名称 | 类型 | 说明 |
---|---|---|
name | string | 昵称 |
代码示例
//args参数示例
let name = 'user1'
let args = [name]
type:3
fee: 0.1*xAX
args: [secondSecret]
名称 | 类型 | 说明 |
---|---|---|
secondSecret | string | 二级密码(加密后) |
//这个SecondSecret是加密后的字符串
let password = 'asch123456'
let hash = sha256Bytes(new Buffer(password))
let keypair = nacl.sign.keyPair.fromSeed(hash);
let secondSecret = new Buffer(keypair.publicKey).toString("hex")
//得到将password加密后的secondSecret作为参数
let args = [secondSecret]
type:4
fee: 0.1*xAX
args: [height,amount]
名称 | 类型 | 说明 |
---|---|---|
height | number | 锁定的高度 |
amount | number | 锁定的金额 |
代码示例
//args参数示例
let height = 64200,amount = 20000*xAX
let args = [height,amount]
type:5
fee: 0*xAX
args: []
说明:解锁仓库合约没有参数,所以args里不需要传数据
type:7
fee: 100*xAX
args: []
说明:无需传入参数
type:8
fee: 0.1*xAX
args: [agent]
名称 | 类型 | 说明 |
---|---|---|
agent | string | 代理人的昵称 |
let agent = 'user1'
let args = [agent]
type:11
fee: 0.1*xAX
args: [delegates]
名称 | 类型 | 说明 |
---|---|---|
delegates | string | 一些受托人的名字 |
代码示例
//delegate1,delegate2,delegate3分别为三个受托人的姓名
let delegates = 'delegate1,delegate2,delegate3'
let args = [delegates]
代码举例
type:12
fee: 0.1*xAX
args: [delegates]
名称 | 类型 | 说明 |
---|---|---|
delegates | string | 一些受托人的名字 |
代码示例
let delegates = 'delegate1,delegate2' //delegate1,delegate2,delegate3分别为三个受托人的姓名
let args = [delegates]
type:100
fee: 100*xAX
args: [name,desc]
名称 | 类型 | 说明 |
---|---|---|
name | string | 发行商名字 |
desc | string | 一些文字描述 |
代码示例
//args参数示例
let name = 'TEST'
let desc = 'my first issuer'
let args = [name,desc]
type:101
fee: 500*xAX
args: [symbol,desc,maximum,precsion]
名称 | 类型 | 说明 |
---|---|---|
symbol | string | 资产名称 |
desc | string | 一些文字描述 |
maximum | string | 最大发行量 |
precsion | number | 精度 |
代码示例
//args参数示例
let symbol = 'TXC' //资产名由三个大写字母组成
let desc = 'my first asset'
let maximum = '100000000000'
let precsion = 1 //取值范围是1-16之间的整数
//组成args
let args = [symbol,desc,maximum,precsion]
type:102
fee: 0.1*xAX
args: [name,amount]
名称 | 类型 | 说明 |
---|---|---|
name | string | 要发行的资产名 |
amount | string | 发行数量 |
代码示例
//args参数示例
let name = 'TEST.TXC' //资产名=发行商名称.代币名
let amount = '1000000000'
let args = [name,amount]
type:103
fee: 0.1*xAX
args: [currency,amount,recipient]
名称 | 类型 | 说明 |
---|---|---|
currency | string | 内部资产名 |
amount | string | 转账金额 |
recipient | string | 接收地址 |
代码示例
//args参数示例
let currency = 'TEST.TXC'
let amount = '10000000'
let recipient = 'A3w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'
//args组成
let args = [currency,amount,recipient]
type:200
fee: 100*xAX
args: [name,desc,link,icon,delegates,unlockNumber]
名称 | 类型 | 说明 |
---|---|---|
name | string | dapp名 |
desc | string | 描述 |
link | string | 链接 |
icon | string | 图标 |
delegates | string | 委托人 |
unlockNumber | number | 最少需求数 |
代码示例
//args内参数说明
let name = 'dappTest' //dapp名称
let desc = '一些文本描述'
let link = 'http://yourdomain/dapp.zip' //dapp的安装文件链接
let icon = 'htpps//yourdomain/logo.png' //dapp的图标链接
//委托人数组delegate是一个数组,里面的数据是委托人的公钥
let delegates = [
"0352486d87c928918638c8a13c7e4765f2c9fa075318bd680b8d95e1cf1d616f",
"cbb3671d343628fe03fba2f0139b783a7b86445f79ee55c99bf5bbe380e4fb46",
"2f23a9659e32032910b8e078c0c980c6cb7c3a052a235a59079bfd6d608ecc95",
"351c081c470f41620f4709b6b3ca3721dc920d4e528b27b8fa4d88635e53e128",
"cbd808111a08081f7dc93aafd9fe26a70216e3f42d927660ab8d15b7bdf8998c"
]
//最少需要的委托人个数(需要委托人共同决定)
let unlockNumber = 3
//构建args
let args = [name,desc,link,icon,delegates,unlockNumber]
type:204
fee: 0.1*xAX
args: [chainName,currency,amount]
名称 | 类型 | 说明 |
---|---|---|
chainName | string | 应用名(dapp) |
currency | string | 资产币名 |
amount | string | 金额数量 |
代码示例
//args参数示例
let chainName = 'dappTest'
let currency = 'XAS' //也可以是TEST.TXC内部资产币
let amount = '1000000000'
//args构造
let args = [chainName,currency,amount]
type:205
fee: 0.1*xAX
args: [chainName,recipient,currency,amount,oid,seq]
名称 | 类型 | 说明 |
---|---|---|
chainName | string | 应用名 |
recipient | string | 接收地址 |
currency | string | 资产名 |
amount | string | 提现金额 |
oid | string | |
seq | string |
type:301
fee: 10*xAX
args: [title,desc,topic,content,endHeight]
名称 | 类型 | 说明 |
---|---|---|
title | string | 提案标题 |
desc | string | 描述 |
topic | string | 提案类型 |
content | string | 内容 |
endHeight | string | 提案结束日期 |
代码示例
//args参数示例
let title = 'title fo propose' // len: 10-100
let desc = 'some describes of this propose'
let topic = '提案的类型(下面详细介绍)'
let content = '提案类型所需要的参数(下面详细介绍)'
let endHeight = 50000 //结束高度
//构造args
let args = [title,desc,topic,content,endHeight]
对不同提案类型给出不同的参数
//提案类型
let topic = 'gateway_register'
//下面构造content,对于新增网关提案,需要提供提案的名称,描述,最少成员,更新间隔,资产信息等
let name = 'aschCoin' //3-16位大小写字母数字
let desc = 'aschyu: test the gateway register'
let minimumMembers = 3 //网关最少成员数,这个数值的范围应当在3-33之间的整数,
let updateInterval = 8640 //更新频率,这个值应当是大于8640的
let symbol = 'TEC' //比如发行的币叫TEC
let currencyDesc = 'some describes of currency' //资产描述
let precsion = 1 //资产精度
let currency = {symbol:symbol,
currencyDesccurrencyDesc,
precsion:precsion}
//下面构造这个content
let content = {name:name,
desc:desc,
minimumMembers:minimumMembers,
updateInterval:updateInterval,
currency:currency}
//提案类型
let topic = 'gateway_init'
//下面构造content
let gateway = 'bitcoin' //网关的名字
let members = [ //初始网关的成员
'A5eTVn2Mz5p2j6SjGKdgvmUc2vMsSvKzuy',
'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj',
'A4ncaYtKRrD8YS2Mi82HbwGEE9DxqsbEr9'
]
//下面构造这个content
let content = {gateway:gateway,
members:members
}
//提案类型
let topic = 'gateway_update_member'
//下面构造content
let gateway = 'bitcoin' //网关的名字
let form = 'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj' //要撤销的成员地址
let to = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ' //要添加的成员地址
//下面构造这个content
let content = {gateway:gateway,
from:from,
to:to
}
//提案类型
let topic = 'gateway_revoke' //这个参数较少,只需要网关的名字即可
//下面构造content
let gateway = 'bitcoin' //网关的名字
//下面构造这个content
let content = {gateway:gateway}
type:302
fee: 0.1*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
pid | string | 提案的编号 |
代码示例
//args参数示例
let pid = 'transactionId' //发起提案的交易id
//构造args
let args = [pid]
type:303
fee: 0*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
pid | string | 提案的编号 |
代码示例
//args参数示例
let pid = 'transactionId' //发起提案的交易id
//构造args
let args = [pid]
type:400
fee: 0.1*xAX
args: [gateway]
名称 | 类型 | 说明 |
---|---|---|
gateway | string | 网关的名字 |
代码示例
//args参数示例
let gateway = 'bitcoin' //网关名字
let args = [gateway]
type:401
fee: 100*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
gateway | string | 网关名字 |
publicKey | string | 成员公钥 |
desc | string | 描述 |
代码示例
//args参数示例
let gateway = 'bitcoin'
let publicKey = 'c03e43c7e8aefe3b5a83e02a7b4dc8cce84bb787202650338e85d1b7758065d6'
let desc = 'aschyu: some describes of resgiter member'
//构造args
let args = [gateway,publicKey,desc]
type:402
fee: 0.01*xAX
args: [gateway,address,currency,amount,oid]
名称 | 类型 | 说明 |
---|---|---|
gateway | string | 网关名字 |
address | string | 存款地址 |
currency | string | 货币 |
amount | string | 数额 |
oid | string |
代码示例
//args参数示例
let gateway = 'bitcoin'
let address = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'
let currency = 'BTC'
let amount = '100000000000'
let oid = ''
//构造args
let args = [gateway,address,currency,amount,oid]
type:403
fee: 0*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
address | string | 提现地址 |
gateway | string | 网关名字 |
currency | string | 货币 |
amount | string | 数量 |
fee | string | 手续费 |
代码示例
//args参数说明
let gateway = 'bitcoin'
let address = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'
let currency = 'BTC'
let amount = '100000000000' //转账的金额
let fee = '200000000' //网关收取的手续费
//构造args
let args = [address,gateway,currency,amount,fee]
type:404
fee: 0.01*xAX
args: [wid,ot,ots]
名称 | 类型 | 说明 |
---|---|---|
wid | string | 提现id |
ot | string | 交易数据 |
ots | string |
代码示例
type:405
fee: 0.01*xAX
args: [wid,signature]
名称 | 类型 | 说明 |
---|---|---|
wid | string | 提现id |
signature | string | 签名 |
代码示例
type:406
fee: 0.01*xAX
args: [wid,oid]
名称 | 类型 | 说明 |
---|---|---|
wid | string | 提现id |
oid | string |
type:500
fee: 0*xAX
args: [targetId]
名称 | 类型 | 说明 |
---|---|---|
targetId | string | 目标ID |
代码示例
//args参数示例
let targetId = 'f80dcf3d520cc14e963ddf4aedd6ae42db92795fc80ac3738c2be5b3aa5c9238' //交易id
let args = [targetId]
type:501
fee: 0*xAX
args: [targetId]
名称 | 类型 | 说明 |
---|---|---|
targetId | string | 目标ID |
代码示例
//args参数示例
let targetId = 'f80dcf3d520cc14e963ddf4aedd6ae42db92795fc80ac3738c2be5b3aa5c9238' //交易id
let args = [targetId]
type:502
fee: 1*xAX
args: [address,weight,m]
名称 | 类型 | 说明 |
---|---|---|
address | string | 成员地址 |
weight | string | 权重 |
m | number |
代码示例
//args参数示例
let address = 'AMySpLqC4bEgQ8VoYK1iWNEEuhRtjS59Bt'
let weight = ''
let m = 1
let args = [address,weight,m]
type:503
fee: 1*xAX
args: [address,m]
名称 | 类型 | 说明 |
---|---|---|
address | string | 成员地址 |
m | number |
代码示例
//args参数示例
let address = 'AMySpLqC4bEgQ8VoYK1iWNEEuhRtjS59Bt'
let m = 1
let args = [address,m]
type:504
fee: 1*xAX
args: [form,to,weight,m]
名称 | 类型 | 说明 |
---|---|---|
form | string | 将被替换成员 |
to | string | 新来成员 |
weight | string | 权重 |
m | number |
//args参数示例
let form = 'AMySpLqC4bEgQ8VoYK1iWNEEuhRtjS59Bt'
let to = 'A3gmKrzbTALHpJv2SDZ2SaoyA44Ei9miJC'
let weight = ''
let m = 1
let args = [form,to,weight,m]
当前很多人(包括普通用户、前后端开发人员)对产品的基本功能不了解(有些概念不明白,比如什么是UIA、和XAS的区别是什么),而现有的功能说明文档都已帖子的形式存在,比如注册Asch账户、设置二级密码、发行资产等
Dapp的出块周期也是10S?
When I try to run code ./aschd start
, it will throw out an error:
./aschd: line 33: /Users/user/project/asch-linux-1.4.5-localnet/bin/node: cannot execute binary file
so what should I do?
version:1.4.5-localnet
mac10.14.1
node:v10.15.1
用户自定义资产黑名单地址列表里的地址不具有什么权限?
目前有个别接口文档没有跟上代码的进度,比如锁仓相关的(执行锁仓、查看该用户是否锁仓),每次发版前根据release notes去校对然后保持相同的版本号是不是会好一些?
另外英文文档比中文的落后~
when i run asch-cli dapps -a ,and fill all the information ,then finally it says createDapp is not a function
阿希团队于今日(2019.1.2)正式发布Asch v1.4.7 版本,建议所有节点进行升级。
本次升级主要解决的问题:
首先查看节点的版本(使用./aschd version
命令),根据版本选择升级策略。
运行 ./aschd upgrade
选择合适的节点(一般建议选择0或者1)
升级完以后运行./aschd start
即可
观察区块同步情况
请直接下载最新安装包
wget http://china.aschcdn.com/asch-linux-latest-mainnet.tar.gz
将原来版本的 data 覆盖过来即可;
使用快照:
wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz
解压替换 asch 目录下的 data 目录即可。
使用git clone 克隆 asch 最新代码,运行npm install
即可(注意不要使用 npm缓存)
系统: CentOS 7.4
yum install curl sqlite3 ntp wget git libssl-dev openssl make gcc g++ autoconf automake python build-essential gcc-c++ -y
yum install libtool -y
安装 node.js 推荐使用V8.x.x 版本
# Install nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
# This loads nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# Install node and npm for current user.
nvm install v8
# check node version and it should be v8.x.x
node --version
git clone https://github.com/AschPlatform/asch
git checkout v1.4.6 // 切换到1.4.6版本,也可以根据需要切换到其他版本
npm install
备注: 此处依赖较多,可能需要较长时间
mkdir -p public/dist
mkdir chains
cd public/dist
wget http://china.aschcdn.com/frontend-mainnet-5f5b3cf5.zip
unzip frontend-mainnet-5f5b3cf5.zip
cd ~
wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz
tar zvxf blockchain-mainnet-snapshot.tar.gz
cd asch
NET_VERSION=mainnet node app.js -g genesisBlock.json -c config-mainnet.json --data /root/data -p 7001 -a 172.26.138.86 -d
报Asch server has already started
,请删除 asch 目录下的asch.pid,再重新启动。
对比自己节点区块高度和最新区块高度。最新区块高度:https://wallet.asch.cn/api/blocks/getHeight。 如果发现自己节点的高度一直落后且不增长,可以断定为自己的节点没有同步区块。
解决方法:
./aschd upgrade
./aschd start
./aschd rebuild
在安装完节点以后,后续节点的升级可以通过简单的./aschd upgrade
来完成,不必重复安装。
进入 asch 目录执行命令:
./aschd upgrade
./aschd start
# 启动节点
./aschd start
# 停止节点
./aschd stop
# 查看节点运行状态
./aschd status
# 重启节点
./aschd restart
# 升级节点
./aschd upgrade
# 重新同步区块
./aschd rebuild
# 查看节点版本
./aschd version
# 开启区块生产(仅供受托人使用)
./aschd enable "your sercret"
# 查看log
tail -f logs/debug.201xxxxx.log
阿希团队于今日(2018.12.5)正式发布Asch v1.4.6 版本,建议所有节点进行升级。
本次升级主要解决的问题:
首先查看节点的版本(使用./aschd version
命令),根据版本选择升级策略。
运行 ./aschd upgrade
选择合适的节点(一般建议选择0或者1)
升级完以后运行./aschd start
即可
观察区块同步情况
请直接下载最新安装包
wget http://china.aschcdn.com/asch-linux-latest-mainnet.tar.gz
将原来版本的 data 覆盖过来即可;
使用快照:
wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz
解压替换 asch 目录下的 data 目录即可。
使用git clone 克隆 asch 最新代码,运行npm install
即可(注意不要使用 npm缓存)
Dear @liangpeili
the documentation for the asch-js package is not up to date.
What is the best method to fix this? Should the Chinese version first gets updated by e.g. @yuxingwei and I will update the English version after that? Or should I update the English version first and the Chinese version gets updated after that?
Thanks!
All the best
a1300
[TOC]
1.1 构造请求数据,用户数据按照Asch提供的接口规则,通过程序生成签名,生成请求数据集合;
1.2 发送请求数据,把构造完成的数据集合通过POST/GET等提交的方式传递给Asch;
1.3 Asch对请求数据进行处理,服务器在接收到请求后,会首先进行安全校验,验证通过后便会处理该次发送过来的请求;
1.4 返回响应结果数据,Asch把响应结果以JSON的格式反馈给用户,每个响应都包含success字段,表示请求是否成功,成功为true, 失败为false。 如果失败,则还会包含一个error字段,表示错误原因;
1.5 对获取的返回结果数据进行处理;
接口地址:/api/accounts/open2/
请求方式:post
支持格式:json
接口备注:根据用户密码在本地客户端用js代码生成公钥
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
publicKey | string | Y | asch账户公钥 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否登陆成功 |
account | json | 账户信息 |
请求示例:
var secret = 'Asch账户密码' //在浏览器内存中保留
var AschJS = require('asch-js'); //asch-js具体安装方法见附录
var publicKey = AschJS.crypto.getKeys(secret).publicKey; //根据密码生成公钥
// var address = AschJS.crypto.getAddress(publicKey); //根据公钥生成地址
// 将上面生成的数据通过post提交到asch server
curl -X POST -H "Content-Type: application/json" -k -d '{"publicKey":"116025d5664ce153b02c69349798ab66144edd2a395e822b13587780ac9c9c09"}' http://192.168.1.78:7800/api/accounts/open2/
JSON返回示例:
{
"success": true,
"account": {
"address": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"unconfirmedBalance": 8809754854306082,
"balance": 8809754854306082,
"secondPublicKey": null,
"lockHeight": 0,
"publicKey": "116025d5664ce153b02c69349798ab66144edd2a395e822b13587780ac9c9c09"
},
"latestBlock": {
"height": 31088,
"timestamp": 67090300
},
"version": {
"version": "1.4.2",
"build": "21:04:40 09/08/2018",
"net": "testnet"
}
}
接口地址:/api/accounts/open/
请求方式:post
支持格式:json
接口备注:将密码传入到server端,根据生成的地址去查询账户信息。不推荐在公网坏境使用!
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
secret | string | Y | asch账户密码 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否登陆成功 |
account | json | 账户信息 |
请求示例:
curl -X POST -H "Content-Type: application/json" -k -d '{"secret":"tunnel hope keep manual balcony quantum phrase deer prefer vivid deer hazard"}' http://192.168.1.78:7800/api/accounts/open/
JSON返回示例:
{
"success": true,
"account": {
"address": "AFLqemsfDpZoLqhWkiHzWHncfSjAPNwwBt",
"unconfirmedBalance": 0,
"balance": 0,
"secondPublicKey": "",
"lockHeight": 0,
"publicKey": "371ab8e451b413e6db647e3f58d3923eb3b43f3c3c3a46fcc221c58207c158ed"
},
"latestBlock": {
"height": 31105,
"timestamp": 67090480
},
"version": {
"version": "1.4.2",
"build": "21:04:40 09/08/2018",
"net": "testnet"
}
}
接口地址:/api/v2/accounts/:address
请求方式:GET
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
address | string | Y | asch账户地址 |
请求示例
curl -k -X GET 'http://192.168.1.78:7800/api/v2/accounts/ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5'
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功得到数据 |
account | string | 账户信息 |
latestBlock | string | 最后区块 |
version | string | 版本信息 |
JSON返回示例: |
{
"success": true,
"account": {
"address": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"name": null,
"xas": 4898157546529489,
"publicKey": null,
"secondPublicKey": null,
"isLocked": 0,
"isAgent": 0,
"isDelegate": 0,
"role": 0,
"lockHeight": 0,
"agent": null,
"weight": 0,
"agentWeight": 0,
"_version_": 855
},
"unconfirmedAccount": {
"address": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"xas": 4898157546529489,
"name": null,
"isLocked": 0,
"isAgent": 0,
"isDelegate": 0,
"role": 0,
"lockHeight": 0,
"weight": 0,
"agentWeight": 0,
"_version_": 855
},
"latestBlock": {
"height": 6630,
"timestamp": 66723500
},
"version": {
"version": "1.4.1",
"build": "14:57:08 08/08/2018",
"net": "testnet"
}
}
接口地址:/api/v2/balances/:address
请求方式:GET
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
address | string | Y | 用户地址 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/v2/balances/A9Evp9iYWtSUSBQc8yuWtBT2ReBkvzXDxB'
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
balances | Array | 余额数组 |
JSON返回示例:
{
"success": true,
"count": 2,
"balances": [
{
"address": "A9Evp9iYWtSUSBQc8yuWtBT2ReBkvzXDxB",
"currency": "asch.TSC",
"balance": "1000000000",
"flag": 2,
"_version_": 1,
"asset": {
"name": "asch.TSC",
"tid": "d3d32d1b8b9daddf9d2e4af033dda1a04cb9fefe31121bd2317fe98b53c1ba89",
"timestamp": 66726839,
"maximum": "1000000000000",
"precision": 1,
"quantity": "1000000000",
"desc": "test",
"issuerId": "A9Evp9iYWtSUSBQc8yuWtBT2ReBkvzXDxB",
"_version_": 2
}
},
{
"address": "A9Evp9iYWtSUSBQc8yuWtBT2ReBkvzXDxB",
"currency": "asch.TTC",
"balance": "100000000000",
"flag": 2,
"_version_": 1,
"asset": {
"name": "asch.TTC",
"tid": "17cdd6ac2444f6e50f316ea4f73851a547a797d0fc708b8898094e06f94dffa2",
"timestamp": 66726992,
"maximum": "10000000000000000000",
"precision": 1,
"quantity": "100000000000",
"desc": "test2",
"issuerId": "A9Evp9iYWtSUSBQc8yuWtBT2ReBkvzXDxB",
"_version_": 2
}
}
]
}
接口地址:/api/accounts/delegates
请求方式:get
支持格式:无
请求参数:
名称 | 类型 | 说明 |
---|---|---|
address | string | 账户地址 |
请求示例
curl -k -X GET 'http://192.168.1.78:7800/api/accounts/delegates?adddress=APSu9NhiCTtvRGx1EpkeKNubiApiBWMf7T'
返回示例
{
"success": true,
"delegates": [] //如果有人投票,会有投票人信息
}
接口地址:/api/accounts/new
请求方式:get
支持格式:无
请求参数:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
secret | string | 密码 |
publicKey | string | 公钥 |
privateKey | string | 私钥 |
address | string | 地址 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/accounts/new'
JSON返回示例:
{
"success": true,
"secret": "ginger angle fury grow differ about bamboo swim transfer mixed era radio",
"publicKey": "bb201d25fae05de56d0450932b0603eb3c6e8b001ea6215a49f392aaa94b241d",
"privateKey": "026c7eb8876354a9480e1ca1cba4919760d1c1e998830cd66e5e01b6370002f6bb201d25fae05de56d0450932b0603eb3c6e8b001ea6215a49f392aaa94b241d",
"address": "A3xBcFQHcubF8qUE8mcmFZFN2WdUA8KGvV"
}
接口地址:/api/accounts/count
请求方式:get
支持格式:无
请求参数:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
count | integer | 当前链上账户总个数 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/accounts/count'
JSON返回示例:
{
"success": true,
"count": 144
}
接口地址:/api/v2/transactions
请求方式:GET
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
orderBy | string | N | 排序方式 |
height | number | N | 交易所所在高度 |
senderId | string | N | 交易签名者地址 |
message | string | N | 交易备注 |
offset | number | N | |
limit | number | N | 个数限制 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/v2/transactions?senderId=A7Vbt5h3WgaXLSJhUeHnRRcwvkGF3ecS7r&orderBy=height:desc&offset=1&limit=3'
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功得到数据 |
transactions | Array | 交易数组 |
JSON返回示例:
{
"success": true,
"transactions": [
{
"id": "a567a422dd23940ef194633b67f4659132c402e7c078d758176f72dc9261c578",
"type": 301,
"timestamp": 66763492,
"senderId": "A7Vbt5h3WgaXLSJhUeHnRRcwvkGF3ecS7r",
"senderPublicKey": "4110e2ab06a075ff540cbcd9af5d7cce3a416595e7c259f15065895f7c84d16f",
"requestorId": null,
"fee": 10000000,
"signatures": [
"4f1da7d296c3b84ab8bd7e8ffdbe1503db690138d9958f253b02ddaaca65706a55a9fbe75d14cefffb8dae65684fa8e24c3a02403ac01121b2c0fd0cbf44ce04"
],
"secondSignature": null,
"args": [
"f4a5cf6c2c989a6d454a828ce0d9a16f883f8a5e180899e0485256f97e76a88a"
],
"height": 38,
"message": null,
"mode": 0,
"_version_": 1
},
{
"id": "70d62c62f9ecf4bfb155cbf3758d2380daa83c4e774a54fc8690b04b26916a16",
"type": 302,
"timestamp": 66763452,
"senderId": "A7Vbt5h3WgaXLSJhUeHnRRcwvkGF3ecS7r",
"senderPublicKey": "4110e2ab06a075ff540cbcd9af5d7cce3a416595e7c259f15065895f7c84d16f",
"requestorId": null,
"fee": 0,
"signatures": [
"c8fcfc7543f24fb41d5b7a510bf8a4157bfff80431e5dbfe65f57f2b7071fdedc0c876d284ed84b7ba3c1787654b312667e4eef56eb77e8081537c2d6d1e260c"
],
"secondSignature": null,
"args": [
"8b1af4f00e7efb8704faa089cd7c9643a073bd6fddde847a8fdc7ba21c542e7e"
],
"height": 34,
"message": null,
"mode": 0,
"_version_": 1
},
{
"id": "549b787c45d26268d4a51caa6084d7e432c2cc8e75060682ecd80d0f90c84a7c",
"type": 301,
"timestamp": 66763442,
"senderId": "A7Vbt5h3WgaXLSJhUeHnRRcwvkGF3ecS7r",
"senderPublicKey": "4110e2ab06a075ff540cbcd9af5d7cce3a416595e7c259f15065895f7c84d16f",
"requestorId": null,
"fee": 10000000,
"signatures": [
"86f0dc7fb6b18ce627966550a85c704fe4c912660f839d384801dacddb19bbe548090672863a3cedd23506dcbb1587dc72293292b78cfc3fc43688c3e961d205"
],
"secondSignature": null,
"args": [
"8b1af4f00e7efb8704faa089cd7c9643a073bd6fddde847a8fdc7ba21c542e7e"
],
"height": 33,
"message": null,
"mode": 0,
"_version_": 1
}
],
"count": 10
}
接口地址:/api/v2/transactions/:tid
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
tid | string | Y | 交易ID |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/v2/transactions/e19a3ae0090208c3e2e1289d12b80511eca5ceb814d20f0cf37bd2e37942f820'
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
transaction | string | 交易信息 |
JSON返回示例:
{
"success": true,
"transaction": {
"id": "e19a3ae0090208c3e2e1289d12b80511eca5ceb814d20f0cf37bd2e37942f820",
"type": 302,
"timestamp": 66655963,
"senderId": "A7Vbt5h3WgaXLSJhUeHnRRcwvkGF3ecS7r",
"senderPublicKey": "4110e2ab06a075ff540cbcd9af5d7cce3a416595e7c259f15065895f7c84d16f",
"requestorId": null,
"fee": 10000000,
"signatures": [
"19f3c4d10b2fad290aedbc429ff8f2797789fb2cd547f49d5506fdc3ae7b412def388caf65a24e4c25226d71a3c2644a04f16672c1bf62b004be2e547c9bed0a"
],
"secondSignature": null,
"args": [
"52e2f5a04d30cf7e3d22e9c1b57d236d358f581446c7d851e3c0373f97d9f8f4"
],
"height": 145,
"message": null,
"mode": 0,
"_version_": 1
}
}
接口地址:/api/transactions/unconfirmed/get
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
id | string | Y | 未确认交易id |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
transaction | json | 未确认交易详情 |
请求示例:
curl -k -X GET http://45.32.248.33:4096/api/transactions/unconfirmed/get?id=e19a3ae0090208c3e2e1289d12b80511eca5ceb814d20f0cf37bd2e37942f820 // 正常情况,该未确认交易存在时间极短0~10秒
JSON返回示例:
{
"success": true,
"transaction": {
"type": 0,
"amount": 10000,
"senderPublicKey": "3ec1c9ec08c0512641deba37c0e95a0fe5fc3bdf58424009f594d7d6a4e28a2a",
"requesterPublicKey": null,
"timestamp": 5082322,
"asset": {
},
"recipientId": "16723473400748954103",
"signature": "3a97f8d63509ef964bda3d816366b8e9e2d9b5d4604a660e7cbeefe210cb910f5de9a51bece06c32d010f55502c62f0f59b8224e1c141731ddfee27206a88d02",
"id": "7557072430673853692",
"fee": 10000000,
"senderId": "15238461869262180695"
}
}
接口地址:/api/transactions/unconfirmed
请求方式:get
支持格式:urlencoded
接口说明:如果不加参数,则会获取全网所有未确认交易
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
senderPublicKey | string | N | 发送者公钥 |
address | string | N | 地址 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
transactions | Array | 未确认交易列表 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/transactions/unconfirmed'
JSON返回示例:
{
"success": true,
"transactions": [] //全网目前不存在未确认的交易
}
接口地址:/api/v2/transfers
请求方式:get
支持格式:urlencoded
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/v2/transfers?limit=2'
JSON返回示例:
{
"success": true,
"count": 258,
"transfers": [
{
"tid": "fd2076bad0516519f3b3592369690c7e618070ad6aa352db9470277d7117a43c",
"senderId": "A7Z9eGfMbBWXFucRouZpYhGhFCALVAXH9n",
"recipientId": "AAhRVPqQkiZyAXnfTnCTDqVZBg3nphywfJ",
"recipientName": "account2",
"currency": "XAS",
"amount": "30000000",
"timestamp": 66767962,
"height": 465,
"_version_": 1,
"transaction": {
"id": "fd2076bad0516519f3b3592369690c7e618070ad6aa352db9470277d7117a43c",
"type": 1,
"timestamp": 66767962,
"senderId": "A7Z9eGfMbBWXFucRouZpYhGhFCALVAXH9n",
"senderPublicKey": "c9ca6e4f768946ffc391c22b509f5d69244459e3ffdb45aed1bd52d84d7c069f",
"requestorId": null,
"fee": 10000000,
"signatures": [
"63e4d33bbe2ca88eb40bfc454ac83564a535e98a30d4fe03d85cfdd02e527e56faec969655c6aeeb1a4f62411ad3ed1fbbe58c34b1ff9190d469c0c304921901"
],
"secondSignature": "790e01e692ed0f1694d69124de747cc80c9937a108435ed8978aed1ab124e4a22e59568ca85e32ae0835d5b4551d3d7e90636f5a805f5019c0b8cf6b26183807",
"args": [
"30000000",
"account2"
],
"height": 465,
"message": "",
"mode": 0,
"_version_": 1
}
},
{
"tid": "ca1337111343caf92d5f35c960748fb041937b516a8f27c77e7e2581c70c32ec",
"senderId": "AFcaWmL5tL2sbGaEcxYoiABfCesd8MsS3L",
"recipientId": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"recipientName": "",
"currency": "ZuoRight.SKR",
"amount": "123456789",
"timestamp": 66765287,
"height": 212,
"_version_": 1,
"asset": {
"name": "ZuoRight.SKR",
"tid": "6bf841ee5bc6d1586e12d5a88af0ca7fa28898e598a9533fab2964d7e12251ce",
"timestamp": 66763735,
"maximum": "100000000000000",
"precision": 8,
"quantity": "1100000000000",
"desc": "赞",
"issuerId": "AFcaWmL5tL2sbGaEcxYoiABfCesd8MsS3L",
"_version_": 3
},
"transaction": {
"id": "ca1337111343caf92d5f35c960748fb041937b516a8f27c77e7e2581c70c32ec",
"type": 103,
"timestamp": 66765287,
"senderId": "AFcaWmL5tL2sbGaEcxYoiABfCesd8MsS3L",
"senderPublicKey": "b304597cf41582a20ebdbb4a832dd461962bf7a20e5361b0447741079df732a0",
"requestorId": null,
"fee": 10000000,
"signatures": [
"1ccada819490d1ce5012aab70559a290c7d82a54ea35033ab16e476496db0d752393339ab6a408f923167025b68a4bf8dfc8d0f16f4af404ee55087a6cb78b07"
],
"secondSignature": "9af3ee91364c3d5c789b7d4cb0d558398d260e4928dfbf3491a2e0f4a31f4121e22f292d3e585d3f6a61c4b7f6072b971426fd97959a50e97893b44ef3b5a306",
"args": [
"ZuoRight.SKR",
"123456789",
"ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5"
],
"height": 212,
"message": "",
"mode": 0,
"_version_": 1
}
}
]
}
接口地址:/api/blocks/get
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
id | string | 参数3选1 | 区块id |
height | string | 参数3选1 | 区块高度 |
hash | string | 参数3选1 | 区块hash |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
block | json | 区块详情 |
请求示例:
curl -k -X GET 'http://45.32.248.33:4096/api/blocks/get?id=6076474715648888747'
JSON返回示例:
{
"success": true,
"block": {
"id": "6076474715648888747",
"version": 0,
"timestamp": 4734070,
"height": 140538,
"previousBlock": "16033230167082515105", //上一个区块id
"numberOfTransactions": 0, //交易数
"totalAmount": 0, //交易额
"totalFee": 0,
"reward": 350000000, //奖励
"payloadLength": 0,
"payloadHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"generatorPublicKey": "1d352950c8141e1b35daba4a974a604519d7a2ef3a1ec0a503ce2653646aa052",
"generatorId": "6656029629904254066",
"blockSignature": "a53de66922cdc2f431acd0a474beec7cf7c420a8460b7b7caf84999be7caebb59fb7fbb7166c2c7013dbb431585ea7294722166cb08bf9663abf50b6bd81cd05",
"confirmations": "2",
"totalForged": 350000000
}
}
接口地址:/api/blocks
请求方式:get
支持格式:urlencoded
接口说明:不加参数则获取全网区块详情
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
limit | integer | N | 限制结果集个数,最小值:0,最大值:100 |
orderBy | string | N | 根据表中字段排序,如height:desc |
offset | integer | N | 偏移量,最小值0 |
generatorPublicKey | string | N | 区块生成者公钥 |
totalAmount | integer | N | 交易总额,最小值:0,最大值:10000000000000000 |
totalFee | integer | N | 手续费总额,最小值:0,最大值:10000000000000000 |
reward | integer | N | 奖励金额,最小值:0 |
previousBlock | string | N | 上一个区块 |
height | integer | N | 区块高度 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
blocks | Array | 由区块详情json串构成的数组 |
count | integer | 区块链高度 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks?limit=2&offset=350&orderBy=height:desc'
JSON返回示例:
{
"success": true,
"count": 31354,
"blocks": [
{
"id": "ebd8cbfe7e23dd92d540c74e5cbfcdd4b37820c33d06daee85ad91629a14bab1",
"version": 0,
"timestamp": 66766780,
"height": 350,
"payloadHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"previousBlock": "7e3723ee2f7cc9a6db4969c18c03bb9eca5c03c3b2621a354e5fde7febe270ae",
"numberOfTransactions": 0,
"totalFee": 0,
"generatorPublicKey": "462f9b3bf59811b33d62b71c33f52054dd0b823c590a4724dddbf4a702de71d8",
"blockSignature": "169e313644a26977ec5f8793cfd323a8ce5450d479cd37379a80937a9df5c69a8066d7583b4c972c5e5593068578da0ed8b1f268f3b1fa8c19695ce392370906",
"confirmations": 31003
},
{
"id": "8525943d43661e23d47767a60886f465ad8b93fc59c9bc850f69112ed2e09fa0",
"version": 0,
"timestamp": 66766790,
"height": 351,
"payloadHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"previousBlock": "ebd8cbfe7e23dd92d540c74e5cbfcdd4b37820c33d06daee85ad91629a14bab1",
"numberOfTransactions": 0,
"totalFee": 0,
"generatorPublicKey": "97b43c8f58a395a0dc8e4e95d35e67772b70e4a00de611e1c2f73501e8e3bf15",
"blockSignature": "79685c090b6725496d6fd96791d1ef4af0f4b25d81596047be6a3988aaf976dcce56b64298936fad43a1a31b8d350cc55b78999979a348871f1d6b5df7eea30e",
"confirmations": 31002
}
]
}
接口地址:/api/blocks/getHeight
请求方式:get
支持格式:无
请求参数说明:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
height | integer | 区块链高度 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks/getheight'
JSON返回示例:
{
"success": true,
"height": 31363
}
接口地址:/api/blocks/getMilestone
请求方式:get
支持格式:无
请求参数说明:无
返回参数说明:
名称 | 类型类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
milestone | integer |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks/getMilestone'
JSON返回示例:
{
"success": true,
"milestone": 0
}
接口地址:/api/blocks/getReward
请求方式:get
支持格式:无
请求参数说明:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
reward | integer | 区块奖励,包含受托人奖励和手续费 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks/getReward'
JSON返回示例:
{
"success": true,
"reward": 350000000
} //每个生成一个block奖励3.5 XAS
接口地址:/api/blocks/getSupply
请求方式:get
支持格式:无
请求参数说明:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
supply | integer | 全网XAS个数 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks/getSupply'
JSON返回示例:
{
"success": true,
"supply": 10010958150000000
} //当前testnet共有100109581.5XAS
接口地址:/api/blocks/getStatus
请求方式:get
支持格式:无
请求参数说明:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
height | integer | 区块链高度 |
fee | integer | 交易手续费 |
milestone | integer | |
reward | integer | 区块奖励 |
supply | integer | 全网XAS个数 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks/getStatus'
JSON返回示例:
{
"success": true,
"height": 31385,
"fee": 10000000,
"milestone": 0,
"reward": 350000000,
"supply": 10010958150000000
}
接口地址:/api/blocks/full
请求方式:get
支持格式:无
请求参数说明:无
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
id | string | 参数2选1 | 区块id |
height | string | 参数2选1 | 区块高度 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
block | json | 区块详情,包含交易信息transactions |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/blocks/full?height=34'
JSON返回示例:
{
"success": true,
"block": {
"id": "256e00b56508346cc1a98977781a08052a9a5ec6d94c1a7e1941b4ea06433be1",
"version": 0,
"timestamp": 66763460,
"height": 34,
"payloadHash": "faa4237e78e2793eb9a55fcec17febaa08f40c0e58584e14fee382b99109b75a",
"previousBlock": "f892df4f142ec84a28318b660cd4d4f17651f72699afb973779e7ffd0584f816",
"numberOfTransactions": 6,
"totalFee": 50000000,
"generatorPublicKey": "992ba4a33527432dbe05b26c783ec72e151867c035c0e91194b812ab92703e0b",
"blockSignature": "db97d94aa73d6ce522eeb5e2a28fb148d0ca94d9e0120aed6bf6f5e1f476843ac966d11c27cb5f5dcc9daff940a628fed0ca7ce9df6bf1b99da2baa60498b20e",
"confirmations": 31370,
"transactions": [
{
"id": "14ada84f1ba58dad5cbaf386af0e101eaacbaa20ac1e5de40a75b202f4018ebf",
"height": 34,
"timestamp": 66763431,
"senderPublicKey": "30620e9f06c11fdb4466b3bfcc031568de60a518da07cd5daffbac0d4c6b3858",
"senderId": "G3sQzuWpvXZjxhoYnvvJvnfUUEo8aNzKdj",
"message": null,
"fee": 20000000,
"blockId": "256e00b56508346cc1a98977781a08052a9a5ec6d94c1a7e1941b4ea06433be1",
"recipientId": "A3gmKrzbTALHpJv2SDZ2SaoyA44Ei9miJC",
"amount": 11230,
"asset": {},
"confirmations": 31370,
"type": 0,
"signature": "c80b6fc96176df8f13d80b893fe961ee97d3ed8220d33c9b166eb5582d71468e07721ad8a6f1e96a28de98ee6bda19db65829cf307d2703bacaeb213cf9f440a",
"signatures": null,
"args": {},
"argsNew": [
11230,
"A3gmKrzbTALHpJv2SDZ2SaoyA44Ei9miJC"
]
}
{
"id": "b7a1e870c72afe435a8b969d96b0882bbe20a46ee269cf0040d5d84f0ef96c15",
"height": 34,
"timestamp": 66763453,
"senderPublicKey": "0493ad806622a6976146f976e7fe843df741897617a635201c778d094aab09ba",
"senderId": "AECGLMi8yQVvQRDpDCB6u8qHHQF7oD7VP7",
"message": null,
"fee": 10000000,
"blockId": "256e00b56508346cc1a98977781a08052a9a5ec6d94c1a7e1941b4ea06433be1",
"recipientId": "ALqyjLbk3Ci45SPUiHU38qa9xmqkMreftq",
"amount": 0,
"asset": {
"uiaTransfer": {
"currency": "CCTime.XCT",
"amount": "100000"
}
},
"confirmations": 31370,
"type": 14,
"signature": "25afd59c09d3e84a03268b39fd7418c15ad7216e9000ea9cb2568253b716c1de20aa29ed8cf5104a0d816ed671b8cad6fc6afa504d607aa7fbdb74b8189e2f00",
"signatures": null,
"args": {},
"argsNew": [
"CCTime.XCT",
"100000",
"ALqyjLbk3Ci45SPUiHU38qa9xmqkMreftq"
]
}
]
}
}
接口地址:/api/delegates/count
请求方式:get
支持格式:无
请求参数说明:无
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
count | integer | 受托人总个数 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/delegates/count'
JSON返回示例:
{
"success": true,
"count": 106
}
接口地址:/api/delegates/voters
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
name | string | Y | 受托人名字 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
accounts | Array | 账户json串组成的数组 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/delegates/voters?name=asch_g59'
JSON返回示例:
{
"success": true,
"accounts": [
{
"address": "AAhRVPqQkiZyAXnfTnCTDqVZBg3nphywfJ",
"name": "account2",
"xas": 9990120000000,
"publicKey": null,
"secondPublicKey": null,
"isLocked": 0,
"isAgent": 1,
"isDelegate": 0,
"role": 2,
"lockHeight": 0,
"agent": null,
"weight": 0,
"agentWeight": 0,
"_version_": 10,
"balance": 9990120000000,
"weightRatio": 0
},
{
"address": "ABVm72Qty9Uxeyp6MEUHjvuh3drwVcbD41",
"name": "100000",
"xas": 799938450000000,
"publicKey": null,
"secondPublicKey": "b072613d5dbe9be82f3a771e566b1a3ce9d1116c9b0cc0b36214f831ae5c6969",
"isLocked": 1,
"isAgent": 0,
"isDelegate": 0,
"role": 0,
"lockHeight": 536618,
"agent": null,
"weight": 200000000000000,
"agentWeight": 0,
"_version_": 14,
"balance": 799938450000000,
"weightRatio": 1.9978037144864793
},
{
"address": "AFcaWmL5tL2sbGaEcxYoiABfCesd8MsS3L",
"name": "7c",
"xas": 9890515354322,
"publicKey": null,
"secondPublicKey": "816cdcf53d1464c362e4503345662f0788fe55899525a4b85732637abd8a728b",
"isLocked": 1,
"isAgent": 0,
"isDelegate": 1,
"role": 1,
"lockHeight": 267944,
"agent": null,
"weight": 10000000000,
"agentWeight": 0,
"_version_": 28,
"balance": 9890515354322,
"weightRatio": 0.00009989018572432396
}
]
}
接口地址: /api/delegates/get
请求方式:get
支持格式:urlencoded
接口备注:通过公钥或者用户名获取受托人信息
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
publickey | string | 二选一 | 受托人公钥 |
name | string | 二选一 | 受托人用户名 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
delegate | json | 委托人详情 |
请求示例:
curl -k -X GET http://45.32.248.33:4096/api/delegates/get?publicKey=ff6ea4945fee31f64439030f84bac934604468cf5d0b441bec761cfc1911653a
curl -k -X GET http://45.32.248.33:4096/api/delegates/get?name=asch_g59
JSON返回示例:
{
"success": true,
"delegate": {
"address": "ADcPTKHLnDfxBjWyxVVMquPQDjfBNBwnvT",
"name": "asch_g59",
"tid": "ac569d1e0f0e74101606c617e4547fcceea47f83d63ddc9be282ad890d1fe09a",
"publicKey": "ff6ea4945fee31f64439030f84bac934604468cf5d0b441bec761cfc1911653a",
"votes": 200010000000000,
"producedBlocks": 326,
"missedBlocks": 0,
"fees": 0,
"rewards": 0,
"_version_": 333,
"rate": 1,
"approval": 1.9979036046722034,
"productivity": "100.00",
"vote": 200010000000000,
"missedblocks": 0,
"producedblocks": 326
}
}
接口地址:/api/delegates
请求方式:get
支持格式:urlencoded
接口说明:如果不加参数则会返回全网受托人列表
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
address | string | N | 受托人地址 |
limit | int | N | 限制返回结果数据集的个数 |
offset | integer | N | 偏移量,最小值:0 |
orderBy | string | N | 排序字段:排序规则,如:desc |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
delegates | Array | 受托人详情列表 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/delegates?limit=5
JSON返回示例:
{
"success": true,
"delegates": [{
"username": "wgl_002", //受托人名字
"address": "14636456069025293113", //受托人地址
"publicKey": "ae256559d06409435c04bd62628b3e7ea3894c43298556f52b1cfb01fb3e3dc7", //受托人公钥
"vote": 9901984015600500, //得票数
"producedblocks": 1371, //生成的区块数
"missedblocks": 6, //丢失的区块数
"fees": 12588514990,
"rewards": 276850000000, //已经得到的奖励
"rate": 1,
"approval": 98.54, //得票率
"productivity": 99.56, //生产率
"forged": "289438514990" //锻造产生的所有奖励
},
{
"address": "ADcPTKHLnDfxBjWyxVVMquPQDjfBNBwnvT",
"name": "asch_g59", //受托人名字
"tid": "ac569d1e0f0e74101606c617e4547fcceea47f83d63ddc9be282ad890d1fe09a",
"publicKey": "ff6ea4945fee31f64439030f84bac934604468cf5d0b441bec761cfc1911653a",
"votes": 200010000000000,
"producedBlocks": 326,
"missedBlocks": 0,
"fees": 0,
"rewards": 0, //已经得到的奖励
"_version_": 333,
"rate": 1,
"approval": 1.9979036046722034, //得票率
"productivity": "100.00", //生产率
"vote": 200010000000000, //得票数
"missedblocks": 0,
"producedblocks": 326
}],
"totalCount": 233
}
接口地址:/api/delegates/forging/status
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
publicKey | string | Y | 公钥 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
enabled | string | 锻造是否开启 |
请求示例:
curl -k -X GET 'http://45.32.248.33:4096/api/delegates/forging/status?publicKey=fafcd01f6b813fdeb3c086e60bc7fa9bfc8ef70ae7be47ce0ac5d06e7b1a8575'
JSON返回示例:
{"success":true,"enabled":false}
接口地址:/api/peers
请求方式:get
支持格式:urlencoded
备注:展示节点只是和本机有连接的节点,并不是全网所有的节点
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
state | integer | N | 节点状态,0: ,1:,2:,3: |
os | string | N | 内核版本 |
version | string | N | asch版本号 |
limit | integer | N | 限制结果集个数,最小值:0,最大值:100 |
orderBy | string | N | |
offset | integer | N | 偏移量,最小值0 |
port | integer | N | 端口,1~65535 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
peers | Array | 节点信息json构成的数组 |
totalCount | integer | 当前正在运行的节点个数 |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/peers?limit=3'
JSON返回示例:
{
"success": true,
"count": 25,
"peers": [
{
"id": "d2a1553f6a5bca24a2d706b4103539f47a8f4cca",
"host": "192.168.1.82",
"port": 8231,
"distance": 0,
"seen": 1534132283145,
"_id": "w01lWBusDx4JtQD3"
},
{
"id": "fc5a058f941ee5421ad85b848262b5736efef9bd",
"host": "192.168.1.76",
"port": 4097,
"distance": 0,
"seen": 1533894206475,
"_id": "PTXTz6HyrzoGJLHl"
},
{
"id": "e5949bbc303551774928899ef70f34aff2946875",
"host": "192.168.1.79",
"port": 7901,
"distance": 0,
"seen": 1533820788984,
"_id": "tYDqBjtlHOLg2d9o"
}
]
}
接口地址:/api/peers/version
请求方式:get
支持格式:无
请求参数说明:无参数
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
version | string | 版本号 |
build | timestamp | 构建时间 |
net | string | 主链或者测试链 |
请求示例:
curl -k -X GET http://192.168.1.78:7800/api/peers/version
JSON返回示例:
{
"success": true,
"version": "1.4.2",
"build": "21:04:40 09/08/2018",
"net": "testnet"
}
接口地址:/api/peers/get
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
ip | string | Y | 待查询节点ip |
port | integer | Y | 待查询节点端口,1~65535 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
peer | json |
请求示例:
curl -k -X GET 'http://192.168.1.78:7800/api/peers/get?ip=45.32.248.33&port=4096'
JSON返回示例:
{
"success": true,
}
接口地址:/api/loader/status
请求方式:get
支持格式:无
请求参数说明:无参数
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
loaded | boole | |
blocksCount | integer |
请求示例:
curl -k http://192.168.1.7800:7800/api/loader/status -X GET
JSON返回示例:
{
"success": true,
"loaded": true,
"blocksCount": 0
}
接口地址:/api/loader/status/sync
请求方式:get
支持格式:无
请求参数说明:无参数
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功获得response数据 |
height | int | 区块高度 |
请求示例:
curl -k http://192.168.1.78:7800/api/loader/status/sync -X GET
JSON返回示例:
{
"success": true,
"syncing": false, //目前没有数据可以同步,所以为false
"blocks": 0,
"height": 31580
}
接口地址:/api/v2/proposals
请求方式:get
支持格式:urlencoded
请求示例
curl -k http://192.168.1.78:7800/api/v2/proposals?limit=2 -X GET
返回示例
{
"success": true,
"count": 5,
"proposals": [
{
"tid": "33b4f51cee0a49b377ed416aafb0ec806f15a67134fc03f5b58dd09ca41ead81",
"timestamp": 66763252,
"title": "Register bitcoinbash gateway",
"senderId": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"desc": "This is a proposal about register bitcoincash gateway",
"topic": "gateway_register",
"content": "{\"name\":\"bitcoincash\",\"desc\":\"bitcoincash gateway description\",\"updateInterval\":86400,\"minimumMembers\":3,\"currency\":{\"symbol\":\"BCH\",\"desc\":\"BCH description\",\"precision\":8}}",
"activated": 1,
"endHeight": 10000,
"height": 14,
"_version_": 2
},
{
"tid": "c58fbea59446364f1d0f9b780bc7bd5d137746b6e1032e6a2ed4ff4f8cd45a9e",
"timestamp": 66763301,
"title": "Init bitcoincash gateway validators",
"senderId": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"desc": "This is a proposal about init bitcoincash gateway",
"topic": "gateway_init",
"content": "{\"gateway\":\"bitcoincash\",\"members\":[\"A28yFDa4vYUFafNDK9fZwBK3qhH2xYxxrz\",\"AMAwe1qp6qFpGkdJ2nugovXvtRzedprvqh\",\"ABcur7keRpcZC2A1Y7qe2BV5VtKaYHt8ax\"]}",
"activated": 1,
"endHeight": 10000,
"height": 19,
"_version_": 2
}
]
}
接口地址:/api/v2/proposals/:id
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
id | string | 提案id |
请求示例
curl -k http://192.168.1.78:7800/api/v2/proposals/c58fbea59446364f1d0f9b780bc7bd5d137746b6e1032e6a2ed4ff4f8cd45a9e -X GET
返回示例
{
"success": true,
"proposal": {
"tid": "c58fbea59446364f1d0f9b780bc7bd5d137746b6e1032e6a2ed4ff4f8cd45a9e",
"timestamp": 66763301,
"title": "Init bitcoincash gateway validators",
"senderId": "ABuH9VHV3cFi9UKzcHXGMPGnSC4QqT2cZ5",
"desc": "This is a proposal about init bitcoincash gateway",
"topic": "gateway_init",
"content": "{\"gateway\":\"bitcoincash\",\"members\":[\"A28yFDa4vYUFafNDK9fZwBK3qhH2xYxxrz\",\"AMAwe1qp6qFpGkdJ2nugovXvtRzedprvqh\",\"ABcur7keRpcZC2A1Y7qe2BV5VtKaYHt8ax\"]}",
"activated": 1,
"endHeight": 10000,
"height": 19,
"_version_": 2
}
}
接口地址:/api/v2/gateways
请求方式:get
支持格式:urlencoded
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways?limit=2 -X GET
返回示例
{
"success": true,
"count": 2,
"gateways": [
{
"name": "bitcoincash",
"desc": "bitcoincash gateway description",
"updateInterval": 86400,
"minimumMembers": 3,
"lastUpdateHeight": 16,
"activated": 1,
"revoked": 0,
"version": 1,
"createTime": 66763272,
"_version_": 2,
"validatorNumber": 3
},
{
"name": "bitcoin",
"desc": "bitcoin gateway description",
"updateInterval": 86400,
"minimumMembers": 3,
"lastUpdateHeight": 34,
"activated": 1,
"revoked": 0,
"version": 1,
"createTime": 66763452,
"_version_": 2,
"validatorNumber": 3
}
]
}
接口地址:/api/v2/gateways/:name/validators
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
name | string | 网关名字 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/bitcoin/validators -X GET
返回示例
{
"success": true,
"count": 4,
"validators": [
{
"address": "A5eTVn2Mz5p2j6SjGKdgvmUc2vMsSvKzuy",
"gateway": "bitcoin",
"desc": "Validator description of bitcoin gateway",
"outPublicKey": "03729f44c98f73a3f6ddc98d4870aeb63413059229252424fa4743a96e086a00c1",
"elected": 1,
"_version_": 2,
"name": "bv1"
},
{
"address": "A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj",
"gateway": "bitcoin",
"desc": "Validator description of bitcoin gateway",
"outPublicKey": "0295925ebd0a122df74dbce4b6e5185bb46e0f2deaa4a95dc62715d422c864ba1a",
"elected": 1,
"_version_": 2,
"name": "bv2"
},
{
"address": "A4ncaYtKRrD8YS2Mi82HbwGEE9DxqsbEr9",
"gateway": "bitcoin",
"desc": "Validator description of bitcoin gateway",
"outPublicKey": "0371595356796bdd46a1b87d240d8543ad0541a4e98fc14443a194215c0a4624da",
"elected": 1,
"_version_": 2,
"name": "bv3"
},
{
"address": "AGAeGrdGVXsry7LYbe2bC6ucrzWvq3PTvM",
"gateway": "bitcoin",
"desc": "Validator description of bitcoin gateway",
"outPublicKey": "039a994e68f9897af9beb9f7dfb271745d7ee78b5852881b8631b50113abeb0d72",
"elected": 0,
"_version_": 1,
"name": "bv4"
}
]
}
接口地址:/api/v2/gateways/currencies
请求方式:get
支持格式:urlencoded
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/currencies -X GET
返回示例
{
"success": true,
"count": 2,
"currencies": [
{
"gateway": "bitcoincash",
"symbol": "BCH",
"desc": "BCH description",
"precision": 8,
"revoked": 0,
"_version_": 1
},
{
"gateway": "bitcoin",
"symbol": "BTC",
"desc": "BTC description",
"precision": 8,
"revoked": 0,
"_version_": 1
}
]
}
接口地址:/api/v2/gateways/:name/currencies
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
name | string | 网关名字 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/bitcoin/currencies -X GET
返回示例
{
"success": true,
"count": 1,
"currencies": [
{
"gateway": "bitcoin",
"symbol": "BTC",
"desc": "BTC description",
"precision": 8,
"revoked": 0,
"_version_": 1
}
]
}
接口地址:/api/v2/gateways/:name/accounts/:address
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
name | string | 网关名字 |
address | string | 账户地址 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/bitcoin/accounts/AGw5h2cYK2iYGwp8czhn59Dbr8LMz2BaUC -X GET
返回示例
{
success: true,
account: {
address: "AGw5h2cYK2iYGwp8czhn59Dbr8LMz2BaUC",
seq: 1,
gateway: "bitcoin",
outAddress: "2N8qAZHVsG8yaAyQHCdbry6iHYxCxyMDd6W",
attachment: "522103729f44c98f73a3f6ddc98d4870aeb63413059229252424fa4743a96e086a00c1210295925ebd0a122df74dbce4b6e5185bb46e0f2deaa4a95dc62715d422c864ba1a210371595356796bdd46a1b87d240d8543ad0541a4e98fc14443a194215c0a4624da53ae",
version: 1
}
}
接口地址:/api/v2/gateways/accounts/:address
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
address | string | 账户地址 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/accounts/AGw5h2cYK2iYGwp8czhn59Dbr8LMz2BaUC -X GET
返回示例
{
success: true,
count: 1,
accounts: [{
address: "AGw5h2cYK2iYGwp8czhn59Dbr8LMz2BaUC",
seq: 1,
gateway: "bitcoin",
outAddress: "2N8qAZHVsG8yaAyQHCdbry6iHYxCxyMDd6W",
attachment: "522103729f44c98f73a3f6ddc98d4870aeb63413059229252424fa4743a96e086a00c1210295925ebd0a122df74dbce4b6e5185bb46e0f2deaa4a95dc62715d422c864ba1a210371595356796bdd46a1b87d240d8543ad0541a4e98fc14443a194215c0a4624da53ae",
version: 1
}]
}
接口地址:/api/v2/gateways/deposits/:address/:currency
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
address | string | 账户地址 |
currency | string | 币种 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/deposits/mvGfGo9YfNiTJK6MDnfwDwr5jTdWR1ovdC/BTC -X GET
返回示例
{
success: true,
count: 1,
deposits: [{
tid: "2bfc06d4984a2e8d1a0d55513c29fadcd8dc535de753e4cd584dec38ae91686c",
currency: "BTC",
amount: "10.5",
address: "mvGfGo9YfNiTJK6MDnfwDwr5jTdWR1ovdC",
confirmations: 1,
processed: 0,
oid: "02195dfafc389e465efe8e5bfc2ad4d5aa7b248eb81700b76fa25d657536aafdfe"
}]
}
接口地址:/api/v2/gateways/withdrawals/:address/:currency
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
address | string | 账户地址 |
currency | string | 币种 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/gateways/withdrawals/APSu9NhiCTtvRGx1EpkeKNubiApiBWMf7T/BTC -X GET
返回示例
{
success: true,
count: 1,
withdrawals: [{
tid: "3d4331b5dc8252e0104684b6118f94a5d8f48ab32e4cf6e4e86146b28bca57b5",
gateway: "bitcoin",
senderId: "APSu9NhiCTtvRGx1EpkeKNubiApiBWMf7T",
recipientId: "2MzAnWPQWN4eRoxtDRDWuXsTyHXv8KkmEMi",
currency: "BTC",
seq: 1,
amount: "10090000",
fee: "10000",
outTransaction: "{"txhex ":"0100000001f823dd6bec281e20355a4da44221bdd69c089b89e00e7c695e65e9c564366c380100000000ffffffff0210f699000000000017a9144bf1f23966f4f815980e089f18519f1f87d9ae73875847a5060000000017a914aaf52a57317ed5c8f1ccdd80fc3f21f63a9f2cba8700000000 ","input ":["2N8qAZHVsG8yaAyQHCdbry6iHYxCxyMDd6W "]}",
signs: 2,
ready: 1,
oid: "",
_version_: 3
}]
}
接口地址:/api/v2/agents
请求方式:get
支持格式:urlencoded
请求示例
curl -k http://192.168.1.78:7800/api/v2/agents -X GET
返回示例
{
"success": true,
"count": 2,
"agents": [
{
"address": "AAhRVPqQkiZyAXnfTnCTDqVZBg3nphywfJ",
"name": "account2",
"xas": 9990120000000,
"publicKey": null,
"secondPublicKey": null,
"isLocked": 0,
"isAgent": 1,
"isDelegate": 0,
"role": 2,
"lockHeight": 0,
"agent": null,
"weight": 0,
"agentWeight": 0,
"_version_": 10
},
{
"address": "ALqyjLbk3Ci45SPUiHU38qa9xmqkMreftq",
"name": "agent001",
"xas": 13980000000,
"publicKey": null,
"secondPublicKey": null,
"isLocked": 0,
"isAgent": 1,
"isDelegate": 0,
"role": 2,
"lockHeight": 0,
"agent": null,
"weight": 0,
"agentWeight": 0,
"_version_": 9
}
]
}
接口地址:api/v2/agents/:name/clienteles
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
name | string | 代理人名字 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/agents/agent001/clienteles -X GET
返回示例
{
success: true,
count: 3,
clienteles: [{
tid: "5cfac8d84d8e222615f933567dcbe4056c3cd13ce5c43cb582d605bfcee77f1a",
agent: "agent001",
clientele: "A8cwRrxgmL6MRcM9tJNBaVnkHeCHVmiuLY",
t_timestamp: 57860693,
t_type: 8,
t_height: 716,
account: {
address: "A8cwRrxgmL6MRcM9tJNBaVnkHeCHVmiuLY",
name: "",
xas: 608605516348,
publicKey: "",
secondPublicKey: "",
isLocked: 1,
isAgent: 0,
isDelegate: 0,
lockHeight: 608635526348,
agent: "agent001",
weight: 10000,
agentWeight: 0
}
}]
}
接口地址:api/v2/groups/:address
请求方式:get
支持格式:urlencoded
参数说明
名称 | 类型 | 说明 |
---|---|---|
address | string | Group地址 |
请求示例
curl -k http://192.168.1.78:7800/api/v2/groups/G3sQzuWpvXZjxhoYnvvJvnfUUEo8aNzKdj -X GET
返回示例
{
success: true,
group: {
name: "test_group",
address: "G3sQzuWpvXZjxhoYnvvJvnfUUEo8aNzKdj",
tid: "0a273f9bac2005318ece1940dc3302ea9f28768b1c7a36b663fab6699358b17a",
min: 5,
max: 7,
m: 2,
updateInterval: 6,
createTime: 62336692,
_version_: 2,
members: [{
member: "A3gmKrzbTALHpJv2SDZ2SaoyA44Ei9miJC",
name: "test_group",
weight: 1,
_version_: 1
},
{
member: "AB5fFHae3syga1R81Ef797vUo3gFrNkQ3y",
name: "test_group",
weight: 1,
_version_: 1
},
{
member: "AJwotHuyfLsFvii2t1vqZaVHpgwMdgxYN9",
name: "test_group",
weight: 1,
_version_: 1
},
{
member: "ABnDYHEQzs6B8CGWk79n8vHKNAwp2QjyTz",
name: "test_group",
weight: 1,
_version_: 1
}]
}
}
接口地址:api/v2/chains
请求方式:get
支持格式:urlencoded
请求示例
curl -k http://192.168.1.78:7800/api/v2/chains -X GET
返回示例
{
success: true,
count: 1,
chains: [{
tid: "4f322b6932870e710254c92a77fd892e81462aabd347ea3f0108173c5538d620",
name: "test",
desc: "test chain",
link: "https://github.com/testchain.zip",
icon: "https://github.com/testchain.png",
unlockNumber: 3,
t_timestamp: 57400250,
t_type: 200,
t_height: 30
}]
}
接口地址:/api/v2/uia/issuers
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
limit | integer | N | 限制结果集个数,最小值:0,最大值:100 |
offset | integer | N | 偏移量,最小值0 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功 |
issuers | list | 元素为字典,每个字典代表一个发行商,包含发行商名字、描述、id(Asch地址) |
count | integer | 发行商总个数 |
请求示例:
curl -X GET -H "Content-Type: application/json" 'http://192.168.1.78:7800/api/v2/uia/issuers?offset=0&limit=2' && echo
JSON返回示例:
{
"success": true,
"count": 6,
"issues": [
{
"tid": "e47cb4a324c079bac99158a93417a8d1bcae5c605e33b7da2eef5dfc575476b6",
"name": "ChinaBank",
"issuerId": "AM5ntHM1ncF2TRT2Fif7QD1zpt3xtzdyBG",
"desc": "ChinaBank description",
"_version_": 1
},
{
"tid": "d60f9235527c960c78238b3a908fb82925ce037faab7f1475acda548a8c2a616",
"name": "CCTime",
"issuerId": "AECGLMi8yQVvQRDpDCB6u8qHHQF7oD7VP7",
"desc": "CCTime desc",
"_version_": 1
}
]
}
接口地址:/api/v2/uia/issuers/:name
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
name | string | Y | 可以为发行商名称或Asch账户地址 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功 |
issuers | dict | 包含发行商名字、描述、id(Asch地址) |
请求示例:
curl -X GET -H "Content-Type: application/json" 'http://192.168.1:7800/api/uia/issuers/ChinaBank'
JSON返回示例:
{
"success": true,
"issuer": {
"tid": "e47cb4a324c079bac99158a93417a8d1bcae5c605e33b7da2eef5dfc575476b6",
"name": "ChinaBank",
"issuerId": "AM5ntHM1ncF2TRT2Fif7QD1zpt3xtzdyBG",
"desc": "ChinaBank description",
"_version_": 1
}
}
接口地址:/api/v2/uia/issuers/:name/assets
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
name | string | Y | 可以为发行商名称或Asch账户地址 |
limit | integer | N | 限制结果集个数,最小值:0,最大值:100 |
offset | integer | N | 偏移量,最小值0 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功 |
assets | list | 每个元素是一个字典,每个字典是一个资产详情,包含资产名字、描述、上限(最大发行量=真实发行量*10**精度)、精度、策略、当前发行量、发行高度、发行商id,acl模式(0:黑名单,1:白名单)、是否注销 |
count | interger | 该发行商注册的资产总个数(包含已注销的) |
请求示例:
curl -X GET -H "Content-Type: application/json" 'http://192.168.1.78:7800/api/v2/uia/issuers/CCTime/assets/'
JSON返回示例:
{
"success": true,
"count": 1,
"assets": [
{
"name": "koumei.KMC",
"tid": "265a358d74e8b9ec9101028b558e89ac13b7c44a4e8e7a334dae72335b83d1ae",
"timestamp": 66763432,
"maximum": "100000000000000000",
"precision": 8,
"quantity": "10000000000000000",
"desc": "koumei.KMC description",
"issuerId": "AMRRCyxxgQeRwhdtFXjozsqKxFBEfF1uvJ",
"_version_": 2
}
]
}
接口地址:/api/v2/uia/assets
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
limit | integer | N | 限制结果集个数,最小值:0,最大值:100 |
offset | integer | N | 偏移量,最小值0 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功 |
assets | list | 每个元素是一个字典,每个字典是一个资产详情,包含资产名字、描述、上限、精度、策略、当前发行量、发行高度、发行商id,acl、是否注销 |
count | integer | 所有资产的个数 |
请求示例:
curl -X GET -H "Content-Type: application/json" 'http://testnet.asch.so:4096/api/uia/assets?offset=0&limit=2' && echo
JSON返回示例:
{
"success": true,
"count": 7,
"assets": [
{
"name": "ChinaBank.BTC",
"desc": "ChinaBank.BTC description",
"maximum": "2100000000000000",
"precision": 8,
"quantity": "100000000000000",
"issuerId": "AM5ntHM1ncF2TRT2Fif7QD1zpt3xtzdyBG",
"writeoff": 0,
"maximumShow": "21000000",
"quantityShow": "1000000"
},
{
"name": "ChinaBank.CNY",
"desc": "ChinaBank.CNY description",
"maximum": "500000000000",
"precision": 3,
"quantity": "2000000000",
"issuerId": "AM5ntHM1ncF2TRT2Fif7QD1zpt3xtzdyBG",
"writeoff": 0,
"maximumShow": "500000000",
"quantityShow": "2000000"
},
{
"name": "CCTime.XCT",
"desc": "CCTime.XCT description",
"maximum": "1000000000000000000",
"precision": 8,
"quantity": "50000000000000000",
"issuerId": "AECGLMi8yQVvQRDpDCB6u8qHHQF7oD7VP7",
"writeoff": 0,
"maximumShow": "10000000000",
"quantityShow": "500000000"
}
]
}
接口地址:/api/v2/uia/assets/:name
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
name | string | Y | 资产名 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功 |
assets | dict | 包含资产名字、描述、上限、精度、策略、当前发行量、发行高度、发行商id,acl、是否注销 |
请求示例:
curl -X GET -H "Content-Type: application/json" 'http://192.168.1.78:7800/api/uia/assets/CCTime.XCT'
JSON返回示例:
{
"success": true,
"asset": {
"name": "CCTime.XCT",
"desc": "CCTime.XCT description",
"maximum": "1000000000000000000",
"precision": 8,
"quantity": "50000000000000000",
"issuerId": "AECGLMi8yQVvQRDpDCB6u8qHHQF7oD7VP7",
"writeoff": 0,
"maximumShow": "10000000000",
"quantityShow": "500000000"
}
}
接口地址:/api/uia/balances/:address
请求方式:get
支持格式:urlencoded
请求参数说明:
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
address | string | Y | 账户地址 |
limit | integer | N | 限制结果集个数,最小值:0,最大值:100 |
offset | integer | N | 偏移量,最小值0 |
返回参数说明:
名称 | 类型 | 说明 |
---|---|---|
success | boole | 是否成功 |
balances | list | 拥有的资产详情列表,每个元素是一个资产,包含资产名、余额、上限、精度、当前发行量、是否注销(0:未注销,1:已注销) |
count | integer | 当前该地址拥有的资产个数 |
请求示例:
curl -X GET -H "Content-Type: application/json" 'http://localhost:4096/api/uia/balances/AKKHPvQb2A119LNicCQWLZQDFxhGVEY57a' && echo
JSON返回示例:
###**请求过程说明 **
通过asch-js里面封装好的transaction.createTransactionEx(params)方法获得到transaction,然后将这个transaction POST 发送到peer/transactions路由。
params是一个对象,先介绍下它的所含属性。
type: 合约编号
fee: 手续费
args: 合约所需参数
message:备注
secret: 发送者密码
secondSecret:二级密码
对于不同的合约,合约编号,手续费及合约所需要的参数是不同的。
下面列举一个转账合约的例子
let message = '备注' ,amount = 50*100000000,
recipient = 'A3w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ', //(只是给出地址格式,并非有效地址)
mySecret = 'cat craft often annual face marriage lyrics clutch room helmet crowd biology',
secondSecret = 'abcd12345'
let args = [amount,recipient], //第一个参数是转账金额,第二个参数是目标地址
//构造params对象
let params = {
type:1, //转账的合约编号是1
fee:0.1*100000000, //转账的手续费是0.1XAS
args:args //合约所需要参数
message, //做一些备注(非必需)
secret:mySecret, //我的密码(发送这笔交易的人的secret)
secondSecret:mySecondSecret} //二级密码(没设置可以填null,但有些交易必需使用)
//到这里位置所需要的params对象就构造好了,下面将这个对象交给asch-js里的createTransactionEx()接口
let aschjs = require('asch-js')
//这个方法返回的transaction就是需要提交到服务器的交易数据
let transaction = aschjs.transaction.createTransactionEx(params)
http.post(transaction)
//上述步骤成功后应该返回的是成功交易的交易ID
{success: true,transactionId:"609074700dcea17b56e5a98bbfeee5f6416935b6b444c0750e5cb319d818a502"}
以上就是调用一次合约的全部过程,其实对于不同的合约,所需要变换的变量有type,fee,args这三个属性。
下面枚举所有合约所需要的这三个属性(主要是这三个属性)
XAS的精度是小数点后八位,所以使用XAS币的时候需要乘上100000000,为了简洁,下面使用XAS的时候替换如下:
const xAS = 100000000
type:1
fee: 0.1*xAS
args: [amount,recipient]
名称 | 类型 | 说明 |
---|---|---|
amount | number | 转账金额 |
recipient | string | 接收地址 |
代码示例
//args参数示例
let amount = 100*xAX //转账金额
let recipent = 'A3w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ' //接收地址
let args = [amount,recipent]
//构造params对象
let params = {
type:1, //转账的合约编号是1
fee:0.1*100000000, //转账的手续费是0.1XAS
args:args //合约所需要参数
message, //做一些备注(非必需)
secret:mySecret, //我的密码(发送这笔交易的人的secret)
secondSecret:mySecondSecret} //二级密码(没设置可以填null,但有些交易必需使用)
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
####3.1.2 设置昵称
type:2
*fee: 1/10/40/80/100/200 xAX
args: [name]
这里对手续费要左下说明,对于名字越长,手续费越便宜(有上限)
len-fee关系表
len | fee |
---|---|
2 | 200*xAS |
3 | 100*xAS |
4 | 80*xAS |
5 | 40*xAS |
6-10 | 10*xAS |
>10 | 1*xAS |
名称 | 类型 | 说明 |
---|---|---|
name | string | 昵称 |
代码示例
//args参数示例
let name = 'username1'
let args = [name]
//构造params对象
let params = {
type:2, //转账的合约编号是1
fee:10*100000000, //转账的手续费是0.1XAS
args:args //合约所需要参数
message, //做一些备注(非必需)
secret:mySecret, //我的密码(发送这笔交易的人的secret)
secondSecret:mySecondSecret} //二级密码(没设置可以填null,但有些交易必需使用)
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:3
fee: 0.1*xAX
args: [secondSecret]
名称 | 类型 | 说明 |
---|---|---|
secondSecret | string | 二级密码(加密后) |
//这个SecondSecret是加密后的字符串
let password = 'asch123456'
let hash = sha256Bytes(new Buffer(password))
let keypair = nacl.sign.keyPair.fromSeed(hash);
let secondSecret = new Buffer(keypair.publicKey).toString("hex")
//得到将password加密后的secondSecret作为参数
let args = [secondSecret]
//构造params对象
let params = {
type:3,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:null}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:4
fee: 0.1*xAX
args: [height,amount]
名称 | 类型 | 说明 |
---|---|---|
height | number | 锁定的高度 |
amount | number | 锁定的金额 |
代码示例
//args参数示例
let height = 64200,amount = 20000*xAX
let args = [height,amount]
//构造params对象
let params = {
type:4,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:5
fee: 0*xAX
args: []
代码示例
let params = {
type:5,
fee:0*100000000,
args:[]
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:6
fee: 5*xAX
args: []
代码示例
let params = {
type:6,
fee:5*100000000,
args:[]
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:7
fee: 100*xAX
args: []
说明:无需传入参数
代码示例
let params = {
type:7,
fee:100*100000000,
args:[]
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:8
fee: 0.1*xAX
args: [agent]
名称 | 类型 | 说明 |
---|---|---|
agent | string | 代理人的昵称 |
let agent = 'user1'
let args = [agent]
let params = {
type:8,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:9
fee: 0*xAX
args: []
代码示例
let params = {
type:9,
fee:0*100000000,
args:[]
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:10
fee: 100*xAX
args: []
代码示例
let params = {
type:10,
fee:100*100000000,
args:[]
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:11
fee: 0.1*xAX
args: [delegates]
名称 | 类型 | 说明 |
---|---|---|
delegates | string | 一些受托人的名字 |
代码示例
//delegate1,delegate2,delegate3分别为三个受托人的姓名
let delegates = 'delegate1,delegate2,delegate3'
let args = [delegates]
let params = {
type:11,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:12
fee: 0.1*xAX
args: [delegates]
名称 | 类型 | 说明 |
---|---|---|
delegates | string | 一些受托人的名字 |
代码示例
let delegates = 'delegate1,delegate2' //delegate1,delegate2,delegate3分别为三个受托人的姓名
let args = [delegates]
let params = {
type:12,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:100
fee: 100*xAX
args: [name,desc]
名称 | 类型 | 说明 |
---|---|---|
name | string | 发行商名字 |
desc | string | 一些文字描述 |
代码示例
//args参数示例
let name = 'TEST'
let desc = 'my first issuer'
let args = [name,desc]
let params = {
type:100,
fee:100*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:101
fee: 500*xAX
args: [symbol,desc,maximum,precsion]
名称 | 类型 | 说明 |
---|---|---|
symbol | string | 资产名称 |
desc | string | 一些文字描述 |
maximum | string | 最大发行量 |
precsion | number | 精度 |
代码示例
//args参数示例
let symbol = 'TXC' //资产名由三个大写字母组成
let desc = 'my first asset'
let maximum = '100000000000'
let precsion = 1 //取值范围是1-16之间的整数
//组成args
let args = [symbol,desc,maximum,precsion]
let params = {
type:500,
fee:101*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:102
fee: 0.1*xAX
args: [name,amount]
名称 | 类型 | 说明 |
---|---|---|
name | string | 要发行的资产名 |
amount | string | 发行数量 |
代码示例
//args参数示例
let name = 'TEST.TXC' //资产名=发行商名称.代币名
let amount = '1000000000'
let args = [name,amount]
let params = {
type:102,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:103
fee: 0.1*xAX
args: [currency,amount,recipient]
名称 | 类型 | 说明 |
---|---|---|
currency | string | 内部资产名 |
amount | string | 转账金额 |
recipient | string | 接收地址 |
代码示例
//args参数示例
let currency = 'TEST.TXC'
let amount = '10000000'
let recipient = 'A3w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'
//args组成
let args = [currency,amount,recipient]
let params = {
type:103,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
####3.3.1 注册dapp
type:200
fee: 100*xAX
args: [name,desc,link,icon,delegates,unlockNumber]
名称 | 类型 | 说明 |
---|---|---|
name | string | dapp名 |
desc | string | 描述 |
link | string | 链接 |
icon | string | 图标 |
delegates | string | 委托人 |
unlockNumber | number | 最少需求数 |
代码示例
//args内参数说明
let name = 'dappTest' //dapp名称
let desc = '一些文本描述'
let link = 'http://yourdomain/dapp.zip' //dapp的安装文件链接
let icon = 'htpps//yourdomain/logo.png' //dapp的图标链接
//委托人数组delegate是一个数组,里面的数据是委托人的公钥
let delegates = [
"0352486d87c928918638c8a13c7e4765f2c9fa075318bd680b8d95e1cf1d616f",
"cbb3671d343628fe03fba2f0139b783a7b86445f79ee55c99bf5bbe380e4fb46",
"2f23a9659e32032910b8e078c0c980c6cb7c3a052a235a59079bfd6d608ecc95",
"351c081c470f41620f4709b6b3ca3721dc920d4e528b27b8fa4d88635e53e128",
"cbd808111a08081f7dc93aafd9fe26a70216e3f42d927660ab8d15b7bdf8998c"
]
//最少需要的委托人个数(需要委托人共同决定)
let unlockNumber = 3
//构建args
let args = [name,desc,link,icon,delegates,unlockNumber]
let params = {
type:200,
fee:100*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
####3.3.5 存款
type:204
fee: 0.1*xAX
args: [chainName,currency,amount]
名称 | 类型 | 说明 |
---|---|---|
chainName | string | 应用名(dapp) |
currency | string | 资产币名 |
amount | string | 金额数量 |
代码示例
//args参数示例
let chainName = 'dappTest'
let currency = 'XAS' //也可以是TEST.TXC内部资产币
let amount = '1000000000'
//args构造
let args = [chainName,currency,amount]
let params = {
type:204,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:205
fee: 0.1*xAX
args: [chainName,recipient,currency,amount,oid,seq]
名称 | 类型 | 说明 |
---|---|---|
chainName | string | 应用名 |
recipient | string | 接收地址 |
currency | string | 资产名 |
amount | string | 提现金额 |
oid | string | |
seq | string |
type:301
fee: 10*xAX
args: [title,desc,topic,content,endHeight]
名称 | 类型 | 说明 |
---|---|---|
title | string | 提案标题 |
desc | string | 描述 |
topic | string | 提案类型 |
content | string | 内容 |
endHeight | string | 提案结束日期 |
代码示例
//args参数示例
let title = 'title fo propose' // len: 10-100
let desc = 'some describes of this propose'
let topic = '提案的类型(下面详细介绍)'
let content = '提案类型所需要的参数(下面详细介绍)'
let endHeight = 50000 //结束高度
//构造args
let args = [title,desc,topic,content,endHeight]
let params = {
type:301,
fee:10*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
对不同提案类型给出不同的参数
//提案类型
let topic = 'gateway_register'
//下面构造content,对于新增网关提案,需要提供提案的名称,描述,最少成员,更新间隔,资产信息等
let name = 'aschCoin' //3-16位大小写字母数字
let desc = 'aschyu: test the gateway register'
let minimumMembers = 3 //网关最少成员数,这个数值的范围应当在3-33之间的整数,
let updateInterval = 8640 //更新频率,这个值应当是大于8640的
let symbol = 'TEC' //比如发行的币叫TEC
let currencyDesc = 'some describes of currency' //资产描述
let precsion = 1 //资产精度
let currency = {symbol:symbol,
currencyDesccurrencyDesc,
precsion:precsion}
//下面构造这个content
let content = {name:name,
desc:desc,
minimumMembers:minimumMembers,
updateInterval:updateInterval,
currency:currency}
//提案类型
let topic = 'gateway_init'
//下面构造content
let gateway = 'bitcoin' //网关的名字
let members = [ //初始网关的成员
'A5eTVn2Mz5p2j6SjGKdgvmUc2vMsSvKzuy',
'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj',
'A4ncaYtKRrD8YS2Mi82HbwGEE9DxqsbEr9'
]
//下面构造这个content
let content = {gateway:gateway,
members:members
}
//提案类型
let topic = 'gateway_update_member'
//下面构造content
let gateway = 'bitcoin' //网关的名字
let form = 'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj' //要撤销的成员地址
let to = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ' //要添加的成员地址
//下面构造这个content
let content = {gateway:gateway,
from:from,
to:to
}
//提案类型
let topic = 'gateway_revoke' //这个参数较少,只需要网关的名字即可
//下面构造content
let gateway = 'bitcoin' //网关的名字
//下面构造这个content
let content = {gateway:gateway}
type:302
fee: 0.1*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
pid | string | 提案的编号 |
代码示例
//args参数示例
let pid = 'aer074700dcea17b56e5a98bbfeee5f6416935b6b444c0750e5cb319d818a502' /*发起提案的交易id*/
//构造args
let args = [pid]
let params = {
type:302,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:303
fee: 0*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
pid | string | 提案的编号 |
代码示例
//args参数示例
let pid = 'aer074700dcea17b56e5a98bbfeee5f6416935b6b444c0750e5cb319d818a502' /*发起提案的交易id*/
//构造args
let args = [pid]
let params = {
type:303,
fee:0*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:400
fee: 0.1*xAX
args: [gateway]
名称 | 类型 | 说明 |
---|---|---|
gateway | string | 网关的名字 |
代码示例
//args参数示例
let gateway = 'bitcoin' //网关名字
let args = [gateway]
let params = {
type:400,
fee:0.1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:401
fee: 100*xAX
args: [pid]
名称 | 类型 | 说明 |
---|---|---|
gateway | string | 网关名字 |
publicKey | string | 成员公钥 |
desc | string | 描述 |
代码示例
//args参数示例
let gateway = 'bitcoin'
let publicKey = 'c03e43c7e8aefe3b5a83e02a7b4dc8cce84bb787202650338e85d1b7758065d6'
let desc = 'aschyu: some describes of resgiter member'
//构造args
let args = [gateway,publicKey,desc]
let params = {
type:401,
fee:100*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:402
fee: 0.01*xAX
args: [gateway,address,currency,amount,oid]
名称 | 类型 | 说明 |
---|---|---|
gateway | string | 网关名字 |
address | string | 存款地址 |
currency | string | 货币 |
amount | string | 数额 |
oid | string |
代码示例
//args参数示例
let gateway = 'bitcoin'
let address = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'
let currency = 'BTC'
let amount = '100000000000'
let oid = ''
//构造args
let args = [gateway,address,currency,amount,oid]
let params = {
type:402,
fee:0.01*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:403
fee: 0*xAX
args: [address,gateway,currency,amount,fee]
名称 | 类型 | 说明 |
---|---|---|
address | string | 提现地址 |
gateway | string | 网关名字 |
currency | string | 货币 |
amount | string | 数量 |
fee | string | 手续费 |
代码示例
//args参数说明
let gateway = 'bitcoin'
let address = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'
let currency = 'BTC'
let amount = '100000000000' //转账的金额
let fee = '200000000' //网关收取的手续费
//构造args
let args = [address,gateway,currency,amount,fee]
let params = {
type:403,
fee:0*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:404
fee: 0.01*xAX
args: [wid,ot,ots]
名称 | 类型 | 说明 |
---|---|---|
wid | string | 提现id |
ot | string | 交易数据 |
ots | string |
代码示例
type:405
fee: 0.01*xAX
args: [wid,signature]
名称 | 类型 | 说明 |
---|---|---|
wid | string | 提现id |
signature | string | 签名 |
代码示例
type:406
fee: 0.01*xAX
args: [wid,oid]
名称 | 类型 | 说明 |
---|---|---|
wid | string | 提现id |
oid | string |
type:500
fee: 0*xAX
args: [targetId]
名称 | 类型 | 说明 |
---|---|---|
targetId | string | 目标ID |
代码示例
//args参数示例
let targetId = 'f80dcf3d520cc14e963ddf4aedd6ae42db92795fc80ac3738c2be5b3aa5c9238' //交易id
let args = [targetId]
let params = {
type:500,
fee:0*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:501
fee: 0*xAX
args: [targetId]
名称 | 类型 | 说明 |
---|---|---|
targetId | string | 目标ID |
代码示例
//args参数示例
let targetId = 'f80dcf3d520cc14e963ddf4aedd6ae42db92795fc80ac3738c2be5b3aa5c9238' //交易id
let args = [targetId]
let params = {
type:501,
fee:0*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:502
fee: 1*xAX
args: [address,weight,m]
名称 | 类型 | 说明 |
---|---|---|
address | string | 成员地址 |
weight | string | 权重 |
m | number |
代码示例
//args参数示例
let address = 'AMySpLqC4bEgQ8VoYK1iWNEEuhRtjS59Bt'
let weight = ''
let m = 1
let args = [address,weight,m]
let params = {
type:502,
fee:1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
type:503
fee: 1*xAX
args: [address,m]
名称 | 类型 | 说明 |
---|---|---|
address | string | 成员地址 |
m | number |
代码示例
//args参数示例
let address = 'AMySpLqC4bEgQ8VoYK1iWNEEuhRtjS59Bt'
let m = 1
let args = [address,m]
let params = {
type:503,
fee:1*100000000,
args:args
message,
secret:mySecret,
secondSecret:mySecondSecret}
//使用asch-js生成交易信息
let trs = AschJS.transaction.createTransactionEx(params)
http.post(trs)
asch服务已启动,但到注册应用到主链上时报"Server error: Invalid dapp delegates",创建的Dapp目录是另外在外层新建的还是在asch里面创建的,再运行 asch-cli registerdapp -f dapp.json -e "someone manual strong movie roof episode eight spatial brown soldier soup motor"
Dear @liangpeili
as already discussed, I will translate the http_api/zh-cn.md document into english.
Please assign this issue to me.
All the best
a1300
Dapp的记账人收取的记账资产类别是XAS还是可以是其他资产?如果能,怎么实现自定义?
http://47.93.137.170:4096/api/blocks?height=75029
会返回所有区块,指定 height 没有用
如题
npm install -g asch-cli
每个 Dapp 都有独立的受托人, 这些受托人负责区块的生产、资产的转账并且获取手续费。 一个Dapp最少有5个受托人, 最多101个。 在注册Dapp之前, 需要先生成受托人,收集受托人的公钥。
使用asch-cli crypto -g
来生成账户,需要输入想要生产的账户个数
root@asch~$ asch-cli crypto -g
? Enter number of accounts to generate 5
[ { address: 'ALEPemqWYMcEgxGPJkyp7e85umrvMCasCd',
secret: 'mix differ fresh hobby tool cabin doctor share impact divert subject citizen',
publicKey: '6ec699c5bb73bed443a36f84281d41c12398aa485ff067cd61f045a5bc13180c' },
{ address: 'A5UCP4Y61qBKp6GHSvDiozBoVbhuFbZMqR',
secret: 'marriage census fetch bean swift town issue double segment pizza monitor abuse',
publicKey: 'a21c74ff391af26eeb923cf3e2230d70c8b2f5c91de8f507ddd7f10fe6dc28c9' },
{ address: 'A7vQ39WxcrSb8bcxZGQh5UPtVjnQK4cCCq',
secret: 'use assume pear bicycle tennis usage answer blush able almost notable spy',
publicKey: 'd8039e6c583aeab1ec7a94610c664a753d1889c4095d3e16887a80c7cc11855e' },
{ address: 'AB3tTx7TavyNiDn43cUkW5867PCAFWb3wL',
secret: 'festival gallery oyster lumber mimic gain wear twelve diesel hero kiss copy',
publicKey: 'b114cc5ea3100230518f91c363406463a9a495b966455a0566256bfd8bb3016d' },
{ address: 'A86WxERXPsNyyKFiDZdjY4GoSFRMcfTVn5',
secret: 'hen brain duty blast summer figure blouse elephant aunt then surround security',
publicKey: '5e2744e8dbfb48fc4fb92e0da0e69a498cb89a577ab85c4b7a9017992ac04038' } ]
Done
使用asch-cli命令在节点去注册一个DApp应用.
首先需要准备一个dapp.json文件用来配置应用的基本信息,下面给出json内容格式
{
"name": "asch-dapp-helloworld", //应用名字
"link": "https://github.com/a1300/chians/archive/master.zip", //应用的安装包链接
"category": 1, //类别
"desc": "Provide an example", //描述
"tags": "asch,chain,demo", //标签
"icon": "http://o7dyh3w0x.bkt.clouddn.com/chian.png", //应用的logo
"type": 0, //类型
"delegates": [ //受托人的密钥
"6ec699c5bb73bed443a36f84281d41c12398aa485ff067cd61f045a5bc13180c",
"a21c74ff391af26eeb923cf3e2230d70c8b2f5c91de8f507ddd7f10fe6dc28c9",
"d8039e6c583aeab1ec7a94610c664a753d1889c4095d3e16887a80c7cc11855e",
"b114cc5ea3100230518f91c363406463a9a495b966455a0566256bfd8bb3016d",
"5e2744e8dbfb48fc4fb92e0da0e69a498cb89a577ab85c4b7a9017992ac04038"
],
"unlockDelegates": 3 //跨链操作需要几个受托人签名
}
使用asch-cli的registerchain命令注册DApp
关于asch-cli的命令详见文档https://github.com/AschPlatform/asch-cli/tree/master/
root@asch~$ asch-cli -P 4096 registerchain -e "stone elephant caught wrong spend traffic success fetch inside blush virtual element" -f dapp.json
到此,可以在主链的应用商店中看到自己注册的DApp了。当然,这仅仅只是在主链中注册了一个应用(就如上面操作的DApp,此时这个应用是空的)。下面以asch的helloworld的demo示例来演示将一个应用注册并部署到节点。
Github链接 https://github.com/AschPlatform/asch-dapp-helloworld.git
root@asch~$ git clone https://github.com/AschPlatform/asch-dapp-helloworld.git
root@asch~$ cd asch-dapp-helloworld
说明:asch-dapp-helloworld是一个dapp的模板,里面有一些配置文件包括config.json,dapp.json,genesis.json等。
详情介绍请见DApp目录结构 https://github.com/AschPlatform/dappbook/blob/master/ch13.md
按照上面的asch-cli注册的方法修改此目录下的dapp.json
如下:
{
"name": "asch-dapp-helloworld", //应用名字
"link": "https://github.com/a1300/chians/archive/master.zip", //应用的安装包链接
"category": 1, //类别
"desc": "Provide an example", //描述
"tags": "asch,chain,demo", //标签
"icon": "http://o7dyh3w0x.bkt.clouddn.com/chian.png", //应用的logo
"type": 0, //类型
"delegates": [ //受托人的密钥
"6ec699c5bb73bed443a36f84281d41c12398aa485ff067cd61f045a5bc13180c",
"a21c74ff391af26eeb923cf3e2230d70c8b2f5c91de8f507ddd7f10fe6dc28c9",
"d8039e6c583aeab1ec7a94610c664a753d1889c4095d3e16887a80c7cc11855e",
"b114cc5ea3100230518f91c363406463a9a495b966455a0566256bfd8bb3016d",
"5e2744e8dbfb48fc4fb92e0da0e69a498cb89a577ab85c4b7a9017992ac04038"
],
"unlockDelegates": 3 //跨链操作需要几个受托人签名
}
使用asch-cli registerchain命令注册
root@asch~$ asch-cli -P 4096 registerchain -e "stone elephant caught wrong spend traffic success fetch inside blush virtual element" -f dapp.json
0de8d19c5866940af0e09245b8352acd42d14075960335453f758f481f0319d3
前提保证 "stone elephant caught wrong spend traffic success fetch inside blush virtual element" 的账户里面是有>=100XAS币的.成功以后会返回交易id,此ID也是注册的应用ID.
下面配置该应用的config.json。
在注册应用的时候填写了委托人的私钥,而config.json里面配置的就是委托人的账号密码
{
"peers": [],
"secrets": [
"mix differ fresh hobby tool cabin doctor share impact divert subject citizen",
"marriage census fetch bean swift town issue double segment pizza monitor abuse",
"use assume pear bicycle tennis usage answer blush able almost notable spy",
"festival gallery oyster lumber mimic gain wear twelve diesel hero kiss copy",
"hen brain duty blast summer figure blouse elephant aunt then surround security"
]
}
五个委托人私钥和密码相对应.
2. 部署应用到节点
先将这个工程目录拷贝到节点 asch/chains/下
root@asch~$ cp -r asch-dapp-helloworld asch/chains/
这一步是将asch-dapp-helloworld这个应用拷贝到节点上。此时,应用的前端界面是保存在/asch-dapp-helloworld/下的index.html文件,需要将这个文件拷贝导节点的 asch/public/dist/chains/asch-dapp-helloworld(需要创建)/目录下(DApp的前端)
root@asch~$ cp asch/chains/asch-dapp-helloworld/public/index.html asch/public/dist/chains/asch-dapp-helloworld/
完成上述步骤后,此时访问http://host:4096/chains/asch-dapp-helloworld/ 就可以访问应用的主页了
附:如果访问的时候出现8080服务未启动error,那是因为注册的应用还没有进行后台服务配置,可以将上一步的index.html文件用https://github.com/AschPlatform/asch-dapp-helloworld/blob/26a6af56082988447c7e4097e7251150e3a17220/public/index.html 这个文件替换即可
阿希团队于今日(2018.8.31)正式发布 Asch v1.4.4 版本,希望各节点安排升级。
本次升级主要解决的问题:
进入 asch 目录,执行./aschd upgrade
net is mainnet
Please select one of the following sources to use
0. https://www.asch.io/downloads [No data,do not use.]
1. http://47.75.26.122/ [Hongkong users recommended] Version:1.4.4 Date:2018-08-31 Size:66239667
2. http://125.32.110.138:9999/downloads [China users recommended] Version:1.4.3 Date:2018-08-14 Size:66239667
3. http://39.107.52.143 [China users recommended] Version:1.4.3 Date:2018-08-23 Size:66239667
Please input your choice [default 0] : 1 // 选择1 或者 3
--2018-08-31 11:13:49-- http://47.75.26.122//asch-linux-1.4.4-mainnet.tar.gz
Connecting to 47.75.26.122:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 65920975 (63M) [application/octet-stream]
Saving to: 'tmp/asch-linux-1.4.4-mainnet.tar.gz'
tmp/asch-linux-1.4.4-mainn 100%[=====================================>] 62.87M 2.39MB/s in 26s
2018-08-31 11:14:14 (2.46 MB/s) - 'tmp/asch-linux-1.4.4-mainnet.tar.gz' saved [65920975/65920975]
Check md5 passed!
Extracting new package ...
Asch server stopped
Copying new files ...
copy tmp/asch-linux-1.4.4-mainnet/app.js ...
copy tmp/asch-linux-1.4.4-mainnet/aschd ...
copy tmp/asch-linux-1.4.4-mainnet/bin ...
copy tmp/asch-linux-1.4.4-mainnet/chains ...
copy tmp/asch-linux-1.4.4-mainnet/data ...
copy tmp/asch-linux-1.4.4-mainnet/genesisBlock.json ...
copy tmp/asch-linux-1.4.4-mainnet/init ...
copy tmp/asch-linux-1.4.4-mainnet/logs ...
copy tmp/asch-linux-1.4.4-mainnet/node_modules ...
copy tmp/asch-linux-1.4.4-mainnet/package-lock.json ...
copy tmp/asch-linux-1.4.4-mainnet/package.json ...
copy tmp/asch-linux-1.4.4-mainnet/public ...
copy tmp/asch-linux-1.4.4-mainnet/src ...
copy tmp/asch-linux-1.4.4-mainnet/tmp ...
Upgrade to 1.4.4 done.
./aschd: line 253: unexpected EOF while looking for matching `"' // 此处报错不影响升级,新版已修复,可以忽略
./aschd: line 258: syntax error: unexpected end of file
然后执行 ./aschd start
, 观察区块同步及启动情况。
使用源码安装的节点可以直接删除 node_modules 然后执行npm install
即可(注意npm缓存影响)。
运行./aschd rebuild
或者
http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz
下载后直接解压替换data目录即可
本次 DApp 升级方案如下:
升级文档参考Asch 1.4 升级方案 · AschPlatform/asch Wiki
下载地址: http//39.107.52.143/dist.tgz. 解压后是 dist 目录,需要替换node_modules里的asch-sandbox 内容。 进入asch-sandbox 执行 npm install
添加一行代码,366行附近:
vim node_modules/asch-core/src/core/blocks.js
} else { modules.chains.onNewBlock(block) }
修改后的代码为:
if (options.broadcast) {
options.votes.signatures = options.votes.signatures.slice(0, 6)
library.bus.message('newBlock', block, options.votes)
} else { modules.chains.onNewBlock(block) }
目前主链上查询到的 seq 为(主链blockchain.db 执行 select chain, max(seq) from deposits group by chain;)
ddl|11050
dreamworld|11150
hellokimi|11028
koumeiCottage|11059
subspace|11145
ubiquity|11151
xingbei|11080
项目方根据上面的结果确定自己应用的 seq 值。
接下来的操作:
在应用的 config.json 里,需要添加 peers,格式如下:
"secrets": [
],
"peers":[{"ip":"47.75.26.200","port":8193}]
这里的 ip 和端口是本机的 ip 以及 peerport,可以参考config.json 里的配置
【主链和侧链】用户自定义资产可以锁仓不?
备注:只是锁某一项自定义资产,而不是全部锁仓。
Dapp的记账人收取的记账资产类的数量是怎样设置的?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.