当前位置: 首页 > 文档资料 > MOAC 链中文文档 >

SDK 简介

优质
小牛编辑
138浏览
2023-12-01

为了方便用户接入,MOAC团队提供Node.js版本的SDK,可以接入基础链或者是应用链。

Node.JS SDK下载安装

npm install moac-api

Node.JS SDK异常处理说明:

应用方根据自己业务逻辑对sdk方法进行 try catch 异常处理

示例:

var VnodeChain = require("moac-api").vnodeChain;

try{
        var vc = new VnodeChain("http://47.106.69.61:8989");
        var blockNumber = vc.getBlockNumber();
        console.log(blockNumber);
}catch (e){
        console.log(e);
}

钱包模块接口

注册

Node.JS Example

参数:

pwd:钱包账户密码

代码:

var account = require("moac-api").account;
var wallet = account.register(pwd);

返回:

wallet:
{ address: '钱包地址....',
  privateKey: '私钥....',
  keyStore: 'keyStore内容...'
}

登录

Node.JS Example

参数:

addr:钱包地址
pwd:钱包密码
keyStore:keyStore字符串

代码:

var account = require("moac-api").account;
var status = account.login(addr, pwd, keyStore);

返回:

status:0 //登录失败
status:1 //登录成功
status:2 //密码错误

基础链模块接口

在使用这些接口前,需要打开一个基础链节点的RPC接口并允许外部访问。 例如: http://47.106.69.61:8989

实例化基础链对象

Node.JS Example

参数:

vnodeAddress:基础链访问地址 //http://47.106.69.61:8989

代码:

var VnodeChain = require("moac-api").vnodeChain;
var vc = new VnodeChain(vnodeAddress);

获取基础链区块高度

Node.JS Example

代码:

var blockNumber = vc.getBlockNumber();

返回:

blockNumber:基础链区块高度

获取基础链某一区块信息

Node.JS Example

参数:

hashOrNumber:区块hash或区块高度

代码:

var blockInfo = vc.getBlockInfo(hashOrNumber);

返回:

blockInfo:某一区块信息

获取基础链交易详情

Node.JS Example

参数:

hash:交易hash

代码:

var tradeInfo = vc.getTransactionByHash(hash);

返回:

tradeInfo:交易详情

获取合约实例

Node.JS Example

参数:

microChainAddress:应用链地址
versionKey:版本号(默认0.1版本)

代码:

var data = vc.getSubChainBaseInstance(microChainAddress, versionKey);

返回:

data:合约实例

获取基础链账户余额

Node.JS Example

参数:

addr:钱包账户地址

代码:

var balance = vc.getBalance(addr);

返回:

balance:基础链账户余额(单位为moac)

获取基础链账户ERC代币余额

Node.JS Example

参数:

addr:钱包账户地址
contractAddress:合约地址

代码:

var balance = vc.getErcBalance(addr, contractAddress);

返回:

balance:账户ERC代币余额(erc20最小单位)

获取基础链合约实例

Node.JS Example

参数:

abiObj:abi对象
contractAddress:合约地址

代码:

var object = vc.getContractInstance(abiObj, contractAddress);

返回:

object:基础链合约实例对象

获取交易Data

参数:

method:方法 例 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 例['address','uint256']
paramValues:paramValues 参数值数组 例['0x.....',10000](如需要传金额的入参为erc20最小单位)

代码:

var data = mc.getData(method,paramTypes,paramValues);

返回:

data:data字符串

基础链加签交易

Node.JS Example

参数:

from:交易发送人
to:交易接受者(可以为个人地址,或者基础链上的合约地址)
amount:交易金额
method:方法 例 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 例['address','uint256']
paramValues:paramValues 参数值数组 例['0x.....',10000](如需要传金额的入参为erc20最小单位)
privateKey:交易发起人私钥字符串
gasPrice:gas费用(默认为0,如返回错误为gas过低,请在返回的gas基础上加上整数gas重新提交)

代码:

vc.sendRawTransaction(from, to, amount, method, paramTypes, paramValues, privateKey, gasPrice).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

基础链MOAC转账

参数:

from:转账人地址
to:收款人地址
amount:交易金额(单位为moac)
privatekey:转账人私钥

代码:

vc.transferMoac(from, to, amount, privatekey).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

基础链ERC20代币转账

参数:

from:转账人地址
to:收款人地址
contractAddress:erc代币合约地址
amount:交易金额(单位为moac)
privateKey:转账人私钥

代码:

vc.transferErc(from, to, contractAddress, amount, privateKey).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

调用基础链合约

参数:

method:方法 例 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 例['address','uint256']
paramValues:paramValues 参数值数组 例['0x.....',10000](如需要传金额的入参为erc20最小单位)
contractAddress:合约地址

代码:

var callRes = vc.callContract(method, paramTypes, paramValues, contractAddress);

返回:

callRes:调用合约返回信息

ERC20充值

参数:

addr:钱包地址
privateKey:钱包私钥
microChainAddress:应用链地址
method:方法 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 ['address','uint256']
paramValues:paramValues 参数值数组 ['0x.....',10000](需要传金额的入参为erc20最小单位)

代码:

vc.buyErcMintToken(addr, privateKey, microChainAddress, method, paramTypes, paramValues).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

MOAC充值

参数:

addr:钱包地址
privateKey:钱包私钥
microChainAddress:应用链地址
method:方法 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 ['address','uint256']
paramValues:paramValues 参数值数组 ['0x.....',10000](金额单位为moac)

代码:

vc.buyMoacMintToken(addr, privateKey, microChainAddress, method, paramTypes, paramValues).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

应用链模块接口

在使用这些接口前,需要打开一个基础链节点的RPC接口和一个应用链节点的监听接口并允许外部访问。 例如: 基础链节点RPC接口:http://47.106.69.61:8989 应用链节点RPC接口:http://47.106.89.22:8546

为了使用应用链,需要部署好应用链,具体步骤可以参考: html/appchain/ProcWindSetup.html

实例化应用链对象

Node.JS Example

参数:

vnodeAddress:基础链访问地址 //http://47.106.69.61:8989
monitorAddress:应用链访问地址 //http://47.106.89.22:8546
microChainAddress:应用链地址
via:应用链via

代码:

var MicroChain = require("moac-api").microChain;
var mc = new MicroChain(vnodeAddress, monitorAddress, microChainAddress, via);

获取应用链区块高度

Node.JS Example

代码:

mc.getBlockNumber().then((blockNumber) => {
        console.log(blockNumber);
});

返回:

blockNumber:应用链区块高度

获取某一区间内的多个区块信息

Node.JS Example

参数:

start:开始高度
end:结束高度

代码:

mc.getBlocks(start, end).then((blockListInfo) => {
        console.log(blockListInfo);
});

返回:

blockListInfo:区块信息List

获取应用链某一区块信息

Node.JS Example

参数:

blockNumber:区块高度

代码:

mc.getBlock(blockNumber).then((blockInfo) => {
        console.log(blockInfo);
});

返回:

blockInfo:某一区块信息

获取应用链交易详情

Node.JS Example

参数:

transactionHash:交易hash

代码:

mc.getTransactionByHash(transactionHash).then((transactionInfo) => {
        console.log(transactionInfo);
});

返回:

transactionInfo:交易详情

获取应用链账户余额

Node.JS Example

参数:

addr:钱包地址

代码:

mc.getBalance(addr).then((balance) => {
        console.log(balance);
});

返回:

data:应用链账户余额(erc20最小单位)

获取应用链详细信息

Node.JS Example

代码:

mc.getMicroChainInfo().then((microChainInfo) => {
        console.log(microChainInfo);
});;

返回:

microChainInfo:应用链信息

获取应用链DAPP状态

Node.JS Example

代码:

mc.getDappState().then((state) => {
        console.log(state);
});;

返回:

state:1//正常
state:0//异常

获取Nonce

Node.JS Example

参数:

addr:账户钱包地址

代码:

mc.getNonce(addr).then((nonce) => {
        console.log(nonce);
});;

返回:

nonce:得到的nonce

获取应用链DAPP合约实例

参数:

dappContractAddress:dapp合约地址
dappAbi:dapp合约的Abi对象

代码:

var dapp = getDappInstance(dappContractAddress, dappAbi);

返回:

dapp:dapp实例

获取交易Data

参数:

method:方法 例 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 例['address','uint256']
paramValues:paramValues 参数值数组 例['0x.....',10000](如需要传金额的入参为erc20最小单位)

代码:

var data = mc.getData(method,paramTypes,paramValues);

返回:

data:data字符串

应用链加签交易

Node.JS Example

参数:

from:发送方的钱包地址
microChainAddress:应用链地址
amount:交易金额
dappAddress:dapp地址
method:方法 例 "issue(address,uint256)"
paramTypes:paramTypes 参数类型数组 例['address','uint256']
paramValues:paramValues 参数值数组 例['0x.....',10000](如需要传金额的入参为erc20最小单位)
privateKey:发送方钱包私钥

代码:

mc.sendRawTransaction(from, microChainAddress, amount, dappAddress, method, paramTypes, paramValues, privateKey).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

应用链转账

Node.JS Example

参数:

from:发送方的钱包地址
to:接收方的钱包地址
amount:交易金额(erc20最小单位)
privateKey:钱包私钥

代码:

mc.transferCoin(from, to, amount, privateKey).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

调用应用链合约

参数:

contractAddress:dapp合约地址
param:例如合约中存在一个无参的方法getDechatInfo,则传入["getDechatInfo"];
     存在一个有参的方法getTopicList(uint pageNum, uint pageSize), 则传入["getTopicList", 0, 20]

代码:

mc.callContract(contractAddress, param).then((data) => {
        console.log(data);
});

返回:

data:调用合约返回信息

提币(MOAC)

参数:

addr:钱包地址
amount:金额(单位为moac)
privateKey:钱包私钥

代码:

mc.redeemMoacMintToken(addr, amount, privateKey).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash

提币(ERC20)

参数:

addr:钱包地址
amount:金额(erc20最小单位)
privateKey:钱包私钥

代码:

mc.redeemErcMintToken(addr, amount,privateKey).then((hash) => {
        console.log(hash);
});

返回:

hash:交易hash