Giter Site home page Giter Site logo

asch-docs's People

Contributors

a1300 avatar bassjobsen avatar bycnck avatar eaglehovering avatar foley15 avatar kimziv avatar liangpeili avatar myafer avatar nswbmw avatar songxin2014 avatar sqfasd avatar xingwy avatar yanyiwu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

asch-docs's Issues

点对点普通交易,返回500

我调用这个接口,参数形式和实例是一致的,值是真实的,用的是真实网络,header中的内容是{magic:"5f5b3cf5",version:''}, 请问为什么一直报 500

跑不起来,也没有报错

使用 ./aschd start 命令没有报错,查看状态又是没有跑起来的状态。
使用 node app.js时 又说asch服务已启动

注册dapp遇到的问题

 您好,我按照《区块链开发实战》做DApp Demo,做到注册应用这个一步,我用相同的指令得到了错误信息:

asch-cli registerdapp -f dapp.json -e "bomb glue bag dash prosper knee endless horse like board donate cave"

Server error: Error: Invalid description
请问这可能是哪里出了问题?

Asch v1.4.5 升级文档

阿希团队于今日(2018.9.27)正式发布Asch v1.4.5 版本,建议所有节点进行升级。

本次升级主要解决的问题:

  1. 修复 DApp 无法充值 XAS 的 bug;
  2. 修复 Group 提现问题;

升级方法

首先查看节点的版本(使用./aschd version命令),根据版本选择升级策略。

1. v1.4.4的节点

运行 ./aschd upgrade

选择合适的节点(一般建议选择0或者1)

升级完以后运行./aschd start 即可

观察区块同步情况

2. v1.4.4 以前的节点

请直接下载最新安装包

wget http://china.aschcdn.com/asch-linux-latest-mainnet.tar.gz

将原来版本的 data 覆盖过来即可;

使用快照:

wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz

解压替换 asch 目录下的 data 目录即可。

3. 使用源码安装的节点

使用git clone 克隆 asch 最新代码,运行npm install即可(注意不要使用 npm缓存)

Asch v1.6.0 升级公告

阿希团队于今日(2019.10.31)发布v1.6.0版本,请各位节点尽快升级。

升级方法

cd asch  (此处为asch运行目录)
./aschd upgrade
根据需要输入合适的数字(默认为0)
./aschd start

升级完后观察下自己服务器的区块同步情况。

1.3.6与1.4.3 部分接口返回字段对比

1.3.6与1.4.3 部分接口返回字段对比

1.1 获取所有交易

  • 接口地址 /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

1.2 根据id搜索交易

  • 接口地址 /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

2.1 查询全部区块

  • 接口地址 /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

2.2 查询区块详情

  • 接口地址 /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

3.1 查询指定账户指定资产

  • 接口地址 /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

3.2 获取指定账户资产余额

  • 接口地址 /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

3.3 获取指定账户转账记录

  • 接口地址 /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合约文档

ASCH 合约文档

合约使用说明

请求过程说明

通过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


合约

1. 基础

1.1 转账

  • 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]

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 = 'user1'
    let args = [name]

1.3 设置二级密码

  • 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]  

1.4 锁仓

  • type:4

  • fee: 0.1*xAX

  • args: [height,amount]

    名称 类型 说明
    height number 锁定的高度
    amount number 锁定的金额

    代码示例

    //args参数示例
    let height = 64200,amount = 20000*xAX
    let args = [height,amount]

1.5 解锁仓库

  • type:5

  • fee: 0*xAX

  • args: []

    说明:解锁仓库合约没有参数,所以args里不需要传数据

1.6 设置理事会

  • type:6
  • fee: 5*xAX
  • args: []

1.7 注册代理人

  • type:7

  • fee: 100*xAX

  • args: []

    说明:无需传入参数

1.8 设置代理人

  • type:8

  • fee: 0.1*xAX

  • args: [agent]

    名称 类型 说明
    agent string 代理人的昵称
    let agent = 'user1'
    let args = [agent]

