JAVA API

netVersion()

返回网络协议版本。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.NetVersion> netVersion();
参数

返回值
  • NetVersion
    • String - 网络协议版本,”1”- MAN Mainnet,”3”- MAN Testnet
示例
1
2
3
//net_Version
NetVersion netVersion = aiManj.netVersion().send();
System.out.println("netVersion:"+netVersion.getNetVersion());

netListening ()

如果客户端处于监听网络连接的状态,该调用返回true。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.NetListening> netListening();
参数

返回值
  • NetListening
    • Boolean - true表示连接上的节点正在listen网络请求,否则返回false。
示例
1
2
3
//net_listening
NetListening netListening = aiManj.netListening().send();
System.out.println("netListening:"+netListening.isListening());

netPeerCount ()

返回连接节点已连上的其它节点的数量。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.NetPeerCount> netPeerCount();
参数

返回值
  • NetPeerCount
    • Number - 连接节点连上的其它节点的数量
示例
1
2
3
// net_peerCount
NetPeerCount netPeerCount = aiManj.netPeerCount().send();
System.out.println("netPeerCount:"+netPeerCount.getQuantity());

manProtocolVersion ()

返回当前协议的版本。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManProtocolVersion> manProtocolVersion();
参数

返回值
  • ManProtocolVersion
    • String - 当前的MAN协议版本
示例
1
2
3
// man_protocolVersion
ManProtocolVersion manProtocolVersion = aiManj.manProtocolVersion().send();
System.out.println("manProtocolVersion:"+manProtocolVersion.getResult());

manMining ()

表示该节点是否配置挖矿。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManMining> manMining();
参数

返回值
  • ManMining
    • Boolean - true 表示配置挖矿,否则表示没有。
示例
1
2
// man_mining
ManMining manMining = aiManj.manMining().send(); System.out.println("manMining:"+manMining.isMining());

manHashrate ()

表示当前每秒的哈希难度。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManHashrate> manHashrate();
参数

返回值
  • ManHashrate
    • Number - 每秒的哈希数。
示例
1
2
3
// man_hashrate
ManHashrate manHashrate = aiManj.manHashrate().send();
System.out.println("manMining:"+manHashrate.getHashrate());

manGetDepositByAddr ()

返回指定账户的抵押信息。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetDepositAddr> manGetDepositByAddr(java.lang.String arg0, org.aimanj.protocol.core.DefaultBlockParameter arg1);
参数
  • String – 字符串,MAN地址
  • DefaultBlockParameter
返回值

OBJECT –抵押账户信息,信息结构如下:

  • AddressA0:STRING-抵押地址
  • AddressA1: STRING-签名地址
  • OnlineTime: QUANTITY-整形,在线时长,按照块高计数
  • Role:QUANTITY-参选身份, 128:验证者;16:矿工
  • PositionNonce: QUANTITY-整形,仓位nonce值
  • Dpstmsg:OBJECT-抵押仓位信息列表,抵押仓位信息结构如下:
    • DepositType:QUANTITY-整形,//0-活期,1-定期1个月,3-定期3个月,6-定期6个月
    • DepositAmount:QUANTITY-整形,以韦为单位的抵押值
    • Interest:QUANTITY-整形,以韦为单位的利息值
    • Slash:QUANTITY-整形,以韦为单位的惩罚值
    • BeginTime: QUANTITY-整形,UTC时间,抵押开始时间;活期为0
    • EndTime: QUANTITY-整形,UTC时间,定期表示退选时间;活期表示最早退款时间。
    • Position: QUANTITY-整形, 仓位号
  • WithDrawInfo:OBJECT-退款对象数组,退款对象信息结构如下:
    • WithDrawAmount:QUANTITY-整形,以韦为单位的退款金额
    • WithDrawTime:QUANTITY-整形,UTC时间,退款时间。
示例
1
2
3
// man_getDepositByAddr
ManGetDepositAddr manGetDepositAddr = aiManj.manGetDepositByAddr("MAN.qTgjcxe3U6R3P6xD1x7YD9A8v1dD", DefaultBlockParameterName.LATEST).send();
System.out.println("manGetDepositAddr:"+manGetDepositAddr.getResult());

manGetDeposit ()

返回指定区块的抵押信息,通过高度指定区块。

参数
  • DefaultBlockParameter
返回值

抵押账户信息数组,信息结构如下:

  • Address:STRING-抵押地址
  • SignAddress: STRING-签名地址
  • Deposit: QUANTITY-抵押金额
  • WithdrawH: QUANTITY-参选状态,0, 在选;非0,退选高度
  • OnlineTime: QUANTITY-整形,在线时长,按照块高计数
  • Role:QUANTITY-参选身份, 128:验证者;16:矿工
示例
1
2
3
// man_getDeposit
ManGetDeposit manGetDeposit = aiManj.manGetDeposit(DefaultBlockParameterName.LATEST).send();
System.out.println("manGetDeposti:"+manGetDeposit.getDeposit());

