Options
All
  • Public
  • Public/Protected
  • All
Menu

什么是asch-web?

asch-web - Developer Document asch-web是一个通过HTTP请求与ASCH节点进行通信的js库。asch-web提供常用的交易写操作API和常用的工具函数,诸如XAS转账,合约执行,账户创建,助记词,公钥和地址转和交易离线签名等等,asch-web受到Ethereum的web3.js库的设计思想,提供统一的,无缝的开发体验。我们用核心思想对其进行了扩展,集成了ASCH常用的API,asch-web用typescript语言进行编写,可以build生成浏览器环境和node环境的js库,也可以直接在typescript项目中直接引用使用,对于DAapps与asch节点的交互提供了极大的方便。

兼容性

  • 支持Node.js v8及更高版本构建的版本
  • 支持Chrome浏览器环境

您可以从dist /文件夹中专门访问这两个版本。 asch-web还兼容前端框架,如Angular,React和Vue。 您也可以在Chrome扩展程序中集成asch-web。

Build

首先使用git克隆asch-web项目, 安装依赖并且运行示例:

git clone https://github.com/AschPlatform/asch-web
cd asch-web
npm install
npm run build

dist目录下生成了两个文件夹tsc和webpack, 可供不同环境的项目使用,其中tsc可以拷贝到typescript项目中直接使用,webpack生成的文件可以拷贝到node项目或者web项目直接使用。

安装

  1. npm安装
npm install asch-web
  1. 本地安装
npm install path/to/asch-web  #本地路径
  1. 通过github安装
npm install git://github.com/AschPlatform/asch-web.git   #master分支
npm install git://github.com/AschPlatform/asch-web.git#kim  #kim分支

##

实例

实例源码在examples目录下,这个目录分有三个子目录:typescript, browser和server,分别对应typescript, 浏览器和node三种不同运行环境的实例。

typescript项目实例

cd  example/typescript
npm install
npm run build #生成js文件
npm run start #运行js文件
import { AschWeb } from 'asch-web'
const host = 'http://testnet.asch.cn'// 'http://mainnet.asch.cn/'
const net = AschWeb.Network.Test//   Network.Main

let secret = 'quantum jelly guilt chase march lazy able repeat enrich fold sweet sketch'
let secondSecret = '' //'11111111a'
let address = 'ACFi5K42pVVYxq5rFkFQBa6c6uFLmGFUP2'
let to = 'AHcGmYnCyr6jufT5AGbpmRUv55ebwMLCym'

let unsignedTrx =
{
    type: 1,
    fee: 10000000,
    args: [1000000, 'AHcGmYnCyr6jufT5AGbpmRUv55ebwMLCym'],
    timestamp: 84190767,
    message: '',
    senderPublicKey: '',
    senderId: 'ACFi5K42pVVYxq5rFkFQBa6c6uFLmGFUP2',
}


//utils用法
let keys = AschWeb.Utils.getKeys(secret)
console.log('keys:' + JSON.stringify(keys))

let addr: string = AschWeb.Utils.getAddress(keys.publicKey)
console.log('get address by publicKey:' + addr)


let signedTrx = AschWeb.Utils.fullSign(unsignedTrx, secret, secondSecret)
console.log('full sign transaction:' + JSON.stringify(signedTrx))

const provider = new AschWeb.HTTPProvider(host, net)
const aschWeb = new AschWeb(provider, secret, secondSecret)

aschWeb.api
    .transferXAS(1000000, to, 'test')
    .then(res => {
        console.log('transfer XAS response:' + JSON.stringify(res))
    })
    .catch(err => {
        console.error(err)
    })

const host2 = 'http://mainnet.asch.cn/'
const net2 = AschWeb.Network.Main
const provider2 = new AschWeb.HTTPProvider(host2, net2)
//切换provider
aschWeb.setProvider(provider2)

aschWeb.api
    .get('api/v2/blocks', {})
    .then(res => {
        console.log('get blocks response:' + JSON.stringify(res))
    })
    .catch(err => {
        console.error(err)
    })


HTTP API的基本使用

目前asch节点的api有两种类型,查询操作的api和写操作的api

查询api的使用

//查询账户详情
let result = await aschWeb.api.getAccountDetail('AdbL9HkeL5CPHmuVn8jMJSHtdeTHL6QXb')
console.log('result:' + JSON.stringify(result))

写操作api的使用(签名交易api)

//发送XAS
let result = await aschWeb.api.transferXAS(123456,to,'test transfer XAS')
console.log('result:' + JSON.stringify(result))