1.9 取消代理人

  • type:9
  • fee: 0*xAX
  • args: []

1.10 注册委托人

  • type:10
  • fee: 100*xAX
  • args: []

1.11 给委托人投票

  • type:11

  • fee: 0.1*xAX

  • args: [delegates]

    名称 类型 说明
    delegates string 一些受托人的名字

    代码示例

    //delegate1,delegate2,delegate3分别为三个受托人的姓名
    let delegates = 'delegate1,delegate2,delegate3'   
    let args = [delegates]

代码举例

1.12 取消给委托人投票

  • type:12

  • fee: 0.1*xAX

  • args: [delegates]

    名称 类型 说明
    delegates string 一些受托人的名字

    代码示例

    let delegates = 'delegate1,delegate2'   //delegate1,delegate2,delegate3分别为三个受托人的姓名 
    let args = [delegates]

2 资产

2.1 注册发行商

  • 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]

2.2 注册资产

  • 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]

2.3 发行资产

  • 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]

2.4 内部转账

  • 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]

3 DApp管理相关合约

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]

3.2 置换委托人

  • type:201
  • fee: 1*xAX
  • args: [chain,from,to]

3.3 增加委托人

  • type:202
  • fee: 1*xAX
  • args: [chain,key]

3.4 删减委托人

  • type:203
  • fee: 1*xAX
  • args: [chain,key]

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]

3.6 提现

  • 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

4 提案相关合约

4.1 发起提案

  • 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]

    对不同提案类型给出不同的参数

    1. 新增网关
    //提案类型
    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}
    1. 网关初始化
    //提案类型
    let topic = 'gateway_init'
    //下面构造content
    let gateway = 'bitcoin'     //网关的名字
    let members = [             //初始网关的成员
        'A5eTVn2Mz5p2j6SjGKdgvmUc2vMsSvKzuy',
        'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj',
        'A4ncaYtKRrD8YS2Mi82HbwGEE9DxqsbEr9'
    ]
    //下面构造这个content
    let content = {gateway:gateway,
                   members:members
                  }
    1. 更新网关成员
    //提案类型
    let topic = 'gateway_update_member'
    //下面构造content
    let gateway = 'bitcoin'     //网关的名字
    let form = 'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj'   //要撤销的成员地址
    let to = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'     //要添加的成员地址
    //下面构造这个content
    let content = {gateway:gateway,
                   from:from,
                   to:to
                  }
    1. 网关撤销
    //提案类型
    let topic = 'gateway_revoke'     //这个参数较少,只需要网关的名字即可
    //下面构造content
    let gateway = 'bitcoin'     //网关的名字
    //下面构造这个content
    let content = {gateway:gateway}

4.2 投票

  • type:302

  • fee: 0.1*xAX

  • args: [pid]

    名称 类型 说明
    pid string 提案的编号

    代码示例

    //args参数示例
    let pid = 'transactionId'        //发起提案的交易id
    //构造args
    let args = [pid]

4.3 激活提案

  • type:303

  • fee: 0*xAX

  • args: [pid]

    名称 类型 说明
    pid string 提案的编号

    代码示例

    //args参数示例
    let pid = 'transactionId'        //发起提案的交易id
    //构造args
    let args = [pid]

5 网关相关合约

5.1 开启网关

  • type:400

  • fee: 0.1*xAX

  • args: [gateway]

    名称 类型 说明
    gateway string 网关的名字

    代码示例

    //args参数示例
    let gateway = 'bitcoin'     //网关名字
    let args = [gateway]

5.2 注册成员

  • 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]

5.3 存款

  • 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]

5.4 提现

  • 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]

5.5 提交提现交易

  • type:404

  • fee: 0.01*xAX

  • args: [wid,ot,ots]

    名称 类型 说明
    wid string 提现id
    ot string 交易数据
    ots string

    代码示例