manGetMatrixCoin ()

返回多币种信息。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetMatrixCoin> manGetMatrixCoin(org.aimanj.protocol.core.DefaultBlockParameter arg0);
参数
  • DefaultBlockParameter
返回值
  • ManGetMatrixCoin – 数组,多币种名称
示例
1
2
3
// man_getMatrixCoin
ManGetMatrixCoin manGetMatrixCoin = aiManj.manGetMatrixCoin(DefaultBlockParameterName.LATEST).send();
System.out.println("manGetMatrixCoin:"+manGetMatrixCoin.getMatrixCoin());

manGetMatrixCoinConfig ()

返回多币种的配置信息。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetMatrixCoinConfig> manGetMatrixCoinConfig(java.lang.String arg0, org.aimanj.protocol.core.DefaultBlockParameter arg1);
参数
  • STRING – 币种名称
  • DefaultBlockParameter
返回值

OBJECT – 币种配置信息。结构如下:

  • CoinRange:STRING。扩展保留。
  • CoinType:STRING。支付币种名称。
  • PackNum:QUANTITY。整形,每区块打包交易最大值。
  • CoinUnit:QUANTITY。整形,币种单位。
  • CoinTotal:QUANTITY。整形,币种发行量。
  • CoinAddress:DATA,20字节。币种交易费账户地址。
示例
1
2
ManGetMatrixCoinConfig manGetMatrixCoinConfig = aiManj.manGetMatrixCoinConfig("XMA", DefaultBlockParameterName.LATEST).send();
System.out.println("manGetMatrixCoinConfig" + manGetMatrixCoinConfig.getMatrixCoinConfig());

manGetDestroyBalance ()

返回创建多币种消耗的MAN数量。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.GetDestroyBalance> manGetDestroyBalance(org.aimanj.protocol.core.DefaultBlockParameter arg0);
参数
  • DefaultBlockParameter
返回值
  • GetDestroyBalance
    • String,以zhu为单位的当前多币种发币价格
示例
1
2
3
DefaultBlockParameter defaultBlockParameter = new DefaultBlockParameterNumber(11);
GetDestroyBalance GetDestroyBalance = aiManj.manGetDestroyBalance(defaultBlockParameter).send();
System.out.println("GetDestroyBalance" + GetDestroyBalance.getDestroyBalance());

manGetSignAccountsByHash ()

通过Hash返回指定区块的区块签名列表。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetSignAccountsByHash> manGetSignAccountsByHash(java.lang.String arg0);
参数

String - 块哈希

返回值

Object Array-签名对象数组。签名结构如下:

  • Sign: DATA, 65字节 – 签名
  • Account:STRING,–签名账户
  • Validate: Boolean , -签名状态。TRUE:签名;FALSE:未签名
  • Stock: QUANTITY ,股权。目前无效。
示例
1
2
ManGetSignAccountsByHash manGetSignAccountsByHash = aiManj.manGetSignAccountsByHash("0x6f56342215d11d2181f88f897dfd93da80dbaa686e6b2288178d8ec30e1b88a9").send();
System.out.println("manGetSignAccountsByHash" + manGetSignAccountsByHash.getSignAccounts());

manGetSignAccountsByNumber ()

通过块高返回指定区块的区块签名列表。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetSignAccountsByHash> manGetSignAccountsByNumber(org.aimanj.protocol.core.DefaultBlockParameter arg0);
参数
  • DefaultBlockParameter
返回值

Object Array-签名对象数组。签名结构如下:

  • Sign: DATA, 65字节 – 签名
  • Account:STRING,–签名账户
  • Validate: Boolean , -签名状态。TRUE:签名;FALSE:未签名
  • Stock: QUANTITY ,股权。目前无效。
示例
1
2
ManGetSignAccountsByHash manGetSignAccountsByHash2 = aiManj.manGetSignAccountsByNumber(defaultBlockParameter).send();
System.out.println("manGetSignAccountsByHash" + manGetSignAccountsByHash2.getSignAccounts());

manCall ()

立刻执行一个新的消息调用,无需在区块链上创建交易。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManCall> manCall(org.aimanj.protocol.core.methods.request.Transaction arg0, org.aimanj.protocol.core.DefaultBlockParameter arg1);
参数
  • Transaction- 要发送的交易对象:
    • from: STRING - 发送交易的原地址,可选
    • to: STRING - 交易目标地址
    • Currency:STRING-交易币种名称
    • gas: QUANTITY - 交易可用gas量,可选。man_call不消耗gas,但是某些执行环节需要这个参数
    • gasPrice: QUANTITY - gas价格,可选
    • value: QUANTITY - 交易发送的MAN数量,可选
    • data: DATA - 方法签名和编码参数的哈希,可选
  • DefaultBlockParameter
返回值
  • ManCall
    • String - 所执行合约的返回值。