构建交易-->签名交易-->广播交易

所有的写操作的api都需要:构建交易-->签名交易-->广播交易这3个过程,若不想用api里的方法,也可以如下使用

  1. TransactionBuilder 生成未签名的交易
    let trans = TransactionBuilder.transferXAS(1000,to,'test')
    console.log('unsigned transcation:'+JSON.stringify(trans))
unsigned transcation:
{
    "type": 1,
    "fee": 10000000,
    "args": [1000, "AHcGmYnCyr6jufT5AGbpmRUv55ebwMLCym"],
    "timestamp": 86665886,
    "message": "test",
    "senderPublicKey": "",
    "senderId": ""
}
  1. fullSign 对交易签名,并生成交易ID
    let signedTrans = AschWeb.Utils.fullSign(trans, secret, secondSecret)
    console.log('signed transcation:'+JSON.stringify(signedTrans))
signed transcation:
{
    "type": 1,
    "fee": 10000000,
    "args": [1000, "AHcGmYnCyr6jufT5AGbpmRUv55ebwMLCym"],
    "timestamp": 86665886,
    "message": "test",
    "senderPublicKey": "0136d2cc3970fb029ac763cfdae6cc44416a7470d04301897f718ecf0cb0d640",
    "senderId": "ACFi5K42pVVYxq5rFkFQBa6c6uFLmGFUP2",
    "signatures": ["89812e11e74243aec19cff9979e58e2f6ae31b70c75b52ad65dfebb816f4bce626d3d310396796526316f90daba409dc4cd7865944df50d570295bc1469d9a05"],
    "id": "ce6f75041fb0041c6523700af174d12da3a8e39d5e730f81aa3727ca24db2982"
}
  1. broadcastTransaction广播交易
let result = aschWeb.api.broadcastTransaction(signedTrans)
    .then(res => {
        console.log('result:' + JSON.stringify(res))
    })
    .catch(err => {
        console.error(err)
    })
result:
{
    "success": true,
    "transactionId": "15cab894a1c86b68c33e0c47e292fdb474cdca73d6337fd2c7f138c48d6e20e3"
}

智能合约使用

发布智能合约

let code ='<智能合约代码>'
let result = await aschWeb.registerContract('crowdFundging_v2','a crowd funding contract',code)
console.log('registerContract result:'+JSON.stringify(result))

创建智能合约实例

let contract = await aschWeb.createContractFromName('crowdFundging_v1')
contract.gasLimit=1000000
contract.enablePayGasInXAS=true

调用合约方法(可见性为公开的普通方法)

//基本使用
let result = await contract.call('getXXT', ['233'])
console.log('testContract result:' + JSON.stringify(result))

//代理方法使用
let result =await contract.getXXT('233')
console.log('result:'+JSON.stringify(result))

调用转账到合约(资产接收方法 @payable)

//基本使用
// 调用默认的默认向合约转账方法,方法名参数可以省略,此实例合约中对应crowdFunding函数(@payable({ isDefault: true }))
let result =await contract.pay('XAS','8345667')
console.log('result:'+JSON.stringify(result))
//调用payInitialToken资产接收方法(@payable)
let result =await contract.pay('kim.KIM','8345667', 'payInitialToken')
console.log('result:'+JSON.stringify(result))

//代理方法使用
// 调用默认的默认向合约转账方法,方法名参数可以省略,此实例合约中对应crowdFunding函数(@payable({ isDefault: true }))
let result =await contract.crowdFunding('XAS','8345667')
console.log('result:'+JSON.stringify(result))
//调用payInitialToken资产接收方法(@payable)
let result =await contract.payInitialToken('kim.KIM','8345667')
console.log('result:'+JSON.stringify(result))

状态查询函数查询(@constant)

//基本使用
//状态查询函数查询
let result =await contract.constant('getFunding','AdbL9HkeL5CPHmuVn8jMJSHtdeTHL6QXb')
console.log('result:'+JSON.stringify(result))

//代理方法使用
//状态查询函数查询
let result =await contract.getFunding('AdbL9HkeL5CPHmuVn8jMJSHtdeTHL6QXb')
console.log('result:'+JSON.stringify(result))

简单状态查询

//简单状态查询
let result =await contract.queryStates('totalFundingToken')
console.log('result:'+JSON.stringify(result))

//代理方法使用
//简单状态查询 get+状态名称(首字母大写)
let result =await contract.getTotalFundingToken()
console.log('result:'+JSON.stringify(result))

