Transaction类
Transaction类主管POST请求,包括组装交易和交易参数。请求时需要提供密钥,且交易可以进行本地签名和服务器签名。目前支持服务器签名,本地签名支持主要的交易,还有部分参数不支持。所有的请求是异步的,会提供一个回调函数。每个回调函数有两个参数,一个是错误,另一个是结果。提供以下方法:
- getAccount()
- getTransactionType()
- setSecret(secret)
- addMemo(memo)
- setSequence(sequence)
- multiSigning({})
- multiSigned()
- submit(callback)
获得交易账号
方法:getAccount();
参数:无
返回:账号
例子:
var jlib = require('jingtum-lib');
var Remote = jlib.Remote;
var remote = new Remote({server: 'ws://xxx:port'});
var options = {account: 'jB7rxgh43ncbTX4WeMoeadiGMfmfqY2xLZ', sequence: 688};
var tx = remote.buildOfferCancelTx(options);
var account = tx.getAccount();
console.log(account);
获得交易类型
方法:getTransactionType();
参数:无
返回:交易类型
例子:
var jlib = require('jingtum-lib');
var Remote = jlib.Remote;
var remote = new Remote({server: 'ws://xxx:port'});
var options = {account: 'jB7rxgh43ncbTX4WeMoeadiGMfmfqY2xLZ', sequence: 688};
var tx = remote.buildOfferCancelTx(options);
var type = tx.getTransactionType();
console.log(type);
传入私钥
交易提交之前需要传入私钥。
方法:setSecret(secret);
参数:
参数 | 类型 | 说明 |
---|---|---|
secret | String | 井通钱包私钥 |
返回:Transaction对象
例子:
var jlib = require('jingtum-lib');
var Remote = jlib.Remote;
var remote = new Remote({server: 'ws://xxx:port'});
var options = {account: 'jB7rxgh43ncbTX4WeMoeadiGMfmfqY2xLZ', sequence: 688};
var tx = remote.buildOfferCancelTx(options);
tx.setSecret('sn37nYrQ6KPJvTFmaBYokS3FjXUWd');
添加备注
方法:addMemo(memo);
参数:
参数 | 类型 | 说明 |
---|---|---|
memo | String | 备注信息,不超过2k。 |
返回:Transaction对象
例子:
var jlib = require('jingtum-lib');
var Remote = jlib.Remote;
var remote = new Remote({server: 'ws://xxx:port'});
var tx = remote.buildPaymentTx({
account: 'jB7rxgh43ncbTX4WeMoeadiGMfmfqY2xLZ',
to: 'jDUjqoDZLhzx4DCf6pvSivjkjgtRESY62c',
amount: {
"value": 0.5,
"currency": "SWT",
"issuer": ""
}
});
tx.addMemo('给jDUjqoDZLhzx4DCf6pvSivjkjgtRESY62c支付0.5swt.');
设置sequence
方法:setSequence(sequence);主要用于签名相关。
参数:
参数 | 类型 | 说明 |
---|---|---|
sequence | Integer | 账号当前序列号 |
返回:Transaction对象
例子
var jlib = require('jingtum-lib');
var Remote = jlib.Remote;
var remote = new Remote({server: 'ws://xxx:port'});
var tx = remote.buildPaymentTx({
account: 'jB7rxgh43ncbTX4WeMoeadiGMfmfqY2xLZ',
to: 'jDUjqoDZLhzx4DCf6pvSivjkjgtRESY62c',
amount: {
"value": 0.5,
"currency": "SWT",
"issuer": ""
}
});
tx.setSequence(10);
交易多签过程
方法:multiSigning({}),主要用于多重签名相关;
参数:
参数 | 类型 | 说明 |
---|---|---|
account | String | 给交易签名的账号地址 |
secret | String | 给交易签名的账号私钥 |
返回:Transaction对象
多重签名过程中会有验签结果,可通过查看Transaction对象中tx_json.verifyTx字段是否返回错误,若返回错误则失败,需要上一用户重新签名,否则成功。如下判断:
if(tx.tx_json.verifyTx && tx.tx_json.verifyTx.toString().indexOf('verify failed')){//验签结果
console.log('verify failed');
}else {
console.log('verify success');
}
例子:
var tx_json = { Flags: 0,
Fee: 100000,
TransactionType: 'Payment',
Account: 'jHb9CJAWyB4jr91VRWn96DkukG4bwdtyTh',
Amount: '2000000',
Destination: 'j3yeaNQUqMmrDb1T1p6Q2qHm9BHaAAmSwb',
Sequence: 11,
SigningPubKey: '',
Signers: [ { Signer:
{ Account: 'j3yeaNQUqMmrDb1T1p6Q2qHm9BHaAAmSwb',
SigningPubKey: '03B61B9644843F1781F66D72C99840AD7BE4FAC713EF5AC73F30278B2287B7BBFF',
TxnSignature: '3045022100DDC408965E9F62626BC6A0603A0D707B64E0157B84299414BCF8C560EDE776970220093CB723375F3725DC41FB5B207B2CEEE158D5D70A90F18BD10D330F637DB9A3' } } ] }
var tx = remote.buildTx(tx_json);
tx.multiSigning({
account: 'jJwkfLEVTkM6u3J7kWoATFd5aauBw5S8Kz',
secret: 'ssL...bSy'
});
if(tx.tx_json.verifyTx && tx.tx_json.verifyTx.toString().indexOf('verify failed')){//验签结果
console.log('verify failed');
}else {
console.log('verify success');
}
交易多签结束
方法:multiSigned(),主要用于多重签名相关;
参数:无
返回:Transaction对象
本接口会有验签结果,可通过查看Transaction对象中tx_json.verifyTx字段是否返回错误,若返回错误则失败,需要上一用户重新签名;否则成功。如下判断:
if(tx.tx_json.verifyTx && tx.tx_json.verifyTx.toString().indexOf('verify failed')){//验签结果
console.log('verify failed');
}else {
console.log('verify success');
}
例子:
var tx_json = { Flags: 0,
Fee: 100000,
TransactionType: 'Payment',
Account: 'jHb9CJAWyB4jr91VRWn96DkukG4bwdtyTh',
Amount: '2000000',
Destination: 'j3yeaNQUqMmrDb1T1p6Q2qHm9BHaAAmSwb',
Sequence: 11,
SigningPubKey: '',
Signers: [ { Signer:
{ Account: 'j3yeaNQUqMmrDb1T1p6Q2qHm9BHaAAmSwb',
SigningPubKey: '03B61B9644843F1781F66D72C99840AD7BE4FAC713EF5AC73F30278B2287B7BBFF',
TxnSignature: '3045022100DDC408965E9F62626BC6A0603A0D707B64E0157B84299414BCF8C560EDE776970220093CB723375F3725DC41FB5B207B2CEEE158D5D70A90F18BD10D330F637DB9A3' } } ] }
var tx = remote.buildTx(tx_json);
tx.multiSigning({
account: 'jJwkfLEVTkM6u3J7kWoATFd5aauBw5S8Kz',
secret: 'ssL...bSy'
});
tx.multiSigned();//多重签名结束
if(tx.tx_json.verifyTx && tx.tx_json.verifyTx.toString().indexOf('verify failed')){//验签结果
console.log('verify failed');
}else {
console.log('verify success');
}
提交请求
方法:submit(callback);
参数:回调函数,包含两个参数:错误信息和结果信息
例子:
var jlib = require('jingtum-lib');
var Remote = jlib.Remote;
var remote = new Remote({server: 'ws://xxx:port', local_sign:true});
remote.connect(function (err, result) {
if (err) {
return console.log('err:', err);
}
var req = remote.requestAccountInfo({account: 'jB7rxgh43ncbTX4WeMoeadiGMfmfqY2xLZ'});
req.submit(function(err, result) {
if(err) {console.log('err:',err);}
else if(result){
console.log('res:', result);
}
});
});