示例
1
2
3
4
5
6
7
List list = new ArrayList();
ManGetTransactionCount count = aiManj
.manGetTransactionCount("MAN.5xYzBHrJfXeJi9yQ8Qq8hvm19bU4", DefaultBlockParameterName.LATEST).send();
Transaction transaction = new Transaction("MAN.aR54tfdEWDfsfHhdsy6BkRVGRYLj",count.getTransactionCount(),
new BigInteger("18000000000"), new BigInteger("210000"), "MAN.aR54tfdEWDfsfHhdsy6BkRVGRYLj", BigInteger.ZERO, "","MAN",BigInteger.ZERO,BigInteger.ZERO, BigInteger.ZERO, list);
ManCall manCall = aiManj.manCall(transaction, DefaultBlockParameterName.LATEST).send();
System.out.println("manCall" + manCall.getResult());

manGetValidatorGroupInfo ()

返回指定区块联合挖矿信息,通过块高指定区块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetMap> manGetValidatorGroupInfo(org.aimanj.protocol.core.DefaultBlockParameter arg0);
参数
  • DefaultBlockParameter
返回值

OBJECT-联合挖矿信息MAP。MAP:以子合约地址为键值, STRING;合约存储信息为值的切片,OBJECT。

合约存储信息结构如下:

  • OwnerInfo。OBJECT对象,合约创建信息,结构如下:
    • Owner:String- Owner账户地址
    • SignAddress:String-签名账户地址
    • WithdrawAllTime:QUANTITY-全部撤销时间
  • Reward。OBJECT对象,回报分配信息,结构如下:
    • LevelRate:OBJECT对象数组-参与者门限和回报比例信息,结构如下:
      • Rate:对象。分配比例系数。{ Decimal : 分母; Rate :分子};
      • Threshold:QUANTITY –整形,参与的最低门限。单位韦。
    • NodeRate:OBJECT对象-管理费信息,结构如下:
      • Decimal:QUANTITY –整形,管理费比例的分母
      • Rate:QUANTITY –整形,管理费比例的分子
    • OwnerRate:OBJECT对象数组-owner回报比例信息,结构如下:
      • Decimal:QUANTITY –整形,owner回报比例的分母
      • Rate:QUANTITY –整形,owner回报比例的分子
    • ValidatorMap : OBJECT, 参与者信息数组,包括Owner;参与者信息结构如下:
      • Address:STRING-参与者账户地址;
      • Reward: QUANTITY –整形,奖励分配累加值
      • AllAmount: QUANTITY –整形,总抵押值
      • Current: OBJECT-活期抵押信息,结构如下:
        • Amount: QUANTITY –整形,活期抵押金额
        • PreAmount: QUANTITY –整形,上一轮的活期抵押金额
        • Interest: QUANTITY –整形,活期利息
        • WithdrawList:退出抵押信息列表.a) WithDrawAmount: 退出金额;b) WithDrawTime: 退出时间
        • Positions : OBJECT-定期抵押仓信息列表;定期抵押信息结构如下:
        • DType: QUANTITY –整形,定期抵押类型
        • Position: QUANTITY –整形, 定期抵押仓号
        • Amount: QUANTITY –整形,定期抵押金额
        • EndTime: QUANTITY –整形,定期结束时间
示例
1
2
ManGetMap mangetvalidator = aiManj.manGetValidatorGroupInfo(DefaultBlockParameterName.LATEST).send();
System.out.println("mangetvalidator" + mangetvalidator.getResult());

manGetStorageAt ()

返回指定地址存储位置的值。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetStorageAt> manGetStorageAt(java.lang.String arg0, java.math.BigInteger arg1, java.lang.String arg2, org.aimanj.protocol.core.DefaultBlockParameter arg3);
参数
  • String- 20字节,存储地址
  • BigInteger - 存储中的位置号
  • String – 币种
  • DefaultBlockParameter
返回值
  • ManGetStorageAt - 指定存储位置的值
示例
1
2
ManGetStorageAt manGetStorageAt = aiManj.manGetStorageAt("MAN.aR54tfdEWDfsfHhdsy6BkRVGRYLj", new BigInteger("0"),"MAN",DefaultBlockParameterName.LATEST ).send();
System.out.println("manGetStorageAt:" + manGetStorageAt.getResult());

manGetTopologyStatusByNumber ()

获取指定区块顶层节点拓扑信息,通过高度指定区块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetMap> manGetTopologyStatusByNumber(org.aimanj.protocol.core.DefaultBlockParameter arg0);
参数
  • DefaultBlockParameter
返回值

Object - 匹配的拓扑信息对象。结构如下:

  • leader_reelect:Boolean -验证者重选状态。False:未发生验证者重选;True:发生验证者重选;
  • validators:验证者信息数组。验证者信息结构如下:
    • account:STRING-账户;
    • online:Boolean -在线状态。True:在线;False:离线
    • position:QUANTITY-位置编号
  • backup_validators:备份验证者信息数组。备份验证者信息结构见验证者信息结构
  • miners:矿工信息数组。矿工信息结构见验证者信息结构
  • elect_validators:验证者主节点共识上下线信息。信息结构见验证者信息结构
  • elect_backup_validators:验证者备份节点共识上下线信息。信息结构见验证者信息结构