合约函数执行结果查询

//合约函数执行结果查询,传入交易ID
let result =await contract.getResultOfContract('e7f9d71cbb92fa8ff545a8353f10813da90b20303bb1c97bb4e373b4eb0e66d6')
console.log('result:'+JSON.stringify(result))

返回结果:

{
    "success": true,
    "result": {
        "gas": 2721,
        "error": "",
        "stateChangesHash": "12c5f0d424831206219852d587630b4345326be68622ee46950d95c6fbab095f",
        "tid": "e7f9d71cbb92fa8ff545a8353f10813da90b20303bb1c97bb4e373b4eb0e66d6",
        "data": null,
        "contractId": 7,
        "success": true,
        "transaction": {
            "id": "e7f9d71cbb92fa8ff545a8353f10813da90b20303bb1c97bb4e373b4eb0e66d6",
            "type": 602,
            "timestamp": 89217523,
            "senderId": "AdbL9HkeL5CPHmuVn8jMJSHtdeTHL6QXb",
            "senderPublicKey": "744aa1098be936488f5178865422c4f383914fdb47fecea602e397420f2742d5",
            "requestorId": null,
            "fee": 0,
            "signatures": ["358d1cbb70616c38d37981f29cecde0e32d8f62877ec9db391196896f22df2f7fc5ab61583bade0de6dc4786bb2bd60d4c02ae421bf3aff6f2c6cb6400d9f90d"],
            "secondSignature": null,
            "args": [1000000, true, "crowdFundging_v1", "", "12345667", "XAS"],
            "height": 128568,
            "message": "",
            "mode": 0,
            "_version_": 1
        }
    }
}

Index

Type aliases

Bytes

Bytes: string | Uint8Array

Callback

Callback: function

Type declaration

CallbackType

CallbackType: function

Type declaration

    • Parameters

      Returns object

      • Optional secondSignature?: undefined | string
      • senderPublicKey: string
      • signatures: string[]

Variables

Const ALPHABET

ALPHABET: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

Let ALPHABET_MAP

ALPHABET_MAP: ObjectType

Let BASE

BASE: number = ALPHABET.length

Const CLIENT_DRIFT_SECONDS

CLIENT_DRIFT_SECONDS: 5 = 5

Const CONTRACT_INITIALIZER_METHOD

CONTRACT_INITIALIZER_METHOD: "__init__" = "__init__"

Const EPOCHTIME

EPOCHTIME: Date = new Date(Date.UTC(2016, 5, 27, 20, 0, 0, 0))

Let LEADER

LEADER: string = ALPHABET.charAt(0)

Const LOCAL_NET_MAGIC

LOCAL_NET_MAGIC: "594fe0f3" = "594fe0f3"

Const MAIN_NET_MAGIC

MAIN_NET_MAGIC: "5f5b3cf5" = "5f5b3cf5"

Const NORMAL_PREFIX

NORMAL_PREFIX: "A" = "A"

Const ONE_XAS

ONE_XAS: 100000000 = 100000000

Const TEST_NET_MAGIC

TEST_NET_MAGIC: "594fe0f3" = "594fe0f3"

Const XAS_PRECISION

XAS_PRECISION: 100000000 = 100000000

Const delegates

delegates: 101 = 101

Const interval

interval: 10 = 10

Functions

base58DecodeUnsafe

  • base58DecodeUnsafe(str: string): undefined | Buffer
  • Parameters

    • str: string

    Returns undefined | Buffer

base58Encode

  • base58Encode(payload: Uint8Array): string
  • Parameters

    • payload: Uint8Array

    Returns string

beginEpochTime

  • beginEpochTime(): Date

Let calFee

checkAddress

  • checkAddress(address: string): boolean

checkPublicKey

  • checkPublicKey(publicKey: string): boolean

checkSecret

  • checkSecret(secret: string): boolean

convertBigintMemberToString

  • convertBigintMemberToString(obj: any): void

createAccount

fill

fromHex

  • fromHex(hex: string | Buffer): Uint8Array
  • 将Hex字符串或者buffer转换成Uint8Array

    Parameters

    • hex: string | Buffer

    Returns Uint8Array

fromSatoshi

  • fromSatoshi(rawAmount: number, precision?: number): number
  • Parameters

    • rawAmount: number
    • Default value precision: number = 8

    Returns number

fullSign

fullTimestamp

  • fullTimestamp(time: number): string