5.6 提交交易签名

  • type:405

  • fee: 0.01*xAX

  • args: [wid,signature]

    名称 类型 说明
    wid string 提现id
    signature string 签名

    代码示例

5.7 提交交易协议

  • type:406

  • fee: 0.01*xAX

  • args: [wid,oid]

    名称 类型 说明
    wid string 提现id
    oid string

6 理事会合约

6.1 投票

  • type:500

  • fee: 0*xAX

  • args: [targetId]

    名称 类型 说明
    targetId string 目标ID

    代码示例

    //args参数示例
    let targetId = 'f80dcf3d520cc14e963ddf4aedd6ae42db92795fc80ac3738c2be5b3aa5c9238'  //交易id
    let args = [targetId]

6.2 激活

  • type:501

  • fee: 0*xAX

  • args: [targetId]

    名称 类型 说明
    targetId string 目标ID

    代码示例

    //args参数示例
    let targetId = 'f80dcf3d520cc14e963ddf4aedd6ae42db92795fc80ac3738c2be5b3aa5c9238'  //交易id
    let args = [targetId]

6.3 增加成员

  • 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]

6.4 移除成员

  • type:503

  • fee: 1*xAX

  • args: [address,m]

    名称 类型 说明
    address string 成员地址
    m number

    代码示例

    //args参数示例
    let address = 'AMySpLqC4bEgQ8VoYK1iWNEEuhRtjS59Bt'  
    let m = 1
    let args = [address,m]

6.5 置换成员

  • 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账户、设置二级密码、发行资产等

Can't start

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去校对然后保持相同的版本号是不是会好一些?
另外英文文档比中文的落后~

Asch v1.4.7 升级指南

阿希团队于今日(2019.1.2)正式发布Asch v1.4.7 版本,建议所有节点进行升级。

本次升级主要解决的问题:

  1. 提高 P2P 的稳定性及效率;

升级方法

首先查看节点的版本(使用./aschd version命令),根据版本选择升级策略。

1. v1.4.6的节点

运行 ./aschd upgrade

选择合适的节点(一般建议选择0或者1)

升级完以后运行./aschd start 即可

观察区块同步情况

2. v1.4.6 以前的节点

请直接下载最新安装包

wget http://china.aschcdn.com/asch-linux-latest-mainnet.tar.gz

将原来版本的 data 覆盖过来即可;

使用快照:

wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz

解压替换 asch 目录下的 data 目录即可。

3. 使用源码安装的节点

使用git clone 克隆 asch 最新代码,运行npm install即可(注意不要使用 npm缓存)

CentOS 下使用源码安装 Asch 节点

CentOS 下使用源码安装 Asch 节点

系统: 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

二、下载源码并安装

2.1 克隆源码到本地

git clone https://github.com/AschPlatform/asch
git checkout v1.4.6 // 切换到1.4.6版本,也可以根据需要切换到其他版本

2.2 安装依赖

npm install

备注: 此处依赖较多,可能需要较长时间

2.3 创建依赖目录

mkdir -p public/dist
mkdir chains

2.4 配置网页客户端

cd public/dist
wget http://china.aschcdn.com/frontend-mainnet-5f5b3cf5.zip
unzip frontend-mainnet-5f5b3cf5.zip

2.5 下载快照并解压

cd ~
wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz
tar zvxf blockchain-mainnet-snapshot.tar.gz

2.6 启动节点

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

三、常见错误处理

3.1 无法重启

Asch server has already started,请删除 asch 目录下的asch.pid,再重新启动。

3.2 无法同步区块(卡块)

对比自己节点区块高度和最新区块高度。最新区块高度:https://wallet.asch.cn/api/blocks/getHeight。 如果发现自己节点的高度一直落后且不增长,可以断定为自己的节点没有同步区块。

解决方法:

  1. 升级到最新版本并重启
./aschd upgrade
./aschd start
  1. 重建
./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

Asch v1.4.6 升级指南

阿希团队于今日(2018.12.5)正式发布Asch v1.4.6 版本,建议所有节点进行升级。