示例
1
2
3
// man_getTopologyStatusByNumber
ManGetMap manGetTopology = aiManj.manGetTopologyStatusByNumber(new DefaultBlockParameterNumber(12)).send();
System.out.println("manGetTopology:" + manGetTopology.getResult());

manGetBlackList ()

返回交易黑名单账户,该账户无法进行转账交易。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetMap> manGetBlackList();
参数

返回值

字符串数组-加入黑名单的交易账户地址

示例
1
2
3
// man_getBlackList
ManGetMap manGetBlackList = aiManj.manGetBlackList().send();
System.out.println("manGetBlackList:" + manGetBlackList.getResult());

manBlockNumber ()

返回当前区块号。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManBlockNumber> manBlockNumber();
参数

返回值

BigInteger-节点当前块编号

示例
1
2
3
4
// man_blockNumber
ManBlockNumber manBlockNumber = aiManj.manBlockNumber().send();
BigInteger blockNumber = manBlockNumber.getBlockNumber();
System.out.println("链的块高:" + blockNumber);

manEstimateGas ()

执行并估算一个交易需要的gas用量。该次交易不会写入区块链。注意,由于多种原因,例如EVM的机制 及节点旳性能,估算的数值可能比实际用量大的多。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManEstimateGas> manEstimateGas(org.aimanj.protocol.core.methods.request.Transaction arg0);
参数

Object - 要发送的交易对象。

  • from: String - 指定的发送者的地址。如果不指定,使用aiman.man.defaultAccount。
  • to: String - (可选)交易消息的目标地址,如果是合约创建,则不填.
  • value: Number|String|BigNumber - (可选)交易携带的货币量,以zhu为单位。如果合约创建交易,则为初始的基金。
  • gas: Number|String|BigNumber - (可选)默认是自动,交易可使用的gas,未使用的gas会退回。
  • gasPrice: Number|String|BigNumber - (可选)默认是自动确定,交易的gas价格,默认是网络gas价格的平均值 。
  • data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
  • nonce: Number - (可选)整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易。
  • Currency – 币种名称。
返回值
  • bigInteger - gas用量估算值
示例
1
2
3
4
5
6
7
List list = new ArrayList();
ManGetTransactionCount count = aiManj
.manGetTransactionCount("MAN.5xYzBHrJfXeJi9yQ8Qq8hvm19bU4", DefaultBlockParameterName.LATEST).send();
Transaction transaction = new Transaction("MAN.aR54tfdEWDfsfHhdsy6BkRVGRYLj",count.getTransactionCount(),
new BigInteger("18000000000"), new BigInteger("210000"), "MAN.aR54tfdEWDfsfHhdsy6BkRVGRYLj", BigInteger.ZERO, "","MAN",BigInteger.ZERO,BigInteger.ZERO, BigInteger.ZERO, list);
ManEstimateGas manEstimateGas = aiManj.manEstimateGas(transaction).send();
System.out.println("manEstimateGas:" + manEstimateGas.getResult());

manGetBalance ()

返回指定地址账户的余额。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetBalance> manGetBalance(java.lang.String arg0, org.aimanj.protocol.core.DefaultBlockParameter arg1);
参数
  • String - 要查询余额的地址。
  • DefaultBlockParameter
返回值

对应账户币种余额对象数组,结构如下:

  • accountType:QUANTITY –整形,币种编号。0,表示主币种,MAN
  • balance:QUANTITY –整形,余额,单位:zhu
示例
1
2
3
4
5
6
ManGetBalance manGetBalance = aiManj
.manGetBalance("MAN.JLuY5HhAiEW7KB8bh1EbN41gPCqT", DefaultBlockParameterName.LATEST).send();
List<Map<String, BigInteger>> balance = manGetBalance.getBalance();
for(int i = 0, length = balance.size(); i < length; i++) {
System.out.println("地址帐户" + (i + 1) + "余额:" + Convert.fromWei(new BigDecimal(balance.get(i).get("balance")), Convert.Unit.ETHER));
}

manGetSelfLevel ()

返回当前节点在网络中的身份。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetString> manGetSelfLevel();
参数

返回值

身份标志。0:错误;1~4桶序号;5顶层节点;6普通节点

示例
1
2
3
// man_getSelfLevel
ManGetString getSelfLevel = aiManj.manGetSelfLevel().send();
System.out.println("getSelfLevel:" + getSelfLevel.getResult());

manGetCode ()

获取指定地址的代码。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetCode> manGetCode(java.lang.String arg0, java.lang.String arg1, org.aimanj.protocol.core.DefaultBlockParameter arg2);
参数
  • String - 要获得代码的地址。
  • String -字符串,币种名称。
  • DefaultBlockParameter
返回值
  • 给定地址合约编译后的字节代码。