generateBase58CheckAddress

  • generateBase58CheckAddress(publicKey: string): string
  • Parameters

    • publicKey: string

    Returns string

generateMnemonic

  • generateMnemonic(): string

getAddress

  • getAddress(publicKey: string): string
  • Parameters

    • publicKey: string

    Returns string

getBytes

  • getBytes(trs: Transaction, skipSignature?: boolean, skipSecondSignature?: boolean): Uint8Array
  • Parameters

    • trs: Transaction
    • Default value skipSignature: boolean = false
    • Default value skipSecondSignature: boolean = false

    Returns Uint8Array

getEpochTime

  • getEpochTime(time?: undefined | number): number
  • Parameters

    • Optional time: undefined | number

    Returns number

getHash

  • getHash(transaction: Transaction, skipSignature?: boolean, skipSecondSignature?: boolean): Uint8Array
  • Parameters

    • transaction: Transaction
    • Default value skipSignature: boolean = false
    • Default value skipSecondSignature: boolean = false

    Returns Uint8Array

getId

getKeys

  • getKeys(secret: string): Keys

getLastSlot

  • getLastSlot(nextSlot: number): number

getNextSlot

  • getNextSlot(): number

getRealTime

  • getRealTime(epochTime?: undefined | number): number
  • Parameters

    • Optional epochTime: undefined | number

    Returns number

getSlotNumber

  • getSlotNumber(epochTime?: undefined | number): number
  • Parameters

    • Optional epochTime: undefined | number

    Returns number

getSlotTime

  • getSlotTime(slot: number): number

getTime

  • getTime(time?: undefined | number): number
  • Parameters

    • Optional time: undefined | number

    Returns number

injectPromise

  • injectPromise(func: any, ...args: any[]): Promise<Object>
  • Parameters

    • func: any
    • Rest ...args: any[]

    Returns Promise<Object>

isAddress

  • isAddress(address: string): boolean
  • Parameters

    • address: string

    Returns boolean

isFunction

  • isFunction(obj: any): boolean
  • Parameters

    • obj: any

    Returns boolean

issue

  • issue(account: string, token: string, amount: number | string): Transaction

promiseInjector

  • promiseInjector(scope: any): (Anonymous function)
  • Parameters

    • scope: any

    Returns (Anonymous function)

secondSign

sha256Bytes

  • sha256Bytes(data: Uint8Array): Uint8Array
  • Parameters

    • data: Uint8Array

    Returns Uint8Array

sha256Hex

  • sha256Hex(data: Uint8Array): string
  • Parameters

    • data: Uint8Array

    Returns string

sign

signBytes

  • signBytes(bytes: Bytes, secretKey: Bytes): string
  • 对字节数字签名

    Parameters

    • bytes: Bytes
    • secretKey: Bytes

      12个单词的mnemonic或者hex字符串,或者Uint8Array

    Returns string

timeAgo

  • timeAgo(time: number): string

toHex

  • toHex(bytes: Uint8Array): string
  • 将Uint8Array转换成十六进制的字符串

    Parameters

    • bytes: Uint8Array

    Returns string

toLocalBuffer

  • toLocalBuffer(buf: any): any

toSatoshi

  • toSatoshi(amount: number, precision?: number): number
  • Parameters

    • amount: number
    • Default value precision: number = 8

    Returns number

transactionBuilder

transfer

  • transfer(account: string, token: string, amount: number | string, to: string): Transaction

verify

verifyBytes

vote

  • vote(account: string, delegates: Array<string>): Transaction

Object literals

Const URLS

URLS: object

accounts

accounts: object

count

count: string = "/api/accounts/count"

deletates_voted

deletates_voted: string = "/api/accounts/delegates"

mock

mock: string = "/data/home/accounts.json"

new

new: string = "/api/accounts/new"

open

open: string = "/api/accounts/open/"

open2

open2: string = "/api/accounts/open2/"

url

url: string = "/api/accounts"

blocks

blocks: object

detail

detail: string = "/api/blocks/get"

full

full: string = "/api/blocks/full"

height

height: string = "/api/blocks/getHeight"

milestone

milestone: string = "/api/blocks/getMilestone"

mock

mock: string = "/data/blockDetail/getblocks.json"

reward

reward: string = "/api/blocks/getReward"

status

status: string = "/api/blocks/getStatus"

supply

supply: string = "/api/blocks/getSupply"

delegates

delegates: object

count

count: string = "/api/delegates/count"

detail

detail: string = "/api/delegates/get"