本次升级主要解决的问题:

  1. 修复 某些情况下交易无法广播的问题;
  2. 提高 P2P 的稳定性及效率;

升级方法

首先查看节点的版本(使用./aschd version命令),根据版本选择升级策略。

1. v1.4.5的节点

运行 ./aschd upgrade

选择合适的节点(一般建议选择0或者1)

升级完以后运行./aschd start 即可

观察区块同步情况

2. v1.4.5 以前的节点

请直接下载最新安装包

wget http://china.aschcdn.com/asch-linux-latest-mainnet.tar.gz

将原来版本的 data 覆盖过来即可;

使用快照:

wget http://china.aschcdn.com/blockchain-mainnet-snapshot.tar.gz

解压替换 asch 目录下的 data 目录即可。

3. 使用源码安装的节点

使用git clone 克隆 asch 最新代码,运行npm install即可(注意不要使用 npm缓存)

asch-js documentation is not up to date

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

1.4 asch_http_interface

ASCH HTTP API文档

[TOC]

1 API使用说明

1.1 请求过程说明

1.1 构造请求数据,用户数据按照Asch提供的接口规则,通过程序生成签名,生成请求数据集合;
1.2 发送请求数据,把构造完成的数据集合通过POST/GET等提交的方式传递给Asch;
1.3 Asch对请求数据进行处理,服务器在接收到请求后,会首先进行安全校验,验证通过后便会处理该次发送过来的请求;
1.4 返回响应结果数据,Asch把响应结果以JSON的格式反馈给用户,每个响应都包含success字段,表示请求是否成功,成功为true, 失败为false。 如果失败,则还会包含一个error字段,表示错误原因;
1.5 对获取的返回结果数据进行处理;


2 基本接口

2.1 账户accounts

2.1.1 登录

2.1.1.1 本地加密后再登陆(推荐使用)

接口地址:/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"
    }
}
2.1.1.2 本地不加密直接登陆

接口地址:/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"
    }
} 

2.1.2 根据地址获取账户信息

接口地址:/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"
    }
}

2.1.3 获取账户余额

接口地址:/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
            }
        }
    ]
}

2.1.4 根据地址获取其投票列表

接口地址:/api/accounts/delegates
请求方式:get
支持格式:无

请求参数:

名称 类型 说明
address string 账户地址

请求示例

curl -k -X GET 'http://192.168.1.78:7800/api/accounts/delegates?adddress=APSu9NhiCTtvRGx1EpkeKNubiApiBWMf7T' 

返回示例

{
    "success": true,
    "delegates": []    //如果有人投票,会有投票人信息
}

2.1.5 生成新账户

接口地址:/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"
}  

2.1.6 获取当前链上账户总个数

接口地址:/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
}

2.2 交易transactions

2.2.1 获取交易信息

接口地址:/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
}

2.2.2 根据交易id查看交易详情

接口地址:/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
    }
}

2.2.3 根据未确认交易id查看详情

接口地址:/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"
	}
}

2.2.4 获取[全网所有]未确认的交易详情

接口地址:/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": []      //全网目前不存在未确认的交易   
}   

2.2.5 获取转账记录

接口地址:/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
            }
        }
    ]
}

2.3 区块blocks

2.3.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   
	}   
}   

2.3.2 获取区块数据

接口地址:/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
        }
    ]
}

2.3.3 获取区块链高度

接口地址:/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
} 

2.3.4 获取里程碑

接口地址:/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
}

2.3.5 查看单个区块奖励

接口地址:/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   

2.3.6 获取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   

2.3.7 区块链状态

接口地址:/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
}  

2.3.8 获取指定区块的交易信息

接口地址:/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"
                ]
            }    
        ]
    }
}

2.4 受托人delegates

2.4.1 获取受托人总个数

接口地址:/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
}   

2.4.2 根据受托人名字查看哪些人为其投了票

接口地址:/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
        }
    ]
}