示例
1
2
3
// man_getCode
ManGetCode manGetCode = aiManj.manGetCode("MAN.4SYA8BxUZaevRXczJvdoSMT2p89Np","MAN",DefaultBlockParameterName.LATEST).send();
System.out.println("man Code:" + manGetCode.getCode());

manGasPrice ()

返回当前的gas价格。这个值由最近几个块的gas价格的中值决定。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGasPrice> manGasPrice();
参数

返回值
  • Integer- 当前的gas价格,以zhu为单位。
示例
1
2
3
ManGasPrice manGasPrice = aiManj.manGasPrice().send();
BigInteger gasPrice = manGasPrice.getGasPrice();
System.out.println("链的gasPrice:" + gasPrice);

manGetUpTime ()

返回指定账户从最新抵押开始到指定区块的在线时长。通过块高指定区块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetString> manGetUpTime(java.lang.String arg0, org.aimanj.protocol.core.DefaultBlockParameter arg1);
参数
  • STRING – 账户地址
  • DefaultBlockParameter
返回值
  • STRING – 整型值在线时长,按照块高计数。
示例
1
2
3
// man_getUpTime
ManGetString manGetUpTime = aiManj.manGetUpTime("MAN.4SYA8BxUZaevRXczJvdoSMT2p89Np", DefaultBlockParameterName.LATEST).send();
System.out.println("manGetUpTime:" + manGetUpTime.getResult());

manGetTransactionByBlockNumberAndIndex ()

返回指定区块的指定序号的交易。通过区块高度指定区块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManTransaction> manGetTransactionByBlockNumberAndIndex(org.aimanj.protocol.core.DefaultBlockParameter arg0, java.math.BigInteger arg1, java.lang.String arg2);
参数
  • DefaultBlockParameter
  • BigInteger - 交易的序号。
  • String - 币种名称。
返回值

参考manGetTransactionByHash()

示例
1
2
3
//man_getTransactionByBlockNumberAndIndex
ManTransaction mantrans2 = aiManj.manGetTransactionByBlockNumberAndIndex(DefaultBlockParameterName.LATEST, new BigInteger("0"),"MAN").send();
System.out.println("mantrans2:" + mantrans2.getResult());

manGetTransactionByBlockHashAndIndex ()

返回指定块内具有指定索引序号的交易。通过区块哈希指定区块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManTransaction> manGetTransactionByBlockHashAndIndex(java.lang.String arg0, java.math.BigInteger arg1, java.lang.String arg2);
参数
  • String , 32字节 - 交易的哈希值。
  • BigInteger - 交易在块内的索引序号
  • String – 币种名称
返回值

参考manGetTransactionByHash()

示例
1
2
3
// manGetTransactionByBlockHashAndIndex
ManTransaction mantrans = aiManj.manGetTransactionByBlockHashAndIndex("0x0cdb12533e0856b10136123bc7541d3b1030f98ca776b27e61828827477aa3b1", new BigInteger("0"),"MAN").send();
System.out.println("mantrans2:" + mantrans.getResult());

manGetTransactionByHash ()

返回具有指定哈希值的交易。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManTransaction> manGetTransactionByHash(java.lang.String arg0);
参数

String, 32 字节– 交易哈希值

返回值

Object – 交易对象。如果没有找到匹配的交易,则返回null。结构如下:

  • hash: DATA, 32字节 – 交易哈希
  • nonce: QUANTITY – 发送方在此交易之前发生的交易数
  • blockHash: DATA, 32 字节– 包含交易的块的哈希值。挂起状态区块返回null
  • blockNumber: QUANTITY – 包含交易的块的块号。挂起状态区块返回null
  • transactionIndex: QUANTITY – 交易索引。挂起状态区块返回null
  • from: String, - 交易发送方地址
  • to: String, - 交易接收方地址
  • value: QUANTITY – 发送MAN币数量,单位:zhu
  • gasPrice: QUANTITY – 发送方支付的gas费,单位:zhu
  • gas: QUANTITY – 发送方可用gas总量
  • input: DATA – 随交易发送的数据
  • v: QUANTITY - ECDSA 恢复 id
  • r: DATA, 32 字节 - ECDSA 签名 r
  • s: DATA, 32 字节 - ECDSA 签名 s
  • TxEnterType:交易池类型(正常的交易设置为0)
  • matrixType:交易类型(正常的交易设置为0)
  • IsEntrustTx :
    • 0:自己 支付gas费
    • 1:他人代付gas费
  • CommitTime: 提交时间,仅对定时交易和可撤销的交易可用
  • Currency: 币种
  • ExtraTo: 扩展交易(应该填写一个到多个交易)
示例
1
2
3
// man_getTransactionByHash
ManTransaction mantrans3 = aiManj.manGetTransactionByHash("0xe39b151b90695051f966707c67dc1515bdb75d28c087b23199a01f688d8174e2").send();
System.out.println("mantrans3:" + mantrans3.getResult());

manGetBlockTransactionCountByHash ()

返回指定区块的交易数量,使用哈希来指定块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetBlockTransactionCountByHash> manGetBlockTransactionCountByHash(java.lang.String arg0);
参数
  • String - 块哈希。