forging_status

forging_status: string = "/api/delegates/forging/status"

list

list: string = "/api/delegates"

voters

voters: string = "/api/delegates/voters"

loder

loder: object

status

status: string = "/api/loader/status"

status_sync

status_sync: string = "/api/loader/status/sync"

magics

magics: object

development

development: string = "594fe0f3"

production

production: string = "5f5b3cf5"

peers

peers: object

detail

detail: string = "/api/peers/get"

list

list: string = "/api/peers"

version

version: string = "/api/peers/version"

server

server: object

development

development: string = "http://testnet.asch.io"

production

production: string = "http://mainnet.asch.io"

test

test: string = "http://testnet.asch.io"

transactions

transactions: object

mock

mock: string = "/data/home/transactions.json"

uncomfirmed

uncomfirmed: string = "/api/transactions/unconfirmed"

uncomfirmed_detail

uncomfirmed_detail: string = "/api/transactions/unconfirmed/get"

url

url: string = "/api/transactions"

v2

v2: object

accounts

accounts: object

balances

balances: string = "/api/v2/balances/:address"

detail

detail: string = "/api/v2/accounts/:address"

pledges

pledges: string = "/api/v2/pledges"

agents

agents: object

clienteles

clienteles: string = "api/v2/agents/:name/clienteles"

group

group: string = "api/v2/groups/:address"

list

list: string = "/api/v2/agents"

blocks

blocks: object

detail

detail: string = "/api/v2/blocks/:idOrHeight"

list

list: string = "/api/v2/blocks"

chains

chains: object

list

list: string = "api/v2/chains"

contracts

contracts: object

code

code: string = "/api/v2/contracts/:name/code"

constants_method

constants_method: string = "/api/v2/contracts/:name/constant/:method"

detail

detail: string = "/api/v2/contracts/:name"

list

list: string = "/api/v2/contracts/"

metadata

metadata: string = "/api/v2/contracts/:name/metadata"

results

results: string = "/api/v2/contracts/:name/results/:tid"

states

states: string = "/api/v2/contracts/:name/states/:path"

gateways

gateways: object

account_all

account_all: string = "/api/v2/gateways/accounts/:address"

account_one

account_one: string = "/api/v2/gateways/:name/accounts/:address"

currencies_all

currencies_all: string = "/api/v2/gateways/currencies"

currencies_one

currencies_one: string = "/api/v2/gateways/:name/currencies"

deposits

deposits: string = "/api/v2/gateways/deposits/:address/:currency"

list

list: string = "/api/v2/gateways"

validators

validators: string = "/api/v2/gateways/:name/validators"

withdrawals

withdrawals: string = "/api/v2/gateways/withdrawals/:address/:currency"

proposals

proposals: object

detail

detail: string = "/api/v2/proposals/:id"

list

list: string = "/api/v2/proposals"

transactions

transactions: object

detail

detail: string = "/api/v2/transactions/:tid"

获取交易详情

list

list: string = "/api/v2/transactions"

获取交易列表

transfers

transfers: object

list

list: string = "/api/v2/transfers"

获取转账记录

uia

uia: object

assets_all

assets_all: string = "/api/v2/uia/assets"

assets_detail

assets_detail: string = "/api/v2/uia/assets/:name"

assets_one

assets_one: string = "/api/v2/uia/issuers/:address/assets"

balances

balances: string = "/api/uia/balances/:address"

issuers_detail

issuers_detail: string = "/api/v2/uia/issuers/:address"

issuers_list

issuers_list: string = "/api/v2/uia/issuers"

Let feeFuncMap

feeFuncMap: object

1

10

100

101

102

103

11

12

13

14

2

200

201

202

203

204

205

3

300

301

302

4

400

401

402

403

404

5

500

501

502

503

504

6

600

601

602

7

8

9

Legend

  • Module
  • Object literal
  • Variable
  • Function
  • Function with type parameter
  • Index signature
  • Type alias
  • Enumeration
  • Enumeration member
  • Property
  • Method
  • Interface
  • Interface with type parameter
  • Constructor
  • Property
  • Method
  • Index signature
  • Class
  • Class with type parameter
  • Constructor
  • Property
  • Method
  • Accessor
  • Index signature
  • Inherited constructor
  • Inherited property
  • Inherited method
  • Inherited accessor
  • Protected property
  • Protected method
  • Protected accessor
  • Private property
  • Private method
  • Private accessor
  • Static property
  • Static method

Generated using TypeDoc