2.4.3 根据公钥或者用户名获取受托人详情

接口地址: /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
    }
}

2.4.4 获取受托人列表

接口地址:/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   
}   

2.4.5 受托人锻造状态查看

接口地址:/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}    

2.5 节点peers

2.5.1 获取本机连接的所有节点信息

接口地址:/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"
        }
    ]
}   

2.5.2 获取本节点版本号等信息

接口地址:/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"
}

2.5.3 获取指定ip节点信息

接口地址:/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,   
}   

2.6 同步和加载

2.6.1 查看本地区块链加载状态

接口地址:/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   
}   

2.6.2 查看区块同步信息

接口地址:/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
} 

2.7 提案

2.7.1 获取提案列表

接口地址:/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
        }
    ]
}

2.7.2 根据提案id获取提案

接口地址:/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
    }
}

2.7 网关

2.7.1 获取所有网关

接口地址:/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
        }
    ]
}

2.7.2 获取指定网关的验证者

接口地址:/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"
        }
    ]
}

2.7.3 获取支持的所有跨链币种

接口地址:/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
        }
    ]
}

2.7.4 获取指定网关的支持币种

接口地址:/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
        }
    ]
}

2.7.5 获取指定网关的指定账户

接口地址:/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
    }
}

2.7.6 获取指定用户地址的所有网关账户

接口地址:/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
    }]
}

2.7.7 获取指定用户地址指定币种的所有充值记录

接口地址:/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"
    }]
}

2.7.8 获取指定用户地址指定币种的所有充值记录

接口地址:/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
    }]
}

2.8 代理人和Group

2.8.1 获取所有代理人账户

接口地址:/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
        }
    ]
}

2.8.2 获取某个代理下的委托客户

接口地址: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
        }
    }]
}

2.8.3 获取Group信息

接口地址: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
        }]
    }
}

2.9 Dapp查询接口

2.9.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
    }]
}

2.10 用户自定义资产uia

2.10.1 获取全网所有发行商

接口地址:/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
        }
    ]
}

2.10.2 查询指定发行商的信息

接口地址:/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
    }
}

2.10.3 查看指定发行商的资产

接口地址:/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
        }
    ]
}

2.10.4 获取全网所有资产信息

接口地址:/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"
        }
    ]
}

2.10.5 获取指定资产信息

接口地址:/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"
    }
}

2.10.6 获取指定资产的访问控制列表(acl)

2.10.7 获取指定账户所有uia的余额

接口地址:/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返回示例:


3. 事务接口

###**请求过程说明 **

通过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

3.1 基础

3.1.1 转账

  • 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)

**3.1.3 设置二级密码 **

  • 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)

3.1.4 锁仓

  • 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)

3.1.5 解锁仓库

  • 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)

3.1.6 设置理事会

  • 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)

3.1.7 注册代理人

  • 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)

3.1.8 设置代理人

  • 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)

3.1.9 取消代理人

  • 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)

3.1.10 注册委托人

  • 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)

3.1.11 给委托人投票

  • 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)

3.1.12 取消给委托人投票

  • 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)

3.2 资产

3.2.1 注册发行商

  • 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)

3.2.2 注册资产

  • 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)

3.2.3 发行资产

  • 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)

3.2.4 内部转账

  • 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 DApp管理相关合约

####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.2 置换委托人 **

  • type:201
  • fee: 1*xAX
  • args: [chain,from,to]

3.3.3 增加委托人

  • type:202
  • fee: 1*xAX
  • args: [chain,key]

3.3.4 删减委托人

  • type:203
  • fee: 1*xAX
  • args: [chain,key]

####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)

3.3.6 提现

  • 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

3.4 提案相关合约