返回值
  • ManGetBlockTransactionCountByHash
    • BigInteger - 给定区块的交易数量。
示例
1
2
3
// man_getBlockTransactionCountByHash
ManGetBlockTransactionCountByHash manGetBlockTransactionCountByHash = aiManj.manGetBlockTransactionCountByHash("0xeb2e36f3ddbf07be7b71f22276011f8d6acf1eb6f0892925906e71b505a711ae").send();
System.out.println("manGetBlockTransactionCountByHash:" + manGetBlockTransactionCountByHash.getTransactionCount());

manGetTransactionCount ()

返回从指定地址发送的交易数。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetTransactionCount> manGetTransactionCount(java.lang.String arg0, org.aimanj.protocol.core.DefaultBlockParameter arg1);
参数
  • String - 要获得交易数的地址。
  • DefaultBlockParameter
返回值
  • BigInteger - 指定地址发送的交易数量。起始值为 0x10000000000000//十进制4503599627370496
示例
1
2
3
4
5
ManGetTransactionCount manGetTransactionCount = aiManj
.manGetTransactionCount("MAN.JLuY5HhAiEW7KB8bh1EbN41gPCqT", DefaultBlockParameterName.LATEST).send();
BigInteger transactionCount = manGetTransactionCount.getTransactionCount();

System.out.println("地址的nonce:" + transactionCount);

manGetTransactionReceipt ()

通过一个交易哈希,返回一个交易的收据。

备注:处于pending状态的交易,收据是不可用的。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetTransactionReceipt> manGetTransactionReceipt(java.lang.String arg0);
参数
  • String - 交易的哈希
返回值

Object - 交易的收据对象,如果找不到返回null

  • blockHash: String - 32字节,这个交易所在区块的哈希。
  • blockNumber: Number - 交易所在区块的块号。
  • transactionHash: String - 32字节,交易的哈希值。
  • transactionIndex: Number - 交易在区块里面的序号,整数。
  • from: String-交易发送者的地址。
  • to: String -交易接收者的地址。如果是一个合约创建的交易,返回null。
  • cumulativeGasUsed: Number - 当前交易执行后累计花费的gas总值。
  • gasUsed: Number:执行当前这个交易单独花费的gas。
  • contractAddress:String - 创建的合约地址。如果是一个合约创建交易,返回合约地址,其它情况返回null。
  • logs: Array - 这个交易产生的日志对象数组。
  • logsBloom: DATA, 256 bytes – bloom filter, 轻量级客户端用于快速提取相关日志。
  • status: QUANTITY, 1 (success) or 0 (failure)
示例
1
2
ManGetTransactionReceipt transactionReceipt = aiManj.manGetTransactionReceipt("0x7642a93a137df23bcb31c82365c2c4dcd3067f6794168fbaab6db0d7c0b964cd").send();
System.out.println("transactionReceipt:"+transactionReceipt.getTransactionReceipt());

manSendTransaction ()

发送一个交易。

函数原型
1
  public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManSendTransaction> manSendTransaction(org.aimanj.protocol.core.methods.request.Transaction arg0);
参数

Object - 要发送的交易对象。

  • from: String - 指定的发送者的地址。如果不指定,使用aiman.man.defaultAccount。
  • to: String - (可选)交易消息的目标地址,如果是合约创建,则不填.
  • value: Number|String|BigNumber - (可选)交易携带的货币量,以zhu为单位。如果合约创建交易,则为初始的基金。
  • gas: Number|String|BigNumber - (可选)默认是自动,交易可使用的gas,未使用的gas会退回。
  • gasPrice: Number|String|BigNumber - (可选)默认是自动确定,交易的gas价格,默认是网络gas价格的平均值 。
  • data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
  • nonce: Number - (可选)整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易。
  • Currency – 币种名称。
  • ExtraTo: 扩展交易(一对多交易填写)
返回值
  • String - 32字节的交易哈希串。用16进制表示。

如果交易是一个合约创建,请使用manGetTransactionReceipt()在交易完成后获取合约的地址。

示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// man_sendTransaction
List list = new ArrayList();
ManGetTransactionCount count = aiManj
.manGetTransactionCount("MAN.CrsnQSJJfGxpb2taGhChLuyZwZJo", DefaultBlockParameterName.LATEST).send();

//normal transaction
Transaction transaction = new Transaction("MAN.CrsnQSJJfGxpb2taGhChLuyZwZJo",count.getTransactionCount(),
new BigInteger("18000000000"), new BigInteger("210000"), "MAN.aR54tfdEWDfsfHhdsy6BkRVGRYLj", BigInteger.ZERO,"0x", "MAN",BigInteger.ZERO, BigInteger.ZERO,BigInteger.ZERO, list);

//contract transaction
Transaction contractTransaction = Transaction.createContractTransaction("MAN.CrsnQSJJfGxpb2taGhChLuyZwZJo", count.getTransactionCount(),
new BigInteger("18000000000"), new BigInteger("210000"), BigInteger.ZERO, "0x", "MAN", BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, list);

// send contract transaction
ManSendTransaction manSendConstractTransaction = aiManj.manSendTransaction(contractTransaction).send();
System.out.println("manCall" + manSendConstractTransaction.getTransactionHash());

// send normal transaction
ManSendTransaction manSendTransaction = aiManj.manSendTransaction(transaction).send();
System.out.println("manCall" + manSendTransaction.getTransactionHash());

manSendRawTransaction ()

发起交易或合约来签署交易。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManSendTransaction> manSendRawTransaction(java.lang.String arg0);
参数
  • Object - 要发送的交易对象:
    • to: String - (可选)交易消息的目标地址,如果是合约创建,则不填.
    • value: Number|String|BigNumber - (可选)交易携带的货币量,以zhu为单位。如果合约创建交易,则为初始的基金。
    • gas: Number|String|BigNumber - 交易使用的gas,未使用的gas会退回。
    • gasPrice: Number|String|BigNumber - 交易的gas价格 。
    • data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
    • nonce: Number - 整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易。
    • V:签名结果
    • R:签名结果
    • S:签名结果
    • txEnterType 交易入池类型(目前只有0)
    • Currency:币种名称
    • TxType:交易类型
    • LockHeight:保留字段
    • IsEntrustTx :0-自付gas,1-代付gas
    • CommitTime:提交时间,仅对定时和可撤销交易有效
    • ExtraTo: 扩展交易(一对多交易填写)
    • TxEnterType:交易池类型(正常交易设置为0)
返回值
  • String - 交易哈希串。

如果交易是一个合约创建,请使用manGetTransactionReceipt()在交易完成后获取合约的地址。

示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
List list = new ArrayList();
ManGetTransactionCount count = aiManj
.manGetTransactionCount("MAN.CrsnQSJJfGxpb2taGhChLuyZwZJo", DefaultBlockParameterName.LATEST).send();
// normal transaction
RawTransaction rawTransaction = RawTransaction.createTransaction(count.getTransactionCount(),
new BigInteger("18000000000"), new BigInteger("210000"), "MAN.2nRsUetjWAaYUizRkgBxGETimfUTz",
"0x12131a","MAN", BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, list);

// contract transaction
RawTransaction rawContractTransaction = RawTransaction.createContractTransaction(count.getTransactionCount(),
new BigInteger("18000000000"), new BigInteger("210000"), BigInteger.ZERO, "0x12131a","MAN",BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, list);


byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, chainid,
Credentials.create("3ec3678077a79400081e525f516d722bce7d19f80b7288d0992c84c2481c5faa"));
String hexValue = Numeric.toHexString(signedMessage);
SignedRawTransaction rawTransaction1 = (SignedRawTransaction) TransactionDecoder.decode(hexValue);
System.out.println(rawTransaction1.getFrom());
HashMap map = new HashMap();
map.put("nonce", Numeric.toHexStringWithPrefix(rawTransaction1.getNonce()));
map.put("v", "0x" + byteToHex(rawTransaction1.getSignatureData().getV()));
map.put("r", Numeric.toHexString(rawTransaction1.getSignatureData().getR()));
map.put("s", Numeric.toHexString(rawTransaction1.getSignatureData().getS()));
map.put("to", rawTransaction1.getTo());
map.put("currency", rawTransaction1.getTo().split("\\.")[0]);
map.put("gasPrice", Numeric.toHexStringWithPrefix(rawTransaction1.getGasPrice()));
map.put("gas", Numeric.toHexStringWithPrefix(rawTransaction1.getGasLimit()));
map.put("commitTime", rawTransaction1.getCommitTime());
map.put("isEntrustTx", rawTransaction1.getIsEntrustTx());
map.put("txEnterType", rawTransaction1.getTxEnterType());
List extraToList = (List) ((List) ((List) rawTransaction1.getExtra_to().get(0)).get(0)).get(2);
List extraTo = new ArrayList();
for (int i = 0, length = extraToList.size(); i < length; i++) {
HashMap<String, String> toMap = new HashMap<String, String>();
toMap.put("to", (String) ((List) extraToList.get(0)).get(0));
toMap.put("value", Numeric.toHexStringWithPrefix((BigInteger) ((List) extraToList.get(0)).get(1)));
extraTo.add(toMap);
}
map.put("extra_to", extraTo);
map.put("data", "0x" + rawTransaction1.getData());
map.put("txType", ((List) ((List) rawTransaction1.getExtra_to().get(0)).get(0)).get(0));
map.put("lockHeight", ((List) ((List) rawTransaction1.getExtra_to().get(0)).get(0)).get(1));
map.put("value", Numeric.toHexStringWithPrefix(rawTransaction1.getValue()));
ManSendTransaction transactionResponse = aiManj.manSendRawTransaction(map).sendAsync().get();
String hash = transactionResponse.getTransactionHash();
System.out.println(hash);