3.4.1 发起提案

  • 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)

    对不同提案类型给出不同的参数

    1. 新增网关
    //提案类型
    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}
    1. 网关初始化
    //提案类型
    let topic = 'gateway_init'
    //下面构造content
    let gateway = 'bitcoin'     //网关的名字
    let members = [             //初始网关的成员
        'A5eTVn2Mz5p2j6SjGKdgvmUc2vMsSvKzuy',
        'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj',
        'A4ncaYtKRrD8YS2Mi82HbwGEE9DxqsbEr9'
    ]
    //下面构造这个content
    let content = {gateway:gateway,
                   members:members
                  }
    1. 更新网关成员
    //提案类型
    let topic = 'gateway_update_member'
    //下面构造content
    let gateway = 'bitcoin'     //网关的名字
    let form = 'A3SmW61ZwxmNc26BbfKLbHkaNbmUQzexuj'   //要撤销的成员地址
    let to = 'A7w7Rx5bCerJFbfG5BKdQ77bPqfWeyrmgJ'     //要添加的成员地址
    //下面构造这个content
    let content = {gateway:gateway,
                   from:from,
                   to:to
                  }
    1. 网关撤销
    //提案类型
    let topic = 'gateway_revoke'     //这个参数较少,只需要网关的名字即可
    //下面构造content
    let gateway = 'bitcoin'     //网关的名字
    //下面构造这个content
    let content = {gateway:gateway}

3.4.2 投票

  • 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)

3.4.3 激活提案

  • 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)

3.5 网关相关合约

3.5.1 开启网关

  • 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)

3.5.2 注册成员

  • 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)

3.5.3 存款

  • 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)

3.5.4 提现

  • 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)

3.5.5 提交提现交易

  • type:404

  • fee: 0.01*xAX

  • args: [wid,ot,ots]

    名称 类型 说明
    wid string 提现id
    ot string 交易数据
    ots string

    代码示例

3.5.6 提交交易签名

  • type:405

  • fee: 0.01*xAX

  • args: [wid,signature]

    名称 类型 说明
    wid string 提现id
    signature string 签名

    代码示例

3.5.7 提交交易协议

  • type:406

  • fee: 0.01*xAX

  • args: [wid,oid]

    名称 类型 说明
    wid string 提现id
    oid string

3.6 理事会合约

3.6.1 投票

  • 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)

3.6.2 激活

  • 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)

3.6.3 增加成员

  • 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)

3.6.4 移除成员

  • 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)

注册应用到主链上报"Server error: Invalid dapp delegates"

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"

部署一个DApp到节点

部署一个DApp到节点

一、部署准备

1. 安装最新的asch-cli
npm install -g asch-cli
2. 准备受托人账户

每个 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
3. 在主链注册DApp

使用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示例来演示将一个应用注册并部署到节点。

二、部署示例

1. 先下载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 这个文件替换即可

Asch v1.4.4 升级指南

阿希团队于今日(2018.8.31)正式发布 Asch v1.4.4 版本,希望各节点安排升级。

本次升级主要解决的问题:

  1. 完善交易所使用的接口对老版接口的兼容;
  2. DApp 提现不到账的问题;
  3. 修复 bug 若干;

升级方法

进入 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 升级方案

本次 DApp 升级方案如下:

一、节点从1.3.6 升级到1.4版本

升级文档参考Asch 1.4 升级方案 · AschPlatform/asch Wiki

二、 替换 sandbox

下载地址: 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 值。

接下来的操作:

  • 进入应用目录 sqlite3 blockchain.db
  • 执行 alter table deposits add column seq bigint;
  • 执行 select max(rowid) from deposits;
  • 执行 update deposits set seq = 11050 where rowid = 上一条命令的值;

四、修改config.json

在应用的 config.json 里,需要添加 peers,格式如下:

    	"secrets": [
	  ],
	"peers":[{"ip":"47.75.26.200","port":8193}]

这里的 ip 和端口是本机的 ip 以及 peerport,可以参考config.json 里的配置

五、其他

  • 应用不用重新注册,但是需要拷贝到 asch 目录里的 chains/youdappname, 内容和以前的dapps/dappid 一致。
  • 此次主链的数据库为 data 目录,不再是一个blockchain.db

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.