manSign ()

使用如下公式计算Matrix签名:sign(keccak256("\x19Matrix
Signed Message:\n" + len(message) + message)))

通过给消息添加一个前缀,可以让结果签名被识别为Matrix签名。这可以组织恶意DApp签名任意数据(例如交易)并使用 签名冒充受害者。

需要指出的是,进行签名的地址必须是解锁的。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManSign> manSign(java.lang.String arg0, java.lang.String arg1);
参数
  • String - 签名使用的地址
  • String - 要签名的数据
返回值

String - 签名后的数据。

示例
1
2
3
4
5
6
// man_sign
ManSign manSign = aiManj.manSign("MAN.CrsnQSJJfGxpb2taGhChLuyZwZJo","0xdeadbeaf").send();
if(manSign.hasError())
System.out.println("manSign:" + manSign.getError().getMessage());
else
System.out.println("manSign:" + manSign.getSignature().toString());

manGetBlockTransactionCountByNumber ()

返回指定区块的交易数量,使用块编号来指定块。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetBlockTransactionCountByNumber> manGetBlockTransactionCountByNumber(org.aimanj.protocol.core.DefaultBlockParameter arg0);
参数
  • DefaultBlockParameter
返回值
  • BigInteger - 给定区块的交易数量。
示例
1
2
3
// man_getBlockTransactionCountByNumber
ManGetBlockTransactionCountByNumber manGetBlockTransactionCountByNumber = aiManj.manGetBlockTransactionCountByNumber(DefaultBlockParameterName.LATEST).send();
System.out.println("mangetblock transaction count by number:"+manGetBlockTransactionCountByNumber.getTransactionCount());

manAccounts ()

返回客户端持有的地址字符串列表。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManAccounts> manAccounts();
参数

返回值
  • Array - 客户端持有的地址字符串列表。
示例
1
2
ManAccounts manaAccounts = aiManj.manAccounts().send();
System.out.println("manAccounts"+manaAccounts.getResult());

manNewBlockFilter ()

在节点中创建一个过滤器,以便当新块生成时进行通知。要检查状态是否变化, 请调用man_getFilterChanges

参数

返回值

ManFilter – 过滤器

示例
1
2
ManFilter newBlockFilter = aiManj.manNewBlockFilter().send();
System.out.println("newBlockFilter"+newBlockFilter.getResult());

manUninstallFilter ()

写在具有指定编号的过滤器。当不再需要监听时,总是需要执行该调用。另外,过滤器 如果在一定时间内未接收到manGetFilterChanges调用会自动超时。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManUninstallFilter> manUninstallFilter(java.math.BigInteger arg0);
参数
  • BigInteger- 过滤器编号
返回值
  • ManUninstallFilter – 卸载对象
  • Boolean - 如果成功卸载则返回true,否则返回false
示例
1
2
ManUninstallFilter manUninstallFilter = aiManj.manUninstallFilter(new BigInteger("5b54065e0ab48d655ce6a6dea28b7e2c",16)).send();
System.out.println("manUninstallFilter"+manUninstallFilter.getResult());

manNewPendingTransactionFilter ()

在节点中创建一个过滤器,以便当产生挂起交易时进行通知。 要检查状态是否发生变化,请调用manGetFilterChanges

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManFilter> manNewPendingTransactionFilter();
参数

返回值
  • ManFilter - 过滤器对象
示例
1
2
3
// man_newPendingTransactionFilter
ManFilter manNewPendingTransactionFilter = aiManj.manNewPendingTransactionFilter().send();
System.out.println("manNewPendingTransactionFilter"+manNewPendingTransactionFilter.getResult());

manGetEntrustList ()

根据指定授权账户所有最新区块的委托信息。

函数原型
1
public abstract  org.aimanj.protocol.core.Request<?,org.aimanj.protocol.core.methods.response.ManGetEntrustList> manGetEntrustList(java.lang.String arg0);
参数
  • STRING- 授权账户地址。
返回值
  • OBJECT-委托账户信息列表。委托账户信息结构如下:
    • EntrustAddres : STRING-委托账户地址
    • IsEntrustGas:Boolean -是否委托GAS代付。True表示是委托Gas代付。
    • IsEntrustSign:Boolean -是否委托签名。True表示是委托签名。
    • EnstrustSetType :DATA, 1byte- 0:按高度委托,1:按时间委托,2:按次数委托
    • StartHeight :QUANTITY - 整数块编号,委托的起始高度
    • EndHeight:QUANTITY - 整数块编号,委托的结束高度
    • StartTime:QUANTITY – UTC时间,委托的起始时间
    • EndTime:QUANTITY – UTC时间,委托的结束时间
    • EntrustCount:QUANTITY-委托次数
示例
1
2
ManGetEntrustList  manGetEntrustList = aiManj.manGetEntrustList("MAN.5xYzBHrJfXeJi9yQ8Qq8hvm19bU4").send();
System.out.println("manGetEntrustList"+manGetEntrustList.getEntrustList());